Changes in sasmodels/models/ellipsoid.c [71b751d:ee60aa7] in sasmodels
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/ellipsoid.c
r71b751d ree60aa7 4 4 return M_4PI_3*radius_polar*radius_equatorial*radius_equatorial; 5 5 } 6 7 static double 8 radius_from_volume(double radius_polar, double radius_equatorial) 9 { 10 return cbrt(radius_polar*radius_equatorial*radius_equatorial); 11 } 12 13 static double 14 radius_from_curvature(double radius_polar, double radius_equatorial) 15 { 16 // Trivial cases 17 if (radius_polar == radius_equatorial) return radius_polar; 18 if (radius_polar * radius_equatorial == 0.) return 0.; 19 20 // see equation (26) in A.Isihara, J.Chem.Phys. 18(1950)1446-1449 21 const double ratio = (radius_polar < radius_equatorial 22 ? radius_polar / radius_equatorial 23 : radius_equatorial / radius_polar); 24 const double e1 = sqrt(1.0 - ratio*ratio); 25 const double b1 = 1.0 + asin(e1) / (e1 * ratio); 26 const double bL = (1.0 + e1) / (1.0 - e1); 27 const double b2 = 1.0 + 0.5 * ratio * ratio / e1 * log(bL); 28 const double delta = 0.75 * b1 * b2; 29 const double ddd = 2.0 * (delta + 1.0) * radius_polar * radius_equatorial * radius_equatorial; 30 return 0.5 * cbrt(ddd); 31 } 32 33 static double 34 effective_radius(int mode, double radius_polar, double radius_equatorial) 35 { 36 switch (mode) { 37 case 1: // equivalent sphere 38 return radius_from_volume(radius_polar, radius_equatorial); 39 case 2: // average curvature 40 return radius_from_curvature(radius_polar, radius_equatorial); 41 case 3: // min radius 42 return (radius_polar < radius_equatorial ? radius_polar : radius_equatorial); 43 case 4: // max radius 44 return (radius_polar > radius_equatorial ? radius_polar : radius_equatorial); 45 } 46 } 47 6 48 7 49 static void
Note: See TracChangeset
for help on using the changeset viewer.