Changeset 14220 for trunk/psModules/src/objects/models/pmModel_PGAUSS.c
- Timestamp:
- Jul 15, 2007, 1:30:42 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/models/pmModel_PGAUSS.c
r13803 r14220 39 39 psF32 py = Y / PAR[PM_PAR_SYY]; 40 40 psF32 z = PS_SQR(px) + PS_SQR(py) + PAR[PM_PAR_SXY]*X*Y; 41 assert (z >= 0.0); 42 41 43 psF32 t = 1 + z + z*z/2.0; 42 44 psF32 r = 1.0 / (t + z*z*z/6.0); /* exp (-Z) */ … … 63 65 # define AR_MAX 20.0 64 66 # define AR_RATIO 0.99 67 68 // we constraint limits by the min valid minor axis: 69 # define MIN_MINOR_AXIS 0.5 70 71 // f3 = (s_b^-2 - s_a^-2); F3_SQ_MAX is MIN_MINOR_AXIS^-4 72 # define F3_SQ_MAX 16.0 73 74 static float saveParams[8]; 75 65 76 bool PM_MODEL_LIMITS (psMinConstraintMode mode, int nParam, float *params, float *beta) 66 77 { … … 73 84 f2 = 1.0 / PS_SQR(params[PM_PAR_SYY]) - 1.0 / PS_SQR(params[PM_PAR_SXX]); 74 85 q1 = PS_SQR(f1)*AR_RATIO - PS_SQR(f2); 75 assert (q1 > 0); 86 q1 = PS_MAX (0.0, q1); 87 // if q1 < 0.0, f2 ~ f1, we have a very large axis ratio near 45deg.. Saturate at that 88 // angle and let f2,f1 fight it out 76 89 q2 = 0.5*sqrt (q1); 77 90 } … … 93 106 break; 94 107 case PM_PAR_SXX: 95 beta_lim = 0.5;108 beta_lim = 2.0; 96 109 break; 97 110 case PM_PAR_SYY: 98 beta_lim = 0.5;111 beta_lim = 2.0; 99 112 break; 100 113 case PM_PAR_SXY: 101 beta_lim = q2;114 beta_lim = 0.5*q2; 102 115 break; 103 116 default: … … 137 150 psAbort("invalid parameter %d for param min test", nParam); 138 151 } 139 if (params[nParam] < params_min) { 152 saveParams[nParam] = params[nParam]; 153 if (params[nParam] < params_min) { 140 154 params[nParam] = params_min; 141 155 psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g", … … 170 184 psAbort("invalid parameter %d for param max test", nParam); 171 185 } 186 saveParams[nParam] = params[nParam]; 172 187 if (params[nParam] > params_max) { 173 188 params[nParam] = params_max;
Note:
See TracChangeset
for help on using the changeset viewer.
