Changeset 71b751d in sasmodels for sasmodels/models/elliptical_cylinder.c
- Timestamp:
- Aug 14, 2018 10:09:34 AM (6 years ago)
- Branches:
- master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- 86aa992
- Parents:
- 2f8cbb9
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/elliptical_cylinder.c
r108e70e r71b751d 5 5 } 6 6 7 static double8 Iq(double q, double radius_minor, double r_ratio, double length,7 static void 8 Fq(double q, double *F1, double *F2, double radius_minor, double r_ratio, double length, 9 9 double sld, double solvent_sld) 10 10 { … … 21 21 22 22 //initialize integral 23 double outer_sum = 0.0; 23 double outer_sum_F1 = 0.0; 24 double outer_sum_F2 = 0.0; 24 25 for(int i=0;i<GAUSS_N;i++) { 25 26 //setup inner integral over the ellipsoidal cross-section … … 27 28 const double sin_val = sqrt(1.0 - cos_val*cos_val); 28 29 //const double arg = radius_minor*sin_val; 29 double inner_sum=0; 30 double inner_sum_F1 = 0.0; 31 double inner_sum_F2 = 0.0; 30 32 for(int j=0;j<GAUSS_N;j++) { 31 33 const double theta = ( GAUSS_Z[j]*(vbj-vaj) + vaj + vbj )/2.0; 32 34 const double r = sin_val*sqrt(rA - rB*cos(theta)); 33 35 const double be = sas_2J1x_x(q*r); 34 inner_sum += GAUSS_W[j] * be * be; 36 inner_sum_F1 += GAUSS_W[j] * be; 37 inner_sum_F2 += GAUSS_W[j] * be * be; 35 38 } 36 39 //now calculate the value of the inner integral 37 inner_sum *= 0.5*(vbj-vaj); 40 inner_sum_F1 *= 0.5*(vbj-vaj); 41 inner_sum_F2 *= 0.5*(vbj-vaj); 38 42 39 43 //now calculate outer integral 40 44 const double si = sas_sinx_x(q*0.5*length*cos_val); 41 outer_sum += GAUSS_W[i] * inner_sum * si * si; 45 outer_sum_F1 += GAUSS_W[i] * inner_sum_F1 * si; 46 outer_sum_F2 += GAUSS_W[i] * inner_sum_F2 * si * si; 42 47 } 43 outer_sum *= 0.5*(vb-va); 44 45 //divide integral by Pi 46 const double form = outer_sum/M_PI; 48 // correct limits and divide integral by pi 49 outer_sum_F1 *= 0.5*(vb-va)/M_PI; 50 outer_sum_F2 *= 0.5*(vb-va)/M_PI; 47 51 48 52 // scale by contrast and volume, and convert to to 1/cm units 49 const double vol = form_volume(radius_minor, r_ratio, length); 50 const double delrho = sld - solvent_sld; 51 return 1.0e-4*square(delrho*vol)*form; 53 const double volume = form_volume(radius_minor, r_ratio, length); 54 const double contrast = sld - solvent_sld; 55 const double s = contrast*volume; 56 *F1 = 1.0e-2*s*outer_sum_F1; 57 *F2 = 1.0e-4*s*s*outer_sum_F2; 52 58 } 53 59 … … 63 69 const double be = sas_2J1x_x(qr); 64 70 const double si = sas_sinx_x(qc*0.5*length); 65 const double Aq = be * si;66 const double delrho= sld - solvent_sld;67 const double vol = form_volume(radius_minor, r_ratio, length);68 return 1.0e-4 * square( delrho * vol * Aq);71 const double fq = be * si; 72 const double contrast = sld - solvent_sld; 73 const double volume = form_volume(radius_minor, r_ratio, length); 74 return 1.0e-4 * square(contrast * volume * fq); 69 75 }
Note: See TracChangeset
for help on using the changeset viewer.