source: sasmodels/sasmodels/models/core_multi_shell.c @ 12f4c19

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

clean up effective radius functions; improve mono_gauss_coil accuracy; start moving VR into C

  • Property mode set to 100644
File size: 1.3 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
11outer_radius(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 r;
19}
20
21static double
22form_volume(double core_radius, double fp_n, double thickness[])
23{
24  return M_4PI_3 * cube(outer_radius(core_radius, fp_n, thickness));
25}
26
27static double
28effective_radius(int mode, double core_radius, double fp_n, double thickness[])
29{
30  switch (mode) {
31  case 1: // outer radius
32    return outer_radius(core_radius, fp_n, thickness);
33  case 2: // core radius
34    return core_radius;
35  }
36}
37
38static void
39Fq(double q, double *F1, double *F2, double core_sld, double core_radius,
40   double solvent_sld, double fp_n, double sld[], double thickness[])
41{
42  const int n = (int)(fp_n+0.5);
43  double f, r, last_sld;
44  r = core_radius;
45  last_sld = core_sld;
46  f = 0.;
47  for (int i=0; i<n; i++) {
48    f += M_4PI_3 * cube(r) * (sld[i] - last_sld) * sas_3j1x_x(q*r);
49    last_sld = sld[i];
50    r += thickness[i];
51  }
52  f += M_4PI_3 * cube(r) * (solvent_sld - last_sld) * sas_3j1x_x(q*r);
53  *F1 = 1e-2 * f;
54  *F2 = 1e-4 * f * f;
55}
Note: See TracBrowser for help on using the repository browser.