[81dd619] | 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 |
---|
[177c1a1] | 8 | double |
---|
| 9 | gfn4(double xx, double crmaj, double crmin, double trmaj, double trmin, double delpc, double delps, double qq); |
---|
| 10 | double |
---|
[81dd619] | 11 | gfn4(double xx, double crmaj, double crmin, double trmaj, double trmin, double delpc, double delps, double qq) |
---|
| 12 | { |
---|
[177c1a1] | 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; |
---|
[81dd619] | 24 | |
---|
[177c1a1] | 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; |
---|
[81dd619] | 31 | |
---|
[177c1a1] | 32 | const double tgfn = gfnc + gfnt; |
---|
| 33 | const double result = tgfn*tgfn; |
---|
| 34 | |
---|
| 35 | return (result); |
---|
[81dd619] | 36 | } |
---|