Changeset 5031ca3 in sasmodels for sasmodels/models/core_shell_ellipsoid.c
- Timestamp:
- Oct 1, 2016 8:47:44 AM (8 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:
- e0de72f
- Parents:
- a807206
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/core_shell_ellipsoid.c
r2222134 r5031ca3 1 1 double form_volume(double radius_equat_core, 2 double radius_polar_core,3 double radius_equat_shell,4 double radius_polar_shell);2 double polar_core, 3 double equat_shell, 4 double polar_shell); 5 5 double Iq(double q, 6 6 double radius_equat_core, 7 double radius_polar_core,8 double radius_equat_shell,9 double radius_polar_shell,10 double sld_core,11 double s ld_shell,12 double s ld_solvent);7 double x_core, 8 double thick_shell, 9 double x_polar_shell, 10 double core_sld, 11 double shell_sld, 12 double solvent_sld); 13 13 14 14 15 15 double Iqxy(double qx, double qy, 16 16 double radius_equat_core, 17 double radius_polar_core,18 double radius_equat_shell,19 double radius_polar_shell,20 double sld_core,21 double s ld_shell,22 double s ld_solvent,17 double x_core, 18 double thick_shell, 19 double x_polar_shell, 20 double core_sld, 21 double shell_sld, 22 double solvent_sld, 23 23 double theta, 24 24 double phi); … … 26 26 27 27 double form_volume(double radius_equat_core, 28 double radius_polar_core,29 double radius_equat_shell,30 double radius_polar_shell)28 double x_core, 29 double thick_shell, 30 double x_polar_shell) 31 31 { 32 double vol = 4.0*M_PI/3.0*radius_equat_shell*radius_equat_shell*radius_polar_shell; 32 const double equat_shell = radius_equat_core + thick_shell; 33 const double polar_shell = radius_equat_core*x_core + thick_shell*x_polar_shell; 34 double vol = 4.0*M_PI/3.0*equat_shell*equat_shell*polar_shell; 33 35 return vol; 34 36 } 35 37 36 38 static double 37 core_shell_ellipsoid_ kernel(double q,39 core_shell_ellipsoid_xt_kernel(double q, 38 40 double radius_equat_core, 39 double radius_polar_core,40 double radius_equat_shell,41 double radius_polar_shell,42 double sld_core,43 double s ld_shell,44 double s ld_solvent)41 double x_core, 42 double thick_shell, 43 double x_polar_shell, 44 double core_sld, 45 double shell_sld, 46 double solvent_sld) 45 47 { 46 47 //upper and lower integration limits48 48 const double lolim = 0.0; 49 49 const double uplim = 1.0; … … 51 51 double summ = 0.0; //initialize intergral 52 52 53 const double delpc = sld_core - sld_shell; //core - shell 54 const double delps = sld_shell - sld_solvent; //shell - solvent 53 const double delpc = core_sld - shell_sld; //core - shell 54 const double delps = shell_sld - solvent_sld; //shell - solvent 55 56 57 const double polar_core = radius_equat_core*x_core; 58 const double equat_shell = radius_equat_core + thick_shell; 59 const double polar_shell = radius_equat_core*x_core + thick_shell*x_polar_shell; 55 60 56 61 for(int i=0;i<N_POINTS_76;i++) { … … 58 63 double yyy = Gauss76Wt[i] * gfn4(zi, 59 64 radius_equat_core, 60 radius_polar_core,61 radius_equat_shell,62 radius_polar_shell,65 polar_core, 66 equat_shell, 67 polar_shell, 63 68 delpc, 64 69 delps, … … 68 73 69 74 double answer = (uplim-lolim)/2.0*summ; 70 71 75 //convert to [cm-1] 72 76 answer *= 1.0e-4; … … 76 80 77 81 static double 78 core_shell_ellipsoid_ kernel_2d(double q, double q_x, double q_y,82 core_shell_ellipsoid_xt_kernel_2d(double q, double q_x, double q_y, 79 83 double radius_equat_core, 80 double radius_polar_core,81 double radius_equat_shell,82 double radius_polar_shell,83 double sld_core,84 double s ld_shell,85 double s ld_solvent,84 double x_core, 85 double thick_shell, 86 double x_polar_shell, 87 double core_sld, 88 double shell_sld, 89 double solvent_sld, 86 90 double theta, 87 91 double phi) … … 91 95 phi = phi * M_PI_180; 92 96 93 94 97 // ellipsoid orientation, the axis of the rotation is consistent with the ploar axis. 95 98 const double cyl_x = cos(theta) * cos(phi); 96 99 const double cyl_y = sin(theta); 97 100 98 const double sldcs = sld_core - sld_shell;99 const double sldss = s ld_shell- sld_solvent;101 const double sldcs = core_sld - shell_sld; 102 const double sldss = shell_sld- solvent_sld; 100 103 101 104 // Compute the angle btw vector q and the … … 103 106 const double cos_val = cyl_x*q_x + cyl_y*q_y; 104 107 105 // Call the IGOR library function to get the kernel: MUST use gfn4 not gf2 because of the def of params. 108 const double polar_core = radius_equat_core*x_core; 109 const double equat_shell = radius_equat_core + thick_shell; 110 const double polar_shell = radius_equat_core*x_core + thick_shell*x_polar_shell; 111 112 // Call the IGOR library function to get the kernel: 113 // MUST use gfn4 not gf2 because of the def of params. 106 114 double answer = gfn4(cos_val, 107 115 radius_equat_core, 108 radius_polar_core,109 radius_equat_shell,110 radius_polar_shell,116 polar_core, 117 equat_shell, 118 polar_shell, 111 119 sldcs, 112 120 sldss, … … 121 129 double Iq(double q, 122 130 double radius_equat_core, 123 double radius_polar_core,124 double radius_equat_shell,125 double radius_polar_shell,126 double sld_core,127 double s ld_shell,128 double s ld_solvent)131 double x_core, 132 double thick_shell, 133 double x_polar_shell, 134 double core_sld, 135 double shell_sld, 136 double solvent_sld) 129 137 { 130 double intensity = core_shell_ellipsoid_ kernel(q,138 double intensity = core_shell_ellipsoid_xt_kernel(q, 131 139 radius_equat_core, 132 radius_polar_core,133 radius_equat_shell,134 radius_polar_shell,135 sld_core,136 s ld_shell,137 s ld_solvent);140 x_core, 141 thick_shell, 142 x_polar_shell, 143 core_sld, 144 shell_sld, 145 solvent_sld); 138 146 139 147 return intensity; … … 143 151 double Iqxy(double qx, double qy, 144 152 double radius_equat_core, 145 double radius_polar_core,146 double radius_equat_shell,147 double radius_polar_shell,148 double sld_core,149 double s ld_shell,150 double s ld_solvent,153 double x_core, 154 double thick_shell, 155 double x_polar_shell, 156 double core_sld, 157 double shell_sld, 158 double solvent_sld, 151 159 double theta, 152 160 double phi) … … 154 162 double q; 155 163 q = sqrt(qx*qx+qy*qy); 156 double intensity = core_shell_ellipsoid_ kernel_2d(q, qx/q, qy/q,164 double intensity = core_shell_ellipsoid_xt_kernel_2d(q, qx/q, qy/q, 157 165 radius_equat_core, 158 radius_polar_core,159 radius_equat_shell,160 radius_polar_shell,161 sld_core,162 s ld_shell,163 s ld_solvent,166 x_core, 167 thick_shell, 168 x_polar_shell, 169 core_sld, 170 shell_sld, 171 solvent_sld, 164 172 theta, 165 173 phi);
Note: See TracChangeset
for help on using the changeset viewer.