Changeset 2a0b2b1 in sasmodels for sasmodels/models/hollow_cylinder.c
- Timestamp:
- Apr 14, 2017 8:30:29 AM (7 years ago)
- Branches:
- master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- fdd56a1
- Parents:
- 9901384
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/hollow_cylinder.c
r592343f r2a0b2b1 1 1 double form_volume(double radius, double thickness, double length); 2 2 double Iq(double q, double radius, double thickness, double length, double sld, 3 3 double solvent_sld); 4 4 double Iqxy(double qx, double qy, double radius, double thickness, double length, double sld, 5 5 double solvent_sld, double theta, double phi); 6 6 7 7 //#define INVALID(v) (v.radius_core >= v.radius) … … 14 14 } 15 15 16 17 16 static double 18 _ hollow_cylinder_kernel(double q,19 double radius, double thickness, double length , double sin_val, double cos_val)17 _fq(double qab, double qc, 18 double radius, double thickness, double length) 20 19 { 21 const double qs = q*sin_val; 22 const double lam1 = sas_2J1x_x((radius+thickness)*qs); 23 const double lam2 = sas_2J1x_x(radius*qs); 20 const double lam1 = sas_2J1x_x((radius+thickness)*qab); 21 const double lam2 = sas_2J1x_x(radius*qab); 24 22 const double gamma_sq = square(radius/(radius+thickness)); 25 //Note: lim_{thickness -> 0} psi = sas_J0(radius*q s)26 //Note: lim_{radius -> 0} psi = sas_2J1x_x(thickness*q s)27 const double psi = (lam1 - gamma_sq*lam2)/(1.0 - gamma_sq); 28 const double t2 = sas_sinx_x(0.5* q*length*cos_val);23 //Note: lim_{thickness -> 0} psi = sas_J0(radius*qab) 24 //Note: lim_{radius -> 0} psi = sas_2J1x_x(thickness*qab) 25 const double psi = (lam1 - gamma_sq*lam2)/(1.0 - gamma_sq); //SRK 10/19/00 26 const double t2 = sas_sinx_x(0.5*length*qc); 29 27 return psi*t2; 30 28 } … … 43 41 { 44 42 const double lower = 0.0; 45 const double upper = 1.0; 43 const double upper = 1.0; //limits of numerical integral 46 44 47 double summ = 0.0; 45 double summ = 0.0; //initialize intergral 48 46 for (int i=0;i<76;i++) { 49 const double cos_ val= 0.5*( Gauss76Z[i] * (upper-lower) + lower + upper );50 const double sin_ val = sqrt(1.0 - cos_val*cos_val);51 const double inter = _hollow_cylinder_kernel(q, radius, thickness, length,52 sin_val, cos_val);53 summ += Gauss76Wt[i] * inter * inter;47 const double cos_theta = 0.5*( Gauss76Z[i] * (upper-lower) + lower + upper ); 48 const double sin_theta = sqrt(1.0 - cos_theta*cos_theta); 49 const double form = _fq(q*sin_theta, q*cos_theta, 50 radius, thickness, length); 51 summ += Gauss76Wt[i] * form * form; 54 52 } 55 53 … … 66 64 double q, sin_alpha, cos_alpha; 67 65 ORIENT_SYMMETRIC(qx, qy, theta, phi, q, sin_alpha, cos_alpha); 68 const double Aq = _hollow_cylinder_kernel(q, radius, thickness, length, 69 sin_alpha, cos_alpha); 66 const double qab = q*sin_alpha; 67 const double qc = q*cos_alpha; 68 69 const double form = _fq(qab, qc, radius, thickness, length); 70 70 71 71 const double vol = form_volume(radius, thickness, length); 72 return _hollow_cylinder_scaling( Aq*Aq, solvent_sld-sld, vol);72 return _hollow_cylinder_scaling(form*form, solvent_sld-sld, vol); 73 73 } 74
Note: See TracChangeset
for help on using the changeset viewer.