Changeset 1055 for trunk/source/processes/hadronic/models/chiral_inv_phase_space/body/src/G4QBesIKJY.cc
- Timestamp:
- May 28, 2009, 4:26:57 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/chiral_inv_phase_space/body/src/G4QBesIKJY.cc
r1007 r1055 25 25 // 26 26 // 27 // $Id: G4QBesIKJY.cc,v 1. 2 2006/06/29 20:06:45 gunterExp $28 // GEANT4 tag $Name: geant4-09-0 2$27 // $Id: G4QBesIKJY.cc,v 1.3 2009/02/23 09:49:24 mkossov Exp $ 28 // GEANT4 tag $Name: geant4-09-03-beta-cand-01 $ 29 29 // 30 30 // ---------------- G4QBesIKJY ---------------- … … 32 32 // class for Bessel I0/I1 and K0/K1 functions in CHIPS Model 33 33 // ------------------------------------------------------------------- 34 34 // Short description: Bessel functions class (can be substituted) 35 // ------------------------------------------------------------------- 35 36 //#define debug 36 37 //#define pdebug … … 43 44 ex=false; 44 45 switch (type) 45 46 46 { 47 case BessI0: 47 48 nu=0; 48 49 ik=true; 49 50 ij=true; 50 51 51 break; 52 case BessI1: 52 53 nu=1; 53 54 ik=true; 54 55 ij=true; 55 56 56 break; 57 case EBessI0: 57 58 nu=0; 58 59 ex=true; 59 60 ik=true; 60 61 ij=true; 61 62 62 break; 63 case EBessI1: 63 64 nu=1; 64 65 ex=true; 65 66 ik=true; 66 67 ij=true; 67 68 68 break; 69 case BessJ0: 69 70 nu=0; 70 71 ik=true; 71 72 ij=false; 72 73 73 break; 74 case BessJ1: 74 75 nu=1; 75 76 ik=true; 76 77 ij=false; 77 78 78 break; 79 case BessK0: 79 80 nu=0; 80 81 ik=false; 81 82 ij=true; 82 83 83 break; 84 case BessK1: 84 85 nu=1; 85 86 ik=false; 86 87 ij=true; 87 88 88 break; 89 case EBessK0: 89 90 nu=0; 90 91 ex=true; 91 92 ik=false; 92 93 ij=true; 93 94 94 break; 95 case EBessK1: 95 96 nu=1; 96 97 ex=true; 97 98 ik=false; 98 99 ij=true; 99 100 100 break; 101 case BessY0: 101 102 nu=0; 102 103 ik=false; 103 104 ij=false; 104 105 105 break; 106 case BessY1: 106 107 nu=1; 107 108 ik=false; 108 109 ij=false; 109 110 break; 110 111 } 111 112 } … … 126 127 static const G4double EPS = 1.E-15; 127 128 static const G4double Z1 = 1.; 128 129 130 129 static const G4double HF = Z1/2; 130 static const G4double R8 = HF/4; 131 static const G4double R32 = R8/4; 131 132 static const G4double PI = 3.14159265358979324; 132 133 static const G4double CE = 0.57721566490153286; … … 139 140 static const G4double CI0[npi]={+1.00829205458740032E0, 140 141 +.00845122624920943E0,+.00012700630777567E0,+.00007247591099959E0, 141 142 143 144 145 146 147 142 +.00000513587726878E0,+.00000056816965808E0,+.00000008513091223E0, 143 +.00000001238425364E0,+.00000000029801672E0,-.00000000078956698E0, 144 -.00000000033127128E0,-.00000000004497339E0,+.00000000001799790E0, 145 +.00000000000965748E0,+.00000000000038604E0,-.00000000000104039E0, 146 -.00000000000023950E0,+.00000000000009554E0,+.00000000000004443E0, 147 -.00000000000000859E0,-.00000000000000709E0,+.00000000000000087E0, 148 +.00000000000000112E0,-.00000000000000012E0,-.00000000000000018E0}; 148 149 149 150 static const G4double CI1[npi]={+.975800602326285926E0, … … 215 216 216 217 static const G4double EE[npk]={-.040172946544414076E0,-.444447147630558063E0, 217 218 219 220 221 218 -.022719244428417736E0,+.206644541017490520E0,-.086671697056948524E0, 219 +.017636703003163134E0,-.002235619294485095E0,+.000197062302701541E0, 220 -.000012885853299241E0,+.000000652847952359E0,-.000000026450737175E0, 221 +.000000000878030117E0,-.000000000024343279E0,+.000000000000572612E0, 222 -.000000000000011578E0,+.000000000000000203E0,-.000000000000000003E0}; 222 223 223 224 static const G4complex CF[npj]={ … … 244 245 // ------------------------------------------------------------------------------------- 245 246 G4double H=0.; // Prototype of the result 246 247 if (ij) // I/K Bessel functions 247 248 { 248 249 if (ik) // I0/I1/EI0/EI1 Bessel functions (symmetric) … … 263 264 G4double A1=1.+DY/(XLI*V3); 264 265 G4double A2=1.+Y*(4.+(DY+Y)/(XLD*XL))/(W1*V3); 265 266 G4doubleB1=1.-Y/XLI;266 G4double B0=1.; 267 G4double B1=1.-Y/XLI; 267 268 G4double B2=1.-Y*(1.-Y/(XLD+XLD))/W1; 268 269 G4int V1=3-XL; 269 270 G4double V2=V3+V3; 270 271 G4double C=0.; 271 272 for (G4int N=3; N<=30; N++) 272 273 { 273 274 G4double C0=C; … … 279 280 G4int W5=W4-1; 280 281 G4int W6=W5-1; 281 282 V1=V1+1; 282 283 V2=V2+1; 283 284 V3=V3+1; 284 285 G4double U1=FN*W4; 285 286 G4double E=V3/(U1*W3); 286 287 G4double U2=E*Y; 287 288 G4double F1=1.+Y*V1/(U1*W1); 288 289 G4double F2=(1.+Y*V2/(V3*W2*W5))*U2; … … 290 291 G4double A=F1*A2+F2*A1+F3*A0; 291 292 G4double B=F1*B2+F2*B1+F3*B0; 292 293 294 293 C=A/B; 294 if (std::abs(C0-C) < EPS*std::abs(C)) break; 295 A0=A1; A1=A2; A2=A; B0=B1; B1=B2; B2=B; 295 296 } 296 297 H=C; … … 301 302 { 302 303 G4double P=16./V-1.; 303 304 304 G4double ALFA=P+P; 305 G4double B1=0.; 305 306 G4double B2=0.; 306 307 for (G4int I=npil; I>=0; I--) 307 308 { 308 309 if (!nu) CJ=CI0[I]; 309 310 else CJ=CI1[I]; 310 311 312 313 } 314 315 316 317 311 G4double B0=CJ+ALFA*B1-B2; 312 B2=B1; 313 B1=B0; 314 } 315 H=std::sqrt(RPI2/V)*(B1-P*B2); 316 if (nu && X < 0.) H=-H; 317 if (!ex) H*=std::exp(V); 318 } 318 319 } 319 320 else // K0/K1/EK0/EK1 Bessel functions 320 321 { 321 322 #ifdef debug 322 323 G4cout<<"G4BesIKJY: >>>>>>>>>>>>>> K is called, X="<<X<<",n="<<nu<<",E="<<ex<<G4endl; … … 339 340 G4double Q=HF; 340 341 G4double C=1.; 341 342 G4double D=B*B; 342 343 G4double BK1=P; 343 344 for (G4int N=1; N<=nat1; N++) // @@ "nat" can be increased … … 349 350 C*=D/FN; 350 351 G4double G=C*(P-FN*F); 351 352 G4double R=C*F; 352 353 BK=BK+R; 353 354 BK1=BK1+G; 354 355 if (BK1*R+std::abs(G)*BK < EPS*BK*BK1) break; 355 356 } 356 357 if (nu==1) H=BK1/B; … … 358 359 if (ex) H*=std::exp(X); 359 360 } 360 361 else if (X < 5.) 361 362 { 362 363 #ifdef debug … … 368 369 G4double XN=DNUS+DNUS; 369 370 G4double A=9.-XN; 370 371 G4double B=25.-XN; 371 372 G4double C=768*X*X; 372 373 373 G4double HX=16*X; 374 G4double C0=HX+HX+HX;; 374 375 G4double A0=1.; 375 376 G4double A1=(HX+7.+XN)/A; … … 378 379 G4double B1=(HX+9.-XN)/A; 379 380 G4double B2=(C+C0*B)/(A*B)+1.; 380 381 381 C=0.; 382 for (G4int N=3; N<=nat2; N++) 382 383 { 383 384 C0=C; … … 389 390 G4double FN3=FN1/(FN2-3.); 390 391 G4double FN4=12*FN*FN-(1.-XN); 391 392 G4double FN5=16*FN1*X; 392 393 G4double RAN=1./(FNP*FNP-XN); 393 394 G4double F1=FN3*(FN4-20*FN)+FN5; 394 395 G4double F2=28*FN-FN4-8.+FN5; 395 396 G4double F3=FN3*(FNM*FNM-XN); 396 397 A=(F1*A2+F2*A1+F3*A0)*RAN; 397 398 B=(F1*B2+F2*B1+F3*B0)*RAN; 398 399 C=A/B; 399 400 A0=A1; A1=A2; A2=A; B0=B1; B1=B2;B2=B;401 } 402 400 if (std::abs(C0-C) < EPS*std::abs(C)) break; 401 A0=A1; A1=A2; A2=A; B0=B1; B1=B2; B2=B; 402 } 403 H=C/std::sqrt(RPIH*X); 403 404 if (!ex) H*=std::exp(-X); 404 405 } 405 406 else 406 407 { … … 410 411 G4double P=10./X-1.; 411 412 G4double ALFA=P+P; 412 413 413 G4double B1=0.; 414 G4double B2=0.; 414 415 #ifdef debug 415 416 G4cout<<"G4BesIKJY: >>> [ X >= 5 ] is called, X="<<X<<",n="<<nu<<",E="<<ex<<G4endl; 416 417 #endif 417 418 for (G4int I=npkl; I>=0; I--) 418 419 { 419 420 if (!nu) CK=CK0[I]; … … 422 423 B2=B1; 423 424 B1=B0; 424 425 } 425 426 H=std::sqrt(PIH/X)*(B1-P*B2); 426 427 if (!ex) H*=std::exp(-X); 427 428 } 428 429 } 429 430 } 430 431 else 431 432 { 432 433 if (!ik && X < 0.) 433 434 { … … 455 456 B1=0.; 456 457 B2=0.; 457 458 for (G4int JT=npkl; JT>=0; JT--) 458 459 { 459 460 G4double B0=CB[JT]+ALFA*B1-B2; … … 463 464 H=RPIH*(CE+std::log(HF*X))*H+B1-P*B2; 464 465 } 465 466 } 466 467 else 467 468 469 470 471 472 468 { 469 G4double P=10./V-1.; 470 G4double ALFA=P+P; 471 G4complex CB1(0.,0.); 472 G4complex CB2(0.,0.); 473 for (G4int IT=npjl; IT>=0; IT--) 473 474 { 474 475 G4complex CB0=CC[IT]+ALFA*CB1-CB2; 475 476 CB2=CB1; 476 477 CB1=CB0; 477 478 } 478 479 CB1=std::sqrt(RPIH/V)*std::exp(CI*(V-PI4))*(CB1-P*CB2); 479 480 if (ik) H=real(CB1); 480 481 else H=real(-CI*CB1); 481 482 } 482 483 } 483 484 else // J1/Y1 Bessel functions … … 494 495 { 495 496 G4double B0=CD[IT]+ALFA*B1-B2; 496 497 B2=B1; 497 498 B1=B0; 498 499 } … … 510 511 H=RPIH*((CE+std::log(HF*X))*H-1./X)+Y*(B1-B2); 511 512 } 512 513 } 513 514 else 514 515 { 515 516 G4double P=10./V-1.; 516 517 G4double ALFA=P+P; … … 520 521 { 521 522 G4complex CB0=CF[IT]+ALFA*CB1-CB2; 522 523 CB2=CB1; 523 524 CB1=CB0; 524 525 } … … 526 527 if (ik) H=real(CB1); 527 528 else H=real(-CI*CB1); 528 529 } 529 530 if (X < 0.) H=-H; 530 531 }
Note: See TracChangeset
for help on using the changeset viewer.