source: sasmodels/sasmodels/models/lamellarCailleHG_kernel.c @ dc02af0

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since dc02af0 was dc02af0, checked in by richardh, 9 years ago

adding Lamellar models, polydisp needs checking

  • Property mode set to 100644
File size: 1.9 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 tail_length,
7      double head_length,
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 tail_length,
17      double head_length,
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*(head_length+tail_length))-sin(qval*tail_length)) + 
37              (tail_sld-solvent_sld)*sin(qval*tail_length);
38
39  NNint = (int)NN;    //cast to an integer for the loop
40  ii=0;
41  Sq = 0.0;
42  for(ii=1;ii<(NNint-1);ii+=1) {
43
44    //fii = (double)ii;   //do I really need to do this? - unused variable, removed 18Feb2015
45
46    temp = 0.0;
47    alpha = Cp/4.0/M_PI/M_PI*(log(M_PI*ii) + Euler);
48    //t1 = 2.0*dQ*dQ*dd*dd*alpha;
49    t2 = 2.0*qval*qval*dd*dd*alpha;
50    //t3 = dQ*dQ*dd*dd*ii*ii;
51
52    temp = 1.0-ii/NN;
53    //temp *= cos(dd*qval*ii/(1.0+t1));
54    temp *= cos(dd*qval*ii);
55    //temp *= exp(-1.0*(t2 + t3)/(2.0*(1.0+t1)) );
56    temp *= exp(-t2/2.0 );
57    //temp /= sqrt(1.0+t1);
58
59    Sq += temp;
60  }
61
62  Sq *= 2.0;
63  Sq += 1.0;
64
65  inten = 2.0*M_PI*Pq*Sq/(dd*qval*qval);
66
67  inten *= 1.0e-04;   // 1/A to 1/cm
68
69  return(inten);
70}
71
Note: See TracBrowser for help on using the repository browser.