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

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

first pass for sasview wrapper around opencl models

  • Property mode set to 100644
File size: 2.3 KB
Line 
1/* PARAMETERS
2{
3name: "ellipsoid",
4title: "Ellipsoid with uniform scattering length density",
5include: [ "lib/gauss76.c" ],
6parameters: [
7   // [ "name", "units", default, [lower, upper], "type", "description" ],
8   [ "sld", "1e-6/Ang^2", 4, [-Infinity,Infinity], "",
9     "Cylinder scattering length density" ],
10   [ "solvent_sld", "1e-6/Ang^2", 1, [-Infinity,Infinity], "",
11     "Solvent scattering length density" ],
12   [ "a", "Ang",  20, [0, Infinity], "volume",
13     "Cylinder radius" ],
14   [ "b", "Ang",  20, [0, Infinity], "volume",
15     "Cylinder length" ],
16   [ "theta", "degrees", 60, [-Infinity, Infinity], "orientation",
17     "In plane angle" ],
18   [ "phi", "degrees", 60, [-Infinity, Infinity], "orientation",
19     "Out of plane angle" ],
20],
21}
22PARAMETERS END
23
24DOCUMENTATION
25.. _EllipseModel:
26
27DOCUMENTATION END
28*/
29
30real form_volume(real a, real b);
31real Iq(real qx, real qy, real sld, real solvent_sld, real a, real b);
32real Iqxy(real qx, real qy, real sld, real solvent_sld, real a, real b, real theta, real phi);
33
34real form_volume(real a, real b)
35{
36    return REAL(1.333333333333333)*M_PI_2*a*b*b;
37}
38
39real ellipsoid_kernel(double q, double b, double a, double dum)
40{
41    real sn, cn;
42    const real nu = a/b;
43    const real arg = q * b * sqrt(REAL(1.0)+(dum*dum*(nu*nu--REAL(1.0))));
44    SINCOS(arg, sn, cn);
45    const real f = (arg==REAL(0.0) ? REAL(1.0) : REAL(3.0)*(sn-arg*cn)/(arg*arg*arg);
46    return f*f;
47}
48
49real Iq(real q,
50    real sld,
51    real solvent_sld,
52    real a,
53    real b)
54{
55    real summ = REAL(0.0);
56    for (int i=0;i<76;i++) {
57        //const real zi = ( Gauss76Z[i]*(uplim-lolim) + uplim + lolim )/2.0;
58        zi = ( Gauss76Z[i] + REAL(1.0))/REAL(2.0);
59        summ += Gauss76Wt[i] * ellipsoid_kernel(q, b, a, zi);
60    }
61    //const real form = (uplim-lolim)/2.0*summ;
62    const real form = REAL(0.5)*summ
63    const real s = (sld - sld_solvent) * form_volume(a, b);
64    return REAL(1.0e-4) * form * s * s;
65}
66
67real Iqxy(real qx, real qy,
68    real sld,
69    real solvent_sld,
70    real a,
71    real b,
72    real theta,
73    real phi)
74{
75    real sn, cn;
76
77    const real q = sqrt(qx*qx + qy*qy);
78    SINCOS(theta*M_PI_180, sn, cn);
79    const real cos_val = cn*cos(phi*M_PI_180)*(qx/q) + sn*(qy/q);
80    const real form = ellipsoid_kernel(q, b, a, cos_val);
81    const real s = (sld - solvent_sld) * form_volume(a, b);
82
83    return REAL(1.0e-4) * form * s * s;
84}
85
Note: See TracBrowser for help on using the repository browser.