source: sasmodels/sasmodels/models/lamellar_hg_stack_caille.c @ a807206

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since a807206 was a807206, checked in by butler, 7 years ago

updating more parameter names addressing #649

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