Changeset 750ffa5 in sasmodels for sasmodels/kernel_template.c
- Timestamp:
- Mar 9, 2015 4:04:55 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:
- 3a45c2c
- Parents:
- 48f0194
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/kernel_template.c
r95e861b r750ffa5 12 12 #include <cstdio> 13 13 #include <cmath> 14 using namespace std; 14 15 #if defined(_MSC_VER) 15 #define kernel extern "C" __declspec( dllexport ) 16 # define kernel extern "C" __declspec( dllexport ) 17 inline double trunc(double x) { return x>=0?floor(x):-floor(-x); } 16 18 #else 17 # define kernel extern "C"19 # define kernel extern "C" 18 20 #endif 19 using namespace std; 20 inline void SINCOS(double angle, double &svar, double &cvar) 21 { svar=sin(angle); cvar=cos(angle); } 21 inline void SINCOS(double angle, double &svar, double &cvar) { svar=sin(angle); cvar=cos(angle); } 22 22 # else 23 23 #include <stdio.h> 24 #include <math.h> 25 #if defined(_MSC_VER) 26 #define kernel __declspec( dllexport ) 27 #else 24 #include <tgmath.h> // C99 type-generic math, so sin(float) => sinf 25 // MSVC doesn't support C99, so no need for dllexport on C99 branch 28 26 #define kernel 29 #endif 30 #define SINCOS(angle,svar,cvar) do {svar=sin(angle);cvar=cos(angle);} while (0) 27 #define SINCOS(angle,svar,cvar) do {const double _t_=angle; svar=sin(_t_);cvar=cos(_t_);} while (0) 31 28 # endif 32 #if defined(_MSC_VER)33 inline double trunc(double x) { return x>=0?floor(x):-floor(-x); }34 #endif35 29 # define global 36 30 # define local 37 31 # define constant const 32 // OpenCL powr(a,b) = C99 pow(a,b), b >= 0 33 // OpenCL pown(a,b) = C99 pow(a,b), b integer 38 34 # define powr(a,b) pow(a,b) 39 35 # define pown(a,b) pow(a,b) … … 42 38 # define SINCOS(angle,svar,cvar) svar=sincos(angle,&cvar) 43 39 # else 44 # define SINCOS(angle,svar,cvar) do { svar=sin(angle);cvar=cos(angle);} while (0)40 # define SINCOS(angle,svar,cvar) do {const double _t_=angle; svar=sin(_t_);cvar=cos(_t_);} while (0) 45 41 # endif 46 42 #endif … … 126 122 const double weight = IQ_WEIGHT_PRODUCT; 127 123 if (weight > cutoff) { 128 const double I= Iq(qi, IQ_PARAMETERS);129 if ( I>=0.0) { // scattering cannot be negative130 ret += weight* I;124 const double scattering = Iq(qi, IQ_PARAMETERS); 125 if (scattering >= 0.0) { // scattering cannot be negative 126 ret += weight*scattering; 131 127 norm += weight; 132 128 #ifdef VOLUME_PARAMETERS … … 136 132 #endif 137 133 } 138 //else { printf("exclude qx,qy,I:%%g,%%g,%%g\n",qi, I); }134 //else { printf("exclude qx,qy,I:%%g,%%g,%%g\n",qi,scattering); } 139 135 } 140 136 IQ_CLOSE_LOOPS … … 199 195 if (weight > cutoff) { 200 196 201 const double I= Iqxy(qxi, qyi, IQXY_PARAMETERS);202 if ( I>=0.0) { // scattering cannot be negative197 const double scattering = Iqxy(qxi, qyi, IQXY_PARAMETERS); 198 if (scattering >= 0.0) { // scattering cannot be negative 203 199 // TODO: use correct angle for spherical correction 204 200 // Definition of theta and phi are probably reversed relative to the … … 211 207 const double spherical_correction 212 208 = (Ntheta>1 ? fabs(cos(M_PI_180*theta))*M_PI_2:1.0); 213 ret += spherical_correction * weight * I;209 ret += spherical_correction * weight * scattering; 214 210 #else 215 ret += weight * I;211 ret += weight * scattering; 216 212 #endif 217 213 norm += weight; … … 222 218 norm_vol += vol_weight; 223 219 } 224 //else { printf("exclude qx,qy,I:%%g,%%g,%%g\n",qi, I); }220 //else { printf("exclude qx,qy,I:%%g,%%g,%%g\n",qi,scattering); } 225 221 } 226 222 IQXY_CLOSE_LOOPS
Note: See TracChangeset
for help on using the changeset viewer.