1 | // |
---|
2 | // FUNCTION gfn4: CONTAINS F(Q,A,B,MU)**2 AS GIVEN |
---|
3 | // BY (53) & (58-59) IN CHEN AND |
---|
4 | // KOTLARCHYK REFERENCE |
---|
5 | // |
---|
6 | // <OBLATE ELLIPSOID> |
---|
7 | // function gfn4 for oblate ellipsoids |
---|
8 | double |
---|
9 | gfn4(double xx, double crmaj, double crmin, double trmaj, double trmin, double delpc, double delps, double qq); |
---|
10 | double |
---|
11 | gfn4(double xx, double crmaj, double crmin, double trmaj, double trmin, double delpc, double delps, double qq) |
---|
12 | { |
---|
13 | // local variables |
---|
14 | const double pi43=4.0/3.0*M_PI; |
---|
15 | const double aa = crmaj; |
---|
16 | const double bb = crmin; |
---|
17 | const double u2 = (bb*bb*xx*xx + aa*aa*(1.0-xx*xx)); |
---|
18 | const double uq = sqrt(u2)*qq; |
---|
19 | // changing to more accurate sph_j1c since the following inexplicably fails on Radeon Nano. |
---|
20 | //const double siq = (uq == 0.0 ? 1.0 : 3.0*(sin(uq)/uq/uq - cos(uq)/uq)/uq); |
---|
21 | const double siq = sph_j1c(uq); |
---|
22 | const double vc = pi43*aa*aa*bb; |
---|
23 | const double gfnc = siq*vc*delpc; |
---|
24 | |
---|
25 | const double ut2 = (trmin*trmin*xx*xx + trmaj*trmaj*(1.0-xx*xx)); |
---|
26 | const double ut= sqrt(ut2)*qq; |
---|
27 | const double vt = pi43*trmaj*trmaj*trmin; |
---|
28 | //const double sit = (ut == 0.0 ? 1.0 : 3.0*(sin(ut)/ut/ut - cos(ut)/ut)/ut); |
---|
29 | const double sit = sph_j1c(ut); |
---|
30 | const double gfnt = sit*vt*delps; |
---|
31 | |
---|
32 | const double tgfn = gfnc + gfnt; |
---|
33 | const double result = tgfn*tgfn; |
---|
34 | |
---|
35 | return (result); |
---|
36 | } |
---|