source: sasmodels/sasmodels/models/HayterMSAsq_kernel.c @ d507c3a

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since d507c3a was 48f0194, checked in by Paul Kienzle <pkienzle@…>, 9 years ago

1E3 not supported; use 1.0E3 instead

  • Property mode set to 100644
File size: 13.2 KB
Line 
1// Hayter-Penfold (rescaled) MSA structure factor for screened Coulomb interactions
2//
3// C99 needs declarations of routines here
4double Iq(double QQ,
5      double effect_radius, double zz, double VolFrac, double Temp, double csalt, double dialec);
6int
7sqcoef(int ir, double gMSAWave[]);
8
9int
10sqfun(int ix, int ir, double gMSAWave[]);
11
12double
13sqhcal(double qq, double gMSAWave[]);
14 
15double Iq(double QQ,
16      double effect_radius, double zz, double VolFrac, double Temp, double csalt, double dialec) 
17{
18    double gMSAWave[17]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
19        double Elcharge=1.602189e-19;           // electron charge in Coulombs (C)
20        double kB=1.380662e-23;                         // Boltzman constant in J/K
21        double FrSpPerm=8.85418782E-12; //Permittivity of free space in C^2/(N m^2)
22        double SofQ, Qdiam, Vp, ss;
23        double SIdiam, diam, Kappa, cs, IonSt;
24        double  Perm, Beta;
25        double pi, charge;
26        int ierr;
27       
28        pi = M_PI;
29
30        diam=2*effect_radius;           //in A
31
32                                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
33                                                //////////////////////////// convert to USEFUL inputs in SI units                                                //
34                                                ////////////////////////////    NOTE: easiest to do EVERYTHING in SI units                               //
35                                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
36        Beta=1.0/(kB*Temp);             // in Joules^-1
37        Perm=dialec*FrSpPerm;   //in C^2/(N  m^2)
38        charge=zz*Elcharge;             //in Coulomb (C)
39        SIdiam = diam*1.0E-10;          //in m
40        Vp=4.0*pi/3.0*(SIdiam/2.0)*(SIdiam/2.0)*(SIdiam/2.0);   //in m^3
41        cs=csalt*6.022E23*1.0E3;        //# salt molecules/m^3
42       
43        //         Compute the derived values of :
44        //                       Ionic strength IonSt (in C^2/m^3) 
45        //                      Kappa (Debye-Huckel screening length in m)
46        //      and             gamma Exp(-k)
47        IonSt=0.5 * Elcharge*Elcharge*(zz*VolFrac/Vp+2.0*cs);
48        Kappa=sqrt(2*Beta*IonSt/Perm);     //Kappa calc from Ionic strength
49                                                                           //   Kappa=2/SIdiam                                  // Use to compare with HP paper
50        gMSAWave[5]=Beta*charge*charge/(pi*Perm*SIdiam*pow((2.0+Kappa*SIdiam),2));
51       
52        //         Finally set up dimensionless parameters
53        Qdiam=QQ*diam;
54        gMSAWave[6] = Kappa*SIdiam;
55        gMSAWave[4] = VolFrac;
56       
57        //Function sqhpa(qq)  {this is where Hayter-Penfold program began}
58       
59        //       FIRST CALCULATE COUPLING
60       
61        ss=pow(gMSAWave[4],(1.0/3.0));
62        gMSAWave[9] = 2.0*ss*gMSAWave[5]*exp(gMSAWave[6]-gMSAWave[6]/ss);
63       
64        //        CALCULATE COEFFICIENTS, CHECK ALL IS WELL
65        //        AND IF SO CALCULATE S(Q*SIG)
66       
67        ierr=0;
68        ierr=sqcoef(ierr, gMSAWave);
69        if (ierr>=0) {
70                SofQ=sqhcal(Qdiam, gMSAWave);
71        }else{
72        //SofQ=NaN;
73                SofQ=-1.0;
74                //      print "Error Level = ",ierr
75                //      print "Please report HPMSA problem with above error code"
76        }
77       
78        return(SofQ);
79}
80
81
82
83/////////////////////////////////////////////////////////////
84/////////////////////////////////////////////////////////////
85//
86//
87//      CALCULATES RESCALED VOLUME FRACTION AND CORRESPONDING
88//      COEFFICIENTS FOR "SQHPA"
89//
90//      JOHN B. HAYTER   (I.L.L.)    14-SEP-81
91//
92//      ON EXIT:
93//
94//      SETA IS THE RESCALED VOLUME FRACTION
95//      SGEK IS THE RESCALED CONTACT POTENTIAL
96//      SAK IS THE RESCALED SCREENING CONSTANT
97//      A,B,C,F,U,V ARE THE MSA COEFFICIENTS
98//      G1= G(1+) IS THE CONTACT VALUE OF G(R/SIG):
99//      FOR THE GILLAN CONDITION, THE DIFFERENCE FROM
100//      ZERO INDICATES THE COMPUTATIONAL ACCURACY.
101//
102//      IR > 0:    NORMAL EXIT,  IR IS THE NUMBER OF ITERATIONS.
103//         < 0:    FAILED TO CONVERGE
104//
105int
106sqcoef(int ir, double gMSAWave[])
107{       
108        int itm=40,ix,ig,ii;
109        double acc=5.0E-6,del,e1,e2,f1,f2;
110
111        //      WAVE gMSAWave = $"root:HayPenMSA:gMSAWave"
112        f1=0;           //these were never properly initialized...
113        f2=0;
114       
115        ig=1;
116        if (gMSAWave[6]>=(1.0+8.0*gMSAWave[4])) {
117                ig=0;
118                gMSAWave[15]=gMSAWave[14];
119                gMSAWave[16]=gMSAWave[4];
120                ix=1;
121                ir = sqfun(ix,ir,gMSAWave);
122                gMSAWave[14]=gMSAWave[15];
123                gMSAWave[4]=gMSAWave[16];
124                if((ir<0.0) || (gMSAWave[14]>=0.0)) {
125                        return ir;
126                }
127        }
128        gMSAWave[10]=fmin(gMSAWave[4],0.20);
129        if ((ig!=1) || ( gMSAWave[9]>=0.15)) {
130                ii=0;                             
131                do {
132                        ii=ii+1;
133                        if(ii>itm) {
134                                ir=-1;
135                                return ir;             
136                        }
137                        if (gMSAWave[10]<=0.0) {
138                            gMSAWave[10]=gMSAWave[4]/ii;
139                        }
140                        if(gMSAWave[10]>0.6) {
141                            gMSAWave[10] = 0.35/ii;
142                        }
143                        e1=gMSAWave[10];
144                        gMSAWave[15]=f1;
145                        gMSAWave[16]=e1;
146                        ix=2;
147                        ir = sqfun(ix,ir,gMSAWave);
148                        f1=gMSAWave[15];
149                        e1=gMSAWave[16];
150                        e2=gMSAWave[10]*1.01;
151                        gMSAWave[15]=f2;
152                        gMSAWave[16]=e2;
153                        ix=2;
154                        ir = sqfun(ix,ir,gMSAWave);
155                        f2=gMSAWave[15];
156                        e2=gMSAWave[16];
157                        e2=e1-(e2-e1)*f1/(f2-f1);
158                        gMSAWave[10] = e2;
159                        del = fabs((e2-e1)/e1);
160                } while (del>acc);
161                gMSAWave[15]=gMSAWave[14];
162                gMSAWave[16]=e2;
163                ix=4;
164                ir = sqfun(ix,ir,gMSAWave);
165                gMSAWave[14]=gMSAWave[15];
166                e2=gMSAWave[16];
167                ir=ii;
168                if ((ig!=1) || (gMSAWave[10]>=gMSAWave[4])) {
169                    return ir;
170                }
171        }
172        gMSAWave[15]=gMSAWave[14];
173        gMSAWave[16]=gMSAWave[4];
174        ix=3;
175        ir = sqfun(ix,ir,gMSAWave);
176        gMSAWave[14]=gMSAWave[15];
177        gMSAWave[4]=gMSAWave[16];
178        if ((ir>=0) && (gMSAWave[14]<0.0)) {
179                ir=-3;
180        }
181        return ir;
182}
183
184
185int
186sqfun(int ix, int ir, double gMSAWave[])
187{       
188        double acc=1.0e-6;
189        double reta,eta2,eta21,eta22,eta3,eta32,eta2d,eta2d2,eta3d,eta6d,e12,e24,rgek;
190        double rak,ak1,ak2,dak,dak2,dak4,d,d2,dd2,dd4,dd45,ex1,ex2,sk,ck,ckma,skma;
191        double al1,al2,al3,al4,al5,al6,be1,be2,be3,vu1,vu2,vu3,vu4,vu5,ph1,ph2,ta1,ta2,ta3,ta4,ta5;
192        double a1,a2,a3,b1,b2,b3,v1,v2,v3,p1,p2,p3,pp,pp1,pp2,p1p2,t1,t2,t3,um1,um2,um3,um4,um5,um6;
193        double w0,w1,w2,w3,w4,w12,w13,w14,w15,w16,w24,w25,w26,w32,w34,w3425,w35,w3526,w36,w46,w56;
194        double fa,fap,ca,e24g,pwk,qpw,pg,del,fun,fund,g24;
195        int ii,ibig,itm=40;
196        //      WAVE gMSAWave = $"root:HayPenMSA:gMSAWave"
197        a2=0;
198        a3=0;
199        b2=0;
200        b3=0;
201        v2=0;
202        v3=0;
203        p2=0;
204        p3=0;
205       
206        //     CALCULATE CONSTANTS; NOTATION IS HAYTER PENFOLD (1981)
207       
208        reta = gMSAWave[16];                                               
209        eta2 = reta*reta;
210        eta3 = eta2*reta;
211        e12 = 12.0*reta;
212        e24 = e12+e12;
213        gMSAWave[13] = pow( (gMSAWave[4]/gMSAWave[16]),(1.0/3.0));
214        gMSAWave[12]=gMSAWave[6]/gMSAWave[13];
215        ibig=0;
216        if (( gMSAWave[12]>15.0) && (ix==1)) {
217                ibig=1;
218        }
219   
220        gMSAWave[11] = gMSAWave[5]*gMSAWave[13]*exp(gMSAWave[6]- gMSAWave[12]);
221        rgek =  gMSAWave[11];
222        rak =  gMSAWave[12];
223        ak2 = rak*rak;
224        ak1 = 1.0+rak;
225        dak2 = 1.0/ak2;
226        dak4 = dak2*dak2;
227        d = 1.0-reta;
228        d2 = d*d;
229        dak = d/rak;
230        dd2 = 1.0/d2;
231        dd4 = dd2*dd2;
232        dd45 = dd4*2.0e-1;
233        eta3d=3.0*reta;
234        eta6d = eta3d+eta3d;
235        eta32 = eta3+ eta3;
236        eta2d = reta+2.0;
237        eta2d2 = eta2d*eta2d;
238        eta21 = 2.0*reta+1.0;
239        eta22 = eta21*eta21;
240       
241        //     ALPHA(I)
242       
243        al1 = -eta21*dak;
244        al2 = (14.0*eta2-4.0*reta-1.0)*dak2;
245        al3 = 36.0*eta2*dak4;
246       
247        //      BETA(I)
248       
249        be1 = -(eta2+7.0*reta+1.0)*dak;
250        be2 = 9.0*reta*(eta2+4.0*reta-2.0)*dak2;
251        be3 = 12.0*reta*(2.0*eta2+8.0*reta-1.0)*dak4;
252       
253        //      NU(I)
254       
255        vu1 = -(eta3+3.0*eta2+45.0*reta+5.0)*dak;
256        vu2 = (eta32+3.0*eta2+42.0*reta-2.0e1)*dak2;
257        vu3 = (eta32+3.0e1*reta-5.0)*dak4;
258        vu4 = vu1+e24*rak*vu3;
259        vu5 = eta6d*(vu2+4.0*vu3);
260       
261        //      PHI(I)
262       
263        ph1 = eta6d/rak;
264        ph2 = d-e12*dak2;
265       
266        //      TAU(I)
267       
268        ta1 = (reta+5.0)/(5.0*rak);
269        ta2 = eta2d*dak2;
270        ta3 = -e12*rgek*(ta1+ta2);
271        ta4 = eta3d*ak2*(ta1*ta1-ta2*ta2);
272        ta5 = eta3d*(reta+8.0)*1.0e-1-2.0*eta22*dak2;
273       
274        //     double PRECISION SINH(K), COSH(K)
275       
276        ex1 = exp(rak);
277        ex2 = 0.0;
278        if ( gMSAWave[12]<20.0) {
279                ex2=exp(-rak);
280        }
281        sk=0.5*(ex1-ex2);
282        ck = 0.5*(ex1+ex2);
283        ckma = ck-1.0-rak*sk;
284        skma = sk-rak*ck;
285       
286        //      a(I)
287       
288        a1 = (e24*rgek*(al1+al2+ak1*al3)-eta22)*dd4;
289        if (ibig==0) {
290                a2 = e24*(al3*skma+al2*sk-al1*ck)*dd4;
291                a3 = e24*(eta22*dak2-0.5*d2+al3*ckma-al1*sk+al2*ck)*dd4;
292        }
293       
294        //      b(I)
295       
296        b1 = (1.5*reta*eta2d2-e12*rgek*(be1+be2+ak1*be3))*dd4;
297        if (ibig==0) {
298                b2 = e12*(-be3*skma-be2*sk+be1*ck)*dd4;
299                b3 = e12*(0.5*d2*eta2d-eta3d*eta2d2*dak2-be3*ckma+be1*sk-be2*ck)*dd4;
300        }
301       
302        //      V(I)
303       
304        v1 = (eta21*(eta2-2.0*reta+1.0e1)*2.5e-1-rgek*(vu4+vu5))*dd45;
305        if (ibig==0) {
306                v2 = (vu4*ck-vu5*sk)*dd45;
307                v3 = ((eta3-6.0*eta2+5.0)*d-eta6d*(2.0*eta3-3.0*eta2+18.0*reta+1.0e1)*dak2+e24*vu3+vu4*sk-vu5*ck)*dd45;
308        }
309       
310       
311        //       P(I)
312       
313        pp1 = ph1*ph1;
314        pp2 = ph2*ph2;
315        pp = pp1+pp2;
316        p1p2 = ph1*ph2*2.0;
317        p1 = (rgek*(pp1+pp2-p1p2)-0.5*eta2d)*dd2;
318        if (ibig==0) {
319                p2 = (pp*sk+p1p2*ck)*dd2;
320                p3 = (pp*ck+p1p2*sk+pp1-pp2)*dd2;
321        }
322       
323        //       T(I)
324       
325        t1 = ta3+ta4*a1+ta5*b1;
326        if (ibig!=0) {
327               
328                //              VERY LARGE SCREENING:  ASYMPTOTIC SOLUTION
329               
330                v3 = ((eta3-6.0*eta2+5.0)*d-eta6d*(2.0*eta3-3.0*eta2+18.0*reta+1.0e1)*dak2+e24*vu3)*dd45;
331                t3 = ta4*a3+ta5*b3+e12*ta2 - 4.0e-1*reta*(reta+1.0e1)-1.0;
332                p3 = (pp1-pp2)*dd2;
333                b3 = e12*(0.5*d2*eta2d-eta3d*eta2d2*dak2+be3)*dd4;
334                a3 = e24*(eta22*dak2-0.5*d2-al3)*dd4;
335                um6 = t3*a3-e12*v3*v3;
336                um5 = t1*a3+a1*t3-e24*v1*v3;
337                um4 = t1*a1-e12*v1*v1;
338                al6 = e12*p3*p3;
339                al5 = e24*p1*p3-b3-b3-ak2;
340                al4 = e12*p1*p1-b1-b1;
341                w56 = um5*al6-al5*um6;
342                w46 = um4*al6-al4*um6;
343                fa = -w46/w56;
344                ca = -fa;
345                gMSAWave[3] = fa;
346                gMSAWave[2] = ca;
347                gMSAWave[1] = b1+b3*fa;
348                gMSAWave[0] = a1+a3*fa;
349                gMSAWave[8] = v1+v3*fa;
350                gMSAWave[14] = -(p1+p3*fa);
351                gMSAWave[15] = gMSAWave[14];
352                if (fabs(gMSAWave[15])<1.0e-3) {
353                        gMSAWave[15] = 0.0;
354                }
355                gMSAWave[10] = gMSAWave[16];
356               
357        } else {
358       
359                t2 = ta4*a2+ta5*b2+e12*(ta1*ck-ta2*sk);
360                t3 = ta4*a3+ta5*b3+e12*(ta1*sk-ta2*(ck-1.0))-4.0e-1*reta*(reta+1.0e1)-1.0;
361               
362                //              MU(i)
363               
364                um1 = t2*a2-e12*v2*v2;
365                um2 = t1*a2+t2*a1-e24*v1*v2;
366                um3 = t2*a3+t3*a2-e24*v2*v3;
367                um4 = t1*a1-e12*v1*v1;
368                um5 = t1*a3+t3*a1-e24*v1*v3;
369                um6 = t3*a3-e12*v3*v3;
370               
371                //                      GILLAN CONDITION ?
372                //
373                //                      YES - G(X=1+) = 0
374                //
375                //                      COEFFICIENTS AND FUNCTION VALUE
376                //
377                if ((ix==1) || (ix==3)) {
378                       
379                        //                      NO - CALCULATE REMAINING COEFFICIENTS.
380                       
381                        //                      LAMBDA(I)
382                       
383                        al1 = e12*p2*p2;
384                        al2 = e24*p1*p2-b2-b2;
385                        al3 = e24*p2*p3;
386                        al4 = e12*p1*p1-b1-b1;
387                        al5 = e24*p1*p3-b3-b3-ak2;
388                        al6 = e12*p3*p3;
389                       
390                        //                      OMEGA(I)
391                       
392                        w16 = um1*al6-al1*um6;
393                        w15 = um1*al5-al1*um5;
394                        w14 = um1*al4-al1*um4;
395                        w13 = um1*al3-al1*um3;
396                        w12 = um1*al2-al1*um2;
397                       
398                        w26 = um2*al6-al2*um6;
399                        w25 = um2*al5-al2*um5;
400                        w24 = um2*al4-al2*um4;
401                       
402                        w36 = um3*al6-al3*um6;
403                        w35 = um3*al5-al3*um5;
404                        w34 = um3*al4-al3*um4;
405                        w32 = um3*al2-al3*um2;
406                        //
407                        w46 = um4*al6-al4*um6;
408                        w56 = um5*al6-al5*um6;
409                        w3526 = w35+w26;
410                        w3425 = w34+w25;
411                       
412                        //                      QUARTIC COEFFICIENTS
413                       
414                        w4 = w16*w16-w13*w36;
415                        w3 = 2.0*w16*w15-w13*w3526-w12*w36;
416                        w2 = w15*w15+2.0*w16*w14-w13*w3425-w12*w3526;
417                        w1 = 2.0*w15*w14-w13*w24-w12*w3425;
418                        w0 = w14*w14-w12*w24;
419                       
420                        //                      ESTIMATE THE STARTING VALUE OF f
421                       
422                        if (ix==1) {
423                                //                              LARGE K
424                                fap = (w14-w34-w46)/(w12-w15+w35-w26+w56-w32);
425                        } else {
426                                //                              ASSUME NOT TOO FAR FROM GILLAN CONDITION.
427                                //                              IF BOTH RGEK AND RAK ARE SMALL, USE P-W ESTIMATE.
428                                gMSAWave[14]=0.5*eta2d*dd2*exp(-rgek);
429                                if (( gMSAWave[11]<=2.0) && ( gMSAWave[11]>=0.0) && ( gMSAWave[12]<=1.0)) {
430                                        e24g = e24*rgek*exp(rak);
431                                        pwk = sqrt(e24g);
432                                        qpw = (1.0-sqrt(1.0+2.0*d2*d*pwk/eta22))*eta21/d;
433                                        gMSAWave[14] = -qpw*qpw/e24+0.5*eta2d*dd2;
434                                }
435                                pg = p1+gMSAWave[14];
436                                ca = ak2*pg+2.0*(b3*pg-b1*p3)+e12*gMSAWave[14]*gMSAWave[14]*p3;
437                                ca = -ca/(ak2*p2+2.0*(b3*p2-b2*p3));
438                                fap = -(pg+p2*ca)/p3;
439                        }
440                       
441                        //                      AND REFINE IT ACCORDING TO NEWTON
442                        ii=0;
443                        do {
444                                ii = ii+1;
445                                if (ii>itm) {
446                                        //                                      FAILED TO CONVERGE IN ITM ITERATIONS
447                                        ir=-2;
448                                        return (ir);
449                                }
450                                fa = fap;
451                                fun = w0+(w1+(w2+(w3+w4*fa)*fa)*fa)*fa;
452                                fund = w1+(2.0*w2+(3.0*w3+4.0*w4*fa)*fa)*fa;
453                                fap = fa-fun/fund;
454                                del=fabs((fap-fa)/fa);
455                        } while (del>acc);
456                       
457                        ir = ir+ii;
458                        fa = fap;
459                        ca = -(w16*fa*fa+w15*fa+w14)/(w13*fa+w12);
460                        gMSAWave[14] = -(p1+p2*ca+p3*fa);
461                        gMSAWave[15] = gMSAWave[14];
462                        if (fabs(gMSAWave[15])<1.0e-3) {
463                                gMSAWave[15] = 0.0;
464                        }
465                        gMSAWave[10] = gMSAWave[16];
466                } else {
467                        ca = ak2*p1+2.0*(b3*p1-b1*p3);
468                        ca = -ca/(ak2*p2+2.0*(b3*p2-b2*p3));
469                        fa = -(p1+p2*ca)/p3;
470                        if (ix==2) {
471                                gMSAWave[15] = um1*ca*ca+(um2+um3*fa)*ca+um4+um5*fa+um6*fa*fa;
472                        }
473                        if (ix==4) {
474                                gMSAWave[15] = -(p1+p2*ca+p3*fa);
475                        }
476                }
477                gMSAWave[3] = fa;
478                gMSAWave[2] = ca;
479                gMSAWave[1] = b1+b2*ca+b3*fa;
480                gMSAWave[0] = a1+a2*ca+a3*fa;
481                gMSAWave[8] = (v1+v2*ca+v3*fa)/gMSAWave[0];
482        }
483        g24 = e24*rgek*ex1;
484        gMSAWave[7] = (rak*ak2*ca-g24)/(ak2*g24);
485        return (ir);
486}
487
488double
489sqhcal(double qq, double gMSAWave[])
490{       
491    double SofQ,etaz,akz,gekz,e24,x1,x2,ck,sk,ak2,qk,q2k,qk2,qk3,qqk,sink,cosk,asink,qcosk,aqk,inter;           
492        //      WAVE gMSAWave = $"root:HayPenMSA:gMSAWave"
493
494        etaz = gMSAWave[10];
495        akz =  gMSAWave[12];
496        gekz =  gMSAWave[11];
497        e24 = 24.0*etaz;
498        x1 = exp(akz);
499        x2 = 0.0;
500        if ( gMSAWave[12]<20.0) {
501                x2 = exp(-akz);
502        }
503        ck = 0.5*(x1+x2);
504        sk = 0.5*(x1-x2);
505        ak2 = akz*akz;
506       
507        if (qq<=0.0) {
508                SofQ = -1.0/gMSAWave[0];
509        } else {
510                qk = qq/gMSAWave[13];
511                q2k = qk*qk;
512                qk2 = 1.0/q2k;
513                qk3 = qk2/qk;
514                qqk = 1.0/(qk*(q2k+ak2));
515                sink = sin(qk);
516                cosk = cos(qk);
517                asink = akz*sink;
518                qcosk = qk*cosk;
519                aqk = gMSAWave[0]*(sink-qcosk);
520                aqk=aqk+gMSAWave[1]*((2.0*qk2-1.0)*qcosk+2.0*sink-2.0/qk);
521                inter=24.0*qk3+4.0*(1.0-6.0*qk2)*sink;
522                aqk=(aqk+0.5*etaz*gMSAWave[0]*(inter-(1.0-12.0*qk2+24.0*qk2*qk2)*qcosk))*qk3;
523                aqk=aqk +gMSAWave[2]*(ck*asink-sk*qcosk)*qqk;
524                aqk=aqk +gMSAWave[3]*(sk*asink-qk*(ck*cosk-1.0))*qqk;
525                aqk=aqk +gMSAWave[3]*(cosk-1.0)*qk2;
526                aqk=aqk -gekz*(asink+qcosk)*qqk;
527                SofQ = 1.0/(1.0-e24*aqk);
528        }
529        return (SofQ);
530}
Note: See TracBrowser for help on using the repository browser.