source: sasmodels/sasmodels/models/flexible_cylinder_elliptical.c @ 74768cb

core_shell_microgelsmagnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 74768cb was 74768cb, checked in by Paul Kienzle <pkienzle@…>, 6 years ago

update models to use generic GAUSS_N, GAUSS_Z, GAUSS_W rather than specific gauss size

  • Property mode set to 100644
File size: 1.9 KB
RevLine 
[504abee]1double form_volume(double length, double kuhn_length, double radius);
2double Iq(double q, double length, double kuhn_length, double radius,
3          double axis_ratio, double sld, double solvent_sld);
4double flexible_cylinder_ex_kernel(double q, double length, double kuhn_length,
5                                double radius, double axis_ratio, double sld,
6                                double solvent_sld);
7double elliptical_crosssection(double q, double a, double b);
8
9double form_volume(double length, double kuhn_length, double radius)
10{
11    return 1.0;
12}
13
14double
15elliptical_crosssection(double q, double a, double b)
16{
[92ce163]17    double sum=0.0;
[504abee]18
[74768cb]19    for(int i=0;i<GAUSS_N;i++) {
20        const double zi = ( GAUSS_Z[i] + 1.0 )*M_PI_4;
[e7678b2]21        double sn, cn;
22        SINCOS(zi, sn, cn);
[92ce163]23        const double arg = q*sqrt(a*a*sn*sn + b*b*cn*cn);
[592343f]24        const double yyy = sas_2J1x_x(arg);
[74768cb]25        sum += GAUSS_W[i] * yyy * yyy;
[504abee]26    }
[92ce163]27    sum *= 0.5;
28    return(sum);
[504abee]29
30}
31
32double flexible_cylinder_ex_kernel(double q,
33          double length,
34          double kuhn_length,
35          double radius,
36          double axis_ratio,
37          double sld,
38          double solvent_sld)
39{
40
[e7678b2]41    double flex,crossSect, cont;
[504abee]42
[e7678b2]43    cont = sld - solvent_sld;
44    crossSect = elliptical_crosssection(q,radius,(radius*axis_ratio));
[504abee]45
[e7678b2]46    flex = Sk_WR(q,length,kuhn_length);
47    flex *= crossSect;
48    flex *= M_PI*radius*radius*axis_ratio*axis_ratio*length;
49    flex *= cont*cont;
50    flex *= 1.0e-4;
[504abee]51
[e7678b2]52    return flex;
[504abee]53}
54
55double Iq(double q,
56          double length,
57          double kuhn_length,
58          double radius,
59          double axis_ratio,
60          double sld,
61          double solvent_sld)
62{
63
[e7678b2]64    double result = flexible_cylinder_ex_kernel(q,
65                    length,
66                    kuhn_length,
67                    radius,
68                    axis_ratio,
69                    sld,
70                    solvent_sld);
[504abee]71
[e7678b2]72    return result;
[504abee]73}
74
Note: See TracBrowser for help on using the repository browser.