1 | r""" |
---|
2 | |
---|
3 | A number of natural and commercial processes form high-surface area materials |
---|
4 | as a result of the vapour-phase aggregation of primary particles. |
---|
5 | Examples of such materials include soots, aerosols, and fume or pyrogenic |
---|
6 | silicas. These are all characterised by cluster mass distributions (sometimes |
---|
7 | also cluster size distributions) and internal surfaces that are fractal in |
---|
8 | nature. The scattering from such materials displays two distinct breaks in |
---|
9 | log-log representation, corresponding to the radius-of-gyration of the primary |
---|
10 | particles, $rg$, and the radius-of-gyration of the clusters (aggregates), |
---|
11 | $Rg$. Between these boundaries the scattering follows a power law related to |
---|
12 | the mass fractal dimension, $Dm$, whilst above the high-Q boundary the |
---|
13 | scattering follows a power law related to the surface fractal dimension of |
---|
14 | the primary particles, $Ds$. |
---|
15 | |
---|
16 | Definition |
---|
17 | ---------- |
---|
18 | |
---|
19 | The scattered intensity I(q) is calculated using a modified |
---|
20 | Ornstein-Zernicke equation |
---|
21 | |
---|
22 | .. math:: |
---|
23 | |
---|
24 | I(q) = scale \times P(q) + background |
---|
25 | |
---|
26 | P(q) = \left\{ \left[ 1+(q^2a)\right]^{D_m/2} \times |
---|
27 | \left[ 1+(q^2b)\right]^{(6-D_s-D_m)/2} |
---|
28 | \right\}^{-1} |
---|
29 | |
---|
30 | a = R_{g}^2/(3D_m/2) |
---|
31 | |
---|
32 | b = r_{g}^2/[-3(D_s+D_m-6)/2] |
---|
33 | |
---|
34 | scale = scale\_factor \times NV^2 (\rho_{particle} - \rho_{solvent})^2 |
---|
35 | |
---|
36 | where $R_g$ is the size of the cluster, $r_g$ is the size of the primary |
---|
37 | particle, $D_s$ is the surface fractal dimension, $D_m$ is the mass fractal |
---|
38 | dimension, $\rho_{solvent}$ is the scattering length density of the solvent, |
---|
39 | and $\rho_{particle}$ is the scattering length density of particles. |
---|
40 | |
---|
41 | .. note:: |
---|
42 | |
---|
43 | The surface ( $D_s$ ) and mass ( $D_m$ ) fractal dimensions are only |
---|
44 | valid if $0 < surface_dim < 6$ , $0 < mass_dim < 6$ , and |
---|
45 | $(surface_dim + mass_dim ) < 6$ . |
---|
46 | |
---|
47 | .. figure:: img/mass_surface_fractal_1d.jpg |
---|
48 | |
---|
49 | 1D plot using the default values. |
---|
50 | |
---|
51 | Reference |
---|
52 | --------- |
---|
53 | |
---|
54 | P Schmidt, *J Appl. Cryst.*, 24 (1991) 414-435 Equation(19) |
---|
55 | |
---|
56 | A J Hurd, D W Schaefer, J E Martin, *Phys. Rev. A*, |
---|
57 | 35 (1987) 2361-2364 Equation(2) |
---|
58 | |
---|
59 | """ |
---|
60 | |
---|
61 | from numpy import inf |
---|
62 | |
---|
63 | name = "mass_surface_fractal" |
---|
64 | title = "Mass Surface Fractal model" |
---|
65 | description = """ |
---|
66 | The scattering intensity I(x) = scale*P(x)*S(x) + background, where |
---|
67 | p(x)= {[1+(x^2*a)]^(Dm/2) * [1+(x^2*b)]^(6-Ds-Dm)/2}^(-1) |
---|
68 | a = Rg^2/(3*Dm/2) |
---|
69 | b = rg^2/(3*(6-Ds-Dm)/2) |
---|
70 | scale = scale factor * N*Volume^2*contrast^2 |
---|
71 | mass_dim = Dm (mass fractal dimension) |
---|
72 | surface_dim = Ds |
---|
73 | cluster_rg = Rg |
---|
74 | primary_rg = rg |
---|
75 | background = background |
---|
76 | Ref: Schmidt, J Appl Cryst, eq(19), (1991), 24, 414-435 |
---|
77 | Hurd, Schaefer, Martin, Phys Rev A, eq(2),(1987),35, 2361-2364 |
---|
78 | Note that 0 < Ds< 6 and 0 < Dm < 6. |
---|
79 | """ |
---|
80 | category = "shape-independent" |
---|
81 | |
---|
82 | # pylint: disable=bad-whitespace, line-too-long |
---|
83 | # ["name", "units", default, [lower, upper], "type","description"], |
---|
84 | parameters = [["mass_dim", "", 1.8, [1e-16, 6.0], "", |
---|
85 | "Mass fractal dimension"], |
---|
86 | ["surface_dim", "", 2.3, [1e-16, 6.0], "", |
---|
87 | "Surface fractal dimension"], |
---|
88 | ["cluster_rg", "Ang", 86.7, [0.0, inf], "", |
---|
89 | "Cluster radius of gyration"], |
---|
90 | ["primary_rg", "Ang", 4000., [0.0, inf], "", |
---|
91 | "Primary particle radius of gyration"], |
---|
92 | ] |
---|
93 | # pylint: enable=bad-whitespace, line-too-long |
---|
94 | |
---|
95 | source = ["mass_surface_fractal.c"] |
---|
96 | |
---|
97 | demo = dict(scale=1, background=0, |
---|
98 | mass_dim=1.8, |
---|
99 | surface_dim=2.3, |
---|
100 | cluster_rg=86.7, |
---|
101 | primary_rg=4000.0) |
---|
102 | |
---|
103 | oldname = 'MassSurfaceFractal' |
---|
104 | oldpars = dict(radius='radius', |
---|
105 | mass_dim='mass_dim', |
---|
106 | surface_dim='surface_dim', |
---|
107 | cluster_rg='cluster_rg', |
---|
108 | primary_rg='primary_rg') |
---|
109 | |
---|
110 | tests = [ |
---|
111 | |
---|
112 | # Accuracy tests based on content in test/utest_other_models.py |
---|
113 | [{'mass_dim': 1.8, |
---|
114 | 'surface_dim': 2.3, |
---|
115 | 'cluster_rg': 86.7, |
---|
116 | 'primary_rg': 4000.0, |
---|
117 | 'background': 0.0, |
---|
118 | }, 0.05, 1.77537e-05], |
---|
119 | |
---|
120 | # Additional tests with larger range of parameters |
---|
121 | [{'mass_dim': 3.3, |
---|
122 | 'surface_dim': 1.0, |
---|
123 | 'cluster_rg': 90.0, |
---|
124 | 'primary_rg': 4000.0, |
---|
125 | }, 0.001, 0.18562699016], |
---|
126 | |
---|
127 | [{'mass_dim': 1.3, |
---|
128 | 'surface_dim': 1.0, |
---|
129 | 'cluster_rg': 90.0, |
---|
130 | 'primary_rg': 2000.0, |
---|
131 | 'background': 0.8, |
---|
132 | }, 0.001, 1.16539753641], |
---|
133 | |
---|
134 | [{'mass_dim': 2.3, |
---|
135 | 'surface_dim': 1.0, |
---|
136 | 'cluster_rg': 90.0, |
---|
137 | 'primary_rg': 1000.0, |
---|
138 | 'scale': 10.0, |
---|
139 | 'background': 0.0, |
---|
140 | }, 0.051, 0.000169548800377], |
---|
141 | ] |
---|