source: sasmodels/sasmodels/models/core_multi_shell.c @ a94046f

core_shell_microgelsmagnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since a94046f was a94046f, checked in by richardh, 6 years ago

some corrections to R_eff options

  • Property mode set to 100644
File size: 1.7 KB
Line 
1
2static double
3f_constant(double q, double r, double sld)
4{
5  const double bes = sas_3j1x_x(q * r);
6  const double vol = M_4PI_3 * cube(r);
7  return sld * vol * bes;
8}
9
10static double
11form_volume(double core_radius, double fp_n, double thickness[])
12{
13  double r = core_radius;
14  int n = (int)(fp_n+0.5);
15  for (int i=0; i < n; i++) {
16    r += thickness[i];
17  }
18  return M_4PI_3 * cube(r);
19}
20
21static double
22outer_radius(double core_radius, double fp_n, double thickness[])
23{
24  double r = core_radius;
25  int n = (int)(fp_n+0.5);
26  for (int i=0; i < n; i++) {
27    r += thickness[i];
28  }
29  return r;
30}
31
32static double
33effective_radius(int mode, double core_radius, double fp_n, double thickness[])
34// this seems regardless to always give the result for outer radius for n=1 shells; why??
35// printf shows fp_n is always 1, not 0,1,2
36{
37//        printf("fp_n =%g \n",fp_n);
38        if (mode == 1) {
39        double r = core_radius;
40        int n = (int)(fp_n+0.5);
41        if ( n > 0) {
42            for (int i=0; i < n; i++) {
43                r += thickness[i];
44            }
45        }
46        return r;
47        //return outer_radius(core_radius,fp_n,thickness);
48    } else {
49        return core_radius;
50    }
51}
52
53static void
54Fq(double q, double *F1, double *F2, double core_sld, double core_radius,
55   double solvent_sld, double fp_n, double sld[], double thickness[])
56{
57  const int n = (int)(fp_n+0.5);
58  double f, r, last_sld;
59  r = core_radius;
60  last_sld = core_sld;
61  f = 0.;
62  for (int i=0; i<n; i++) {
63    f += M_4PI_3 * cube(r) * (sld[i] - last_sld) * sas_3j1x_x(q*r);
64    last_sld = sld[i];
65    r += thickness[i];
66  }
67  f += M_4PI_3 * cube(r) * (solvent_sld - last_sld) * sas_3j1x_x(q*r);
68  *F1 = 1e-2 * f;
69  *F2 = 1e-4 * f * f;
70}
Note: See TracBrowser for help on using the repository browser.