source: sasmodels/sasmodels/models/ellipsoid.c @ 5d4777d

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 5d4777d was 5d4777d, checked in by Paul Kienzle <pkienzle@…>, 10 years ago

reorganize, check and update models

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