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
RevLine 
[c9f885e]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{
[0471c72]10    //calculate with a loop, two shells at a time
[d51ea74]11    int ii = 0;
12    double fval = 0.0;
[b7529e2]13    double voli = 0.0;
[c9f885e]14    const double sldi = core_sld-shell_sld;
15
[b7529e2]16    do {
17        double ri = core_radius + (double)ii*(s_thickness + w_thickness);
[c9f885e]18
19        // layer 1
[b7529e2]20        voli = 4.0*M_PI/3.0*ri*ri*ri;
21        fval += voli*sldi*sph_j1c(ri*q);
[c9f885e]22
[b7529e2]23        ri += s_thickness;
[c9f885e]24
25        // layer 2
[b7529e2]26        voli = 4.0*M_PI/3.0*ri*ri*ri;
27        fval -= voli*sldi*sph_j1c(ri*q);
[c9f885e]28
29        //do 2 layers at a time
[d51ea74]30        ii += 1;
[c9f885e]31
[d51ea74]32    } while(ii <= n_pairs-1);  //change to make 0 < n_pairs < 2 correspond to
33                               //unilamellar vesicles (C. Glinka, 11/24/03)
[c9f885e]34
35    fval *= 1.0e-4*fval/voli;
36
[b7529e2]37    return(fval);
[c9f885e]38}
39
[0471c72]40static
[c9f885e]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
[0471c72]58static
[c9f885e]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.