source: sasmodels/sasmodels/models/lamellar_stack_caille_kernel.c @ 58c3367

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 58c3367 was 6ab4ed8, checked in by richardh, 8 years ago

renamed params etc in more lamellar models

  • Property mode set to 100644
File size: 1.7 KB
Line 
1/*      LamellarCaille kernel - allows for name changes of passed parameters ...
2
3*/
4
5double Iq(double qval,
6      double del,
7      double Nlayers, 
8      double dd,
9          double Cp, 
10      double sld,
11      double solvent_sld);
12
13double Iq(double qval,
14      double del,
15      double Nlayers, 
16      double dd,
17          double Cp, 
18      double sld,
19      double solvent_sld)
20{
21  double contr,NN;   //local variables of coefficient wave
22  double inten,Pq,Sq,alpha,temp,t2;
23  //double dQ, dQDefault, t1, t3;
24  int ii,NNint;
25  // from wikipedia 0.577215664901532860606512090082402431042159335
26  const double Euler = 0.577215664901533;   // Euler's constant, increased sig figs for new models Feb 2015
27  //dQDefault = 0.0;    //[=] 1/A, q-resolution, default value
28  //dQ = dQDefault; // REMOVED UNUSED dQ calculations for new models Feb 2015
29
30  NN = trunc(Nlayers);    //be sure that NN is an integer
31 
32  contr = sld - solvent_sld;
33
34  Pq = 2.0*contr*contr/qval/qval*(1.0-cos(qval*del));
35
36  NNint = (int)NN;    //cast to an integer for the loop
37  ii=0;
38  Sq = 0.0;
39  // the vital "=" in ii<=  added March 2015
40  for(ii=1;ii<=(NNint-1);ii+=1) {
41
42    //fii = (double)ii;   //do I really need to do this? - unused variable, removed 18Feb2015
43
44    temp = 0.0;
45    alpha = Cp/4.0/M_PI/M_PI*(log(M_PI*ii) + Euler);
46    //t1 = 2.0*dQ*dQ*dd*dd*alpha;
47    t2 = 2.0*qval*qval*dd*dd*alpha;
48    //t3 = dQ*dQ*dd*dd*ii*ii;
49
50    temp = 1.0-ii/NN;
51    //temp *= cos(dd*qval*ii/(1.0+t1));
52    temp *= cos(dd*qval*ii);
53    //temp *= exp(-1.0*(t2 + t3)/(2.0*(1.0+t1)) );
54    temp *= exp(-t2/2.0 );
55    //temp /= sqrt(1.0+t1);
56
57    Sq += temp;
58  }
59
60  Sq *= 2.0;
61  Sq += 1.0;
62
63  inten = 2.0*M_PI*Pq*Sq/(dd*qval*qval);
64
65  inten *= 1.0e-04;   // 1/A to 1/cm
66
67  return(inten);
68}
69
Note: See TracBrowser for help on using the repository browser.