Changeset 994d77f in sasmodels for sasmodels/models/cylinder_clone.c
- Timestamp:
- Oct 30, 2014 12:33:53 PM (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/cylinder_clone.c
r5d4777d r994d77f 1 real form_volume(real radius, reallength);2 real Iq(real q, real sld, real solvent_sld, real radius, reallength);3 real Iqxy(real qx, real qy, real sld, real solvent_sld, real radius, real length, real theta, realphi);1 double form_volume(double radius, double length); 2 double Iq(double q, double sld, double solvent_sld, double radius, double length); 3 double Iqxy(double qx, double qy, double sld, double solvent_sld, double radius, double length, double theta, double phi); 4 4 5 5 … … 7 7 // besarg = q * R * sin(alpha) 8 8 // siarg = q * L/2 * cos(alpha) 9 real _cyl(real twovd, real besarg, real siarg, realalpha);10 real _cyl(real twovd, real besarg, real siarg, realalpha)9 double _cyl(double twovd, double besarg, double siarg, double alpha); 10 double _cyl(double twovd, double besarg, double siarg, double alpha) 11 11 { 12 const real bj = (besarg == REAL(0.0) ? REAL(0.5): J1(besarg)/besarg);13 const real si = (siarg == REAL(0.0) ? REAL(1.0): sin(siarg)/siarg);12 const double bj = (besarg == 0.0 ? 0.5 : J1(besarg)/besarg); 13 const double si = (siarg == 0.0 ? 1.0 : sin(siarg)/siarg); 14 14 return twovd*si*bj; 15 15 } 16 16 17 real form_volume(real radius, reallength)17 double form_volume(double radius, double length) 18 18 { 19 19 return M_PI*radius*radius*length; 20 20 } 21 real Iq(realq,22 realsldCyl,23 realsldSolv,24 realradius,25 reallength)21 double Iq(double q, 22 double sldCyl, 23 double sldSolv, 24 double radius, 25 double length) 26 26 { 27 const realqr = q*radius;28 const real qh = q*REAL(0.5)*length;29 const real twovd = REAL(2.0)*(sldCyl-sldSolv)*form_volume(radius, length);30 real total = REAL(0.0);31 // reallower=0, upper=M_PI_2;27 const double qr = q*radius; 28 const double qh = q*0.5*length; 29 const double twovd = 2.0*(sldCyl-sldSolv)*form_volume(radius, length); 30 double total = 0.0; 31 // double lower=0, upper=M_PI_2; 32 32 for (int i=0; i<76 ;i++) { 33 33 // translate a point in [-1,1] to a point in [lower,upper] 34 //const realalpha = ( Gauss76Z[i]*(upper-lower) + upper + lower )/2.0;35 const real alpha = REAL(0.5)*(Gauss76Z[i]*M_PI_2 + M_PI_2);36 realsn, cn;34 //const double alpha = ( Gauss76Z[i]*(upper-lower) + upper + lower )/2.0; 35 const double alpha = 0.5*(Gauss76Z[i]*M_PI_2 + M_PI_2); 36 double sn, cn; 37 37 SINCOS(alpha, sn, cn); 38 const realfq = _cyl(twovd, qr*sn, qh*cn, alpha);38 const double fq = _cyl(twovd, qr*sn, qh*cn, alpha); 39 39 total += Gauss76Wt[i] * fq * fq * sn; 40 40 } 41 41 // translate dx in [-1,1] to dx in [lower,upper] 42 //const realform = (upper-lower)/2.0*total;43 return REAL(1.0e8)* total * M_PI_4;42 //const double form = (upper-lower)/2.0*total; 43 return 1.0e8 * total * M_PI_4; 44 44 } 45 45 46 real Iqxy(real qx, realqy,47 realsldCyl,48 realsldSolv,49 realradius,50 reallength,51 realcyl_theta,52 realcyl_phi)46 double Iqxy(double qx, double qy, 47 double sldCyl, 48 double sldSolv, 49 double radius, 50 double length, 51 double cyl_theta, 52 double cyl_phi) 53 53 { 54 realsn, cn; // slots to hold sincos function output54 double sn, cn; // slots to hold sincos function output 55 55 56 56 // Compute angle alpha between q and the cylinder axis … … 58 58 // # The following correction factor exists in sasview, but it can't be 59 59 // # right, so we are leaving it out for now. 60 const realspherical_integration = fabs(cn)*M_PI_2;61 const realq = sqrt(qx*qx+qy*qy);62 const realcos_val = cn*cos(cyl_phi*M_PI_180)*(qx/q) + sn*(qy/q);63 const realalpha = acos(cos_val);60 const double spherical_integration = fabs(cn)*M_PI_2; 61 const double q = sqrt(qx*qx+qy*qy); 62 const double cos_val = cn*cos(cyl_phi*M_PI_180)*(qx/q) + sn*(qy/q); 63 const double alpha = acos(cos_val); 64 64 65 const realqr = q*radius;66 const real qh = q*REAL(0.5)*length;67 const real twovd = REAL(2.0)*(sldCyl-sldSolv)*form_volume(radius, length);65 const double qr = q*radius; 66 const double qh = q*0.5*length; 67 const double twovd = 2.0*(sldCyl-sldSolv)*form_volume(radius, length); 68 68 SINCOS(alpha, sn, cn); 69 const realfq = _cyl(twovd, qr*sn, qh*cn, alpha);70 return REAL(1.0e8)* fq * fq * spherical_integration;69 const double fq = _cyl(twovd, qr*sn, qh*cn, alpha); 70 return 1.0e8 * fq * fq * spherical_integration; 71 71 }
Note: See TracChangeset
for help on using the changeset viewer.