Changeset 4493288 in sasmodels for sasmodels/models/core_shell_parallelepiped.c
- Timestamp:
- Nov 29, 2017 9:25:39 PM (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:
- 10ee838
- Parents:
- 0e55afe
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/core_shell_parallelepiped.c
rfc0b7aa r4493288 43 43 // Code converted from functions CSPPKernel and CSParallelepiped in libCylinder.c 44 44 // Did not understand the code completely, it should be rechecked (Miguel Gonzalez) 45 //Code is rewritten,the code is compliant with Diva Singhs thesis now (Dirk Honecker) 45 // Code is rewritten,the code is compliant with Diva Singhs thesis now (Dirk Honecker) 46 // Code rewritten (PAK) 46 47 47 const double mu = 0.5 * q * length_b;48 const double half_q = 0.5*q; 48 49 49 // Scale sides by B50 const double a_over_b = length_a / length_b;51 const double c_over_b = length_c / length_b;50 const double tA = length_a + 2.0*thick_rim_a; 51 const double tB = length_b + 2.0*thick_rim_b; 52 const double tC = length_c + 2.0*thick_rim_c; 52 53 53 double tA_over_b = a_over_b + 2.0*thick_rim_a/length_b; 54 double tB_over_b = 1+ 2.0*thick_rim_b/length_b; 55 double tC_over_b = c_over_b + 2.0*thick_rim_c/length_b; 56 57 double Vin = length_a * length_b * length_c; 58 #if OVERLAPPING 59 const double capA_area = length_b*length_c; 60 const double capB_area = (length_a+2.*thick_rim_a)*length_c; 61 const double capC_area = (length_a+2.*thick_rim_a)*(length_b+2.*thick_rim_b); 62 #else 63 const double capA_area = length_b*length_c; 64 const double capB_area = length_a*length_c; 65 const double capC_area = length_a*length_b; 66 #endif 67 const double Va = length_a * capA_area; 68 const double Vb = length_b * capB_area; 69 const double Vc = length_c * capC_area; 70 const double Vat = Va + 2.0 * thick_rim_a * capA_area; 71 const double Vbt = Vb + 2.0 * thick_rim_b * capB_area; 72 const double Vct = Vc + 2.0 * thick_rim_c * capC_area; 73 74 // Scale factors (note that drC is not used later) 54 // Scale factors 75 55 const double dr0 = (core_sld-solvent_sld); 76 56 const double drA = (arim_sld-solvent_sld); … … 81 61 double outer_sum = 0; //initialize integral 82 62 for( int i=0; i<76; i++) { 83 double sigma = 0.5 * ( Gauss76Z[i] + 1.0 );84 double mu_proj = mu * sqrt(1.0-sigma*sigma);63 const double cos_alpha = 0.5 * ( Gauss76Z[i] + 1.0 ); 64 const double mu = half_q * sqrt(1.0-cos_alpha*cos_alpha); 85 65 86 66 // inner integral (with gauss points), integration limits = 0, pi/2 87 const double siC = sas_sinx_x(mu * sigma * c_over_b);88 const double siCt = sas_sinx_x(mu * sigma * tC_over_b);67 const double siC = length_c * sas_sinx_x(length_c * cos_alpha * half_q); 68 const double siCt = tC * sas_sinx_x(tC * cos_alpha * half_q); 89 69 double inner_sum = 0.0; 90 70 for(int j=0; j<76; j++) { 91 const double uu= 0.5 * ( Gauss76Z[j] + 1.0 );92 double sin_ uu, cos_uu;93 SINCOS(M_PI_2* uu, sin_uu, cos_uu);94 const double siA = sas_sinx_x(mu_proj * sin_uu * a_over_b);95 const double siB = sas_sinx_x(mu_proj * cos_uu);96 const double siAt = sas_sinx_x(mu_proj * sin_uu * tA_over_b);97 const double siBt = sas_sinx_x(mu_proj * cos_uu * tB_over_b);71 const double beta = 0.5 * ( Gauss76Z[j] + 1.0 ); 72 double sin_beta, cos_beta; 73 SINCOS(M_PI_2*beta, sin_beta, cos_beta); 74 const double siA = length_a * sas_sinx_x(length_a * mu * sin_beta); 75 const double siB = length_b * sas_sinx_x(length_b * mu * cos_beta); 76 const double siAt = tA * sas_sinx_x(tA * mu * sin_beta); 77 const double siBt = tB * sas_sinx_x(tB * mu * cos_beta); 98 78 99 79 #if OVERLAPPING 100 const double f = dr0* Vin*siA*siB*siC101 + drA*( Vat*siAt-Va*siA)*siB*siC102 + drB*siAt*( Vbt*siBt-Vb*siB)*siC103 + drC*siAt*siBt*( Vct*siCt-Vc*siC);80 const double f = dr0*siA*siB*siC 81 + drA*(siAt-siA)*siB*siC 82 + drB*siAt*(siBt-siB)*siC 83 + drC*siAt*siBt*(siCt-siC); 104 84 #else 105 const double f = dr0* Vin*siA*siB*siC106 + drA*( Vat*siAt-Va*siA)*siB*siC107 + drB*siA*( Vbt*siBt-Vb*siB)*siC108 + drC*siA*siB*( Vct*siCt-Vc*siC);85 const double f = dr0*siA*siB*siC 86 + drA*(siAt-siA)*siB*siC 87 + drB*siA*(siBt-siB)*siC 88 + drC*siA*siB*(siCt-siC); 109 89 #endif 110 90 … … 141 121 const double drC = crim_sld-solvent_sld; 142 122 143 double Vin = length_a * length_b * length_c;144 #if OVERLAPPING145 const double capA_area = length_b*length_c;146 const double capB_area = (length_a+2.*thick_rim_a)*length_c;147 const double capC_area = (length_a+2.*thick_rim_a)*(length_b+2.*thick_rim_b);148 #else149 const double capA_area = length_b*length_c;150 const double capB_area = length_a*length_c;151 const double capC_area = length_a*length_b;152 #endif153 const double Va = length_a * capA_area;154 const double Vb = length_b * capB_area;155 const double Vc = length_c * capC_area;156 const double Vat = Va + 2.0 * thick_rim_a * capA_area;157 const double Vbt = Vb + 2.0 * thick_rim_b * capB_area;158 const double Vct = Vc + 2.0 * thick_rim_c * capC_area;159 160 123 // The definitions of ta, tb, tc are not the same as in the 1D case because there is no 161 124 // the scaling by B. … … 163 126 const double tB = length_b + 2.0*thick_rim_b; 164 127 const double tC = length_c + 2.0*thick_rim_c; 165 const double siA = sas_sinx_x(0.5*length_a*qa);166 const double siB = sas_sinx_x(0.5*length_b*qb);167 const double siC = sas_sinx_x(0.5*length_c*qc);168 const double siAt = sas_sinx_x(0.5*tA*qa);169 const double siBt = sas_sinx_x(0.5*tB*qb);170 const double siCt = sas_sinx_x(0.5*tC*qc);128 const double siA = length_a*sas_sinx_x(0.5*length_a*qa); 129 const double siB = length_b*sas_sinx_x(0.5*length_b*qb); 130 const double siC = length_c*sas_sinx_x(0.5*length_c*qc); 131 const double siAt = tA*sas_sinx_x(0.5*tA*qa); 132 const double siBt = tB*sas_sinx_x(0.5*tB*qb); 133 const double siCt = tC*sas_sinx_x(0.5*tC*qc); 171 134 172 135 #if OVERLAPPING 173 const double f = dr0* Vin*siA*siB*siC174 + drA*( Vat*siAt-Va*siA)*siB*siC175 + drB*siAt*( Vbt*siBt-Vb*siB)*siC176 + drC*siAt*siBt*( Vct*siCt-Vc*siC);136 const double f = dr0*siA*siB*siC 137 + drA*(siAt-siA)*siB*siC 138 + drB*siAt*(siBt-siB)*siC 139 + drC*siAt*siBt*(siCt-siC); 177 140 #else 178 const double f = dr0* Vin*siA*siB*siC179 + drA*( Vat*siAt-Va*siA)*siB*siC180 + drB*siA*( Vbt*siBt-Vb*siB)*siC181 + drC*siA*siB*( Vct*siCt-Vc*siC);141 const double f = dr0*siA*siB*siC 142 + drA*(siAt-siA)*siB*siC 143 + drB*siA*(siBt-siB)*siC 144 + drC*siA*siB*(siCt-siC); 182 145 #endif 183 146
Note: See TracChangeset
for help on using the changeset viewer.