Changeset 994d77f in sasmodels for sasmodels/models/ellipsoid.c
- Timestamp:
- Oct 30, 2014 10:33:53 AM (9 years ago)
- Branches:
- master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- ef2861b
- Parents:
- d087487b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/ellipsoid.c
r5d4777d r994d77f 1 real form_volume(real rpolar, realrequatorial);2 real Iq(real q, real sld, real solvent_sld, real rpolar, realrequatorial);3 real Iqxy(real qx, real qy, real sld, realsolvent_sld,4 real rpolar, real requatorial, real theta, realphi);1 double form_volume(double rpolar, double requatorial); 2 double Iq(double q, double sld, double solvent_sld, double rpolar, double requatorial); 3 double Iqxy(double qx, double qy, double sld, double solvent_sld, 4 double rpolar, double requatorial, double theta, double phi); 5 5 6 real _ellipsoid_kernel(real q, real rpolar, real requatorial, realcos_alpha);7 real _ellipsoid_kernel(real q, real rpolar, real requatorial, realcos_alpha)6 double _ellipsoid_kernel(double q, double rpolar, double requatorial, double cos_alpha); 7 double _ellipsoid_kernel(double q, double rpolar, double requatorial, double cos_alpha) 8 8 { 9 realsn, cn;10 realratio = rpolar/requatorial;11 const real u = q*requatorial*sqrt(REAL(1.0)12 + cos_alpha*cos_alpha*(ratio*ratio - REAL(1.0)));9 double sn, cn; 10 double ratio = rpolar/requatorial; 11 const double u = q*requatorial*sqrt(1.0 12 + cos_alpha*cos_alpha*(ratio*ratio - 1.0)); 13 13 SINCOS(u, sn, cn); 14 const real f = ( u==REAL(0.0) ? REAL(1.0) : REAL(3.0)*(sn-u*cn)/(u*u*u) );14 const double f = ( u==0.0 ? 1.0 : 3.0*(sn-u*cn)/(u*u*u) ); 15 15 return f*f; 16 16 } 17 17 18 real form_volume(real rpolar, realrequatorial)18 double form_volume(double rpolar, double requatorial) 19 19 { 20 return REAL(1.333333333333333)*M_PI*rpolar*requatorial*requatorial;20 return 1.333333333333333*M_PI*rpolar*requatorial*requatorial; 21 21 } 22 22 23 real Iq(realq,24 realsld,25 realsolvent_sld,26 realrpolar,27 realrequatorial)23 double Iq(double q, 24 double sld, 25 double solvent_sld, 26 double rpolar, 27 double requatorial) 28 28 { 29 //const real lower = REAL(0.0);30 //const real upper = REAL(1.0);31 real total = REAL(0.0);29 //const double lower = 0.0; 30 //const double upper = 1.0; 31 double total = 0.0; 32 32 for (int i=0;i<76;i++) { 33 //const realcos_alpha = (Gauss76Z[i]*(upper-lower) + upper + lower)/2;34 const real cos_alpha = REAL(0.5)*(Gauss76Z[i] + REAL(1.0));33 //const double cos_alpha = (Gauss76Z[i]*(upper-lower) + upper + lower)/2; 34 const double cos_alpha = 0.5*(Gauss76Z[i] + 1.0); 35 35 total += Gauss76Wt[i] * _ellipsoid_kernel(q, rpolar, requatorial, cos_alpha); 36 36 } 37 //const realform = (upper-lower)/2*total;38 const real form = REAL(0.5)*total;39 const reals = (sld - solvent_sld) * form_volume(rpolar, requatorial);40 return REAL(1.0e-4)* form * s * s;37 //const double form = (upper-lower)/2*total; 38 const double form = 0.5*total; 39 const double s = (sld - solvent_sld) * form_volume(rpolar, requatorial); 40 return 1.0e-4 * form * s * s; 41 41 } 42 42 43 real Iqxy(real qx, realqy,44 realsld,45 realsolvent_sld,46 realrpolar,47 realrequatorial,48 realtheta,49 realphi)43 double Iqxy(double qx, double qy, 44 double sld, 45 double solvent_sld, 46 double rpolar, 47 double requatorial, 48 double theta, 49 double phi) 50 50 { 51 realsn, cn;51 double sn, cn; 52 52 53 const realq = sqrt(qx*qx + qy*qy);53 const double q = sqrt(qx*qx + qy*qy); 54 54 SINCOS(theta*M_PI_180, sn, cn); 55 const realcos_alpha = cn*cos(phi*M_PI_180)*(qx/q) + sn*(qy/q);56 const realform = _ellipsoid_kernel(q, rpolar, requatorial, cos_alpha);57 const reals = (sld - solvent_sld) * form_volume(rpolar, requatorial);55 const double cos_alpha = cn*cos(phi*M_PI_180)*(qx/q) + sn*(qy/q); 56 const double form = _ellipsoid_kernel(q, rpolar, requatorial, cos_alpha); 57 const double s = (sld - solvent_sld) * form_volume(rpolar, requatorial); 58 58 59 return REAL(1.0e-4)* form * s * s;59 return 1.0e-4 * form * s * s; 60 60 } 61 61
Note: See TracChangeset
for help on using the changeset viewer.