source: sasmodels/sasmodels/models/lamellar_stack_paracrystal_kernel.c @ 6ab4ed8

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

renamed params etc in more lamellar models

  • Property mode set to 100644
File size: 2.1 KB
Line 
1/*      Lamellar_ParaCrystal - Pedersen's model
2
3*/
4double Iq(double qval,
5      double th,
6      double Nlayers, 
7          double davg, 
8          double pd,
9      double sld,
10      double solvent_sld);
11double paraCryst_sn(double ww, double qval, double davg, long Nlayers, double an);
12double paraCryst_an(double ww, double qval, double davg, long Nlayers);
13
14double Iq(double qval,
15      double th,
16      double Nlayers, 
17          double davg, 
18          double pd,
19      double sld,
20      double solvent_sld)
21{
22   
23        double inten,contr,xn;
24        double xi,ww,Pbil,Znq,Snq,an;
25        long n1,n2;
26       
27        contr = sld - solvent_sld;
28        //get the fractional part of Nlayers, to determine the "mixing" of N's
29       
30        n1 = (long)trunc(Nlayers);              //rounds towards zero
31        n2 = n1 + 1;
32        xn = (double)n2 - Nlayers;                      //fractional contribution of n1
33       
34        ww = exp(-qval*qval*pd*pd*davg*davg/2.0);
35
36        //calculate the n1 contribution
37        an = paraCryst_an(ww,qval,davg,n1);
38        Snq = paraCryst_sn(ww,qval,davg,n1,an);
39       
40        Znq = xn*Snq;
41       
42        //calculate the n2 contribution
43        an = paraCryst_an(ww,qval,davg,n2);
44        Snq = paraCryst_sn(ww,qval,davg,n2,an);
45
46        Znq += (1.0-xn)*Snq;
47       
48        //and the independent contribution
49        Znq += (1.0-ww*ww)/(1.0+ww*ww-2.0*ww*cos(qval*davg));
50       
51        //the limit when Nlayers approaches infinity
52//      Zq = (1-ww^2)/(1+ww^2-2*ww*cos(qval*davg))
53       
54        xi = th/2.0;            //use 1/2 the bilayer thickness
55        Pbil = (sin(qval*xi)/(qval*xi))*(sin(qval*xi)/(qval*xi));
56       
57        inten = 2.0*M_PI*contr*contr*Pbil*Znq/(qval*qval);
58        inten *= 1.0e-04;
59//printf("q=%.7e wwm1=%g ww=%.5e an=% 12.5e Snq=% 12.5e Znq=% 12.5e Pbil=% 12.5e\n",qval,wwm1,ww,an,Snq,Znq,Pbil);
60        return(inten);
61}
62
63// functions for the lamellar paracrystal model
64double
65paraCryst_sn(double ww, double qval, double davg, long Nlayers, double an) {
66       
67        double Snq;
68
69        Snq = an/( (double)Nlayers*pow((1.0+ww*ww-2.0*ww*cos(qval*davg)),2) );
70       
71        return(Snq);
72}
73
74double
75paraCryst_an(double ww, double qval, double davg, long Nlayers) {
76       
77        double an;
78       
79        an = 4.0*ww*ww - 2.0*(ww*ww*ww+ww)*cos(qval*davg);
80        an -= 4.0*pow(ww,(Nlayers+2))*cos((double)Nlayers*qval*davg);
81        an += 2.0*pow(ww,(Nlayers+3))*cos((double)(Nlayers-1)*qval*davg);
82        an += 2.0*pow(ww,(Nlayers+1))*cos((double)(Nlayers+1)*qval*davg);
83       
84        return(an);
85}
86
Note: See TracBrowser for help on using the repository browser.