source: sasmodels/sasmodels/models/micelle_spherical_core.c @ 0d0aee1

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 0d0aee1 was 0d0aee1, checked in by piotr, 8 years ago

Added micelle_spherical_shell

  • Property mode set to 100644
File size: 3.7 KB
RevLine 
[0d0aee1]1double Iq(double q,
2        double ndensity,
3        double v_core,
4        double v_corona,
5        double solvent_sld,
6        double core_sld,
7        double corona_sld,
8        double radius_core,
9        double radius_gyr,
10        double d_penetration,
11        double n_aggreg);
12
13
14double Iqxy(double qx, double qy,
15            double ndensity,
16            double v_core,
17            double v_corona,
18            double solvent_sld,
19            double core_sld,
20            double corona_sld,
21            double radius_core,
22            double radius_gyr,
23            double d_penetration,
24            double n_aggreg);
25
26
27static double micelle_spherical_kernel(double q,
28        double ndensity,
29        double v_core,
30        double v_corona,
31        double solvent_sld,
32        double core_sld,
33        double corona_sld,
34        double radius_core,
35        double radius_gyr,
36        double d_penetration,
37        double n_aggreg)
38{
39    const double rho_solv = solvent_sld;     // sld of solvent [1/A^2]
40    const double rho_core = core_sld;        // sld of core [1/A^2]
41    const double rho_corona = corona_sld;    // sld of corona [1/A^2]
42
43    const double beta_core = v_core * (rho_core - rho_solv);
44    const double beta_corona = v_corona * (rho_corona - rho_solv);
45
46    // Self-correlation term of the core
47    const double bes_core = sph_j1c(q*radius_core);
48    const double term1 = n_aggreg*n_aggreg*beta_core*beta_core*bes_core*bes_core;
49
50    // Self-correlation term of the chains
51    const double qrg2 = q*radius_gyr*q*radius_gyr;
52    const double debye_chain = (qrg2 == 0.0) ? 1.0 : 2.0*(exp(-qrg2)-1+qrg2)/(qrg2*qrg2);
53    const double term2 = n_aggreg * beta_corona * beta_corona * debye_chain;
54
55    // Interference cross-term between core and chains
56    const double chain_ampl = (qrg2 == 0.0) ? 1.0 : (1-exp(-qrg2))/qrg2;
57    const double bes_corona = sinc(q*(radius_core + d_penetration * radius_gyr));
58    const double term3 = 2 * n_aggreg * n_aggreg * beta_core * beta_corona *
59                 bes_core * chain_ampl * bes_corona;
60
61    // Interference cross-term between chains
62    const double term4 = n_aggreg * (n_aggreg - 1.0) * beta_corona * beta_corona *
63                 chain_ampl * chain_ampl * bes_corona * bes_corona;
64
65    // I(q)_micelle : Sum of 4 terms computed above
66    double i_micelle = term1 + term2 + term3 + term4;
67
68    // rescale from [A^2] to [cm^2]
69    i_micelle *= 1.0e-13;
70
71    // "normalize" by number density --> intensity in [cm-1]
72    i_micelle *= ndensity;
73
74    return(i_micelle);
75
76}
77
78double Iq(double q,
79        double ndensity,
80        double v_core,
81        double v_corona,
82        double solvent_sld,
83        double core_sld,
84        double corona_sld,
85        double radius_core,
86        double radius_gyr,
87        double d_penetration,
88        double n_aggreg)
89{
90    return micelle_spherical_kernel(q,
91            ndensity,
92            v_core,
93            v_corona,
94            solvent_sld,
95            core_sld,
96            corona_sld,
97            radius_core,
98            radius_gyr,
99            d_penetration,
100            n_aggreg);
101}
102
103double Iqxy(double qx, double qy,
104            double ndensity,
105            double v_core,
106            double v_corona,
107            double solvent_sld,
108            double core_sld,
109            double corona_sld,
110            double radius_core,
111            double radius_gyr,
112            double d_penetration,
113            double n_aggreg)
114{
115    double q = sqrt(qx*qx + qy*qy);
116    return micelle_spherical_kernel(q,
117            ndensity,
118            v_core,
119            v_corona,
120            solvent_sld,
121            core_sld,
122            corona_sld,
123            radius_core,
124            radius_gyr,
125            d_penetration,
126            n_aggreg);
127
128}
129
Note: See TracBrowser for help on using the repository browser.