- Timestamp:
- May 3, 2010, 8:41:49 AM (16 years ago)
- Location:
- branches/tap_branches
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/tap_branches
- Property svn:mergeinfo changed
-
branches/tap_branches/psModules
-
Property svn:mergeinfo
set to (toggle deleted branches)
/trunk/psModules merged eligible /branches/eam_branches/stackphot.20100406/psModules 27623-27653 /branches/pap_delete/psModules 27530-27595
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
branches/tap_branches/psModules/src/objects/models/pmModel_PGAUSS.c
r25754 r27838 41 41 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -100, -100, 0.5, 0.5, -1.0 }; 42 42 static float paramsMaxLax[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0 }; 43 44 // Moderate parameter limits 45 static float *paramsMinModerate = paramsMinLax; 46 static float *paramsMaxModerate = paramsMaxLax; 43 47 44 48 // Strict parameter limits … … 232 236 psF64 PM_MODEL_RADIUS (const psVector *params, psF64 flux) 233 237 { 234 psF64 z , f;238 psF64 z; 235 239 int Nstep = 0; 236 240 psEllipseShape shape; … … 267 271 z0 = 0.0; 268 272 269 // perform a type of bisection to find the value 270 float f0 = 1.0 / (1 + z0 + z0*z0/2.0 + z0*z0*z0/6.0); 271 float f1 = 1.0 / (1 + z1 + z1*z1/2.0 + z1*z1*z1/6.0); 272 while ((Nstep < 10) && (fabs(z1 - z0) > 0.5)) { 273 z = 0.5*(z0 + z1); 274 f = 1.0 / (1 + z + z*z/2.0 + z*z*z/6.0); 275 if (f > limit) { 276 z0 = z; 277 f0 = f; 278 } else { 279 z1 = z; 280 f1 = f; 281 } 282 Nstep ++; 283 } 273 // starting guess: 274 z = 0.5*(z0 + z1); 275 float dz = 1.0; 276 277 for (int i = 0; (i < 10) && (fabs(dz) > 0.0001); i++) { 278 // use Newton-Raphson to minimize f(z) - limit = 0 279 float dqdz = (1.0 + z + z*z/2.0); 280 float q = (dqdz + z*z*z/6.0); 281 282 float f = 1.0 / q; 283 float dfdz = -dqdz * f / q; 284 285 dz = (f - limit) / dfdz; 286 287 // fprintf (stderr, "%f %f %f : %f %f\n", f, z, dz, dfdz, q); 288 z -= dz; 289 z = PS_MAX(z, 0.0); 290 } 291 284 292 psF64 radius = sigma * sqrt (2.0 * z); 285 293 … … 425 433 limitsApply = true; 426 434 break; 435 case PM_MODEL_LIMITS_MODERATE: 436 paramsMinUse = paramsMinModerate; 437 paramsMaxUse = paramsMaxModerate; 438 limitsApply = true; 439 break; 427 440 case PM_MODEL_LIMITS_STRICT: 428 441 paramsMinUse = paramsMinStrict;
Note:
See TracChangeset
for help on using the changeset viewer.
