source: sasmodels/sasmodels/models/ellipsoid.c @ d1fe925

gh-pages
Last change on this file since d1fe925 was d1fe925, checked in by ajj, 8 years ago

Creating gh_pages branch for docs

  • Property mode set to 100644
File size: 2.0 KB
Line 
1double form_volume(double rpolar, double requatorial);
2double Iq(double q, double sld, double solvent_sld, double rpolar, double requatorial);
3double Iqxy(double qx, double qy, double sld, double solvent_sld,
4    double rpolar, double requatorial, double theta, double phi);
5
6double _ellipsoid_kernel(double q, double rpolar, double requatorial, double cos_alpha);
7double _ellipsoid_kernel(double q, double rpolar, double requatorial, double cos_alpha)
8{
9    double sn, cn;
10    double ratio = rpolar/requatorial;
11    const double u = q*requatorial*sqrt(1.0
12                   + cos_alpha*cos_alpha*(ratio*ratio - 1.0));
13    SINCOS(u, sn, cn);
14    const double f = ( u==0.0 ? 1.0 : 3.0*(sn-u*cn)/(u*u*u) );
15    return f*f;
16}
17
18double form_volume(double rpolar, double requatorial)
19{
20    return 1.333333333333333*M_PI*rpolar*requatorial*requatorial;
21}
22
23double Iq(double q,
24    double sld,
25    double solvent_sld,
26    double rpolar,
27    double requatorial)
28{
29    //const double lower = 0.0;
30    //const double upper = 1.0;
31    double total = 0.0;
32    for (int i=0;i<76;i++) {
33        //const double cos_alpha = (Gauss76Z[i]*(upper-lower) + upper + lower)/2;
34        const double cos_alpha = 0.5*(Gauss76Z[i] + 1.0);
35        total += Gauss76Wt[i] * _ellipsoid_kernel(q, rpolar, requatorial, cos_alpha);
36    }
37    //const double form = (upper-lower)/2*total;
38    const double form = 0.5*total;
39    const double s = (sld - solvent_sld) * form_volume(rpolar, requatorial);
40    return 1.0e-4 * form * s * s;
41}
42
43double Iqxy(double qx, double qy,
44    double sld,
45    double solvent_sld,
46    double rpolar,
47    double requatorial,
48    double theta,
49    double phi)
50{
51    double sn, cn;
52
53    const double q = sqrt(qx*qx + qy*qy);
54    SINCOS(theta*M_PI_180, sn, cn);
55    const double cos_alpha = cn*cos(phi*M_PI_180)*(qx/q) + sn*(qy/q);
56    const double form = _ellipsoid_kernel(q, rpolar, requatorial, cos_alpha);
57    const double s = (sld - solvent_sld) * form_volume(rpolar, requatorial);
58
59    return 1.0e-4 * form * s * s;
60}
61
Note: See TracBrowser for help on using the repository browser.