[dc02af0] | 1 | /* Lamellar_ParaCrystal - Pedersen's model |
---|
| 2 | |
---|
| 3 | */ |
---|
| 4 | double Iq(double qval, |
---|
| 5 | double th, |
---|
| 6 | double Nlayers, |
---|
| 7 | double davg, |
---|
| 8 | double pd, |
---|
| 9 | double sld, |
---|
| 10 | double solvent_sld); |
---|
| 11 | double paraCryst_sn(double ww, double qval, double davg, long Nlayers, double an); |
---|
| 12 | double paraCryst_an(double ww, double qval, double davg, long Nlayers); |
---|
| 13 | |
---|
| 14 | double 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 | |
---|
[f734e7d] | 30 | n1 = (long)trunc(Nlayers); //rounds towards zero |
---|
[dc02af0] | 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); |
---|
[319ab14] | 35 | |
---|
[dc02af0] | 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); |
---|
[319ab14] | 45 | |
---|
[dc02af0] | 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; |
---|
[319ab14] | 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); |
---|
[dc02af0] | 60 | return(inten); |
---|
| 61 | } |
---|
| 62 | |
---|
| 63 | // functions for the lamellar paracrystal model |
---|
| 64 | double |
---|
| 65 | paraCryst_sn(double ww, double qval, double davg, long Nlayers, double an) { |
---|
| 66 | |
---|
| 67 | double Snq; |
---|
[319ab14] | 68 | |
---|
[dc02af0] | 69 | Snq = an/( (double)Nlayers*pow((1.0+ww*ww-2.0*ww*cos(qval*davg)),2) ); |
---|
| 70 | |
---|
| 71 | return(Snq); |
---|
| 72 | } |
---|
| 73 | |
---|
| 74 | double |
---|
| 75 | paraCryst_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 | |
---|