00001
00002
00003
00004
00005
00006 #ifdef __cplusplus
00007 extern "C" {
00008 #endif
00009 #include "../gheisha_f2c/f2c.h"
00010
00011 doublereal glande_(real *x)
00012 {
00013
00014
00015 static real p1[5] = { (float).4259894875,(float)-.124976255,(float)
00016 .039842437,(float)-.006298287635,(float).001511162253 };
00017 static real q5[5] = { (float)1.,(float)156.9424537,(float)3745.310488,(
00018 float)9834.698876,(float)66924.28357 };
00019 static real p6[5] = { (float)1.000827619,(float)664.9143136,(float)
00020 62972.92665,(float)475554.6998,(float)-5743609.109 };
00021 static real q6[5] = { (float)1.,(float)651.4101098,(float)56974.73333,(
00022 float)165917.4725,(float)-2815759.939 };
00023 static real a1[3] = { (float).04166666667,(float)-.01996527778,(float)
00024 .02709538966 };
00025 static real a2[2] = { (float)-1.84556867,(float)-4.284640743 };
00026 static real q1[5] = { (float)1.,(float)-.3388260629,(float).09594393323,(
00027 float)-.01608042283,(float).003778942063 };
00028 static real p2[5] = { (float).1788541609,(float).1173957403,(float)
00029 .01488850518,(float)-.001394989411,(float)1.283617211e-4 };
00030 static real q2[5] = { (float)1.,(float).7428795082,(float).3153932961,(
00031 float).06694219548,(float).008790609714 };
00032 static real p3[5] = { (float).1788544503,(float).09359161662,(float)
00033 .006325387654,(float)6.611667319e-5,(float)-2.031049101e-6 };
00034 static real q3[5] = { (float)1.,(float).6097809921,(float).2560616665,(
00035 float).04746722384,(float).006957301675 };
00036 static real p4[5] = { (float).9874054407,(float)118.6723273,(float)
00037 849.279436,(float)-743.7792444,(float)427.0262186 };
00038 static real q4[5] = { (float)1.,(float)106.8615961,(float)337.6496214,(
00039 float)2016.712389,(float)1597.063511 };
00040 static real p5[5] = { (float)1.003675074,(float)167.5702434,(float)
00041 4789.711289,(float)21217.86767,(float)-22324.9491 };
00042
00043
00044 real ret_val, r__1;
00045
00046
00047 double exp(doublereal), sqrt(doublereal), log(doublereal);
00048
00049
00050 static real u, v;
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 v = *x;
00074 if (v < (float)-5.5) {
00075 u = exp(v + (float)1.);
00076 ret_val = exp((float)-1. / u) / sqrt(u) * (float).3989422803 * ((a1[0]
00077 + (a1[1] + a1[2] * u) * u) * u + (float)1.);
00078 } else if (v < (float)-1.) {
00079 u = exp(-(doublereal)v - (float)1.);
00080 ret_val = exp(-(doublereal)u) * sqrt(u) * (p1[0] + (p1[1] + (p1[2] + (
00081 p1[3] + p1[4] * v) * v) * v) * v) / (q1[0] + (q1[1] + (q1[2]
00082 + (q1[3] + q1[4] * v) * v) * v) * v);
00083 } else if (v < (float)1.) {
00084 ret_val = (p2[0] + (p2[1] + (p2[2] + (p2[3] + p2[4] * v) * v) * v) *
00085 v) / (q2[0] + (q2[1] + (q2[2] + (q2[3] + q2[4] * v) * v) * v)
00086 * v);
00087 } else if (v < (float)5.) {
00088 ret_val = (p3[0] + (p3[1] + (p3[2] + (p3[3] + p3[4] * v) * v) * v) *
00089 v) / (q3[0] + (q3[1] + (q3[2] + (q3[3] + q3[4] * v) * v) * v)
00090 * v);
00091 } else if (v < (float)12.) {
00092 u = (float)1. / v;
00093
00094 r__1 = u;
00095 ret_val = r__1 * r__1 * (p4[0] + (p4[1] + (p4[2] + (p4[3] + p4[4] * u)
00096 * u) * u) * u) / (q4[0] + (q4[1] + (q4[2] + (q4[3] + q4[4] *
00097 u) * u) * u) * u);
00098 } else if (v < (float)50.) {
00099 u = (float)1. / v;
00100
00101 r__1 = u;
00102 ret_val = r__1 * r__1 * (p5[0] + (p5[1] + (p5[2] + (p5[3] + p5[4] * u)
00103 * u) * u) * u) / (q5[0] + (q5[1] + (q5[2] + (q5[3] + q5[4] *
00104 u) * u) * u) * u);
00105 } else if (v < (float)300.) {
00106 u = (float)1. / v;
00107
00108 r__1 = u;
00109 ret_val = r__1 * r__1 * (p6[0] + (p6[1] + (p6[2] + (p6[3] + p6[4] * u)
00110 * u) * u) * u) / (q6[0] + (q6[1] + (q6[2] + (q6[3] + q6[4] *
00111 u) * u) * u) * u);
00112 } else {
00113 u = (float)1. / (v - v * log(v) / (v + (float)1.));
00114
00115 r__1 = u;
00116 ret_val = r__1 * r__1 * ((a2[0] + a2[1] * u) * u + (float)1.);
00117 }
00118 return ret_val;
00119 }
00120
00121
00122 int glandg_(real *yran)
00123 {
00124
00125
00126 static real xcum1[100] = { (float)-2.57,(float)-2.15412,(float)-1.94167,(
00127 float)-1.79583,(float)-1.67975,(float)-1.5809,(float)-1.49341,(
00128 float)-1.41397,(float)-1.34057,(float)-1.27185,(float)-1.20686,(
00129 float)-1.1449,(float)-1.08545,(float)-1.02809,(float)-.97249,(
00130 float)-.91839,(float)-.86557,(float)-.81386,(float)-.76308,(float)
00131 -.71311,(float)-.66384,(float)-.61515,(float)-.56696,(float)
00132 -.51919,(float)-.47176,(float)-.42462,(float)-.37769,(float)
00133 -.33092,(float)-.28426,(float)-.23767,(float)-.19109,(float)
00134 -.14447,(float)-.09779,(float)-.051,(float)-.00405,(float).04308,(
00135 float).09044,(float).13806,(float).18598,(float).23423,(float)
00136 .28285,(float).33187,(float).38134,(float).43128,(float).48174,(
00137 float).53275,(float).58435,(float).63658,(float).68948,(float)
00138 .74309,(float).79746,(float).85263,(float).90865,(float).96556,(
00139 float)1.02342,(float)1.08228,(float)1.14219,(float)1.20322,(float)
00140 1.26542,(float)1.32887,(float)1.39362,(float)1.45976,(float)
00141 1.52736,(float)1.5965,(float)1.66727,(float)1.73976,(float)
00142 1.81407,(float)1.89032,(float)1.9686,(float)2.04905,(float)2.1318,
00143 (float)2.21699,(float)2.30477,(float)2.39531,(float)2.48878,(
00144 float)2.5854,(float)2.68535,(float)2.78889,(float)2.89626,(float)
00145 3.00775,(float)3.12364,(float)3.24429,(float)3.37005,(float)
00146 3.50136,(float)3.63866,(float)3.78246,(float)3.93334,(float)
00147 4.09194,(float)4.259,(float)4.43533,(float)4.62186,(float)4.8196,(
00148 float)5.02974,(float)5.25368,(float)5.49312,(float)5.74987,(float)
00149 6.02605,(float)6.32428,(float)6.64773,(float)7. };
00150 static real xcum2[100] = { (float)5.5,(float)5.5612,(float)5.62347,(float)
00151 5.68684,(float)5.75133,(float)5.81699,(float)5.88383,(float)
00152 5.95191,(float)6.02125,(float)6.0919,(float)6.16391,(float)
00153 6.23732,(float)6.31219,(float)6.38855,(float)6.46646,(float)
00154 6.54597,(float)6.62712,(float)6.70998,(float)6.7946,(float)
00155 6.88103,(float)6.96935,(float)7.05962,(float)7.15192,(float)
00156 7.24633,(float)7.34294,(float)7.44182,(float)7.54306,(float)
00157 7.64676,(float)7.753,(float)7.86188,(float)7.97351,(float)8.088,(
00158 float)8.20548,(float)8.3261,(float)8.44997,(float)8.57725,(float)
00159 8.70808,(float)8.84262,(float)8.98103,(float)9.12349,(float)
00160 9.27021,(float)9.42141,(float)9.5773,(float)9.73812,(float)9.9041,
00161 (float)10.07552,(float)10.25265,(float)10.43584,(float)10.6254,(
00162 float)10.82169,(float)11.02508,(float)11.23598,(float)11.45487,(
00163 float)11.68222,(float)11.91855,(float)12.16441,(float)12.42045,(
00164 float)12.68734,(float)12.9658,(float)13.25663,(float)13.56075,(
00165 float)13.87912,(float)14.2128,(float)14.56296,(float)14.93088,(
00166 float)15.31799,(float)15.72593,(float)16.1565,(float)16.6117,(
00167 float)17.09378,(float)17.60523,(float)18.14884,(float)18.72792,(
00168 float)19.34622,(float)20.00796,(float)20.71792,(float)21.48176,(
00169 float)22.30618,(float)23.19862,(float)24.16809,(float)25.22547,(
00170 float)26.3832,(float)27.65658,(float)29.0649,(float)30.63048,(
00171 float)32.38211,(float)34.35555,(float)36.59607,(float)39.16212,(
00172 float)42.13195,(float)45.61204,(float)49.74758,(float)54.74189,(
00173 float)60.89935,(float)68.6737,(float)78.8148,(float)92.61047,(
00174 float)112.50807,(float)143.78539,(float)200. };
00175
00176
00177 real r__1;
00178
00179
00180 double log(doublereal), sqrt(doublereal);
00181
00182
00183 extern doublereal rndm_(real *);
00184 static real a, b;
00185 static integer j;
00186 static real p, q, x, q1, tabpo1, tabpo2, qq, yy;
00187 extern int rannor_(real *, real *);
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218 rannor_(&q, &q1);
00219 x = rndm_(&q);
00220 if (x < (float).004) {
00221
00222
00223 *yran = -(doublereal)sqrt((r__1 = log(x), dabs(r__1)));
00224
00225 } else if (x <= (float).807069) {
00226
00227
00228 tabpo1 = (x + (float)0.) * (float)118.836;
00229 j = tabpo1 + 1;
00230 j = max(j,2);
00231 j = min(j,98);
00232 p = tabpo1 - (j - 1);
00233 a = (p + (float)1.) * xcum1[j + 1] - (p - (float)2.) * xcum1[j - 2];
00234 b = (p - (float)1.) * xcum1[j - 1] - p * xcum1[j];
00235 *yran = a * p * (p - (float)1.) * (float).16666667 + b * (p + (float)
00236 1.) * (p - (float)2.) * (float).5;
00237
00238 } else if (x <= (float).994869) {
00239
00240
00241 tabpo2 = (x - (float).79124) * (float)486.178;
00242 j = tabpo2 + 1;
00243 j = max(j,2);
00244 j = min(j,98);
00245 p = tabpo2 - (j - 1);
00246 a = (p + (float)1.) * xcum2[j + 1] - (p - (float)2.) * xcum2[j - 2];
00247 b = (p - (float)1.) * xcum2[j - 1] - p * xcum2[j];
00248 *yran = a * p * (p - (float)1.) * (float).16666667 + b * (p + (float)
00249 1.) * (p - (float)2.) * (float).5;
00250
00251 } else {
00252
00253
00254 yy = rndm_(&qq);
00255 *yran = (float)200. / yy;
00256
00257 }
00258 return 0;
00259 }
00260
00261
00262 doublereal glands_(real *x)
00263 {
00264
00265
00266 static real p1[5] = { (float).2514091491,(float)-.06250580444,(float)
00267 .0145838123,(float)-.002108817737,(float)7.41124729e-4 };
00268 static real q1[5] = { (float)1.,(float)-.005571175625,(float).06225310236,
00269 (float)-.003137378427,(float).001931496439 };
00270 static real p2[4] = { (float).2868328584,(float).3564363231,(float)
00271 .1523518695,(float).02251304883 };
00272 static real q2[4] = { (float)1.,(float).6191136137,(float).1720721448,(
00273 float).02278594771 };
00274 static real p3[4] = { (float).2868329066,(float).3003828436,(float)
00275 .09950951941,(float).008733827185 };
00276 static real q3[4] = { (float)1.,(float).4237190502,(float).1095631512,(
00277 float).008693851567 };
00278 static real p4[4] = { (float)1.00035163,(float)4.503592498,(float)
00279 10.8588388,(float)7.536052269 };
00280 static real q4[4] = { (float)1.,(float)5.539969678,(float)19.33581111,(
00281 float)27.21321508 };
00282 static real p5[4] = { (float)1.000006517,(float)49.09414111,(float)
00283 85.05544753,(float)153.2153455 };
00284 static real q5[4] = { (float)1.,(float)50.09928881,(float)139.9819104,(
00285 float)420.0002909 };
00286 static real p6[4] = { (float)1.000000983,(float)132.9868456,(float)
00287 916.2149244,(float)-960.5054274 };
00288 static real q6[4] = { (float)1.,(float)133.9887843,(float)1055.990413,(
00289 float)553.2224619 };
00290 static real a1[3] = { (float)-.4583333333,(float).6675347222,(float)
00291 -1.641741416 };
00292 static real a2[3] = { (float)1.,(float)-.4227843351,(float)-2.043403138 };
00293
00294
00295 real ret_val;
00296
00297
00298 double exp(doublereal), sqrt(doublereal), log(doublereal);
00299
00300
00301 static real u, v;
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324 v = *x;
00325 if (v < (float)-5.5) {
00326 u = exp(v + (float)1.);
00327 ret_val = exp((float)-1. / u) * (float).3989422803 * sqrt(u) * ((a1[0]
00328 + (a1[1] + a1[2] * u) * u) * u + (float)1.);
00329 } else if (v < (float)-1.) {
00330 u = exp(-(doublereal)v - (float)1.);
00331 ret_val = exp(-(doublereal)u) / sqrt(u) * (p1[0] + (p1[1] + (p1[2] + (
00332 p1[3] + p1[4] * v) * v) * v) * v) / (q1[0] + (q1[1] + (q1[2]
00333 + (q1[3] + q1[4] * v) * v) * v) * v);
00334 } else if (v < (float)1.) {
00335 ret_val = (p2[0] + (p2[1] + (p2[2] + p2[3] * v) * v) * v) / (q2[0] + (
00336 q2[1] + (q2[2] + q2[3] * v) * v) * v);
00337 } else if (v < (float)4.) {
00338 ret_val = (p3[0] + (p3[1] + (p3[2] + p3[3] * v) * v) * v) / (q3[0] + (
00339 q3[1] + (q3[2] + q3[3] * v) * v) * v);
00340 } else if (v < (float)12.) {
00341 u = (float)1. / v;
00342 ret_val = (p4[0] + (p4[1] + (p4[2] + p4[3] * u) * u) * u) / (q4[0] + (
00343 q4[1] + (q4[2] + q4[3] * u) * u) * u);
00344 } else if (v < (float)50.) {
00345 u = (float)1. / v;
00346 ret_val = (p5[0] + (p5[1] + (p5[2] + p5[3] * u) * u) * u) / (q5[0] + (
00347 q5[1] + (q5[2] + q5[3] * u) * u) * u);
00348 } else if (v < (float)300.) {
00349 u = (float)1. / v;
00350 ret_val = (p6[0] + (p6[1] + (p6[2] + p6[3] * u) * u) * u) / (q6[0] + (
00351 q6[1] + (q6[2] + q6[3] * u) * u) * u);
00352 } else {
00353 u = (float)1. / (v - v * log(v) / (v + (float)1.));
00354 ret_val = (float)1. - (a2[0] + (a2[1] + a2[2] * u) * u) * u;
00355 }
00356 return ret_val;
00357 }
00358
00359
00360 doublereal gvaviv_(real *rkappa, real *beta2, real *ran)
00361 {
00362
00363
00364 static real fninv[5] = { (float)1.,(float).5,(float).33333333,(float).25,(
00365 float).2 };
00366 static real edgec[6] = { (float).16666667,(float).041666667,(float)
00367 .0083333333,(float).013888889,(float).0069444444,(float)
00368 7.7160493e-4 };
00369 static real u1[13] = { (float).25850868,(float).032477982,(float)
00370 -.0059020496,(float)0.,(float).024880692,(float).0047404356,(
00371 float)-7.444513e-4,(float).0073225731,(float)0.,(float)
00372 .0011668284,(float)0.,(float)-.0015727318,(float)-.0011210142 };
00373 static real u2[13] = { (float).43142611,(float).040797543,(float)
00374 -.0091490215,(float)0.,(float).042127077,(float).0073167928,(
00375 float)-.0014026047,(float).016195241,(float).0024714789,(float)
00376 .0020751278,(float)0.,(float)-.0025141668,(float)-.0014064022 };
00377 static real u3[13] = { (float).25225955,(float).064820468,(float)
00378 -.023615759,(float)0.,(float).023834176,(float).0021624675,(float)
00379 -.0026865597,(float)-.0054891384,(float).0039800522,(float)
00380 .0048447456,(float)-.0089439554,(float)-.0062756944,(float)
00381 -.0024655436 };
00382 static real u4[12] = { (float)1.2593231,(float)-.20374501,(float)
00383 .095055662,(float)-.020771531,(float)-.04686518,(float)
00384 -.0077222986,(float).0032241039,(float).008988292,(float)
00385 -.0067167236,(float)-.013049241,(float).018786468,(float)
00386 .014484097 };
00387 static real u5[13] = { (float)-.024864376,(float)-.0010368495,(float)
00388 .0014330117,(float)2.005273e-4,(float).0018751903,(float)
00389 .0012668869,(float)4.8736023e-4,(float).0034850854,(float)0.,(
00390 float)-3.6597173e-4,(float).0019372124,(float)7.0761825e-4,(float)
00391 4.6898375e-4 };
00392 static real u6[13] = { (float).035855696,(float)-.027542114,(float)
00393 .012631023,(float)-.0030188807,(float)-8.4479939e-4,(float)0.,(
00394 float)4.5675843e-4,(float)-.0069836141,(float).0039876546,(float)
00395 -.0036055679,(float)0.,(float).0015298434,(float).0019247256 };
00396 static real u7[8] = { (float)10.234691,(float)-3.5619655,(float).69387764,
00397 (float)-.14047599,(float)-1.995239,(float)-.45679694,(float)0.,(
00398 float).50505298 };
00399 static real u8[13] = { (float)21.487518,(float)-11.825253,(float)
00400 4.3133087,(float)-1.4500543,(float)-3.4343169,(float)-1.1063164,(
00401 float)-.21000819,(float)1.7891643,(float)-.89601916,(float)
00402 .39120793,(float).73410606,(float)0.,(float)-.32454506 };
00403 static real v1[12] = { (float).27827257,(float)-.0014227603,(float)
00404 .0024848327,(float)0.,(float).045091424,(float).0080559636,(float)
00405 -.0038974523,(float)0.,(float)-.0030634124,(float)7.5633702e-4,(
00406 float).0054730726,(float).0019792507 };
00407 static real v2[12] = { (float).41421789,(float)-.030061649,(float)
00408 .0052249697,(float)0.,(float).12693873,(float).022999801,(float)
00409 -.0086792801,(float).031875584,(float)-.0061757928,(float)0.,(
00410 float).019716857,(float).0032596742 };
00411 static real v3[13] = { (float).20191056,(float)-.046831422,(float)
00412 .0096777473,(float)-.0017995317,(float).053921588,(float)
00413 .003506874,(float)-.012621494,(float)-.0054996531,(float)
00414 -.0090029985,(float).0034958743,(float).018513506,(float)
00415 .0068332334,(float)-.0012940502 };
00416 static real v4[12] = { (float)1.3206081,(float).10036618,(float)
00417 -.022015201,(float).0061667091,(float)-.14986093,(float)
00418 -.012720568,(float).024972042,(float)-.0097751962,(float)
00419 .026087455,(float)-.011399062,(float)-.048282515,(float)
00420 -.0098552378 };
00421 static real v5[13] = { (float).016435243,(float).0360514,(float)
00422 .002303652,(float)-6.1666343e-4,(float)-.010775802,(float)
00423 .0051476061,(float).0056856517,(float)-.013438433,(float)0.,(
00424 float)0.,(float)-.0025421507,(float).0020169108,(float)
00425 -.0015144931 };
00426 static real v6[13] = { (float).033432405,(float).0060583916,(float)
00427 -.0023381379,(float)8.3846081e-4,(float)-.013346861,(float)
00428 -.0017402116,(float).0021052496,(float).0015528195,(float)
00429 .002190067,(float)-.0013202847,(float)-.0045124157,(float)
00430 -.0015629454,(float)2.2499176e-4 };
00431 static real v7[11] = { (float)5.4529572,(float)-.90906096,(float)
00432 .086122438,(float)0.,(float)-1.2218009,(float)-.3232412,(float)
00433 -.027373591,(float).12173464,(float)0.,(float)0.,(float)
00434 .040917471 };
00435 static real v8[11] = { (float)9.3841352,(float)-1.6276904,(float)
00436 .16571423,(float)0.,(float)-1.8160479,(float)-.50919193,(float)
00437 -.051384654,(float).21413992,(float)0.,(float)0.,(float)
00438 .066596366 };
00439 static real w1[13] = { (float).29712951,(float).0097572934,(float)0.,(
00440 float)-.0015291686,(float).035707399,(float).0096221631,(float)
00441 -.0018402821,(float)-.0049821585,(float).0018831112,(float)
00442 .0043541673,(float).0020301312,(float)-.0018723311,(float)
00443 -7.3403108e-4 };
00444 static real w2[11] = { (float).40882635,(float).014474912,(float)
00445 .0025023704,(float)-.0037707379,(float).18719727,(float)
00446 .056954987,(float)0.,(float).023020158,(float).0050574313,(float)
00447 .009455014,(float).019300232 };
00448 static real w3[13] = { (float).16861629,(float)0.,(float).0036317285,(
00449 float)-.0043657818,(float).030144338,(float).013891826,(float)
00450 -.0058030495,(float)-.0038717547,(float).0085359607,(float)
00451 .014507659,(float).0082387775,(float)-.010116105,(float)
00452 -.005513567 };
00453 static real w4[13] = { (float)1.3493891,(float)-.0026863185,(float)
00454 -.003521604,(float).024434909,(float)-.083447911,(float)
00455 -.04806136,(float).0076473951,(float).02449443,(float)-.0162092,(
00456 float)-.037768479,(float)-.047890063,(float).017778596,(float)
00457 .013179324 };
00458 static real w5[13] = { (float).10264945,(float).032738857,(float)0.,(
00459 float).0043608779,(float)-.043097757,(float)-.0022647176,(float)
00460 .009453129,(float)-.012442571,(float)-.0032283517,(float)
00461 -.0075640352,(float)-.0088293329,(float).0052537299,(float)
00462 .0013340546 };
00463 static real w6[13] = { (float).029568177,(float)-.001630006,(float)
00464 -2.1119745e-4,(float).0023599053,(float)-.0048515387,(float)
00465 -.0040797531,(float)4.0403265e-4,(float).0018200105,(float)
00466 -.0014346306,(float)-.0039165276,(float)-.0037432073,(float)
00467 .001995038,(float).0012222675 };
00468 static real w8[8] = { (float)6.6184645,(float)-.73866379,(float)
00469 .044693973,(float)0.,(float)-1.4540925,(float)-.39529833,(float)
00470 -.044293243,(float).088741049 };
00471
00472
00473 integer i__1;
00474 real ret_val, r__1;
00475
00476
00477 double sqrt(doublereal), log(doublereal), exp(doublereal);
00478
00479
00480 static real alfa[4], rlam, h[9];
00481 static integer j, k, n;
00482 static real s, t, x, y, dsigm[5];
00483 static integer itype;
00484 static real p2, p3, q2, q3, x2, x3, y2, ac[13], y3, s0, hc[9], fl, fn;
00485 extern doublereal glande_(real *);
00486 static real fu, pq, wk;
00487 extern doublereal glands_(real *);
00488 static real xx, xy, yy, drk[5];
00489 static integer npt;
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537 ret_val = (float)0.;
00538 if (*rkappa < (float).01 || *rkappa > (float)12.) {
00539 return ret_val;
00540 }
00541 if (*rkappa >= (float).29) {
00542 itype = 1;
00543 npt = 100;
00544 wk = 1 / sqrt(*rkappa);
00545 ac[0] = (*beta2 * (float)-.032227 - (float).074275) * *rkappa + (*
00546 beta2 * (float).24533 + (float).070152) * wk + (*beta2 * (
00547 float)-.5561 - (float)3.1579);
00548 ac[8] = (*beta2 * (float)-.013483 - (float).048801) * *rkappa + (*
00549 beta2 * (float)-1.6921 + (float)8.3656) * wk + (*beta2 * (
00550 float)-.73275 - (float)3.5226);
00551
00552 r__1 = wk;
00553 drk[0] = r__1 * r__1;
00554 dsigm[0] = sqrt(*rkappa / (1 - *beta2 * (float).5));
00555 for (j = 1; j <= 4; ++j) {
00556 drk[j] = drk[0] * drk[j - 1];
00557 dsigm[j] = dsigm[0] * dsigm[j - 1];
00558
00559 alfa[j - 1] = (fninv[j - 1] - *beta2 * fninv[j]) * drk[j - 1];
00560 }
00561 hc[0] = log(*rkappa) + *beta2 + (float).42278434;
00562 hc[1] = dsigm[0];
00563 hc[2] = alfa[1] * dsigm[2];
00564
00565 r__1 = alfa[0];
00566 hc[3] = (r__1 * r__1 * 3 + alfa[2]) * dsigm[3] - 3;
00567 hc[4] = (alfa[0] * 10 * alfa[1] + alfa[3]) * dsigm[4] - hc[2] * 10;
00568
00569 r__1 = hc[2];
00570 hc[5] = r__1 * r__1;
00571 hc[6] = hc[2] * hc[3];
00572 hc[7] = hc[2] * hc[5];
00573 for (j = 2; j <= 7; ++j) {
00574
00575 hc[j] = edgec[j - 2] * hc[j];
00576 }
00577 hc[8] = hc[1] * (float).39894228;
00578 } else if (*rkappa >= (float).22) {
00579 itype = 2;
00580 npt = 150;
00581 x = (*rkappa - (float).3) * (float)25.000000000000004 + 1;
00582 y = (sqrt(*beta2) - (float)1.) * (float)2.1052631578947367 + 1;
00583 xx = x * 2;
00584 yy = y * 2;
00585 x2 = xx * x - 1;
00586 x3 = xx * x2 - x;
00587 y2 = yy * y - 1;
00588 y3 = yy * y2 - y;
00589 xy = x * y;
00590 p2 = x2 * y;
00591 p3 = x3 * y;
00592 q2 = y2 * x;
00593 q3 = y3 * x;
00594 pq = x2 * y2;
00595 ac[1] = w1[0] + w1[1] * x + w1[3] * x3 + w1[4] * y + w1[5] * y2 + w1[
00596 6] * y3 + w1[7] * xy + w1[8] * p2 + w1[9] * p3 + w1[10] * q2
00597 + w1[11] * q3 + w1[12] * pq;
00598 ac[2] = w2[0] + w2[1] * x + w2[2] * x2 + w2[3] * x3 + w2[4] * y + w2[
00599 5] * y2 + w2[7] * xy + w2[8] * p2 + w2[9] * p3 + w2[10] * q2;
00600 ac[3] = w3[0] + w3[2] * x2 + w3[3] * x3 + w3[4] * y + w3[5] * y2 + w3[
00601 6] * y3 + w3[7] * xy + w3[8] * p2 + w3[9] * p3 + w3[10] * q2
00602 + w3[11] * q3 + w3[12] * pq;
00603 ac[4] = w4[0] + w4[1] * x + w4[2] * x2 + w4[3] * x3 + w4[4] * y + w4[
00604 5] * y2 + w4[6] * y3 + w4[7] * xy + w4[8] * p2 + w4[9] * p3 +
00605 w4[10] * q2 + w4[11] * q3 + w4[12] * pq;
00606 ac[5] = w5[0] + w5[1] * x + w5[3] * x3 + w5[4] * y + w5[5] * y2 + w5[
00607 6] * y3 + w5[7] * xy + w5[8] * p2 + w5[9] * p3 + w5[10] * q2
00608 + w5[11] * q3 + w5[12] * pq;
00609 ac[6] = w6[0] + w6[1] * x + w6[2] * x2 + w6[3] * x3 + w6[4] * y + w6[
00610 5] * y2 + w6[6] * y3 + w6[7] * xy + w6[8] * p2 + w6[9] * p3 +
00611 w6[10] * q2 + w6[11] * q3 + w6[12] * pq;
00612 ac[8] = w8[0] + w8[1] * x + w8[2] * x2 + w8[4] * y + w8[5] * y2 + w8[
00613 6] * y3 + w8[7] * xy;
00614 ac[0] = (float)-3.05;
00615 } else if (*rkappa >= (float).12) {
00616 itype = 3;
00617 npt = 200;
00618 x = (*rkappa - (float).2) * (float)24.999999999999996 + 1;
00619 y = (sqrt(*beta2) - (float)1.) * (float)2.1052631578947367 + 1;
00620 xx = x * 2;
00621 yy = y * 2;
00622 x2 = xx * x - 1;
00623 x3 = xx * x2 - x;
00624 y2 = yy * y - 1;
00625 y3 = yy * y2 - y;
00626 xy = x * y;
00627 p2 = x2 * y;
00628 p3 = x3 * y;
00629 q2 = y2 * x;
00630 q3 = y3 * x;
00631 pq = x2 * y2;
00632 ac[1] = v1[0] + v1[1] * x + v1[2] * x2 + v1[4] * y + v1[5] * y2 + v1[
00633 6] * y3 + v1[8] * p2 + v1[9] * p3 + v1[10] * q2 + v1[11] * q3;
00634 ac[2] = v2[0] + v2[1] * x + v2[2] * x2 + v2[4] * y + v2[5] * y2 + v2[
00635 6] * y3 + v2[7] * xy + v2[8] * p2 + v2[10] * q2 + v2[11] * q3;
00636 ac[3] = v3[0] + v3[1] * x + v3[2] * x2 + v3[3] * x3 + v3[4] * y + v3[
00637 5] * y2 + v3[6] * y3 + v3[7] * xy + v3[8] * p2 + v3[9] * p3 +
00638 v3[10] * q2 + v3[11] * q3 + v3[12] * pq;
00639 ac[4] = v4[0] + v4[1] * x + v4[2] * x2 + v4[3] * x3 + v4[4] * y + v4[
00640 5] * y2 + v4[6] * y3 + v4[7] * xy + v4[8] * p2 + v4[9] * p3 +
00641 v4[10] * q2 + v4[11] * q3;
00642 ac[5] = v5[0] + v5[1] * x + v5[2] * x2 + v5[3] * x3 + v5[4] * y + v5[
00643 5] * y2 + v5[6] * y3 + v5[7] * xy + v5[10] * q2 + v5[11] * q3
00644 + v5[12] * pq;
00645 ac[6] = v6[0] + v6[1] * x + v6[2] * x2 + v6[3] * x3 + v6[4] * y + v6[
00646 5] * y2 + v6[6] * y3 + v6[7] * xy + v6[8] * p2 + v6[9] * p3 +
00647 v6[10] * q2 + v6[11] * q3 + v6[12] * pq;
00648 ac[7] = v7[0] + v7[1] * x + v7[2] * x2 + v7[4] * y + v7[5] * y2 + v7[
00649 6] * y3 + v7[7] * xy + v7[10] * q2;
00650 ac[8] = v8[0] + v8[1] * x + v8[2] * x2 + v8[4] * y + v8[5] * y2 + v8[
00651 6] * y3 + v8[7] * xy + v8[10] * q2;
00652 ac[0] = (float)-3.04;
00653 } else {
00654 itype = 4;
00655 if (*rkappa >= (float).02) {
00656 itype = 3;
00657 }
00658 npt = 200;
00659 x = (*rkappa - (float).1) * (float)25. + 1;
00660 y = (sqrt(*beta2) - (float)1.) * (float)2.1052631578947367 + 1;
00661 xx = x * 2;
00662 yy = y * 2;
00663 x2 = xx * x - 1;
00664 x3 = xx * x2 - x;
00665 y2 = yy * y - 1;
00666 y3 = yy * y2 - y;
00667 xy = x * y;
00668 p2 = x2 * y;
00669 p3 = x3 * y;
00670 q2 = y2 * x;
00671 q3 = y3 * x;
00672 pq = x2 * y2;
00673 if (itype == 4) {
00674 goto L4;
00675 }
00676 ac[1] = u1[0] + u1[1] * x + u1[2] * x2 + u1[4] * y + u1[5] * y2 + u1[
00677 6] * y3 + u1[7] * xy + u1[9] * p3 + u1[11] * q3 + u1[12] * pq;
00678 ac[2] = u2[0] + u2[1] * x + u2[2] * x2 + u2[4] * y + u2[5] * y2 + u2[
00679 6] * y3 + u2[7] * xy + u2[8] * p2 + u2[9] * p3 + u2[11] * q3
00680 + u2[12] * pq;
00681 ac[3] = u3[0] + u3[1] * x + u3[2] * x2 + u3[4] * y + u3[5] * y2 + u3[
00682 6] * y3 + u3[7] * xy + u3[8] * p2 + u3[9] * p3 + u3[10] * q2
00683 + u3[11] * q3 + u3[12] * pq;
00684 ac[4] = u4[0] + u4[1] * x + u4[2] * x2 + u4[3] * x3 + u4[4] * y + u4[
00685 5] * y2 + u4[6] * y3 + u4[7] * xy + u4[8] * p2 + u4[9] * p3 +
00686 u4[10] * q2 + u4[11] * q3;
00687 ac[5] = u5[0] + u5[1] * x + u5[2] * x2 + u5[3] * x3 + u5[4] * y + u5[
00688 5] * y2 + u5[6] * y3 + u5[7] * xy + u5[9] * p3 + u5[10] * q2
00689 + u5[11] * q3 + u5[12] * pq;
00690 ac[6] = u6[0] + u6[1] * x + u6[2] * x2 + u6[3] * x3 + u6[4] * y + u6[
00691 6] * y3 + u6[7] * xy + u6[8] * p2 + u6[9] * p3 + u6[11] * q3
00692 + u6[12] * pq;
00693 L4:
00694 ac[7] = u7[0] + u7[1] * x + u7[2] * x2 + u7[3] * x3 + u7[4] * y + u7[
00695 5] * y2 + u7[7] * xy;
00696 ac[8] = u8[0] + u8[1] * x + u8[2] * x2 + u8[3] * x3 + u8[4] * y + u8[
00697 5] * y2 + u8[6] * y3 + u8[7] * xy + u8[8] * p2 + u8[9] * p3 +
00698 u8[10] * q2 + u8[12] * pq;
00699 ac[0] = (float)-3.03;
00700 }
00701 ac[9] = (ac[8] - ac[0]) / npt;
00702 if (itype == 3) {
00703 x = (ac[7] - ac[8]) / (ac[7] * ac[8]);
00704 y = 1 / log(ac[8] / ac[7]);
00705
00706 r__1 = ac[7];
00707 p2 = r__1 * r__1;
00708 ac[11] = p2 * (ac[1] * exp(-(doublereal)ac[2] * (ac[7] + ac[5] * p2)
00709 - ac[3] * exp(-(doublereal)ac[4] * (ac[7] + ac[6] * p2))) - y
00710 * (float).045 / ac[7]) / (x * y * ac[7] + 1);
00711 ac[12] = (x * ac[11] + (float).045) * y;
00712 }
00713 if (itype == 4) {
00714 ac[10] = (float).995 / glands_(&ac[8]);
00715 }
00716 t = *ran * 2 / ac[9];
00717 rlam = ac[0];
00718 fl = (float)0.;
00719 s = (float)0.;
00720 i__1 = npt;
00721 for (n = 1; n <= i__1; ++n) {
00722 rlam += ac[9];
00723 if (itype == 1) {
00724 fn = (float)1.;
00725 x = (rlam + hc[0]) * hc[1];
00726 h[0] = x;
00727
00728 r__1 = x;
00729 h[1] = r__1 * r__1 - 1;
00730 for (k = 2; k <= 8; ++k) {
00731 fn += 1;
00732
00733 h[k] = x * h[k - 1] - fn * h[k - 2];
00734 }
00735 y = hc[7] * h[8] + 1;
00736 for (k = 2; k <= 6; ++k) {
00737
00738 y += hc[k] * h[k];
00739 }
00740
00741 r__1 = x;
00742 fu = hc[8] * exp(r__1 * r__1 * (float)-.5) * dmax(y,(float)0.);
00743 } else if (itype == 2) {
00744
00745 r__1 = rlam;
00746 x = r__1 * r__1;
00747 fu = ac[1] * exp(-(doublereal)ac[2] * (rlam + ac[5] * x) - ac[3] *
00748 exp(-(doublereal)ac[4] * (rlam + ac[6] * x)));
00749 } else if (itype == 3) {
00750 if (rlam < ac[7]) {
00751
00752 r__1 = rlam;
00753 x = r__1 * r__1;
00754 fu = ac[1] * exp(-(doublereal)ac[2] * (rlam + ac[5] * x) - ac[
00755 3] * exp(-(doublereal)ac[4] * (rlam + ac[6] * x)));
00756 } else {
00757 x = 1 / rlam;
00758 fu = (ac[11] * x + ac[12]) * x;
00759 }
00760 } else {
00761 fu = ac[10] * glande_(&rlam);
00762 }
00763 s = s + fl + fu;
00764 if (s > t) {
00765 goto L22;
00766 }
00767
00768 fl = fu;
00769 }
00770 L22:
00771 s0 = s - fl - fu;
00772 ret_val = rlam - ac[9];
00773 if (s > s0) {
00774 ret_val += ac[9] * (t - s0) / (s - s0);
00775 }
00776 return ret_val;
00777 }
00778
00779 #ifdef __cplusplus
00780 }
00781 #endif