source: sasmodels/sasmodels/models/multi_shell.c @ d51ea74

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

Code review from TN

  • Property mode set to 100644
File size: 1.7 KB
Line 
1static
2double multi_shell_kernel(double q,
3          double core_radius,
4          double s_thickness,
5          double w_thickness,
6          double core_sld,
7          double shell_sld,
8          double n_pairs)
9{
10    //calculate with a loop, two shells at a time
11    int ii = 0;
12    double fval = 0.0;
13    double voli = 0.0;
14    const double sldi = core_sld-shell_sld;
15
16    do {
17        double ri = core_radius + (double)ii*(s_thickness + w_thickness);
18
19        // layer 1
20        voli = 4.0*M_PI/3.0*ri*ri*ri;
21        fval += voli*sldi*sph_j1c(ri*q);
22
23        ri += s_thickness;
24
25        // layer 2
26        voli = 4.0*M_PI/3.0*ri*ri*ri;
27        fval -= voli*sldi*sph_j1c(ri*q);
28
29        //do 2 layers at a time
30        ii += 1;
31
32    } while(ii <= n_pairs-1);  //change to make 0 < n_pairs < 2 correspond to
33                               //unilamellar vesicles (C. Glinka, 11/24/03)
34
35    fval *= 1.0e-4*fval/voli;
36
37    return(fval);
38}
39
40static
41double Iq(double q,
42          double core_radius,
43          double s_thickness,
44          double w_thickness,
45          double core_sld,
46          double shell_sld,
47          double n_pairs)
48{
49    return multi_shell_kernel(q,
50           core_radius,
51           s_thickness,
52           w_thickness,
53           core_sld,
54           shell_sld,
55           n_pairs);
56}
57
58static
59double Iqxy(double qx, double qy,
60          double core_radius,
61          double s_thickness,
62          double w_thickness,
63          double core_sld,
64          double shell_sld,
65          double n_pairs)
66{
67    double q = sqrt(qx*qx + qy*qy);
68
69    return multi_shell_kernel(q,
70           core_radius,
71           s_thickness,
72           w_thickness,
73           core_sld,
74           shell_sld,
75           n_pairs);
76}
Note: See TracBrowser for help on using the repository browser.