source: sasmodels/sasmodels/models/spinodal.py @ 2d81cfe

core_shell_microgelsmagnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 2d81cfe was 2d81cfe, checked in by Paul Kienzle <pkienzle@…>, 6 years ago

lint

  • Property mode set to 100644
File size: 2.4 KB
Line 
1r"""
2Definition
3----------
4
5This model calculates the SAS signal of a phase separating solution
6under spinodal decomposition. The scattering intensity $I(q)$ is calculated as
7
8.. math::
9    I(q) = I_{max}\frac{(1+\gamma/2)x^2}{\gamma/2+x^{2+\gamma}}+B
10
11where $x=q/q_0$ and $B$ is a flat background. The characteristic structure
12length scales with the correlation peak at $q_0$. The exponent $\gamma$ is
13equal to $d+1$ with d the dimensionality of the off-critical concentration
14mixtures. A transition to $\gamma=2d$ is seen near the percolation threshold
15into the critical concentration regime.
16
17References
18----------
19
20H. Furukawa. Dynamics-scaling theory for phase-separating unmixing mixtures:
21Growth rates of droplets and scaling properties of autocorrelation functions.
22Physica A 123,497 (1984).
23
24Authorship and Verification
25----------------------------
26
27* **Author:** Dirk Honecker **Date:** Oct 7, 2016
28* **Last Modified by:**
29* **Last Reviewed by:**
30"""
31
32import numpy as np
33from numpy import inf, errstate
34
35name = "spinodal"
36title = "Spinodal decomposition model"
37description = """\
38      I(q) = scale ((1+gamma/2)x^2)/(gamma/2+x^(2+gamma))+background
39
40      List of default parameters:
41      scale = scaling
42      gamma = exponent
43      x = q/q_0
44      q_0 = correlation peak position [1/A]
45      background = Incoherent background"""
46category = "shape-independent"
47
48# pylint: disable=bad-whitespace, line-too-long
49#             ["name", "units", default, [lower, upper], "type", "description"],
50parameters = [["gamma",      "",    3.0, [-inf, inf], "", "Exponent"],
51              ["q_0",  "1/Ang",     0.1, [-inf, inf], "", "Correlation peak position"]
52             ]
53# pylint: enable=bad-whitespace, line-too-long
54
55def Iq(q,
56       gamma=3.0,
57       q_0=0.1):
58    """
59    :param q:              Input q-value
60    :param gamma:          Exponent
61    :param q_0:            Correlation peak position
62    :return:               Calculated intensity
63    """
64
65    with errstate(divide='ignore'):
66        x = q/q_0
67        inten = ((1 + gamma / 2) * x ** 2) / (gamma / 2 + x ** (2 + gamma))
68    return inten
69Iq.vectorized = True  # Iq accepts an array of q values
70
71def random():
72    pars = dict(
73        scale=10**np.random.uniform(1, 3),
74        gamma=np.random.uniform(0, 6),
75        q_0=10**np.random.uniform(-3, -1),
76    )
77    return pars
78
79demo = dict(scale=1, background=0,
80            gamma=1, q_0=0.1)
Note: See TracBrowser for help on using the repository browser.