Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // ABLAXX statistical de-excitation model 27 // Jose Luis Rodriguez, UDC (translation from 28 // Pekka Kaitaniemi, HIP (initial translation 29 // Aleksandra Kelic, GSI (ABLA07 code) 30 // Davide Mancusi, CEA (contact person INCL) 31 // Aatos Heikkinen, HIP (project coordination) 32 // 33 34 #include "globals.hh" 35 #include <cmath> 36 #include <memory> 37 #include <time.h> 38 39 #include "G4Abla.hh" 40 #include "G4AblaDataDefs.hh" 41 #include "G4AblaDataFile.hh" 42 #include "G4AblaRandom.hh" 43 44 G4Abla::G4Abla(G4VarNtp* aVarntp) 45 { 46 verboseLevel = 0; 47 ilast = 0; 48 varntp = static_cast<G4VarNtp*>(aVarntp); 49 50 verboseLevel = 0; 51 gammaemission = 0; // 0 presaddle, 1 posts 52 T_freeze_out_in = T_freeze_out = 0.; 53 Ainit = 0; 54 Zinit = 0; 55 Sinit = 0; 56 IEV_TAB_SSC = 0; 57 58 ald = std::make_unique<G4Ald>(); 59 ec2sub = std::make_unique<G4Ec2sub>(); 60 ecld = std::make_unique<G4Ecld>(); 61 masses = std::make_unique<G4Mexp>(); 62 fb = std::make_unique<G4Fb>(); 63 fiss = std::make_unique<G4Fiss>(); 64 opt = std::make_unique<G4Opt>(); 65 } 66 67 void G4Abla::setVerboseLevel(G4int level) { ve 68 69 // Main interface to the evaporation without l 70 void G4Abla::DeexcitationAblaxx(G4int nucleusA 71 G4int nucleusZ 72 G4double excit 73 G4double angul 74 G4double momX, 75 G4double momY, 76 G4double momZ, 77 G4int eventnum 78 { 79 DeexcitationAblaxx(nucleusA, nucleusZ, exc 80 } 81 82 // Main interface to the evaporation with lamb 83 void G4Abla::DeexcitationAblaxx(G4int nucleusA 84 G4int nucleusZ 85 G4double excit 86 G4double angul 87 G4double momX, 88 G4double momY, 89 G4double momZ, 90 G4int eventnum 91 G4int nucleusS 92 { 93 94 const G4double amu = 931.4940; // MeV/C^2 95 const G4double C = 29.9792458; // cm/ns 96 97 SetParametersG4(nucleusZ, nucleusA); 98 99 mult10: 100 G4int IS = 0; 101 102 varntp->clear(); // Clean up an initialize 103 104 if (nucleusS > 0) 105 nucleusS = 0; // S=1 from INCL ???? 106 107 G4int NbLam0 = std::abs(nucleusS); 108 109 Ainit = -1 * nucleusA; 110 Zinit = -1 * nucleusZ; 111 Sinit = -1 * nucleusS; 112 113 G4double aff = 0.0; 114 G4double zff = 0.0; 115 G4int ZFP1 = 0, AFP1 = 0, AFPIMF = 0, ZFPI 116 G4double vx_eva = 0.0, vy_eva = 0.0, vz_ev 117 G4double VX_PREF = 0., VY_PREF = 0., VZ_PR 118 VFP2_CM[3], VIMF_CM[3], VX2OUT, V 119 G4double zf = 0.0, af = 0.0, mtota = 0.0, 120 G4int ff = 0, afpnew = 0, zfpnew = 0, aprf 121 IEV_TAB_TEMP = 0; 122 G4int fimf = 0, INMIN = 0, INMAX = 0; 123 G4int ftype = 0; //,ftype1=0; 124 G4int inum = eventnumber; 125 G4int inttype = 0; 126 opt->optimfallowed = 1; 127 128 if (fiss->zt > 56) 129 { 130 fiss->ifis = 1; 131 } 132 else 133 { 134 fiss->ifis = 0; 135 } 136 137 if (NbLam0 > 0) 138 { 139 opt->nblan0 = NbLam0; 140 } 141 142 G4double aprf = (G4double)nucleusA; 143 G4double zprf = (G4double)nucleusZ; 144 G4double ee = excitationEnergy; 145 G4double jprf = angularMomentum; // actual 146 147 G4double pxrem = momX; 148 G4double pyrem = momY; 149 G4double pzrem = momZ; 150 G4double zimf, aimf; 151 152 gammaemission = 0; 153 G4double T_init = 0., T_diff = 0., a_tilda 154 Z_FINAL = 0., E_FINAL = 0.; 155 156 G4double A_diff = 0., ASLOPE1, ASLOPE2, A_ 157 PX_BU_SUM = 0.0, PY_BU_SUM = 0.0, 158 Z_Breakup_sum = 0., A_Breakup, Z_ 159 ATEMP = 0.; 160 161 G4double ETOT_PRF = 0.0, PXPRFP = 0., PYPR 162 VBU2 = 0., GAMMA_REL = 1.0, Eexc_ 163 E_tot_BU = 0., EKIN_BU = 0., ZIMF 164 EEBU = 0., TKEIMFBU = 0., vx_evab 165 ETOT_BU = 1., PX_BU = 0., PY_BU = 166 167 G4int ABU_DIFF, ZBU_DIFF, NBU_DIFF; 168 G4int INEWLOOP = 0, ILOOPBU = 0; 169 170 G4double BU_TAB_TEMP[indexpart][6], BU_TAB 171 G4double EV_TAB_TEMP[indexpart][6], EV_TEM 172 G4int IMEM_BU[indexpart], IMEM = 0; 173 174 if (nucleusA < 1) 175 { 176 std::cout << "Error - Remnant with a m 177 // INCL_ERROR("Remnant with a mass num 178 return; 179 } 180 181 for (G4int j = 0; j < 3; j++) 182 { 183 V_CM[j] = 0.; 184 VFP1_CM[j] = 0.; 185 VFP2_CM[j] = 0.; 186 VIMF_CM[j] = 0.; 187 } 188 189 for (G4int I1 = 0; I1 < indexpart; I1++) 190 { 191 for (G4int I2 = 0; I2 < 12; I2++) 192 BU_TAB[I1][I2] = 0.0; 193 for (G4int I2 = 0; I2 < 6; I2++) 194 { 195 BU_TAB_TEMP[I1][I2] = 0.0; 196 BU_TAB_TEMP1[I1][I2] = 0.0; 197 EV_TAB_TEMP[I1][I2] = 0.0; 198 EV_TAB[I1][I2] = 0.0; 199 EV_TAB_SSC[I1][I2] = 0.0; 200 EV_TEMP[I1][I2] = 0.0; 201 } 202 } 203 204 G4int idebug = 0; 205 if (idebug == 1) 206 { 207 zprf = 81.; 208 aprf = 201.; 209 // ee = 86.5877686; 210 ee = 100.0; 211 jprf = 10.; 212 zf = 0.; 213 af = 0.; 214 mtota = 0.; 215 ff = 1; 216 inttype = 0; 217 // inum = 2; 218 } 219 // 220 G4double AAINCL = aprf; 221 G4double ZAINCL = zprf; 222 EINCL = ee; 223 // 224 // Velocity after the first stage of react 225 // For coupling with INCL, comment the lin 226 // of INCL as pxincl, pyincl,pzincl 227 // 228 G4double pincl = std::sqrt(pxrem * pxrem + 229 // PPRFP is in MeV/c 230 G4double ETOT_incl = std::sqrt(pincl * pin 231 G4double VX_incl = C * pxrem / ETOT_incl; 232 G4double VY_incl = C * pyrem / ETOT_incl; 233 G4double VZ_incl = C * pzrem / ETOT_incl; 234 // 235 // Multiplicity in the break-up event 236 G4int IMULTBU = 0; 237 G4int IMULTIFR = 0; 238 G4int I_Breakup = 0; 239 G4int NbLamprf = 0; 240 IEV_TAB = 0; 241 242 /* 243 C Set maximum temperature for sequenti 244 C Remove additional energy by simultan 245 C (vaporisation o 246 247 C Idea: If the temperature of the proj 248 c the limiting temperature T_fre 249 C energy which is present in the 250 C a stage of simultaneous break 251 C simultaneous emission of a gas 252 C emission of several intermedia 253 C piece of the projectile specta 254 C one) is kept track. 255 256 C MVR, KHS, October 2001 257 C KHS, AK 2007 - Masses from the po 258 on C energy per nucl 259 dependent on C energy 260 261 c Clear BU_TAB (array of multifragme 262 */ 263 if (T_freeze_out_in >= 0.0) 264 { 265 T_freeze_out = T_freeze_out_in; 266 } 267 else 268 { 269 T_freeze_out = max(9.33 * std::exp(-0. 270 // ! See: J. Natowitz et al, P 271 // T_freeze_out=DMAX1(9.0D0*DEX 272 // & 5.5D0) 273 } 274 // 275 a_tilda = ald->av * aprf + ald->as * std:: 276 277 T_init = std::sqrt(EINCL / a_tilda); 278 279 T_diff = T_init - T_freeze_out; 280 281 if (T_diff > 0.1 && zprf > 2. && (aprf - z 282 { 283 // T_Diff is set to be larger than 0.1 284 // for which T_Diff is of the order of 285 varntp->kfis = 10; 286 287 for (G4int i = 0; i < 5; i++) 288 { 289 EE_diff = EINCL - a_tilda * T_free 290 // Energy removed 10*5/ 291 // simultaneous breakup 292 // (1AGeV) + Pb data, K 293 // This should maybe be re-checked 294 // break-up description have chang 295 296 A_diff = dint(EE_diff / (8.0 * 5.0 297 298 if (A_diff > AAINCL) 299 A_diff = AAINCL; 300 301 A_FINAL = AAINCL - A_diff; 302 303 a_tilda = 304 ald->av * A_FINAL + ald->as * 305 E_FINAL = a_tilda * T_freeze_out * 306 307 if (A_FINAL < 4.0) 308 { // To avoid numerical problems 309 EE_diff = EINCL - E_FINAL; 310 A_FINAL = 1.0; 311 Z_FINAL = 1.0; 312 E_FINAL = 0.0; 313 goto mul4325; 314 } 315 } 316 mul4325: 317 // The idea is similar to Z determinat 318 // partner is not fixed by the A/Z of 319 // from Gaussian Z_FINAL_MEAN = dint(z 320 321 Z_FINAL = dint(zprf * A_FINAL / (aprf) 322 323 if (E_FINAL < 0.0) 324 E_FINAL = 0.0; 325 326 aprf = A_FINAL; 327 zprf = Z_FINAL; 328 ee = E_FINAL; 329 330 A_diff = AAINCL - aprf; 331 332 // Creation of multifragmentation prod 333 if (A_diff <= 1.0) 334 { 335 aprf = AAINCL; 336 zprf = ZAINCL; 337 ee = EINCL; 338 IMULTIFR = 0; 339 goto mult7777; 340 } 341 else if (A_diff > 1.0) 342 { 343 344 A_ACC = 0.0; 345 // Energy-dependence of the slope 346 // to exp. data (see e.g. Sfienti 347 ASLOPE1 = -2.400; // e*/a=7 -2.4 348 ASLOPE2 = -1.200; // e*/a=3 -1.2 349 350 a_tilda = ald->av * AAINCL + ald-> 351 352 E_FINAL = a_tilda * T_freeze_out * 353 354 ABU_SLOPE = (ASLOPE1 - ASLOPE2) / 355 356 // Botvina et al, PRC 74 (2006) 04 357 // ABU_SLOPE = 5.57489D0- 358 // & 0.3552D0*(E_FINAL/AAAB 359 // & 7.268D-4*(E_FINAL/AAAB 360 // They fit with A**(-tau) and her 361 // ABU_SLOPE = ABU_SLOPE* 362 363 // ABU_SLOPE = -2.60D0 364 // print*,ABU_SLOPE,(E_FI 365 366 if (ABU_SLOPE > -1.01) 367 ABU_SLOPE = -1.01; 368 369 I_Breakup = 0; 370 Z_Breakup_sum = Z_FINAL; 371 ABU_SUM = 0.0; 372 ZBU_SUM = 0.0; 373 374 for (G4int i = 0; i < 100; i++) 375 { 376 IS = 0; 377 mult4326: 378 A_Breakup = dint(G4double(IPOW 379 // Power law with exponent ABU 380 IS = IS + 1; 381 if (IS > 100) 382 { 383 std::cout << "WARNING: IPO 384 "CALCULATING 385 << A_Breakup << 386 goto mult10; 387 } 388 389 if (A_Breakup > AAINCL) 390 goto mult4326; 391 392 if (A_Breakup <= 0.0) 393 { 394 std::cout << "A_BREAKUP <= 395 goto mult10; 396 } 397 398 A_ACC = A_ACC + A_Breakup; 399 400 if (A_ACC <= A_diff) 401 { 402 403 Z_Breakup_Mean = dint(A_Br 404 405 Z_Breakup_sum = Z_Breakup_ 406 // 407 // See G.A. Souliotis et a 408 G_SYMM = 34.2281 - 5.14037 409 if (E_FINAL / AAINCL < 2.0 410 G_SYMM = 25.0; 411 if (E_FINAL / AAINCL > 4.0 412 G_SYMM = 15.0; 413 414 // G_SYMM = 23 415 416 G_SYMM = 25.0; // 25 417 CZ = 2.0 * G_SYMM * 4.0 / 418 // 2*CZ=d^2(Esym)/dZ^2, Es 419 // gamma = 23.6D0 is the s 420 G4int IIS = 0; 421 Sigma_Z = std::sqrt(T_free 422 423 IS = 0; 424 mult4333: 425 Z_Breakup = dint(G4double( 426 IS = IS + 1; 427 // 428 if (IS > 100) 429 { 430 std::cout << "WARNING: 431 "CALCULAT 432 "DICED: " 433 << A_Breakup 434 goto mult10; 435 } 436 437 if (Z_Breakup < 0.0) 438 goto mult4333; 439 if ((A_Breakup - Z_Breakup 440 goto mult4333; 441 if ((A_Breakup - Z_Breakup 442 goto mult4333; 443 444 if (Z_Breakup >= ZAINCL) 445 { 446 IIS = IIS + 1; 447 if (IIS > 10) 448 { 449 std::cout << "Z_BR 450 "BE R 451 << std:: 452 goto mult10; 453 } 454 goto mult4333; 455 } 456 457 // *** Find the limits 458 isostab_lim(idnint(Z_Break 459 // INMIN = MAX(1,IN 460 if (Z_Breakup > 2.0) 461 { 462 if (idnint(A_Breakup - 463 { 464 // PRI 465 // & IDNINT(Z_ 466 goto mult4343; 467 } 468 } 469 470 mult4343: 471 472 // We consider all product 473 // I_Breakup 474 475 N_Breakup = A_Breakup - Z_ 476 BU_TAB[I_Breakup][0] = din 477 BU_TAB[I_Breakup][1] = din 478 ABU_SUM = ABU_SUM + BU_TAB 479 ZBU_SUM = ZBU_SUM + BU_TAB 480 // 481 // Break-up products are g 482 BU_TAB[I_Breakup][3] = 0.0 483 I_Breakup = I_Breakup + 1; 484 IMULTBU = IMULTBU + 1; 485 } 486 else 487 { 488 // There are A_DIFF - 489 // not end up in multi 490 // of the Monte-Carlo 491 // of the fragments ac 492 // print*,'Defi 493 494 goto mult4327; 495 } // if(A_ACC<=A_diff) 496 } // for 497 // mult4327: 498 // IMULTIFR = 1; 499 } // if(A_diff>1.0) 500 mult4327: 501 IMULTIFR = 1; 502 503 // "Missing" A and Z picked from the p 504 ABU_DIFF = idnint(ABU_SUM + aprf - AAI 505 ZBU_DIFF = idnint(ZBU_SUM + zprf - ZAI 506 NBU_DIFF = idnint((ABU_SUM - ZBU_SUM) 507 // 508 if (IMULTBU > 200) 509 std::cout << "WARNING - MORE THAN 510 511 if (IMULTBU < 1) 512 std::cout << "WARNING - LESS THAN 513 //,AABRA,ZABRA,IDNINT(APRF),IDNINT(ZPR 514 515 G4int IPROBA = 0; 516 for (G4int i = 0; i < IMULTBU; i++) 517 IMEM_BU[i] = 0; 518 519 while (NBU_DIFF != 0 && ZBU_DIFF != 0) 520 { 521 // (APRF,ZPRF) is also inlcuded in 522 // program is entering into endles 523 // nucleus for adapting A and Z. 524 IS = 0; 525 mult5555: 526 G4double RHAZ = G4AblaRandom::flat 527 IPROBA = IPROBA + 1; 528 IS = IS + 1; 529 if (IS > 100) 530 { 531 std::cout << "WARNING: HAZ CAL 532 "N_BREAKUP IN Rn0 533 << std::endl; 534 goto mult10; 535 } 536 G4int IEL = G4int(RHAZ); 537 if (IMEM_BU[IEL] == 1) 538 goto mult5555; 539 if (!(IEL < 200)) 540 std::cout << "5555:" << IEL << 541 if (IEL < 0) 542 std::cout << "5555:" << IEL << 543 if (IEL <= IMULTBU) 544 { 545 N_Breakup = dint(BU_TAB[IEL][1 546 } 547 else if (IEL > IMULTBU) 548 { 549 N_Breakup = dint(aprf - zprf - 550 } 551 if (N_Breakup < 0.0) 552 { 553 IMEM_BU[IEL] = 1; 554 goto mult5555; 555 } 556 if (IEL <= IMULTBU) 557 { 558 ZTEMP = dint(BU_TAB[IEL][0] - 559 } 560 else if (IEL > IMULTBU) 561 { 562 ZTEMP = dint(zprf - DSIGN(1.0, 563 } 564 if (ZTEMP < 0.0) 565 { 566 IMEM_BU[IEL] = 1; 567 goto mult5555; 568 } 569 if (ZTEMP < 1.0 && N_Breakup < 1.0 570 { 571 IMEM_BU[IEL] = 1; 572 goto mult5555; 573 } 574 // Nuclei with A=Z and Z>1 are all 575 // for more central collisions the 576 // shufeled in order to conserve A 577 // Z=2 and in less extent 3, 4 or 578 // IF(ZTEMP.GT.1.D0 .A 579 // GOTO 5555 580 // ENDIF 581 if (IEL <= IMULTBU) 582 { 583 BU_TAB[IEL][0] = dint(ZTEMP); 584 BU_TAB[IEL][1] = dint(ZTEMP + 585 } 586 else if (IEL > IMULTBU) 587 { 588 zprf = dint(ZTEMP); 589 aprf = dint(ZTEMP + N_Breakup) 590 } 591 NBU_DIFF = NBU_DIFF - ISIGN(1, NBU 592 ZBU_DIFF = ZBU_DIFF - ISIGN(1, ZBU 593 } // while 594 595 IPROBA = 0; 596 for (G4int i = 0; i < IMULTBU; i++) 597 IMEM_BU[i] = 0; 598 599 if (NBU_DIFF != 0 && ZBU_DIFF == 0) 600 { 601 while (NBU_DIFF > 0 || NBU_DIFF < 602 { 603 IS = 0; 604 mult5556: 605 G4double RHAZ = G4AblaRandom:: 606 IS = IS + 1; 607 if (IS > 100) 608 { 609 std::cout << "WARNING: HAZ 610 "N_BREAKUP IN 611 << std::endl; 612 goto mult10; 613 } 614 G4int IEL = G4int(RHAZ); 615 if (IMEM_BU[IEL] == 1) 616 goto mult5556; 617 // IPROBA = IPROBA + 1 618 if (IPROBA > IMULTBU + 1 && NB 619 { 620 std::cout << "###',IPROBA, 621 IPROBA = IPROBA + 1; 622 if (IEL <= IMULTBU) 623 { 624 BU_TAB[IEL][1] = dint( 625 } 626 else 627 { 628 if (IEL > IMULTBU) 629 aprf = dint(aprf - 630 } 631 goto mult5432; 632 } 633 if (!(IEL < 200)) 634 std::cout << "5556:" << IE 635 if (IEL < 0) 636 std::cout << "5556:" << IE 637 if (IEL <= IMULTBU) 638 { 639 N_Breakup = dint(BU_TAB[IE 640 } 641 else if (IEL > IMULTBU) 642 { 643 N_Breakup = dint(aprf - zp 644 } 645 if (N_Breakup < 0.0) 646 { 647 IMEM_BU[IEL] = 1; 648 goto mult5556; 649 } 650 if (IEL <= IMULTBU) 651 { 652 ATEMP = dint(BU_TAB[IEL][0 653 } 654 else if (IEL > IMULTBU) 655 { 656 ATEMP = dint(zprf + N_Brea 657 } 658 if ((ATEMP - N_Breakup) < 1.0 659 { 660 IMEM_BU[IEL] = 1; 661 goto mult5556; 662 } 663 // IF((ATEMP - N_B 664 // & N_Breakup.EQ.0 665 // IMEM_BU(IEL) = 666 // GOTO 5556 667 // ENDIF 668 if (IEL <= IMULTBU) 669 BU_TAB[IEL][1] = dint(BU_T 670 else if (IEL > IMULTBU) 671 aprf = dint(zprf + N_Break 672 // 673 NBU_DIFF = NBU_DIFF - ISIGN(1, 674 } // while(NBU_DIFF > 0 || NBU_DIF 675 676 IPROBA = 0; 677 for (G4int i = 0; i < IMULTBU; i++ 678 IMEM_BU[i] = 0; 679 } 680 else 681 { // if(NBU_DIFF != 0 && ZBU_DIFF == 0 682 if (ZBU_DIFF != 0 && NBU_DIFF == 0 683 { 684 while (ZBU_DIFF > 0 || ZBU_DIF 685 { 686 IS = 0; 687 mult5557: 688 G4double RHAZ = G4AblaRand 689 IS = IS + 1; 690 if (IS > 100) 691 { 692 std::cout << "WARNING: 693 "N_BREAKU 694 << std::endl 695 goto mult10; 696 } 697 G4int IEL = G4int(RHAZ); 698 if (IMEM_BU[IEL] == 1) 699 goto mult5557; 700 // IPROBA = IPROBA + 1; 701 if (IPROBA > IMULTBU + 1 & 702 { 703 std::cout << "###',IPR 704 IPROBA = IPROBA + 1; 705 if (IEL <= IMULTBU) 706 { 707 N_Breakup = dint(B 708 BU_TAB[IEL][0] = d 709 BU_TAB[IEL][1] = d 710 } 711 else 712 { 713 if (IEL > IMULTBU) 714 { 715 N_Breakup = ap 716 zprf = dint(zp 717 aprf = dint(zp 718 } 719 } 720 goto mult5432; 721 } 722 if (!(IEL < 200)) 723 std::cout << "5557:" < 724 if (IEL < 0) 725 std::cout << "5557:" < 726 if (IEL <= IMULTBU) 727 { 728 N_Breakup = dint(BU_TA 729 ZTEMP = dint(BU_TAB[IE 730 } 731 else if (IEL > IMULTBU) 732 { 733 N_Breakup = dint(aprf 734 ZTEMP = dint(zprf - DS 735 } 736 ATEMP = dint(ZTEMP + N_Bre 737 if (ZTEMP < 0.0) 738 { 739 IMEM_BU[IEL] = 1; 740 goto mult5557; 741 } 742 if ((ATEMP - ZTEMP) < 0.0) 743 { 744 IMEM_BU[IEL] = 1; 745 goto mult5557; 746 } 747 if ((ATEMP - ZTEMP) < 1.0 748 { 749 IMEM_BU[IEL] = 1; 750 goto mult5557; 751 } 752 if (IEL <= IMULTBU) 753 { 754 BU_TAB[IEL][0] = dint( 755 BU_TAB[IEL][1] = dint( 756 } 757 else 758 { 759 if (IEL > IMULTBU) 760 { 761 zprf = dint(ZTEMP) 762 aprf = dint(ZTEMP 763 } 764 } 765 ZBU_DIFF = ZBU_DIFF - ISIG 766 } // while 767 } // if(ZBU_DIFF != 0 && NBU_D 768 } // if(NBU_DIFF != 0 && ZBU_D 769 770 mult5432: 771 // Looking for the heaviest fragment a 772 // and "giving" excitation energy to f 773 ZMEM = 0.0; 774 775 for (G4int i = 0; i < IMULTBU; i++) 776 { 777 // For particles with Z>2 we calcu 778 // temperature. 779 // For particels with Z<3 we assu 780 // temperature results in kinetic 781 // distribution with T=Tfreeze-ou 782 if (BU_TAB[i][0] > 2.0) 783 { 784 a_tilda_BU = ald->av * BU_TAB[ 785 ald->ak * std::po 786 BU_TAB[i][2] = a_tilda_BU * T_ 787 } 788 else 789 { 790 BU_TAB[i][2] = 0.0; 791 } 792 // 793 if (BU_TAB[i][0] > ZMEM) 794 { 795 IMEM = i; 796 ZMEM = BU_TAB[i][0]; 797 AMEM = BU_TAB[i][1]; 798 EMEM = BU_TAB[i][2]; 799 JMEM = BU_TAB[i][3]; 800 } 801 } // for IMULTBU 802 803 if (zprf < ZMEM) 804 { 805 BU_TAB[IMEM][0] = zprf; 806 BU_TAB[IMEM][1] = aprf; 807 BU_TAB[IMEM][2] = ee; 808 BU_TAB[IMEM][3] = jprf; 809 zprf = ZMEM; 810 aprf = AMEM; 811 aprfp = idnint(aprf); 812 zprfp = idnint(zprf); 813 ee = EMEM; 814 jprf = JMEM; 815 } 816 817 // Just for checking: 818 ABU_SUM = aprf; 819 ZBU_SUM = zprf; 820 for (G4int i = 0; i < IMULTBU; i++) 821 { 822 ABU_SUM = ABU_SUM + BU_TAB[i][1]; 823 ZBU_SUM = ZBU_SUM + BU_TAB[i][0]; 824 } 825 ABU_DIFF = idnint(ABU_SUM - AAINCL); 826 ZBU_DIFF = idnint(ZBU_SUM - ZAINCL); 827 // 828 if (ABU_DIFF != 0 || ZBU_DIFF != 0) 829 std::cout << "Problem of mass in B 830 PX_BU_SUM = 0.0; 831 PY_BU_SUM = 0.0; 832 PZ_BU_SUM = 0.0; 833 // Momenta of break-up products are ca 834 // rest frame of the primary prefragme 835 // *********************************** 836 AMOMENT(AAINCL, aprf, 1, &PXPRFP, &PYP 837 PPRFP = std::sqrt(PXPRFP * PXPRFP + PY 838 // *********************************** 839 // PPRFP is in MeV/c 840 ETOT_PRF = std::sqrt(PPRFP * PPRFP + ( 841 VX_PREF = C * PXPRFP / ETOT_PRF; 842 VY_PREF = C * PYPRFP / ETOT_PRF; 843 VZ_PREF = C * PZPRFP / ETOT_PRF; 844 845 // Contribution from Coulomb repulsion 846 tke_bu(zprf, aprf, ZAINCL, AAINCL, &VX 847 848 // Lorentz kinematics 849 // VX_PREF = VX_PREF + VX1_BU 850 // VY_PREF = VY_PREF + VY1_BU 851 // VZ_PREF = VZ_PREF + VZ1_BU 852 // Lorentz transformation 853 lorentz_boost(VX1_BU, VY1_BU, VZ1_BU, 854 855 VX_PREF = VXOUT; 856 VY_PREF = VYOUT; 857 VZ_PREF = VZOUT; 858 859 // Total momentum: Goldhaber + Coulomb 860 VBU2 = VX_PREF * VX_PREF + VY_PREF * V 861 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C 862 ETOT_PRF = aprf * amu / GAMMA_REL; 863 PXPRFP = ETOT_PRF * VX_PREF / C; 864 PYPRFP = ETOT_PRF * VY_PREF / C; 865 PZPRFP = ETOT_PRF * VZ_PREF / C; 866 867 // *********************************** 868 // Momentum: Total width of abrasion 869 // by Fermi momenta of nucleons 870 // *********************************** 871 872 PX_BU_SUM = PXPRFP; 873 PY_BU_SUM = PYPRFP; 874 PZ_BU_SUM = PZPRFP; 875 876 Eexc_BU_SUM = ee; 877 Bvalue_BU = eflmac(idnint(aprf), idnin 878 879 for (I_Breakup = 0; I_Breakup < IMULTB 880 { 881 // For bu products: 882 Bvalue_BU = Bvalue_BU + eflmac(idn 883 Eexc_BU_SUM = Eexc_BU_SUM + BU_TAB 884 885 AMOMENT(AAINCL, BU_TAB[I_Breakup][ 886 P_BU = std::sqrt(PX_BU * PX_BU + P 887 // ******************************* 888 // PPRFP is in MeV/c 889 ETOT_BU = std::sqrt(P_BU * P_BU + 890 BU_TAB[I_Breakup][4] = C * PX_BU / 891 BU_TAB[I_Breakup][5] = C * PY_BU / 892 BU_TAB[I_Breakup][6] = C * PZ_BU / 893 // Contribution from Coulom 894 tke_bu(BU_TAB[I_Breakup][0], BU_TA 895 // Lorentz kinematics 896 // BU_TAB(I_Breakup,5) = 897 // change by Coulomb repu 898 // BU_TAB(I_Breakup,6) + 899 // BU_TAB(I_Breakup,7) + 900 // Lorentz transformation 901 lorentz_boost(VX2_BU, 902 VY2_BU, 903 VZ2_BU, 904 BU_TAB[I_Breakup][4] 905 BU_TAB[I_Breakup][5] 906 BU_TAB[I_Breakup][6] 907 &VXOUT, 908 &VYOUT, 909 &VZOUT); 910 911 BU_TAB[I_Breakup][4] = VXOUT; 912 BU_TAB[I_Breakup][5] = VYOUT; 913 BU_TAB[I_Breakup][6] = VZOUT; 914 915 // Total momentum: Goldhaber + Cou 916 VBU2 = BU_TAB[I_Breakup][4] * BU_T 917 BU_TAB[I_Breakup][6] * BU_T 918 GAMMA_REL = std::sqrt(1.0 - VBU2 / 919 ETOT_BU = BU_TAB[I_Breakup][1] * a 920 PX_BU = ETOT_BU * BU_TAB[I_Breakup 921 PY_BU = ETOT_BU * BU_TAB[I_Breakup 922 PZ_BU = ETOT_BU * BU_TAB[I_Breakup 923 924 PX_BU_SUM = PX_BU_SUM + PX_BU; 925 PY_BU_SUM = PY_BU_SUM + PY_BU; 926 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; 927 928 } // for I_Breakup 929 930 // In the frame of source (i.e. pref 931 P_BU_SUM = std::sqrt(PX_BU_SUM * PX_BU 932 // *********************************** 933 // PPRFP is in MeV/c 934 ETOT_SUM = std::sqrt(P_BU_SUM * P_BU_S 935 936 VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM; 937 VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM; 938 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM; 939 940 // Lorentz kinematics - DM 17/5/2010 941 // VX_PREF = VX_PREF - VX_BU_SU 942 // VY_PREF = VY_PREF - VY_BU_SU 943 // VZ_PREF = VZ_PREF - VZ_BU_SU 944 // Lorentz transformation 945 lorentz_boost(-VX_BU_SUM, -VY_BU_SUM, 946 947 VX_PREF = VXOUT; 948 VY_PREF = VYOUT; 949 VZ_PREF = VZOUT; 950 951 VBU2 = VX_PREF * VX_PREF + VY_PREF * V 952 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C 953 ETOT_PRF = aprf * amu / GAMMA_REL; 954 PXPRFP = ETOT_PRF * VX_PREF / C; 955 PYPRFP = ETOT_PRF * VY_PREF / C; 956 PZPRFP = ETOT_PRF * VZ_PREF / C; 957 958 PX_BU_SUM = 0.0; 959 PY_BU_SUM = 0.0; 960 PZ_BU_SUM = 0.0; 961 962 PX_BU_SUM = PXPRFP; 963 PY_BU_SUM = PYPRFP; 964 PZ_BU_SUM = PZPRFP; 965 E_tot_BU = ETOT_PRF; 966 967 EKIN_BU = aprf * amu / GAMMA_REL - apr 968 969 for (I_Breakup = 0; I_Breakup < IMULTB 970 { 971 // Lorentz kinematics - DM 17/5/20 972 // BU_TAB(I_Breakup,5) = B 973 // BU_TAB(I_Breakup,6) = B 974 // BU_TAB(I_Breakup,7) = B 975 // Lorentz transformation 976 lorentz_boost(-VX_BU_SUM, 977 -VY_BU_SUM, 978 -VZ_BU_SUM, 979 BU_TAB[I_Breakup][4] 980 BU_TAB[I_Breakup][5] 981 BU_TAB[I_Breakup][6] 982 &VXOUT, 983 &VYOUT, 984 &VZOUT); 985 986 BU_TAB[I_Breakup][4] = VXOUT; 987 BU_TAB[I_Breakup][5] = VYOUT; 988 BU_TAB[I_Breakup][6] = VZOUT; 989 990 VBU2 = BU_TAB[I_Breakup][4] * BU_T 991 BU_TAB[I_Breakup][6] * BU_T 992 GAMMA_REL = std::sqrt(1.0 - VBU2 / 993 994 ETOT_BU = BU_TAB[I_Breakup][1] * a 995 996 EKIN_BU = EKIN_BU + BU_TAB[I_Break 997 998 PX_BU = ETOT_BU * BU_TAB[I_Breakup 999 PY_BU = ETOT_BU * BU_TAB[I_Breakup 1000 PZ_BU = ETOT_BU * BU_TAB[I_Breaku 1001 E_tot_BU = E_tot_BU + ETOT_BU; 1002 1003 PX_BU_SUM = PX_BU_SUM + PX_BU; 1004 PY_BU_SUM = PY_BU_SUM + PY_BU; 1005 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; 1006 } // for I_Breakup 1007 1008 if (std::abs(PX_BU_SUM) > 10. || std: 1009 { 1010 1011 // In the frame of source (i.e. 1012 P_BU_SUM = std::sqrt(PX_BU_SUM * 1013 // ****************************** 1014 // PPRFP is in MeV/c 1015 ETOT_SUM = std::sqrt(P_BU_SUM * P 1016 1017 VX_BU_SUM = C * PX_BU_SUM / ETOT_ 1018 VY_BU_SUM = C * PY_BU_SUM / ETOT_ 1019 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_ 1020 1021 // Lorentz kinematics 1022 // VX_PREF = VX_PREF - VX_ 1023 // VY_PREF = VY_PREF - VY_ 1024 // VZ_PREF = VZ_PREF - VZ_ 1025 // Lorentz transformation 1026 lorentz_boost(-VX_BU_SUM, -VY_BU_ 1027 1028 VX_PREF = VXOUT; 1029 VY_PREF = VYOUT; 1030 VZ_PREF = VZOUT; 1031 1032 VBU2 = VX_PREF * VX_PREF + VY_PRE 1033 GAMMA_REL = std::sqrt(1.0 - VBU2 1034 ETOT_PRF = aprf * amu / GAMMA_REL 1035 PXPRFP = ETOT_PRF * VX_PREF / C; 1036 PYPRFP = ETOT_PRF * VY_PREF / C; 1037 PZPRFP = ETOT_PRF * VZ_PREF / C; 1038 1039 PX_BU_SUM = 0.0; 1040 PY_BU_SUM = 0.0; 1041 PZ_BU_SUM = 0.0; 1042 1043 PX_BU_SUM = PXPRFP; 1044 PY_BU_SUM = PYPRFP; 1045 PZ_BU_SUM = PZPRFP; 1046 E_tot_BU = ETOT_PRF; 1047 1048 EKIN_BU = aprf * amu / GAMMA_REL 1049 1050 for (I_Breakup = 0; I_Breakup < I 1051 { 1052 // Lorentz kinematics - DM 17 1053 // BU_TAB(I_Breakup,5 1054 // BU_TAB(I_Breakup,6 1055 // BU_TAB(I_Breakup,7 1056 // Lorentz transformation 1057 lorentz_boost(-VX_BU_SUM, 1058 -VY_BU_SUM, 1059 -VZ_BU_SUM, 1060 BU_TAB[I_Breaku 1061 BU_TAB[I_Breaku 1062 BU_TAB[I_Breaku 1063 &VXOUT, 1064 &VYOUT, 1065 &VZOUT); 1066 1067 BU_TAB[I_Breakup][4] = VXOUT; 1068 BU_TAB[I_Breakup][5] = VYOUT; 1069 BU_TAB[I_Breakup][6] = VZOUT; 1070 1071 VBU2 = BU_TAB[I_Breakup][4] * 1072 BU_TAB[I_Breakup][6] * 1073 GAMMA_REL = std::sqrt(1.0 - V 1074 1075 ETOT_BU = BU_TAB[I_Breakup][1 1076 1077 EKIN_BU = EKIN_BU + BU_TAB[I_ 1078 1079 PX_BU = ETOT_BU * BU_TAB[I_Br 1080 PY_BU = ETOT_BU * BU_TAB[I_Br 1081 PZ_BU = ETOT_BU * BU_TAB[I_Br 1082 E_tot_BU = E_tot_BU + ETOT_BU 1083 1084 PX_BU_SUM = PX_BU_SUM + PX_BU 1085 PY_BU_SUM = PY_BU_SUM + PY_BU 1086 PZ_BU_SUM = PZ_BU_SUM + PZ_BU 1087 } // for I_Breakup 1088 } // if DABS(PX_BU_SUM).GT.10.d0 1089 // 1090 // Find the limits that fragment 1091 // LCPs and for nuclei with A=Z, 1092 // decay: 1093 1094 INEWLOOP = 0; 1095 for (G4int i = 0; i < IMULTBU; i++) 1096 { 1097 if (BU_TAB[i][0] < 3.0 || BU_TAB[ 1098 { 1099 unstable_nuclei(idnint(BU_TAB 1100 idnint(BU_TAB 1101 &afpnew, 1102 &zfpnew, 1103 IOUNSTABLE, 1104 BU_TAB[i][4], 1105 BU_TAB[i][5], 1106 BU_TAB[i][6], 1107 &VP1X, 1108 &VP1Y, 1109 &VP1Z, 1110 BU_TAB_TEMP, 1111 &ILOOP); 1112 1113 if (IOUNSTABLE > 0) 1114 { 1115 // Properties of "heavy f 1116 BU_TAB[i][1] = G4double(a 1117 BU_TAB[i][0] = G4double(z 1118 BU_TAB[i][4] = VP1X; 1119 BU_TAB[i][5] = VP1Y; 1120 BU_TAB[i][6] = VP1Z; 1121 1122 // Properties of "light" 1123 for (int IJ = 0; IJ < ILO 1124 { 1125 BU_TAB[IMULTBU + INEW 1126 BU_TAB[IMULTBU + INEW 1127 BU_TAB[IMULTBU + INEW 1128 BU_TAB[IMULTBU + INEW 1129 BU_TAB[IMULTBU + INEW 1130 BU_TAB[IMULTBU + INEW 1131 BU_TAB[IMULTBU + INEW 1132 } // for ILOOP 1133 1134 INEWLOOP = INEWLOOP + ILO 1135 1136 } // if IOUNSTABLE.GT.0 1137 } // if BU_TAB[I_Breakup][0]< 1138 } // for IMULTBU 1139 1140 // Increased array of BU_TAB 1141 IMULTBU = IMULTBU + INEWLOOP; 1142 // Evaporation from multifragmentatio 1143 opt->optimfallowed = 1; // IMF is al 1144 fiss->ifis = 0; // fission i 1145 gammaemission = 0; 1146 ILOOPBU = 0; 1147 1148 // Arrays for lambda emission from b 1149 G4double* problamb; 1150 problamb = new G4double[IMULTBU]; 1151 G4double sumN = aprf - zprf; 1152 for (G4int i = 0; i < IMULTBU; i++) 1153 sumN = sumN + BU_TAB[i][1] - BU_T 1154 1155 for (G4int i = 0; i < IMULTBU; i++) 1156 { 1157 problamb[i] = (BU_TAB[i][1] - BU_ 1158 } 1159 G4int* Nblamb; 1160 Nblamb = new G4int[IMULTBU]; 1161 for (G4int i = 0; i < IMULTBU; i++) 1162 Nblamb[i] = 0; 1163 for (G4int j = 0; j < NbLam0;) 1164 { 1165 G4double probtotal = (aprf - zprf 1166 G4double ran = G4AblaRandom::flat 1167 // Lambdas in the heavy breakup 1168 if (ran <= probtotal) 1169 { 1170 NbLamprf++; 1171 goto directlamb0; 1172 } 1173 for (G4int i = 0; i < IMULTBU; i+ 1174 { 1175 // Lambdas in the light bre 1176 if (probtotal < ran && ran <= 1177 { 1178 Nblamb[i] = Nblamb[i] + 1 1179 goto directlamb0; 1180 } 1181 probtotal = probtotal + probl 1182 } 1183 directlamb0: 1184 j++; 1185 } 1186 // 1187 for (G4int i = 0; i < IMULTBU; i++) 1188 { 1189 EEBU = BU_TAB[i][2]; 1190 BU_TAB[i][10] = BU_TAB[i][6]; 1191 G4double jprfbu = BU_TAB[i][9]; 1192 if (BU_TAB[i][0] > 2.0) 1193 { 1194 G4int nbl = Nblamb[i]; 1195 evapora(BU_TAB[i][0], 1196 BU_TAB[i][1], 1197 &EEBU, 1198 0.0, 1199 &ZFBU, 1200 &AFBU, 1201 &mtota, 1202 &vz_evabu, 1203 &vx_evabu, 1204 &vy_evabu, 1205 &ff, 1206 &fimf, 1207 &ZIMFBU, 1208 &AIMFBU, 1209 &TKEIMFBU, 1210 &jprfbu, 1211 &inttype, 1212 &inum, 1213 EV_TEMP, 1214 &IEV_TAB_TEMP, 1215 &nbl); 1216 1217 Nblamb[i] = nbl; 1218 BU_TAB[i][9] = jprfbu; 1219 1220 // Velocities of evaporated p 1221 // prefragment) 1222 for (G4int IJ = 0; IJ < IEV_T 1223 { 1224 EV_TAB[IJ + IEV_TAB][0] = 1225 EV_TAB[IJ + IEV_TAB][1] = 1226 EV_TAB[IJ + IEV_TAB][5] = 1227 // Lorentz kinematics 1228 // DO IK 1229 // EV_TA 1230 // BU_TA 1231 // Lorentz transformatio 1232 lorentz_boost(BU_TAB[i][4 1233 BU_TAB[i][5 1234 BU_TAB[i][6 1235 EV_TEMP[IJ] 1236 EV_TEMP[IJ] 1237 EV_TEMP[IJ] 1238 &VXOUT, 1239 &VYOUT, 1240 &VZOUT); 1241 EV_TAB[IJ + IEV_TAB][2] = 1242 EV_TAB[IJ + IEV_TAB][3] = 1243 EV_TAB[IJ + IEV_TAB][4] = 1244 } 1245 IEV_TAB = IEV_TAB + IEV_TAB_T 1246 1247 // All velocities in the fram 1248 // Lorentz kinematics 1249 // BU_TAB(I,5 1250 // BU_TAB(I,6 1251 // BU_TAB(I,7 1252 // Lorentz transformation 1253 lorentz_boost( 1254 vx_evabu, vy_evabu, vz_ev 1255 BU_TAB[i][4] = VXOUT; 1256 BU_TAB[i][5] = VYOUT; 1257 BU_TAB[i][6] = VZOUT; 1258 1259 if (fimf == 0) 1260 { 1261 BU_TAB[i][7] = dint(ZFBU) 1262 BU_TAB[i][8] = dint(AFBU) 1263 BU_TAB[i][11] = nbl; 1264 } // if fimf==0 1265 1266 if (fimf == 1) 1267 { 1268 // PRINT*,'IMF 1269 // IMF emission: Heavy pa 1270 // IMF. 1271 // double FEE = EEBU; 1272 G4int FFBU1 = 0; 1273 G4int FIMFBU1 = 0; 1274 opt->optimfallowed = 0; / 1275 fiss->ifis = 0; / 1276 // Velocities of IMF and 1277 G4double EkinR1 = TKEIMFB 1278 G4double EkinR2 = TKEIMFB 1279 G4double V1 = std::sqrt(E 1280 G4double V2 = std::sqrt(E 1281 G4double VZ1_IMF = (2.0 * 1282 G4double VPERP1 = std::sq 1283 G4double ALPHA1 = G4AblaR 1284 G4double VX1_IMF = VPERP1 1285 G4double VY1_IMF = VPERP1 1286 G4double VX2_IMF = -VX1_I 1287 G4double VY2_IMF = -VY1_I 1288 G4double VZ2_IMF = -VZ1_I 1289 1290 G4double EEIMFP = EEBU * 1291 G4double EEIMF = EEBU * A 1292 1293 // Decay of heavy partner 1294 G4double IINERTTOT = 1295 0.40 * 931.490 * 1.16 1296 931.490 * 1.160 * 1.1 1297 (std::pow(AIMFBU, 1298 (std::pow(AIMFBU, 1299 1300 G4double JPRFHEAVY = 1301 BU_TAB[i][9] * 0.4 * 1302 G4double JPRFLIGHT = 1303 BU_TAB[i][9] * 0.4 * 1304 1305 // Lorentz kinematics 1306 // BU_TAB(I,5) 1307 // BU_TAB(I,6) 1308 // BU_TAB(I,7) 1309 // Lorentz transformation 1310 lorentz_boost( 1311 VX1_IMF, VY1_IMF, VZ1 1312 BU_TAB[i][4] = VXOUT; 1313 BU_TAB[i][5] = VYOUT; 1314 BU_TAB[i][6] = VZOUT; 1315 1316 G4double vx1ev_imf = 0., 1317 jprf1 = 0.; 1318 1319 // Lambda particles 1320 G4int NbLamH = 0; 1321 G4int NbLamimf = 0; 1322 G4double pbH = (AFBU - ZF 1323 for (G4int j = 0; j < nbl 1324 { 1325 if (G4AblaRandom::fla 1326 { 1327 NbLamH++; 1328 } 1329 else 1330 { 1331 NbLamimf++; 1332 } 1333 } 1334 // Decay of IMF's partner 1335 evapora(ZFBU, 1336 AFBU, 1337 &EEIMFP, 1338 JPRFHEAVY, 1339 &ZFFBU, 1340 &AFFBU, 1341 &mtota, 1342 &vz1ev_imf, 1343 &vx1ev_imf, 1344 &vy1ev_imf, 1345 &FFBU1, 1346 &FIMFBU1, 1347 &zdummy, 1348 &adummy, 1349 &tkedummy, 1350 &jprf1, 1351 &inttype, 1352 &inum, 1353 EV_TEMP, 1354 &IEV_TAB_TEMP, 1355 &NbLamH); 1356 1357 for (G4int IJ = 0; IJ < I 1358 { 1359 EV_TAB[IJ + IEV_TAB][ 1360 EV_TAB[IJ + IEV_TAB][ 1361 EV_TAB[IJ + IEV_TAB][ 1362 // Lorentz kinematics 1363 // D 1364 // E 1365 // B 1366 // Lorentz transform 1367 lorentz_boost(BU_TAB[ 1368 BU_TAB[ 1369 BU_TAB[ 1370 EV_TEMP 1371 EV_TEMP 1372 EV_TEMP 1373 &VXOUT, 1374 &VYOUT, 1375 &VZOUT) 1376 EV_TAB[IJ + IEV_TAB][ 1377 EV_TAB[IJ + IEV_TAB][ 1378 EV_TAB[IJ + IEV_TAB][ 1379 } 1380 IEV_TAB = IEV_TAB + IEV_T 1381 1382 BU_TAB[i][7] = dint(ZFFBU 1383 BU_TAB[i][8] = dint(AFFBU 1384 BU_TAB[i][11] = NbLamH; 1385 // Lorentz kinematics 1386 // BU_TAB(I,5) 1387 // BU_TAB(I,6) 1388 // BU_TAB(I,7) 1389 lorentz_boost(vx1ev_imf, 1390 vy1ev_imf, 1391 vz1ev_imf, 1392 BU_TAB[i][4 1393 BU_TAB[i][5 1394 BU_TAB[i][6 1395 &VXOUT, 1396 &VYOUT, 1397 &VZOUT); 1398 BU_TAB[i][4] = VXOUT; 1399 BU_TAB[i][5] = VYOUT; 1400 BU_TAB[i][6] = VZOUT; 1401 // For IMF - fission and 1402 G4int FFBU2 = 0; 1403 G4int FIMFBU2 = 0; 1404 opt->optimfallowed = 0; / 1405 fiss->ifis = 0; / 1406 / 1407 G4double zffimf, affimf, 1408 1409 evapora(ZIMFBU, 1410 AIMFBU, 1411 &EEIMF, 1412 JPRFLIGHT, 1413 &zffimf, 1414 &affimf, 1415 &mtota, 1416 &vz2ev_imf, 1417 &vx2ev_imf, 1418 &vy2ev_imf, 1419 &FFBU2, 1420 &FIMFBU2, 1421 &zdummy1, 1422 &adummy1, 1423 &tkedummy1, 1424 &jprf2, 1425 &inttype, 1426 &inum, 1427 EV_TEMP, 1428 &IEV_TAB_TEMP, 1429 &NbLamimf); 1430 1431 for (G4int IJ = 0; IJ < I 1432 { 1433 EV_TAB[IJ + IEV_TAB][ 1434 EV_TAB[IJ + IEV_TAB][ 1435 EV_TAB[IJ + IEV_TAB][ 1436 // Lorentz kinematics 1437 // EV_TAB 1438 // +VX2_I 1439 // BU_TAB 1440 // EV_TEM 1441 // Lorentz transform 1442 lorentz_boost(BU_TAB[ 1443 BU_TAB[ 1444 BU_TAB[ 1445 EV_TEMP 1446 EV_TEMP 1447 EV_TEMP 1448 &VXOUT, 1449 &VYOUT, 1450 &VZOUT) 1451 lorentz_boost(VX2_IMF 1452 EV_TAB[IJ + IEV_TAB][ 1453 EV_TAB[IJ + IEV_TAB][ 1454 EV_TAB[IJ + IEV_TAB][ 1455 } 1456 IEV_TAB = IEV_TAB + IEV_T 1457 1458 BU_TAB[IMULTBU + ILOOPBU] 1459 BU_TAB[IMULTBU + ILOOPBU] 1460 BU_TAB[IMULTBU + ILOOPBU] 1461 BU_TAB[IMULTBU + ILOOPBU] 1462 BU_TAB[IMULTBU + ILOOPBU] 1463 BU_TAB[IMULTBU + ILOOPBU] 1464 BU_TAB[IMULTBU + ILOOPBU] 1465 // Lorentz transformation 1466 lorentz_boost( 1467 VX2_IMF, VY2_IMF, VZ2 1468 lorentz_boost(vx2ev_imf, 1469 BU_TAB[IMULTBU + ILOOPBU] 1470 BU_TAB[IMULTBU + ILOOPBU] 1471 BU_TAB[IMULTBU + ILOOPBU] 1472 ILOOPBU = ILOOPBU + 1; 1473 } // if fimf==1 1474 } 1475 else 1476 { // if BU_TAB(I,1).GT.2.D0 1477 // BU_TAB[i][0] = BU_TAB[i][0]; 1478 // BU_TAB[i][1] = BU_TAB[i][1 1479 // BU_TAB[i][2] = BU_TAB[i][2 1480 // BU_TAB[i][3] = BU_TAB[i][3 1481 BU_TAB[i][7] = BU_TAB[i][0]; 1482 BU_TAB[i][8] = BU_TAB[i][1]; 1483 // BU_TAB[i][4] = BU_TAB[i][4 1484 // BU_TAB[i][5] = BU_TAB[i][5 1485 // BU_TAB[i][6] = BU_TAB[i][6 1486 BU_TAB[i][11] = Nblamb[i]; 1487 } // if BU_TAB(I,1).GT.2.D0 1488 } // for IMULTBU 1489 1490 IMULTBU = IMULTBU + ILOOPBU; 1491 // 1492 // RESOLVE UNSTABLE NUCLEI 1493 // 1494 INEWLOOP = 0; 1495 ABU_SUM = 0.0; 1496 ZBU_SUM = 0.0; 1497 // 1498 for (G4int i = 0; i < IMULTBU; i++) 1499 { 1500 ABU_SUM = ABU_SUM + BU_TAB[i][8]; 1501 ZBU_SUM = ZBU_SUM + BU_TAB[i][7]; 1502 unstable_nuclei(idnint(BU_TAB[i][ 1503 idnint(BU_TAB[i][ 1504 &afpnew, 1505 &zfpnew, 1506 IOUNSTABLE, 1507 BU_TAB[i][4], 1508 BU_TAB[i][5], 1509 BU_TAB[i][6], 1510 &VP1X, 1511 &VP1Y, 1512 &VP1Z, 1513 BU_TAB_TEMP1, 1514 &ILOOP); 1515 1516 // From now on, all neutrons and 1517 // of the 1518 // BU_TAB array (see below - Pro 1519 // NEVA, PEVA ... are not needed 1520 1521 if (IOUNSTABLE > 0) 1522 { 1523 // Properties of "heavy fragm 1524 ABU_SUM = ABU_SUM + G4double( 1525 ZBU_SUM = ZBU_SUM + G4double( 1526 BU_TAB[i][8] = G4double(afpne 1527 BU_TAB[i][7] = G4double(zfpne 1528 BU_TAB[i][4] = VP1X; 1529 BU_TAB[i][5] = VP1Y; 1530 BU_TAB[i][6] = VP1Z; 1531 1532 // Properties of "light" frag 1533 for (G4int IJ = 0; IJ < ILOOP 1534 { 1535 BU_TAB[IMULTBU + INEWLOOP 1536 BU_TAB[IMULTBU + INEWLOOP 1537 BU_TAB[IMULTBU + INEWLOOP 1538 BU_TAB[IMULTBU + INEWLOOP 1539 BU_TAB[IMULTBU + INEWLOOP 1540 BU_TAB[IMULTBU + INEWLOOP 1541 BU_TAB[IMULTBU + INEWLOOP 1542 BU_TAB[IMULTBU + INEWLOOP 1543 BU_TAB[IMULTBU + INEWLOOP 1544 BU_TAB[IMULTBU + INEWLOOP 1545 ABU_SUM = ABU_SUM + BU_TA 1546 ZBU_SUM = ZBU_SUM + BU_TA 1547 } // for ILOOP 1548 1549 INEWLOOP = INEWLOOP + ILOOP; 1550 } // if(IOUNSTABLE>0) 1551 } // for IMULTBU unstable 1552 1553 // Increased array of BU_TAB 1554 IMULTBU = IMULTBU + INEWLOOP; 1555 1556 // Transform all velocities into the 1557 lorentz_boost(VX_incl, VY_incl, VZ_in 1558 VX_PREF = VXOUT; 1559 VY_PREF = VYOUT; 1560 VZ_PREF = VZOUT; 1561 1562 for (G4int i = 0; i < IMULTBU; i++) 1563 { 1564 lorentz_boost(VX_incl, VY_incl, V 1565 BU_TAB[i][4] = VXOUT; 1566 BU_TAB[i][5] = VYOUT; 1567 BU_TAB[i][6] = VZOUT; 1568 } 1569 for (G4int i = 0; i < IEV_TAB; i++) 1570 { 1571 lorentz_boost(VX_incl, VY_incl, V 1572 EV_TAB[i][2] = VXOUT; 1573 EV_TAB[i][3] = VYOUT; 1574 EV_TAB[i][4] = VZOUT; 1575 } 1576 if (IMULTBU > 200) 1577 std::cout << "IMULTBU>200 " << IM 1578 delete[] problamb; 1579 delete[] Nblamb; 1580 } // if(T_diff>0.1) 1581 // End of multi-fragmentation 1582 mult7777: 1583 1584 // Start basic de-excitation of fragments 1585 aprfp = idnint(aprf); 1586 zprfp = idnint(zprf); 1587 1588 if (IMULTIFR == 0) 1589 { 1590 // These momenta are in the frame of 1591 // direct kinematics) 1592 VX_PREF = VX_incl; 1593 VY_PREF = VY_incl; 1594 VZ_PREF = VZ_incl; 1595 } 1596 // Lambdas after multi-fragmentation 1597 if (IMULTIFR == 1) 1598 { 1599 NbLam0 = NbLamprf; 1600 } 1601 // 1602 // CALL THE EVAPORATION SUBROUTINE 1603 // 1604 opt->optimfallowed = 1; // IMF is allowe 1605 fiss->ifis = 1; // fission is al 1606 fimf = 0; 1607 ff = 0; 1608 1609 // To spare computing time; these events 1610 // IF(ZPRFP.LE.2.AND.ZPRFP.LT.APRFP) 1611 if (zprfp <= 2 && zprfp < aprfp) 1612 { 1613 zf = zprf; 1614 af = aprf; 1615 ee = 0.0; 1616 ff = 0; 1617 fimf = 0; 1618 ftype = 0; 1619 aimf = 0.0; 1620 zimf = 0.0; 1621 tkeimf = 0.0; 1622 vx_eva = 0.0; 1623 vy_eva = 0.0; 1624 vz_eva = 0.0; 1625 jprf0 = jprf; 1626 goto a1972; 1627 } 1628 1629 // if(ZPRFP.LE.2.AND.ZPRFP.EQ.APRFP) 1630 if (zprfp <= 2 && zprfp == aprfp) 1631 { 1632 unstable_nuclei(aprfp, 1633 zprfp, 1634 &afpnew, 1635 &zfpnew, 1636 IOUNSTABLE, 1637 VX_PREF, 1638 VY_PREF, 1639 VZ_PREF, 1640 &VP1X, 1641 &VP1Y, 1642 &VP1Z, 1643 EV_TAB_TEMP, 1644 &ILOOP); 1645 af = G4double(afpnew); 1646 zf = G4double(zfpnew); 1647 VX_PREF = VP1X; 1648 VY_PREF = VP1Y; 1649 VZ_PREF = VP1Z; 1650 for (G4int I = 0; I < ILOOP; I++) 1651 { 1652 for (G4int IJ = 0; IJ < 6; IJ++) 1653 EV_TAB[I + IEV_TAB][IJ] = EV_ 1654 } 1655 IEV_TAB = IEV_TAB + ILOOP; 1656 ee = 0.0; 1657 ff = 0; 1658 fimf = 0; 1659 ftype = 0; 1660 aimf = 0.0; 1661 zimf = 0.0; 1662 tkeimf = 0.0; 1663 vx_eva = 0.0; 1664 vy_eva = 0.0; 1665 vz_eva = 0.0; 1666 jprf0 = jprf; 1667 goto a1972; 1668 } 1669 1670 // IF(ZPRFP.EQ.APRFP)THEN 1671 if (zprfp == aprfp) 1672 { 1673 unstable_nuclei(aprfp, 1674 zprfp, 1675 &afpnew, 1676 &zfpnew, 1677 IOUNSTABLE, 1678 VX_PREF, 1679 VY_PREF, 1680 VZ_PREF, 1681 &VP1X, 1682 &VP1Y, 1683 &VP1Z, 1684 EV_TAB_TEMP, 1685 &ILOOP); 1686 af = G4double(afpnew); 1687 zf = G4double(zfpnew); 1688 VX_PREF = VP1X; 1689 VY_PREF = VP1Y; 1690 VZ_PREF = VP1Z; 1691 for (G4int I = 0; I < ILOOP; I++) 1692 { 1693 for (G4int IJ = 0; IJ < 6; IJ++) 1694 EV_TAB[I + IEV_TAB][IJ] = EV_ 1695 } 1696 IEV_TAB = IEV_TAB + ILOOP; 1697 ee = 0.0; 1698 ff = 0; 1699 fimf = 0; 1700 ftype = 0; 1701 aimf = 0.0; 1702 zimf = 0.0; 1703 tkeimf = 0.0; 1704 vx_eva = 0.0; 1705 vy_eva = 0.0; 1706 vz_eva = 0.0; 1707 jprf0 = jprf; 1708 goto a1972; 1709 } 1710 // 1711 evapora(zprf, 1712 aprf, 1713 &ee, 1714 jprf, 1715 &zf, 1716 &af, 1717 &mtota, 1718 &vz_eva, 1719 &vx_eva, 1720 &vy_eva, 1721 &ff, 1722 &fimf, 1723 &zimf, 1724 &aimf, 1725 &tkeimf, 1726 &jprf0, 1727 &inttype, 1728 &inum, 1729 EV_TEMP, 1730 &IEV_TAB_TEMP, 1731 &NbLam0); 1732 // 1733 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ+ 1734 { 1735 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ] 1736 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ] 1737 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ] 1738 // 1739 // EV_TAB(IJ+IEV_TAB,3) 1740 // EV_TAB(IJ+IEV_TAB,4) 1741 // EV_TAB(IJ+IEV_TAB,5) 1742 // Lorentz transformation 1743 lorentz_boost( 1744 VX_PREF, VY_PREF, VZ_PREF, EV_TEM 1745 EV_TAB[IJ + IEV_TAB][2] = VXOUT; 1746 EV_TAB[IJ + IEV_TAB][3] = VYOUT; 1747 EV_TAB[IJ + IEV_TAB][4] = VZOUT; 1748 } 1749 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1750 1751 a1972: 1752 1753 // vi_pref - velocity of the prefragment; 1754 lorentz_boost(VX_PREF, VY_PREF, VZ_PREF, 1755 V_CM[0] = VXOUT; 1756 V_CM[1] = VYOUT; 1757 V_CM[2] = VZOUT; 1758 // 1759 if (ff == 0 && fimf == 0) 1760 { 1761 // Evaporation of neutrons and LCP; n 1762 ftype = 0; 1763 ZFP1 = idnint(zf); 1764 AFP1 = idnint(af); 1765 SFP1 = NbLam0; 1766 AFPIMF = 0; 1767 ZFPIMF = 0; 1768 SFPIMF = 0; 1769 ZFP2 = 0; 1770 AFP2 = 0; 1771 SFP2 = 0; 1772 VFP1_CM[0] = V_CM[0]; 1773 VFP1_CM[1] = V_CM[1]; 1774 VFP1_CM[2] = V_CM[2]; 1775 for (G4int j = 0; j < 3; j++) 1776 { 1777 VIMF_CM[j] = 0.0; 1778 VFP2_CM[j] = 0.0; 1779 } 1780 } 1781 // 1782 if (ff == 1 && fimf == 0) 1783 ftype = 1; // fission 1784 if (ff == 0 && fimf == 1) 1785 ftype = 2; // IMF emission 1786 // 1787 // AFP,ZFP IS THE FINAL FRAGMENT IF NO FI 1788 // IN CASE OF FISSION IT IS THE NUCLEUS T 1789 // 1790 1791 //***************** FISSION ************* 1792 // 1793 if (ftype == 1) 1794 { 1795 varntp->kfis = 1; 1796 if (NbLam0 > 0) 1797 varntp->kfis = 20; 1798 // ftype1=0; 1799 1800 G4int IEV_TAB_FIS = 0, imode = 0; 1801 1802 G4double vx1_fission = 0., vy1_fissio 1803 G4double vx2_fission = 0., vy2_fissio 1804 G4double vx_eva_sc = 0., vy_eva_sc = 1805 1806 fission(af, 1807 zf, 1808 ee, 1809 jprf0, 1810 &vx1_fission, 1811 &vy1_fission, 1812 &vz1_fission, 1813 &vx2_fission, 1814 &vy2_fission, 1815 &vz2_fission, 1816 &ZFP1, 1817 &AFP1, 1818 &SFP1, 1819 &ZFP2, 1820 &AFP2, 1821 &SFP2, 1822 &imode, 1823 &vx_eva_sc, 1824 &vy_eva_sc, 1825 &vz_eva_sc, 1826 EV_TEMP, 1827 &IEV_TAB_FIS, 1828 &NbLam0); 1829 1830 for (G4int IJ = 0; IJ < IEV_TAB_FIS; 1831 { 1832 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP 1833 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP 1834 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP 1835 // Lorentz kinematics 1836 // EV_TAB(IJ+IEV_TA 1837 // EV_TAB(IJ+IEV_TA 1838 // EV_TAB(IJ+IEV_TA 1839 // Lorentz transformation 1840 lorentz_boost( 1841 V_CM[0], V_CM[1], V_CM[2], EV 1842 EV_TAB[IJ + IEV_TAB][2] = VXOUT; 1843 EV_TAB[IJ + IEV_TAB][3] = VYOUT; 1844 EV_TAB[IJ + IEV_TAB][4] = VZOUT; 1845 } 1846 IEV_TAB = IEV_TAB + IEV_TAB_FIS; 1847 1848 // if(imode==1) ftype1 = 1; // S1 1849 // if(imode==2) ftype1 = 2; // S2 1850 1851 AFPIMF = 0; 1852 ZFPIMF = 0; 1853 SFPIMF = 0; 1854 1855 // VX_EVA_SC,VY_EVA_SC,VZ_EVA_SC - re 1856 // between saddle and scission 1857 // Lorentz kinematics 1858 // VFP1_CM(1) = V_CM(1) + VX1_ 1859 // in x VFP1_CM(2) = V_CM(2) + 1860 // FF1 in y VFP1_CM(3) = V_CM( 1861 // of FF1 in x 1862 lorentz_boost(vx1_fission, vy1_fissio 1863 lorentz_boost(vx_eva_sc, vy_eva_sc, v 1864 VFP1_CM[0] = VX2OUT; 1865 VFP1_CM[1] = VY2OUT; 1866 VFP1_CM[2] = VZ2OUT; 1867 1868 // Lorentz kinematics 1869 // VFP2_CM(1) = V_CM(1) + VX2_ 1870 // in x VFP2_CM(2) = V_CM(2) + 1871 // FF2 in y VFP2_CM(3) = V_CM( 1872 // of FF2 in x 1873 lorentz_boost(vx2_fission, vy2_fissio 1874 lorentz_boost(vx_eva_sc, vy_eva_sc, v 1875 VFP2_CM[0] = VX2OUT; 1876 VFP2_CM[1] = VY2OUT; 1877 VFP2_CM[2] = VZ2OUT; 1878 1879 //************** IMF EMISSION 1880 //*********************************** 1881 // 1882 } 1883 else if (ftype == 2) 1884 { 1885 // IMF emission: Heavy partner is all 1886 // ONLY once. 1887 G4int FF11 = 0; 1888 G4int FIMF11 = 0; 1889 opt->optimfallowed = 1; // IMF is al 1890 fiss->ifis = 1; // fission i 1891 // Lambda pa 1892 G4int NbLamH = 0; 1893 G4int NbLamimf = 0; 1894 G4double pbH = (af - zf) / (af - zf + 1895 // double pbL = aimf / (af+aimf); 1896 for (G4int i = 0; i < NbLam0; i++) 1897 { 1898 if (G4AblaRandom::flat() < pbH) 1899 { 1900 NbLamH++; 1901 } 1902 else 1903 { 1904 NbLamimf++; 1905 } 1906 } 1907 // 1908 // Velocities of IMF and partner: 1 1909 G4double EkinR1 = tkeimf * aimf / (af 1910 G4double EkinR2 = tkeimf * af / (af + 1911 G4double V1 = std::sqrt(EkinR1 / af) 1912 G4double V2 = std::sqrt(EkinR2 / aimf 1913 G4double VZ1_IMF = (2.0 * G4AblaRando 1914 G4double VPERP1 = std::sqrt(V1 * V1 - 1915 G4double ALPHA1 = G4AblaRandom::flat( 1916 G4double VX1_IMF = VPERP1 * std::sin( 1917 G4double VY1_IMF = VPERP1 * std::cos( 1918 G4double VX2_IMF = -VX1_IMF / V1 * V2 1919 G4double VY2_IMF = -VY1_IMF / V1 * V2 1920 G4double VZ2_IMF = -VZ1_IMF / V1 * V2 1921 1922 G4double EEIMFP = ee * af / (af + aim 1923 G4double EEIMF = ee * aimf / (af + ai 1924 1925 // Decay of heavy partner 1926 G4double IINERTTOT = 0.40 * 931.490 * 1927 931.490 * 1.160 1928 (std::pow(ai 1929 (std::pow(ai 1930 1931 G4double JPRFHEAVY = jprf0 * 0.4 * 93 1932 G4double JPRFLIGHT = jprf0 * 0.4 * 93 1933 if (af < 2.0) 1934 std::cout << "RN117-4,AF,ZF,EE,JP 1935 1936 G4double vx1ev_imf = 0., vy1ev_imf = 1937 1938 evapora(zf, 1939 af, 1940 &EEIMFP, 1941 JPRFHEAVY, 1942 &zff, 1943 &aff, 1944 &mtota, 1945 &vz1ev_imf, 1946 &vx1ev_imf, 1947 &vy1ev_imf, 1948 &FF11, 1949 &FIMF11, 1950 &zdummy, 1951 &adummy, 1952 &tkedummy, 1953 &jprf1, 1954 &inttype, 1955 &inum, 1956 EV_TEMP, 1957 &IEV_TAB_TEMP, 1958 &NbLamH); 1959 1960 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; 1961 { 1962 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP 1963 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP 1964 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP 1965 // 1966 // EV_TAB(IJ+IEV_TA 1967 // EV_TAB(IJ+IEV_TA 1968 // EV_TAB(IJ+IEV_TA 1969 // Lorentz transformation 1970 lorentz_boost( 1971 V_CM[0], V_CM[1], V_CM[2], EV 1972 lorentz_boost(vx1ev_imf, vy1ev_im 1973 EV_TAB[IJ + IEV_TAB][2] = VX2OUT; 1974 EV_TAB[IJ + IEV_TAB][3] = VY2OUT; 1975 EV_TAB[IJ + IEV_TAB][4] = VZ2OUT; 1976 } 1977 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1978 1979 // For IMF - fission and IMF emission 1980 G4int FF22 = 0; 1981 G4int FIMF22 = 0; 1982 opt->optimfallowed = 0; // IMF is no 1983 fiss->ifis = 0; // fission i 1984 1985 // Decay of IMF 1986 G4double zffimf, affimf, zdummy1 = 0. 1987 1988 evapora(zimf, 1989 aimf, 1990 &EEIMF, 1991 JPRFLIGHT, 1992 &zffimf, 1993 &affimf, 1994 &mtota, 1995 &vz2ev_imf, 1996 &vx2ev_imf, 1997 &vy2ev_imf, 1998 &FF22, 1999 &FIMF22, 2000 &zdummy1, 2001 &adummy1, 2002 &tkedummy1, 2003 &jprf2, 2004 &inttype, 2005 &inum, 2006 EV_TEMP, 2007 &IEV_TAB_TEMP, 2008 &NbLamimf); 2009 2010 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; 2011 { 2012 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP 2013 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP 2014 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP 2015 // 2016 // EV_TAB(IJ+IEV_TA 2017 // EV_TAB(IJ+IEV_TA 2018 // EV_TAB(IJ+IEV_TA 2019 // Lorentz transformation 2020 lorentz_boost( 2021 V_CM[0], V_CM[1], V_CM[2], EV 2022 lorentz_boost(VX2_IMF, VY2_IMF, V 2023 EV_TAB[IJ + IEV_TAB][2] = VX2OUT; 2024 EV_TAB[IJ + IEV_TAB][3] = VY2OUT; 2025 EV_TAB[IJ + IEV_TAB][4] = VZ2OUT; 2026 } 2027 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 2028 // As IMF is not allowed to emit IMF, 2029 2030 AFPIMF = idnint(affimf); 2031 ZFPIMF = idnint(zffimf); 2032 SFPIMF = NbLamimf; 2033 2034 // vi1_imf, vi2_imf - velocities of i 2035 // vi1ev_imf, vi2_imf - recoil of par 2036 // Lorentz kinematics - DM 18/5/2010 2037 // VIMF_CM(1) = V_CM(1) + VX2_ 2038 // VIMF_CM(2) = V_CM(2) + VY2_ 2039 // VIMF_CM(3) = V_CM(3) + VZ2_ 2040 lorentz_boost(VX2_IMF, VY2_IMF, VZ2_I 2041 lorentz_boost(vx2ev_imf, vy2ev_imf, v 2042 VIMF_CM[0] = VX2OUT; 2043 VIMF_CM[1] = VY2OUT; 2044 VIMF_CM[2] = VZ2OUT; 2045 // Lorentz kinematics 2046 // VFP1_CM(1) = V_CM(1) + VX1_I 2047 // VFP1_CM(2) = V_CM(2) + VY1_I 2048 // VFP1_CM(3) = V_CM(3) + VZ1_I 2049 lorentz_boost(VX1_IMF, VY1_IMF, VZ1_I 2050 lorentz_boost(vx1ev_imf, vy1ev_imf, v 2051 VFP1_CM[0] = VX2OUT; 2052 VFP1_CM[1] = VY2OUT; 2053 VFP1_CM[2] = VZ2OUT; 2054 2055 if (FF11 == 0 && FIMF11 == 0) 2056 { 2057 // heavy partner deexcites by emi 2058 AFP1 = idnint(aff); 2059 ZFP1 = idnint(zff); 2060 SFP1 = NbLamH; 2061 ZFP2 = 0; 2062 AFP2 = 0; 2063 SFP2 = 0; 2064 ftype = 2; 2065 AFPIMF = idnint(affimf); 2066 ZFPIMF = idnint(zffimf); 2067 SFPIMF = NbLamimf; 2068 for (G4int I = 0; I < 3; I++) 2069 VFP2_CM[I] = 0.0; 2070 } 2071 else if (FF11 == 1 && FIMF11 == 0) 2072 { 2073 // Heavy partner fissions 2074 varntp->kfis = 1; 2075 if (NbLam0 > 0) 2076 varntp->kfis = 20; 2077 // 2078 opt->optimfallowed = 0; // IMF i 2079 fiss->ifis = 0; // fissi 2080 // 2081 zf = zff; 2082 af = aff; 2083 ee = EEIMFP; 2084 // ftype1=0; 2085 ftype = 21; 2086 2087 G4int IEV_TAB_FIS = 0, imode = 0; 2088 2089 G4double vx1_fission = 0., vy1_fi 2090 G4double vx2_fission = 0., vy2_fi 2091 G4double vx_eva_sc = 0., vy_eva_s 2092 2093 fission(af, 2094 zf, 2095 ee, 2096 jprf1, 2097 &vx1_fission, 2098 &vy1_fission, 2099 &vz1_fission, 2100 &vx2_fission, 2101 &vy2_fission, 2102 &vz2_fission, 2103 &ZFP1, 2104 &AFP1, 2105 &SFP1, 2106 &ZFP2, 2107 &AFP2, 2108 &SFP2, 2109 &imode, 2110 &vx_eva_sc, 2111 &vy_eva_sc, 2112 &vz_eva_sc, 2113 EV_TEMP, 2114 &IEV_TAB_FIS, 2115 &NbLamH); 2116 2117 for (int IJ = 0; IJ < IEV_TAB_FIS 2118 { 2119 EV_TAB[IJ + IEV_TAB][0] = EV_ 2120 EV_TAB[IJ + IEV_TAB][1] = EV_ 2121 EV_TAB[IJ + IEV_TAB][5] = EV_ 2122 // Lorentz kinematics 2123 // EV_TAB(IJ+IE 2124 // EV_TAB(IJ+IE 2125 // EV_TAB(IJ+IE 2126 // Lorentz transformation 2127 lorentz_boost(VFP1_CM[0], 2128 VFP1_CM[1], 2129 VFP1_CM[2], 2130 EV_TEMP[IJ][2], 2131 EV_TEMP[IJ][3], 2132 EV_TEMP[IJ][4], 2133 &VXOUT, 2134 &VYOUT, 2135 &VZOUT); 2136 EV_TAB[IJ + IEV_TAB][2] = VXO 2137 EV_TAB[IJ + IEV_TAB][3] = VYO 2138 EV_TAB[IJ + IEV_TAB][4] = VZO 2139 } 2140 IEV_TAB = IEV_TAB + IEV_TAB_FIS; 2141 2142 // if(imode==1) ftype1 = 1; / 2143 // if(imode==2) ftype1 = 2; / 2144 2145 // Lorentz kinematics 2146 // VFP1_CM(1) = V_CM(1) + 2147 // & VX_EVA_SC 2148 // VFP1_CM(2) = V_CM(2) + 2149 // & VY_EVA_SC 2150 // VFP1_CM(3) = V_CM(3) + 2151 // & VZ_EVA_SC 2152 lorentz_boost(VX1_IMF, VY1_IMF, V 2153 lorentz_boost(vx1ev_imf, vy1ev_im 2154 lorentz_boost(vx1_fission, vy1_fi 2155 lorentz_boost(vx_eva_sc, vy_eva_s 2156 VFP1_CM[0] = VX2OUT; 2157 VFP1_CM[1] = VY2OUT; 2158 VFP1_CM[2] = VZ2OUT; 2159 2160 // Lorentz kinematics 2161 // VFP2_CM(1) = V_CM(1) + 2162 // & VX_EVA_SC 2163 // VFP2_CM(2) = V_CM(2) + 2164 // & VY_EVA_SC 2165 // VFP2_CM(3) = V_CM(3) + 2166 // & VZ_EVA_SC 2167 lorentz_boost(VX1_IMF, VY1_IMF, V 2168 lorentz_boost(vx1ev_imf, vy1ev_im 2169 lorentz_boost(vx2_fission, vy2_fi 2170 lorentz_boost(vx_eva_sc, vy_eva_s 2171 VFP2_CM[0] = VX2OUT; 2172 VFP2_CM[1] = VY2OUT; 2173 VFP2_CM[2] = VZ2OUT; 2174 } 2175 else if (FF11 == 0 && FIMF11 == 1) 2176 { 2177 // Heavy partner emits imf, conse 2178 // allowed 2179 opt->optimfallowed = 0; // IMF i 2180 fiss->ifis = 0; // fissi 2181 // 2182 zf = zff; 2183 af = aff; 2184 ee = EEIMFP; 2185 aimf = adummy; 2186 zimf = zdummy; 2187 tkeimf = tkedummy; 2188 FF11 = 0; 2189 FIMF11 = 0; 2190 ftype = 22; 2191 // Lambda particles 2192 G4int NbLamH1 = 0; 2193 G4int NbLamimf1 = 0; 2194 G4double pbH1 = (af - zf) / (af - 2195 for (G4int i = 0; i < NbLamH; i++ 2196 { 2197 if (G4AblaRandom::flat() < pb 2198 { 2199 NbLamH1++; 2200 } 2201 else 2202 { 2203 NbLamimf1++; 2204 } 2205 } 2206 // 2207 // Velocities of IMF and partner: 2208 EkinR1 = tkeimf * aimf / (af + ai 2209 EkinR2 = tkeimf * af / (af + aimf 2210 V1 = std::sqrt(EkinR1 / af) * 1.3 2211 V2 = std::sqrt(EkinR2 / aimf) * 1 2212 G4double VZ1_IMFS = (2.0 * G4Abla 2213 VPERP1 = std::sqrt(V1 * V1 - VZ1_ 2214 ALPHA1 = G4AblaRandom::flat() * 2 2215 G4double VX1_IMFS = VPERP1 * std: 2216 G4double VY1_IMFS = VPERP1 * std: 2217 G4double VX2_IMFS = -VX1_IMFS / V 2218 G4double VY2_IMFS = -VY1_IMFS / V 2219 G4double VZ2_IMFS = -VZ1_IMFS / V 2220 2221 EEIMFP = ee * af / (af + aimf); 2222 EEIMF = ee * aimf / (af + aimf); 2223 2224 // Decay of heavy partner 2225 IINERTTOT = 0.40 * 931.490 * 1.16 2226 931.490 * 1.160 * 1.1 2227 (std::pow(aimf, 1 2228 (std::pow(aimf, 1 2229 2230 JPRFHEAVY = jprf1 * 0.4 * 931.49 2231 JPRFLIGHT = jprf1 * 0.4 * 931.49 2232 2233 G4double zffs = 0., affs = 0., vx 2234 2235 evapora(zf, 2236 af, 2237 &EEIMFP, 2238 JPRFHEAVY, 2239 &zffs, 2240 &affs, 2241 &mtota, 2242 &vz1ev_imfs, 2243 &vx1ev_imfs, 2244 &vy1ev_imfs, 2245 &FF11, 2246 &FIMF11, 2247 &zdummy, 2248 &adummy, 2249 &tkedummy, 2250 &jprf3, 2251 &inttype, 2252 &inum, 2253 EV_TEMP, 2254 &IEV_TAB_TEMP, 2255 &NbLamH1); 2256 2257 for (G4int IJ = 0; IJ < IEV_TAB_T 2258 { 2259 EV_TAB[IJ + IEV_TAB][0] = EV_ 2260 EV_TAB[IJ + IEV_TAB][1] = EV_ 2261 EV_TAB[IJ + IEV_TAB][5] = EV_ 2262 // 2263 // EV_TAB(IJ+IE 2264 // EV_TAB(IJ+IE 2265 // EV_TAB(IJ+IE 2266 // Lorentz transformation 2267 lorentz_boost(VFP1_CM[0], 2268 VFP1_CM[1], 2269 VFP1_CM[2], 2270 EV_TEMP[IJ][2], 2271 EV_TEMP[IJ][3], 2272 EV_TEMP[IJ][4], 2273 &VXOUT, 2274 &VYOUT, 2275 &VZOUT); 2276 lorentz_boost(vx1ev_imfs, vy1 2277 EV_TAB[IJ + IEV_TAB][2] = VX2 2278 EV_TAB[IJ + IEV_TAB][3] = VY2 2279 EV_TAB[IJ + IEV_TAB][4] = VZ2 2280 } 2281 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 2282 2283 // For IMF - fission and IMF emis 2284 opt->optimfallowed = 0; // IMF i 2285 fiss->ifis = 0; // fissi 2286 // 2287 FF22 = 0; 2288 FIMF22 = 0; 2289 // Decay of "second" IMF 2290 G4double zffimfs = 0., affimfs = 2291 2292 evapora(zimf, 2293 aimf, 2294 &EEIMF, 2295 JPRFLIGHT, 2296 &zffimfs, 2297 &affimfs, 2298 &mtota, 2299 &vz2ev_imfs, 2300 &vx2ev_imfs, 2301 &vy2ev_imfs, 2302 &FF22, 2303 &FIMF22, 2304 &zdummy1, 2305 &adummy1, 2306 &tkedummy1, 2307 &jprf4, 2308 &inttype, 2309 &inum, 2310 EV_TEMP, 2311 &IEV_TAB_TEMP, 2312 &NbLamimf1); 2313 2314 for (G4int IJ = 0; IJ < IEV_TAB_T 2315 { 2316 EV_TAB[IJ + IEV_TAB][0] = EV_ 2317 EV_TAB[IJ + IEV_TAB][1] = EV_ 2318 EV_TAB[IJ + IEV_TAB][5] = EV_ 2319 // 2320 // EV_TAB(IJ+IE 2321 // EV_TAB(IJ+IE 2322 // EV_TAB(IJ+IE 2323 // Lorentz transformation 2324 lorentz_boost(VFP1_CM[0], 2325 VFP1_CM[1], 2326 VFP1_CM[2], 2327 EV_TEMP[IJ][2], 2328 EV_TEMP[IJ][3], 2329 EV_TEMP[IJ][4], 2330 &VXOUT, 2331 &VYOUT, 2332 &VZOUT); 2333 lorentz_boost(vx2ev_imfs, vy2 2334 EV_TAB[IJ + IEV_TAB][2] = VX2 2335 EV_TAB[IJ + IEV_TAB][3] = VY2 2336 EV_TAB[IJ + IEV_TAB][4] = VZ2 2337 } 2338 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 2339 2340 AFP1 = idnint(affs); 2341 ZFP1 = idnint(zffs); 2342 SFP1 = NbLamH1; 2343 ZFP2 = idnint(zffimfs); 2344 AFP2 = idnint(affimfs); 2345 SFP2 = NbLamimf1; 2346 2347 // Velocity of final heavy residu 2348 // Lorentz kinematics 2349 // VFP1_CM(1) = V_CM(1) + V 2350 // VFP1_CM(2) = V_CM(2) + V 2351 // VFP1_CM(3) = V_CM(3) + V 2352 lorentz_boost(VX1_IMF, VY1_IMF, V 2353 lorentz_boost(vx1ev_imf, vy1ev_im 2354 lorentz_boost(VX1_IMFS, VY1_IMFS, 2355 lorentz_boost(vx1ev_imfs, vy1ev_i 2356 VFP1_CM[0] = VX2OUT; 2357 VFP1_CM[1] = VY2OUT; 2358 VFP1_CM[2] = VZ2OUT; 2359 2360 // Velocity of the second IMF 2361 // Lorentz kinematics 2362 // VFP1_CM(1) = V_CM(1) + V 2363 // VFP1_CM(2) = V_CM(2) + V 2364 // VFP1_CM(3) = V_CM(3) + V 2365 lorentz_boost(VX1_IMF, VY1_IMF, V 2366 lorentz_boost(vx1ev_imf, vy1ev_im 2367 lorentz_boost(VX2_IMFS, VY2_IMFS, 2368 lorentz_boost(vx2ev_imfs, vy2ev_i 2369 VFP2_CM[0] = VX2OUT; 2370 VFP2_CM[1] = VY2OUT; 2371 VFP2_CM[2] = VZ2OUT; 2372 } // second decay 2373 } // if(ftype == 2) 2374 2375 // Only evaporation of light particles 2376 if (ftype != 1 && ftype != 21) 2377 { 2378 2379 // ----------- RESOLVE UNSTABLE NUCLE 2380 IOUNSTABLE = 0; 2381 2382 unstable_nuclei(AFP1, 2383 ZFP1, 2384 &afpnew, 2385 &zfpnew, 2386 IOUNSTABLE, 2387 VFP1_CM[0], 2388 VFP1_CM[1], 2389 VFP1_CM[2], 2390 &VP1X, 2391 &VP1Y, 2392 &VP1Z, 2393 EV_TAB_TEMP, 2394 &ILOOP); 2395 2396 if (IOUNSTABLE == 1) 2397 { 2398 AFP1 = afpnew; 2399 ZFP1 = zfpnew; 2400 VFP1_CM[0] = VP1X; 2401 VFP1_CM[1] = VP1Y; 2402 VFP1_CM[2] = VP1Z; 2403 for (G4int I = 0; I < ILOOP; I++) 2404 { 2405 for (G4int IJ = 0; IJ < 5; IJ 2406 EV_TAB[I + IEV_TAB][IJ] = 2407 } 2408 IEV_TAB = IEV_TAB + ILOOP; 2409 } 2410 2411 if (ftype > 1) 2412 { 2413 IOUNSTABLE = 0; 2414 2415 unstable_nuclei(AFPIMF, 2416 ZFPIMF, 2417 &afpnew, 2418 &zfpnew, 2419 IOUNSTABLE, 2420 VIMF_CM[0], 2421 VIMF_CM[1], 2422 VIMF_CM[2], 2423 &VP1X, 2424 &VP1Y, 2425 &VP1Z, 2426 EV_TAB_TEMP, 2427 &ILOOP); 2428 2429 if (IOUNSTABLE == 1) 2430 { 2431 AFPIMF = afpnew; 2432 ZFPIMF = zfpnew; 2433 VIMF_CM[0] = VP1X; 2434 VIMF_CM[1] = VP1Y; 2435 VIMF_CM[2] = VP1Z; 2436 for (G4int I = 0; I < ILOOP; 2437 { 2438 for (G4int IJ = 0; IJ < 5 2439 EV_TAB[I + IEV_TAB][I 2440 } 2441 IEV_TAB = IEV_TAB + ILOOP; 2442 } 2443 2444 if (ftype > 2) 2445 { 2446 IOUNSTABLE = 0; 2447 2448 unstable_nuclei(AFP2, 2449 ZFP2, 2450 &afpnew, 2451 &zfpnew, 2452 IOUNSTABLE, 2453 VFP2_CM[0], 2454 VFP2_CM[1], 2455 VFP2_CM[2], 2456 &VP1X, 2457 &VP1Y, 2458 &VP1Z, 2459 EV_TAB_TEMP, 2460 &ILOOP); 2461 2462 if (IOUNSTABLE == 1) 2463 { 2464 AFP2 = afpnew; 2465 ZFP2 = zfpnew; 2466 VFP2_CM[0] = VP1X; 2467 VFP2_CM[1] = VP1Y; 2468 VFP2_CM[2] = VP1Z; 2469 for (G4int I = 0; I < ILO 2470 { 2471 for (G4int IJ = 0; IJ 2472 EV_TAB[I + IEV_TA 2473 } 2474 IEV_TAB = IEV_TAB + ILOOP 2475 } 2476 } // ftype>2 2477 } // ftype>1 2478 } 2479 2480 // For the case of fission: 2481 if (ftype == 1 || ftype == 21) 2482 { 2483 // ----------- RESOLVE UNSTABLE NUCLE 2484 IOUNSTABLE = 0; 2485 // ----------- Fragment 1 2486 unstable_nuclei(AFP1, 2487 ZFP1, 2488 &afpnew, 2489 &zfpnew, 2490 IOUNSTABLE, 2491 VFP1_CM[0], 2492 VFP1_CM[1], 2493 VFP1_CM[2], 2494 &VP1X, 2495 &VP1Y, 2496 &VP1Z, 2497 EV_TAB_TEMP, 2498 &ILOOP); 2499 2500 if (IOUNSTABLE == 1) 2501 { 2502 AFP1 = afpnew; 2503 ZFP1 = zfpnew; 2504 VFP1_CM[0] = VP1X; 2505 VFP1_CM[1] = VP1Y; 2506 VFP1_CM[2] = VP1Z; 2507 for (G4int I = 0; I < ILOOP; I++) 2508 { 2509 for (G4int IJ = 0; IJ < 5; IJ 2510 EV_TAB[I + IEV_TAB][IJ] = 2511 } 2512 IEV_TAB = IEV_TAB + ILOOP; 2513 } 2514 2515 IOUNSTABLE = 0; 2516 // ----------- Fragment 2 2517 unstable_nuclei(AFP2, 2518 ZFP2, 2519 &afpnew, 2520 &zfpnew, 2521 IOUNSTABLE, 2522 VFP2_CM[0], 2523 VFP2_CM[1], 2524 VFP2_CM[2], 2525 &VP1X, 2526 &VP1Y, 2527 &VP1Z, 2528 EV_TAB_TEMP, 2529 &ILOOP); 2530 2531 if (IOUNSTABLE == 1) 2532 { 2533 AFP2 = afpnew; 2534 ZFP2 = zfpnew; 2535 VFP2_CM[0] = VP1X; 2536 VFP2_CM[1] = VP1Y; 2537 VFP2_CM[2] = VP1Z; 2538 for (G4int I = 0; I < ILOOP; I++) 2539 { 2540 for (G4int IJ = 0; IJ < 5; IJ 2541 EV_TAB[I + IEV_TAB][IJ] = 2542 } 2543 IEV_TAB = IEV_TAB + ILOOP; 2544 } 2545 2546 if (ftype == 21) 2547 { 2548 IOUNSTABLE = 0; 2549 // ----------- Fragment IMF 2550 unstable_nuclei(AFPIMF, 2551 ZFPIMF, 2552 &afpnew, 2553 &zfpnew, 2554 IOUNSTABLE, 2555 VIMF_CM[0], 2556 VIMF_CM[1], 2557 VIMF_CM[2], 2558 &VP1X, 2559 &VP1Y, 2560 &VP1Z, 2561 EV_TAB_TEMP, 2562 &ILOOP); 2563 2564 if (IOUNSTABLE == 1) 2565 { 2566 AFPIMF = afpnew; 2567 ZFPIMF = zfpnew; 2568 VIMF_CM[0] = VP1X; 2569 VIMF_CM[1] = VP1Y; 2570 VIMF_CM[2] = VP1Z; 2571 for (G4int I = 0; I < ILOOP; 2572 { 2573 for (G4int IJ = 0; IJ < 5 2574 EV_TAB[I + IEV_TAB][I 2575 } 2576 IEV_TAB = IEV_TAB + ILOOP; 2577 } 2578 } // ftype=21 2579 } 2580 2581 // Cross check 2582 if ((ftype == 1 || ftype == 21) && (AFP2 2583 { 2584 std::cout << "ZFP1:" << ZFP1 << std:: 2585 std::cout << "AFP1:" << AFP1 << std:: 2586 std::cout << "ZFP2:" << ZFP2 << std:: 2587 std::cout << "AFP2:" << AFP2 << std:: 2588 } 2589 2590 // Put heavy residues in the EV_TAB a 2591 EV_TAB[IEV_TAB][0] = ZFP1; 2592 EV_TAB[IEV_TAB][1] = AFP1; 2593 EV_TAB[IEV_TAB][5] = SFP1; 2594 EV_TAB[IEV_TAB][2] = VFP1_CM[0]; 2595 EV_TAB[IEV_TAB][3] = VFP1_CM[1]; 2596 EV_TAB[IEV_TAB][4] = VFP1_CM[2]; 2597 IEV_TAB = IEV_TAB + 1; 2598 2599 if (AFP2 > 0) 2600 { 2601 EV_TAB[IEV_TAB][0] = ZFP2; 2602 EV_TAB[IEV_TAB][1] = AFP2; 2603 EV_TAB[IEV_TAB][5] = SFP2; 2604 EV_TAB[IEV_TAB][2] = VFP2_CM[0]; 2605 EV_TAB[IEV_TAB][3] = VFP2_CM[1]; 2606 EV_TAB[IEV_TAB][4] = VFP2_CM[2]; 2607 IEV_TAB = IEV_TAB + 1; 2608 } 2609 2610 if (AFPIMF > 0) 2611 { 2612 EV_TAB[IEV_TAB][0] = ZFPIMF; 2613 EV_TAB[IEV_TAB][1] = AFPIMF; 2614 EV_TAB[IEV_TAB][5] = SFPIMF; 2615 EV_TAB[IEV_TAB][2] = VIMF_CM[0]; 2616 EV_TAB[IEV_TAB][3] = VIMF_CM[1]; 2617 EV_TAB[IEV_TAB][4] = VIMF_CM[2]; 2618 IEV_TAB = IEV_TAB + 1; 2619 } 2620 // Put the array of particles in the root 2621 FillData(IMULTBU, IEV_TAB); 2622 return; 2623 } 2624 2625 // Evaporation code 2626 void G4Abla::initEvapora() 2627 { 2628 2629 // 40 C BFPRO,S 2630 // 41 C 2631 // 42 C AP,ZP,AT,ZT - PROJECTIL 2632 // 43 C EAP,BETA - BEAM ENER 2633 // 44 C BMAXNUC - MAX. IMPA 2634 // 45 C CRTOT,CRNUC - TOTAL AND 2635 // 46 C R_0,R_P,R_T, - RADIUS PA 2636 // 47 C IMAX,IRNDM,PI - MAXIMUM N 2637 // 48 C BFPRO - FISSION B 2638 // 49 C SNPRO - NEUTRON S 2639 // PROJECTILE 50 C SPPRO 2640 // 51 C SHELL - GROUND ST 2641 // 52 2642 // C--------------------------------- 2643 // 53 C 2644 // 54 C ENERGIES WIDTHS AND CROSS 2645 // 55 C COMMON /EMDPAR/ EGDR,EGQR 2646 // 56 C AE1,BE1,C 2647 // 57 C 2648 // 58 C EGDR,EGQR - MEAN EN 2649 // 59 C FWHMGDR,FWHMGQR - FWHM OF 2650 // 60 C CREMDE1,CREMDE2 - EM CROS 2651 // 61 C AE1,BE1,CE1 - ARRAYS 2652 // 62 C AE2,BE2,CE2 - THE EXC 2653 // 63 C SR1,SR2,XR - WITH MO 2654 // 64 2655 // C--------------------------------- 2656 // 65 C 2657 // 66 C DEFORMATIONS AND G.S. SHE 2658 // 67 C COMMON /ECLD/ ECGNZ,ECF 2659 // 68 C 2660 // 69 C ECGNZ - GROUND STATE SHEL 2661 // G.S. 2662 // 70 C ECFNZ - SHELL CORRECTION 2663 // 71 C VGSLD - DIFFERENCE BETWEE 2664 // 72 C ALPHA - ALPHA GROUND STAT 2665 // BETA2!) 73 C BETA2 = S 2666 // C--------------------------------- 2667 // 75 C 2668 // 76 C ARRAYS FOR EXCITATION ENE 2669 // MODEL 77 C COMMON /EENUC/ SHE 2670 // XHE - ARRAYS TO CALCULATE THE EXC. 2671 // THE STATISTICAL HOLE ENERGY MODEL 2672 // C--------------------------------- 2673 // 82 C 2674 // 83 C G.S. SHELL EFFECT 2675 // 84 C COMMON /EC2SUB/ ECNZ 2676 // 85 C 2677 // 86 C ECNZ G.S. SHELL EFFECT FO 2678 // 87 2679 // C--------------------------------- 2680 // 2681 2682 G4double MN = 939.5653301; 2683 G4double MP = 938.7829835; 2684 2685 G4AblaDataFile* dataInterface = new G4Abl 2686 if (dataInterface->readData() == true) 2687 { 2688 if (verboseLevel > 0) 2689 { 2690 // G4cout <<"G4Abla: Datafiles re 2691 } 2692 } 2693 else 2694 { 2695 // G4Exception("ERROR: Failed to r 2696 } 2697 2698 for (G4int z = 0; z < 99; z++) 2699 { // do 30 z = 0,98,1 2700 for (G4int n = 0; n < 154; n++) 2701 { // do 31 n = 0,153,1 2702 ecld->ecfnz[n][z] = 0.e0; 2703 ec2sub->ecnz[n][z] = dataInterfac 2704 ecld->ecgnz[n][z] = dataInterface 2705 ecld->alpha[n][z] = dataInterface 2706 ecld->vgsld[n][z] = dataInterface 2707 ecld->rms[n][z] = dataInterface-> 2708 } 2709 } 2710 2711 for (G4int iz = 0; iz < zcolsbeta; iz++) 2712 for (G4int in = 0; in < nrowsbeta; in 2713 { 2714 ecld->beta2[in][iz] = dataInterfa 2715 ecld->beta4[in][iz] = dataInterfa 2716 } 2717 2718 G4double mfrldm[lprows][lpcols]; 2719 // For 2 < Z < 12 we take "experimental" 2720 // calculated Read FRLDM tables 2721 for (G4int i = 1; i < lpcols; i++) 2722 { 2723 for (G4int j = 1; j < lprows; j++) 2724 { 2725 if (dataInterface->getMexpID(j, i 2726 { 2727 masses->mexpiop[j][i] = 1; 2728 } 2729 else 2730 { 2731 masses->mexpiop[j][i] = 0; 2732 } 2733 // LD masses (even-odd effect is 2734 if (i == 0 && j == 0) 2735 mfrldm[j][i] = 0.; 2736 else 2737 mfrldm[j][i] = MP * i + MN * 2738 } 2739 } 2740 2741 for (G4int i = 0; i < lpcols; i++) 2742 for (G4int j = 0; j < lprows; j++) 2743 masses->massexp[j][i] = dataInter 2744 2745 G4double e0 = 0.; 2746 for (G4int i = 1; i < lpcols; i++) 2747 { 2748 for (G4int j = 1; j < lprows; j++) 2749 { 2750 masses->bind[j][i] = 0.; 2751 if (masses->mexpiop[j][i] == 1) 2752 { 2753 if (j < 30) 2754 { 2755 2756 ec2sub->ecnz[j][i] = 0.0; 2757 ecld->ecgnz[j][i] = ec2su 2758 masses->bind[j][i] = data 2759 ecld->vgsld[j][i] = 0.; 2760 2761 e0 = 0.; 2762 } 2763 else 2764 { 2765 // For these nuclei, we t 2766 // corrections 2767 // 2768 // Parametrization of CT 2769 // correspond to pairing 2770 // shifted taking odd-odd 2771 G4double para = 0.; 2772 parite(j + i, ¶); 2773 if (para < 0.0) 2774 { 2775 // e-o, o-e 2776 e0 = 0.285 + 11.17 * 2777 } 2778 else 2779 { 2780 G4double parz = 0.; 2781 parite(i, &parz); 2782 if (parz > 0.0) 2783 { 2784 // e-e 2785 e0 = 22.34 * std: 2786 } 2787 else 2788 { 2789 // o-o 2790 // 2791 // 2792 e0 = 0.0; 2793 } 2794 } 2795 // 2796 if ((j == i) && mod(j, 2) 2797 { 2798 e0 = e0 - 30.0 * (1.0 2799 } 2800 2801 G4double delta_tot = ec2s 2802 ec2sub->ecnz[j][i] = data 2803 2804 ecld->vgsld[j][i] = max(0 2805 ecld->ecgnz[j][i] = ec2su 2806 2807 } // if j 2808 } // if mexpiop 2809 } 2810 } 2811 // 2812 delete dataInterface; 2813 } 2814 2815 void G4Abla::SetParametersG4(G4int z, G4int a 2816 { 2817 // A and Z for the target 2818 fiss->at = a; 2819 fiss->zt = z; 2820 2821 // switch-fission.1=on.0=off 2822 fiss->ifis = 1; 2823 2824 // shell+pairing.0-1-2-3 2825 fiss->optshp = 3; 2826 if (fiss->zt < 84 && fiss->zt > 60) 2827 fiss->optshp = 1; 2828 2829 // optemd =0,1 0 no emd, 1 incl. emd 2830 opt->optemd = 1; 2831 // read(10,*,iostat=io) dum(10),optcha 2832 opt->optcha = 1; 2833 2834 // shell+pairing.0-1-2-3 for IMFs 2835 opt->optshpimf = 0; 2836 opt->optimfallowed = 1; 2837 2838 // collective enhancement switched on 1 o 2839 fiss->optcol = 1; 2840 if (fiss->zt <= 28) 2841 { 2842 fiss->optcol = 0; 2843 fiss->optshp = 0; 2844 opt->optshpimf = 1; 2845 } 2846 else if (fiss->zt <= 58) 2847 { 2848 fiss->optcol = 0; 2849 fiss->optshp = 1; 2850 opt->optshpimf = 3; 2851 } 2852 // collective enhancement parameters 2853 fiss->ucr = 40.; 2854 fiss->dcr = 10.; 2855 2856 // switch for temperature constant model 2857 fiss->optct = 1; 2858 2859 ald->optafan = 0; 2860 2861 // nuclear.viscosity.(beta) 2862 fiss->bet = 4.5; 2863 fiss->bethyp = 28.0; 2864 fiss->optxfis = 3; 2865 2866 // Level density parameters 2867 ald->av = 0.0730; 2868 ald->as = 0.0950; 2869 ald->ak = 0.0000; 2870 2871 // Multi-fragmentation 2872 T_freeze_out_in = -6.5; 2873 } 2874 2875 void G4Abla::SetParameters() 2876 { 2877 /* 2878 C IFIS = INTEGER SWITCH FOR FISSION 2879 C OPTSHP = INTEGER SWITCH FOR SHELL C 2880 C =0 NO MICROSCOPIC CORRECTION 2881 C =1 SHELL , NO PAIRING CORREC 2882 C =2 PAIRING, NO SHELL CORRECT 2883 C =3 SHELL AND PAIRING CORRECT 2884 C OPTCOL =0,1 COLLECTIVE ENHANCEMENT 2885 C OPTAFAN=0,1 SWITCH FOR AF/AN = 1 IN 2886 C BET = REAL REDUCED FRICTION CO 2887 C OPTXFIS= INTEGER 0,1,2 FOR MYERS & 2888 C FISSILITY PARAMETER. 2889 C 2890 C NUCLEAR LEVEL DENSITIES: 2891 C AV = REAL KOEFFICIENTS FOR CALC 2892 C AS = REAL LEVEL DENSITY PARAMET 2893 C AK = REAL 2894 */ 2895 2896 // switch-fission.1=on.0=off 2897 fiss->ifis = 1; 2898 2899 // shell+pairing.0-1-2-3 2900 fiss->optshp = 3; 2901 if (fiss->zt < 84 && fiss->zt > 56) 2902 fiss->optshp = 1; 2903 2904 // optemd =0,1 0 no emd, 1 incl. emd 2905 opt->optemd = 1; 2906 // read(10,*,iostat=io) dum(10),optcha 2907 opt->optcha = 1; 2908 2909 // shell+pairing.0-1-2-3 for IMFs 2910 opt->optshpimf = 0; 2911 opt->optimfallowed = 1; 2912 2913 // nuclear.viscosity.(beta) 2914 fiss->bet = 4.5; 2915 2916 // collective enhancement switched on 1 o 2917 fiss->optcol = 1; 2918 if (fiss->zt <= 56) 2919 { 2920 fiss->optcol = 0; 2921 fiss->optshp = 3; 2922 } 2923 // collective enhancement parameters 2924 fiss->ucr = 40.; 2925 fiss->dcr = 10.; 2926 2927 // switch for temperature constant model 2928 fiss->optct = 1; 2929 2930 ald->optafan = 0; 2931 2932 ald->av = 0.0730; 2933 ald->as = 0.0950; 2934 ald->ak = 0.0000; 2935 2936 fiss->optxfis = 3; 2937 2938 // Multi-fragmentation 2939 T_freeze_out_in = -6.5; 2940 } 2941 2942 void G4Abla::mglw(G4double a, G4double z, G4d 2943 { 2944 // MODEL DE LA GOUTTE LIQUIDE DE C. F. WE 2945 // USUALLY AN OBSOLETE OPTION 2946 2947 G4double xv = 0.0, xs = 0.0, xc = 0.0, xa 2948 2949 if ((a <= 0.01) || (z < 0.01)) 2950 { 2951 (*el) = 1.0e38; 2952 } 2953 else 2954 { 2955 xv = -15.56 * a; 2956 xs = 17.23 * std::pow(a, (2.0 / 3.0)) 2957 2958 if (a > 1.0) 2959 { 2960 xc = 0.7 * z * (z - 1.0) * std::p 2961 } 2962 else 2963 { 2964 xc = 0.0; 2965 } 2966 } 2967 2968 xa = 23.6 * (std::pow((a - 2.0 * z), 2) / 2969 (*el) = xv + xs + xc + xa; 2970 return; 2971 } 2972 2973 void G4Abla::mglms(G4double a, G4double z, G4 2974 { 2975 // USING FUNCTION EFLMAC(IA,IZ,0) 2976 // 2977 // REFOPT4 = 0 : WITHOUT MICROSCOPIC CORR 2978 // REFOPT4 = 1 : WITH SHELL CORRECTION 2979 // REFOPT4 = 2 : WITH PAIRING CORRECTION 2980 // REFOPT4 = 3 : WITH SHELL- AND PAIRING 2981 2982 // 1839 2983 // C----------------------------------- 2984 // 1840 C A1 LOCAL MASS NU 2985 // 1841 C Z1 LOCAL NUCLEAR 2986 // 1842 C REFOPT4 OPTION, 2987 // ABOVE) 1843 C A 2988 // NUCLEAR CHARGE 1845 C DEL 2989 // C EL BINDING ENER 2990 // SHELL CORRECTIONS 1848 2991 // C----------------------------------- 2992 // 1849 C 2993 G4int a1 = idnint(a); 2994 G4int z1 = idnint(z); 2995 G4int n1 = a1 - z1; 2996 2997 if ((a1 <= 0) || (z1 <= 0) || ((a1 - z1) 2998 { // then 2999 // modif pour recuperer une masse p e 3000 (*el) = 1.e38; 3001 return; 3002 // goto mglms50; 3003 } 3004 else 3005 { 3006 // binding energy incl. pairing contr 3007 // function eflmac 3008 (*el) = eflmac(a1, z1, 0, refopt4); 3009 3010 if (refopt4 > 0) 3011 { 3012 if (refopt4 != 2) 3013 { 3014 (*el) = (*el) + ec2sub->ecnz[ 3015 } 3016 } 3017 3018 if (z1 >= 90) 3019 { 3020 if (n1 <= 145) 3021 { 3022 (*el) = (*el) + (12.552 - 0.1 3023 } 3024 else 3025 { 3026 if (n1 > 145 && n1 <= 152) 3027 { 3028 (*el) = (*el) + ((152.4 - 3029 } 3030 } 3031 } 3032 } 3033 return; 3034 } 3035 3036 G4double G4Abla::spdef(G4int a, G4int z, G4in 3037 { 3038 3039 // INPUT: A,Z,OPTXFIS MASS AND CHARGE OF 3040 // OPTION FOR FISSILITY 3041 // OUTPUT: SPDEF 3042 3043 // ALPHA2 SADDLE POINT DEF. COHEN&SWIATEC 3044 // RANGING FROM FISSILITY X=0.30 TO X=1.0 3045 3046 G4int index = 0; 3047 G4double x = 0.0, v = 0.0, dx = 0.0; 3048 3049 const G4int alpha2Size = 37; 3050 // The value 0.0 at alpha2[0] added by PK 3051 G4double alpha2[alpha2Size] = { 0.0, 3052 2.1982e0, 3053 1.6473e0, 3054 0.6360e0, 3055 0.1827e0, 3056 3057 dx = 0.02; 3058 x = fissility(a, z, 0, 0., 0., optxfis); 3059 3060 v = (x - 0.3) / dx + 1.0; 3061 index = idnint(v); 3062 3063 if (index < 1) 3064 { 3065 return (alpha2[1]); 3066 } 3067 3068 if (index == 36) 3069 { 3070 return (alpha2[36]); 3071 } 3072 else 3073 { 3074 return (alpha2[index] + (alpha2[index 3075 } 3076 3077 return alpha2[0]; // The algorithm is not 3078 } 3079 3080 G4double G4Abla::fissility(G4int a, G4int z, 3081 { 3082 // CALCULATION OF FISSILITY PARAMETER 3083 // 3084 // INPUT: A,Z INTEGER MASS & CHARGE OF NU 3085 // OPTXFIS = 0 : MYERS, SWIATECKI 3086 // 1 : DAHLINGER 3087 // 2 : ANDREYEV 3088 3089 G4double aa = 0.0, zz = 0.0, i = 0.0, z2a 3090 G4double fissilityResult = 0.0; 3091 3092 aa = G4double(a); 3093 zz = G4double(z); 3094 i = G4double(a - 2 * z) / aa; 3095 z2a = zz * zz / aa - ny * (1115. - 939. + 3096 3097 // myers & swiatecki droplet modell 3098 if (optxfis == 0) 3099 { // then 3100 fissilityResult = std::pow(zz, 2) / a 3101 } 3102 3103 if (optxfis == 1) 3104 { 3105 // dahlinger fit: 3106 fissilityResult = std::pow(zz, 2) / a 3107 std::pow((49.22e0 * 3108 } 3109 3110 if (optxfis == 2) 3111 { 3112 // dubna fit: 3113 fissilityResult = std::pow(zz, 2) / a 3114 } 3115 3116 if (optxfis == 3) 3117 { 3118 // Fissiilty is calculated according 3119 C_S = 21.13 * (1.0 - 2.3 * i * i); 3120 R = 1.16 * std::pow(aa, 1.0 / 3.0); 3121 W = 0.704 / R; 3122 G1 = 1.0 - 15.0 / 8.0 * W + 21.0 / 8. 3123 G2 = 1.0 + 9.0 / 2.0 * W + 7.0 * W * 3124 G = 1.0 - 5.0 * W * W * (G1 - 3.0 / 4 3125 A_CC = 3.0 / 5.0 * 1.44 * G / 1.16; 3126 fissilityResult = z2a * A_CC / (2.0 * 3127 } 3128 3129 if (fissilityResult > 1.0) 3130 { 3131 fissilityResult = 1.0; 3132 } 3133 3134 if (fissilityResult < 0.0) 3135 { 3136 fissilityResult = 0.0; 3137 } 3138 3139 return fissilityResult; 3140 } 3141 3142 void G4Abla::evapora(G4double zprf, 3143 G4double aprf, 3144 G4double* ee_par, 3145 G4double jprf_par, 3146 G4double* zf_par, 3147 G4double* af_par, 3148 G4double* mtota_par, 3149 G4double* vleva_par, 3150 G4double* vxeva_par, 3151 G4double* vyeva_par, 3152 G4int* ff_par, 3153 G4int* fimf_par, 3154 G4double* fzimf, 3155 G4double* faimf, 3156 G4double* tkeimf_par, 3157 G4double* jprfout, 3158 G4int* inttype_par, 3159 G4int* inum_par, 3160 G4double EV_TEMP[indexpa 3161 G4int* iev_tab_temp_par, 3162 G4int* NbLam0_par) 3163 { 3164 G4double zf = zprf; 3165 G4double af = aprf; 3166 G4double ee = (*ee_par); 3167 G4double jprf = dint(jprf_par); 3168 G4double mtota = (*mtota_par); 3169 G4double vleva = 0.; 3170 G4double vxeva = 0.; 3171 G4double vyeva = 0.; 3172 G4int ff = (*ff_par); 3173 G4int fimf = (*fimf_par); 3174 G4double tkeimf = (*tkeimf_par); 3175 G4int inttype = (*inttype_par); 3176 G4int inum = (*inum_par); 3177 G4int NbLam0 = (*NbLam0_par); 3178 3179 // 533 C 3180 // 534 C INPUT: 3181 // 535 C 3182 // 536 C ZPRF, APRF, EE(EE IS MODI 3183 // 537 C 3184 // 538 C PROJECTILE AND TARGET PAR 3185 // 539 C COMMON /ABRAMAIN/ 3186 // AP,ZP,AT,ZT,EAP,BETA,BMAXNUC,CRTOT, 3187 // IMAX,IRNDM,PI, 541 C 3188 // 542 C 3189 // 543 C AP,ZP,AT,ZT - PROJECTIL 3190 // 544 C EAP,BETA - BEAM ENER 3191 // 545 C BMAXNUC - MAX. IMPA 3192 // 546 C CRTOT,CRNUC - TOTAL AND 3193 // 547 C R_0,R_P,R_T, - RADIUS PA 3194 // 548 C IMAX,IRNDM,PI - MAXIMUM N 3195 // 549 C BFPRO - FISSION B 3196 // 550 C SNPRO - NEUTRON S 3197 // PROJECTILE 551 C SPPRO 3198 // 552 C SHELL - GROUND ST 3199 // 553 C 3200 // 554 3201 // C---------------------------------- 3202 // 555 C FISSION BARRIERS 3203 // 556 C COMMON /FB/ EFA 3204 // 557 C EFA - ARRAY OF FISSION 3205 // 558 3206 // C---------------------------------- 3207 // 559 C OUTPUT: 3208 // 560 C ZF, AF, MTOTA, P 3209 // 561 C 3210 // 562 C ZF,AF - CHARGE AND MASS O 3211 // EVAPORATION 563 C MTOTA _ NUMBE 3212 // PLEVA,PXEVA,PYEVA - MOMENTUM RECOIL 3213 // TYPE OF REACTION 0/1 NUCLEAR OR ELE 3214 // NO FISSION / FISSION EVENT 567 C 3215 // ___________________________________ 3216 // C / 570 C / CALCUL DE LA MASSE 3217 // D'EVAPORATION 571 C / 3218 // 572 C / PROCEDURE FOR CALCULATING 3219 // OF A 3220 // 573 C / SPECIFIC EVAPORATION CHAI 3221 // (APRF, ZPRF, 574 C / EE) 575 C 3222 // composantes de l'impulsion (PXEVA,P 3223 // 576 C / (actuellement PTEVA n'e 3224 // norme...) 577 C 3225 // /__________________________________ 3226 // 578 C 3227 // 612 C 3228 // 613 3229 // C---------------------------------- 3230 // 614 C IRNDM DUMMY A 3231 // FUNCTION 615 C SORTIE LOCAL 3232 // EVAPORATION CHAIN 616 C ZF 3233 // FRAGMENT 617 C ZPRF 3234 // PREFRAGMENT 618 C AF 3235 // C APRF MASS NUMBER 3236 // 620 C EPSILN ENERGY 3237 // 621 C MALPHA LOCAL MASS CO 3238 // EVAPORATION 622 C 3239 // EXCITATION ENERGY (VARIABLE) 624 C 3240 // EMISSION PROBABILITY 625 C PRO 3241 // PROBABILITY 626 C PROBA 3242 // PROBABILITY 627 C PTOTL 3243 // C E LOWEST PART 3244 // NEUTRON SEPARATION ENERGY 630 C 3245 // SEPARATION ENERGY PLUS EFFECTIVE CO 3246 // ALPHA-PARTICLE SEPARATION ENERGY PL 3247 // BARRIER 634 C BP 3248 // 635 C BA EFFECTI 3249 // 636 C MTOTA TOTAL M 3250 // PARTICLES 637 C X 3251 // NUCLEAR CHARGE 3252 // 638 C AMOINS LOCAL MASS NU 3253 // 639 C ZMOINS LOCAL NUCLEAR 3254 // 640 C ECP KINETIC 3255 // 641 C REPULS 3256 // 642 C ECN KINETIC 3257 // 643 C ECA KINETIC 3258 // COULOMB 644 C 3259 // TRANSVERSAL RECOIL MOMENTUM OF EVAP 3260 // RECOIL MOMENTUM OF EVAPORATION 647 3261 // FLAG 648 C INTTYPE I 3262 // 649 C RNDX RECOIL 3263 // SINGLE STEP 650 C RNDY 3264 // IN A SINGLE STEP 651 C RNDZ 3265 // Z-DIRECTION IN A SINGLE STEP 3266 // 652 C RNDN NORMALI 3267 // EACH STEP 653 3268 // C---------------------------------- 3269 // 654 C 3270 // 3271 G4double epsiln = 0.0, probp = 0.0, probd 3272 probimf = 0.0, problamb0 = 0.0, 3273 G4double sn = 0.0, sbp = 0.0, sbd = 0.0, 3274 sp = 0.0, sd = 0.0, st = 0.0, sh 3275 G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, 3276 bd = 0.0, bt = 0.0, bhe = 0.0, b 3277 G4double zimf = 0.0, aimf = 0.0, bimf = 0 3278 G4int itest = 0, sortie = 0; 3279 G4double probf = 0.0; 3280 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = 3281 G4double rnd = 0.0; 3282 G4double ef = 0.0; 3283 G4double ts1 = 0.0; 3284 G4int fgamma = 0, gammadecay = 0, flamb0d 3285 G4double pc = 0.0, malpha = 0.0; 3286 G4double jprfn = 0.0, jprfp = 0.0, jprfd 3287 G4double tsum = 0.0; 3288 G4int twon; 3289 3290 const G4double c = 29.9792458; 3291 const G4double mu = 931.494; 3292 const G4double mu2 = 931.494 * 931.494; 3293 3294 G4double pleva = 0.0; 3295 G4double pxeva = 0.0; 3296 G4double pyeva = 0.0; 3297 G4int IEV_TAB_TEMP = 0; 3298 3299 for (G4int I1 = 0; I1 < indexpart; I1++) 3300 for (G4int I2 = 0; I2 < 6; I2++) 3301 EV_TEMP[I1][I2] = 0.0; 3302 // 3303 ff = 0; 3304 itest = 0; 3305 // 3306 evapora10: 3307 // 3308 // calculation of the probabilities for t 3309 // plus separation energies and kinetic e 3310 // 3311 if (ee < 0. || zf < 3.) 3312 goto evapora100; 3313 direct(zf, 3314 af, 3315 ee, 3316 jprf, 3317 &probp, 3318 &probd, 3319 &probt, 3320 &probn, 3321 &probhe, 3322 &proba, 3323 &probg, 3324 &probimf, 3325 &probf, 3326 &problamb0, 3327 &ptotl, 3328 &sn, 3329 &sbp, 3330 &sbd, 3331 &sbt, 3332 &sbhe, 3333 &sba, 3334 &slamb0, 3335 &ecn, 3336 &ecp, 3337 &ecd, 3338 &ect, 3339 &eche, 3340 &eca, 3341 &ecg, 3342 &eclamb0, 3343 &bp, 3344 &bd, 3345 &bt, 3346 &bhe, 3347 &ba, 3348 &sp, 3349 &sd, 3350 &st, 3351 &she, 3352 &sa, 3353 &ef, 3354 &ts1, 3355 inttype, 3356 inum, 3357 itest, 3358 &sortie, 3359 &tcn, 3360 &jprfn, 3361 &jprfp, 3362 &jprfd, 3363 &jprft, 3364 &jprfhe, 3365 &jprfa, 3366 &jprflamb0, 3367 &tsum, 3368 NbLam0); 3369 // 3370 // HERE THE FINAL STEPS OF THE EVAPORATIO 3371 // 3372 if (ptotl == 0.0) 3373 goto evapora100; 3374 3375 e = dmin1(sba, sbhe, dmin1(sbt, sbhe, dmi 3376 3377 if (e > 1e30) 3378 std::cout << "ERROR AT THE EXIT OF EV 3379 3380 if (sortie == 1) 3381 { 3382 if (probn != 0.0) 3383 { 3384 amoins = 1.0; 3385 zmoins = 0.0; 3386 epsiln = sn + ecn; 3387 pc = std::sqrt(std::pow((1.0 + (e 3388 malpha = 0.0; 3389 fgamma = 0; 3390 fimf = 0; 3391 flamb0decay = 0; 3392 gammadecay = 0; 3393 } 3394 else if (probp != 0.0) 3395 { 3396 amoins = 1.0; 3397 zmoins = 1.0; 3398 epsiln = sp + ecp; 3399 pc = std::sqrt(std::pow((1.0 + ec 3400 malpha = 0.0; 3401 fgamma = 0; 3402 fimf = 0; 3403 flamb0decay = 0; 3404 gammadecay = 0; 3405 } 3406 else if (probd != 0.0) 3407 { 3408 amoins = 2.0; 3409 zmoins = 1.0; 3410 epsiln = sd + ecd; 3411 pc = std::sqrt(std::pow((1.0 + ec 3412 malpha = 0.0; 3413 fgamma = 0; 3414 fimf = 0; 3415 flamb0decay = 0; 3416 gammadecay = 0; 3417 } 3418 else if (probt != 0.0) 3419 { 3420 amoins = 3.0; 3421 zmoins = 1.0; 3422 epsiln = st + ect; 3423 pc = std::sqrt(std::pow((1.0 + ec 3424 malpha = 0.0; 3425 fgamma = 0; 3426 fimf = 0; 3427 flamb0decay = 0; 3428 gammadecay = 0; 3429 } 3430 else if (probhe != 0.0) 3431 { 3432 amoins = 3.0; 3433 zmoins = 2.0; 3434 epsiln = she + eche; 3435 pc = std::sqrt(std::pow((1.0 + ec 3436 malpha = 0.0; 3437 fgamma = 0; 3438 fimf = 0; 3439 flamb0decay = 0; 3440 gammadecay = 0; 3441 } 3442 else 3443 { 3444 if (proba != 0.0) 3445 { 3446 amoins = 4.0; 3447 zmoins = 2.0; 3448 epsiln = sa + eca; 3449 pc = std::sqrt(std::pow((1.0 3450 malpha = 4.0; 3451 fgamma = 0; 3452 fimf = 0; 3453 flamb0decay = 0; 3454 gammadecay = 0; 3455 } 3456 } 3457 goto direct99; 3458 } 3459 3460 // here the normal evaporation cascade st 3461 3462 // random number for the evaporation 3463 x = G4AblaRandom::flat() * ptotl; 3464 3465 itest = 0; 3466 if (x < proba) 3467 { 3468 // alpha evaporation 3469 amoins = 4.0; 3470 zmoins = 2.0; 3471 epsiln = sa + eca; 3472 pc = std::sqrt(std::pow((1.0 + eca / 3473 malpha = 4.0; 3474 fgamma = 0; 3475 fimf = 0; 3476 ff = 0; 3477 flamb0decay = 0; 3478 gammadecay = 0; 3479 jprf = jprfa; 3480 } 3481 else if (x < proba + probhe) 3482 { 3483 // He3 evaporation 3484 amoins = 3.0; 3485 zmoins = 2.0; 3486 epsiln = she + eche; 3487 pc = std::sqrt(std::pow((1.0 + eche / 3488 malpha = 0.0; 3489 fgamma = 0; 3490 fimf = 0; 3491 ff = 0; 3492 flamb0decay = 0; 3493 gammadecay = 0; 3494 jprf = jprfhe; 3495 } 3496 else if (x < proba + probhe + probt) 3497 { 3498 // triton evaporation 3499 amoins = 3.0; 3500 zmoins = 1.0; 3501 epsiln = st + ect; 3502 pc = std::sqrt(std::pow((1.0 + ect / 3503 malpha = 0.0; 3504 fgamma = 0; 3505 fimf = 0; 3506 ff = 0; 3507 flamb0decay = 0; 3508 gammadecay = 0; 3509 jprf = jprft; 3510 } 3511 else if (x < proba + probhe + probt + pro 3512 { 3513 // deuteron evaporation 3514 amoins = 2.0; 3515 zmoins = 1.0; 3516 epsiln = sd + ecd; 3517 pc = std::sqrt(std::pow((1.0 + ecd / 3518 malpha = 0.0; 3519 fgamma = 0; 3520 fimf = 0; 3521 ff = 0; 3522 flamb0decay = 0; 3523 gammadecay = 0; 3524 jprf = jprfd; 3525 } 3526 else if (x < proba + probhe + probt + pro 3527 { 3528 // proton evaporation 3529 amoins = 1.0; 3530 zmoins = 1.0; 3531 epsiln = sp + ecp; 3532 pc = std::sqrt(std::pow((1.0 + ecp / 3533 malpha = 0.0; 3534 fgamma = 0; 3535 fimf = 0; 3536 ff = 0; 3537 flamb0decay = 0; 3538 gammadecay = 0; 3539 jprf = jprfp; 3540 } 3541 else if (x < proba + probhe + probt + pro 3542 { 3543 // neutron evaporation 3544 amoins = 1.0; 3545 zmoins = 0.0; 3546 epsiln = sn + ecn; 3547 pc = std::sqrt(std::pow((1.0 + (ecn) 3548 malpha = 0.0; 3549 fgamma = 0; 3550 fimf = 0; 3551 ff = 0; 3552 flamb0decay = 0; 3553 gammadecay = 0; 3554 jprf = jprfn; 3555 } 3556 else if (x < proba + probhe + probt + pro 3557 { 3558 // lambda0 evaporation 3559 amoins = 1.0; 3560 zmoins = 0.0; 3561 epsiln = slamb0 + eclamb0; 3562 pc = std::sqrt(std::pow((1.0 + (eclam 3563 malpha = 0.0; 3564 fgamma = 0; 3565 fimf = 0; 3566 ff = 0; 3567 flamb0decay = 1; 3568 opt->nblan0 = opt->nblan0 - 1; 3569 NbLam0 = NbLam0 - 1; 3570 gammadecay = 0; 3571 jprf = jprflamb0; 3572 } 3573 else if (x < proba + probhe + probt + pro 3574 { 3575 // gamma evaporation 3576 amoins = 0.0; 3577 zmoins = 0.0; 3578 epsiln = ecg; 3579 pc = ecg; 3580 malpha = 0.0; 3581 flamb0decay = 0; 3582 gammadecay = 1; 3583 // Next IF command is to shorten the 3584 // only possible channel 3585 if (probp == 0.0 && probn == 0.0 && p 3586 problamb0 == 0.0 && probimf == 0. 3587 fgamma = 1; 3588 fimf = 0; 3589 ff = 0; 3590 } 3591 else if (x < proba + probhe + probt + pro 3592 { 3593 // imf evaporation 3594 // AIMF and ZIMF obtained from comple 3595 // possible Gamma(IMF) and then rando 3596 3597 G4int iloop = 0; 3598 dir1973: 3599 imf(af, zf, tcn, ee, &zimf, &aimf, &b 3600 iloop++; 3601 if (iloop > 100) 3602 std::cout << "Problem in EVAPORA: 3603 if (zimf >= (zf - 2.0)) 3604 goto dir1973; 3605 if (zimf > zf / 2.0) 3606 { 3607 zimf = zf - zimf; 3608 aimf = af - aimf; 3609 } 3610 // These cases should in principle ne 3611 if (zimf == 0.0 || aimf == 0.0 || sbi 3612 std::cout << "warning: Look in EV 3613 3614 // I sample the total kinetic energy 3615 // from the distribution determined w 3616 // TKEIMF is the kinetic energy in th 3617 3618 G4int ii = 0; 3619 dir1235: 3620 tkeimf = fmaxhaz(timf); 3621 ii++; 3622 if (ii > 100) 3623 { 3624 tkeimf = min(2.0 * timf, ee - sbi 3625 goto dir1000; 3626 } 3627 if (tkeimf <= 0.0) 3628 goto dir1235; 3629 if (tkeimf > (ee - sbimf) && timf > 0 3630 goto dir1235; 3631 dir1000: 3632 tkeimf = tkeimf + bimf; 3633 3634 amoins = aimf; 3635 zmoins = zimf; 3636 epsiln = (sbimf - bimf) + tkeimf; 3637 pc = 0.0; 3638 malpha = 0.0; 3639 fgamma = 0; 3640 fimf = 1; 3641 ff = 0; 3642 flamb0decay = 0; 3643 gammadecay = 0; 3644 } 3645 else 3646 { 3647 // fission 3648 // in case of fission-events the frag 3649 // before fission occurs with excitat 3650 // fission fragment mass distribution 3651 3652 amoins = 0.0; 3653 zmoins = 0.0; 3654 epsiln = ef; 3655 // 3656 malpha = 0.0; 3657 pc = 0.0; 3658 ff = 1; 3659 fimf = 0; 3660 fgamma = 0; 3661 flamb0decay = 0; 3662 gammadecay = 0; 3663 } 3664 // 3665 direct99: 3666 if (ee <= 0.01) 3667 ee = 0.01; 3668 // Davide Mancusi (DM) - 2010 3669 if (gammadecay == 1 && ee < (epsiln + 0.0 3670 { 3671 epsiln = ee - 0.010; 3672 // fgamma = 1; 3673 } 3674 3675 if (epsiln < 0.0) 3676 { 3677 std::cout << "***WARNING epsilon<0*** 3678 // epsiln=0.; 3679 // PRINT*,IDECAYMODE,IDNINT(AF),IDNIN 3680 } 3681 // calculation of the daughter nucleus 3682 af = af - amoins; 3683 zf = zf - zmoins; 3684 ee = ee - epsiln; 3685 if (ee <= 0.01) 3686 ee = 0.01; 3687 mtota = mtota + malpha; 3688 3689 // if(amoins==2 && zmoins==0)std::cout << 3690 3691 secondneutron: 3692 if (amoins == 2 && zmoins == 0) 3693 { 3694 twon = 1; 3695 amoins = 1; 3696 } 3697 else 3698 { 3699 twon = 0; 3700 } 3701 3702 // Determination of x,y,z components of m 3703 // PC 3704 if (ff == 0 && fimf == 0) 3705 { 3706 // 3707 if (flamb0decay == 1) 3708 { 3709 EV_TEMP[IEV_TAB_TEMP][0] = 0.; 3710 EV_TEMP[IEV_TAB_TEMP][1] = -2; 3711 EV_TEMP[IEV_TAB_TEMP][5] = 1.; 3712 } 3713 else 3714 { 3715 EV_TEMP[IEV_TAB_TEMP][0] = zmoins 3716 EV_TEMP[IEV_TAB_TEMP][1] = amoins 3717 EV_TEMP[IEV_TAB_TEMP][5] = 0.; 3718 } 3719 rnd = G4AblaRandom::flat(); 3720 ctet1 = 2.0 * rnd - 1.0; 3721 stet1 = std::sqrt(1.0 - std::pow(ctet 3722 rnd = G4AblaRandom::flat(); 3723 phi1 = rnd * 2.0 * 3.141592654; 3724 3725 G4double xcv = stet1 * std::cos(phi1) 3726 G4double ycv = stet1 * std::sin(phi1) 3727 G4double zcv = ctet1; 3728 3729 if (gammadecay == 0) 3730 { 3731 // Light particle 3732 G4double ETOT_LP = std::sqrt(pc * 3733 if (flamb0decay == 1) 3734 ETOT_LP = std::sqrt(pc * pc + 3735 EV_TEMP[IEV_TAB_TEMP][2] = c * pc 3736 EV_TEMP[IEV_TAB_TEMP][3] = c * pc 3737 EV_TEMP[IEV_TAB_TEMP][4] = c * pc 3738 } 3739 else 3740 { 3741 // gamma ray 3742 EV_TEMP[IEV_TAB_TEMP][2] = pc * x 3743 EV_TEMP[IEV_TAB_TEMP][3] = pc * y 3744 EV_TEMP[IEV_TAB_TEMP][4] = pc * z 3745 } 3746 G4double VXOUT = 0., VYOUT = 0., VZOU 3747 lorentz_boost(vxeva, 3748 vyeva, 3749 vleva, 3750 EV_TEMP[IEV_TAB_TEMP][2 3751 EV_TEMP[IEV_TAB_TEMP][3 3752 EV_TEMP[IEV_TAB_TEMP][4 3753 &VXOUT, 3754 &VYOUT, 3755 &VZOUT); 3756 EV_TEMP[IEV_TAB_TEMP][2] = VXOUT; 3757 EV_TEMP[IEV_TAB_TEMP][3] = VYOUT; 3758 EV_TEMP[IEV_TAB_TEMP][4] = VZOUT; 3759 // Heavy residue 3760 if (gammadecay == 0) 3761 { 3762 G4double v2 = std::pow(EV_TEMP[IE 3763 std::pow(EV_TEMP[IE 3764 G4double gamma = 1.0 / std::sqrt( 3765 G4double etot_lp = amoins * mu * 3766 pxeva = pxeva - EV_TEMP[IEV_TAB_T 3767 pyeva = pyeva - EV_TEMP[IEV_TAB_T 3768 pleva = pleva - EV_TEMP[IEV_TAB_T 3769 } 3770 else 3771 { 3772 // in case of gammas, EV_TEMP con 3773 // velocity 3774 pxeva = pxeva - EV_TEMP[IEV_TAB_T 3775 pyeva = pyeva - EV_TEMP[IEV_TAB_T 3776 pleva = pleva - EV_TEMP[IEV_TAB_T 3777 } 3778 G4double pteva = std::sqrt(pxeva * px 3779 // To be checked: 3780 G4double etot = std::sqrt(pleva * ple 3781 vxeva = c * pxeva / etot; // recoil v 3782 vyeva = c * pyeva / etot; 3783 vleva = c * pleva / etot; 3784 IEV_TAB_TEMP = IEV_TAB_TEMP + 1; 3785 } 3786 3787 if (twon == 1) 3788 { 3789 goto secondneutron; 3790 } 3791 3792 // condition for end of evaporation 3793 if (zf < 3. || (ff == 1) || (fgamma == 1) 3794 { 3795 goto evapora100; 3796 } 3797 goto evapora10; 3798 3799 evapora100: 3800 (*zf_par) = zf; 3801 (*af_par) = af; 3802 (*ee_par) = ee; 3803 (*faimf) = aimf; 3804 (*fzimf) = zimf; 3805 (*jprfout) = jprf; 3806 (*tkeimf_par) = tkeimf; 3807 (*mtota_par) = mtota; 3808 (*vleva_par) = vleva; 3809 (*vxeva_par) = vxeva; 3810 (*vyeva_par) = vyeva; 3811 (*ff_par) = ff; 3812 (*fimf_par) = fimf; 3813 (*inttype_par) = inttype; 3814 (*iev_tab_temp_par) = IEV_TAB_TEMP; 3815 (*inum_par) = inum; 3816 (*NbLam0_par) = NbLam0; 3817 return; 3818 } 3819 3820 void G4Abla::direct(G4double zprf, 3821 G4double a, 3822 G4double ee, 3823 G4double jprf, 3824 G4double* probp_par, 3825 G4double* probd_par, 3826 G4double* probt_par, 3827 G4double* probn_par, 3828 G4double* probhe_par, 3829 G4double* proba_par, 3830 G4double* probg_par, 3831 G4double* probimf_par, 3832 G4double* probf_par, 3833 G4double* problamb0_par, 3834 G4double* ptotl_par, 3835 G4double* sn_par, 3836 G4double* sbp_par, 3837 G4double* sbd_par, 3838 G4double* sbt_par, 3839 G4double* sbhe_par, 3840 G4double* sba_par, 3841 G4double* slamb0_par, 3842 G4double* ecn_par, 3843 G4double* ecp_par, 3844 G4double* ecd_par, 3845 G4double* ect_par, 3846 G4double* eche_par, 3847 G4double* eca_par, 3848 G4double* ecg_par, 3849 G4double* eclamb0_par, 3850 G4double* bp_par, 3851 G4double* bd_par, 3852 G4double* bt_par, 3853 G4double* bhe_par, 3854 G4double* ba_par, 3855 G4double* sp_par, 3856 G4double* sd_par, 3857 G4double* st_par, 3858 G4double* she_par, 3859 G4double* sa_par, 3860 G4double* ef_par, 3861 G4double* ts1_par, 3862 G4int, 3863 G4int inum, 3864 G4int itest, 3865 G4int* sortie, 3866 G4double* tcn, 3867 G4double* jprfn_par, 3868 G4double* jprfp_par, 3869 G4double* jprfd_par, 3870 G4double* jprft_par, 3871 G4double* jprfhe_par, 3872 G4double* jprfa_par, 3873 G4double* jprflamb0_par, 3874 G4double* tsum_par, 3875 G4int NbLam0) 3876 { 3877 G4double probp = (*probp_par); 3878 G4double probd = (*probd_par); 3879 G4double probt = (*probt_par); 3880 G4double probn = (*probn_par); 3881 G4double probhe = (*probhe_par); 3882 G4double proba = (*proba_par); 3883 G4double probg = (*probg_par); 3884 G4double probimf = (*probimf_par); 3885 G4double probf = (*probf_par); 3886 G4double problamb0 = (*problamb0_par); 3887 G4double ptotl = (*ptotl_par); 3888 G4double sn = (*sn_par); 3889 G4double sp = (*sp_par); 3890 G4double sd = (*sd_par); 3891 G4double st = (*st_par); 3892 G4double she = (*she_par); 3893 G4double sa = (*sa_par); 3894 G4double slamb0 = 0.0; 3895 G4double sbp = (*sbp_par); 3896 G4double sbd = (*sbd_par); 3897 G4double sbt = (*sbt_par); 3898 G4double sbhe = (*sbhe_par); 3899 G4double sba = (*sba_par); 3900 G4double ecn = (*ecn_par); 3901 G4double ecp = (*ecp_par); 3902 G4double ecd = (*ecd_par); 3903 G4double ect = (*ect_par); 3904 G4double eche = (*eche_par); 3905 G4double eca = (*eca_par); 3906 G4double ecg = (*ecg_par); 3907 G4double eclamb0 = (*eclamb0_par); 3908 G4double bp = (*bp_par); 3909 G4double bd = (*bd_par); 3910 G4double bt = (*bt_par); 3911 G4double bhe = (*bhe_par); 3912 G4double ba = (*ba_par); 3913 G4double tsum = (*tsum_par); 3914 3915 // CALCULATION OF PARTICLE-EMISSION PROBA 3916 // BASED ON THE SIMPLIFIED FORMULAS FOR T 3917 // MORETTO, ROCHESTER MEETING TO AVOID CO 3918 // INTENSIVE INTEGRATION OF THE LEVEL DEN 3919 // USES EFFECTIVE COULOMB BARRIERS AND AN 3920 // OF THE EVAPORATED PARTICLES 3921 // COLLECTIVE ENHANCMENT OF THE LEVEL DEN 3922 // DYNAMICAL HINDRANCE OF FISSION IS INCL 3923 // APPROXIMATION. SEE A.R. JUNGHANS DIPLO 3924 // SHELL AND PAIRING STRUCTURES IN THE LE 3925 3926 // INPUT: 3927 // ZPRF,A,EE CHARGE, MASS, EXCITATION EN 3928 // NUCLEUS 3929 // JPRF ROOT-MEAN-SQUARED ANGULAR M 3930 3931 // DEFORMATIONS AND G.S. SHELL EFFECTS 3932 // COMMON /ECLD/ ECGNZ,ECFNZ,VGSLD,ALPH 3933 3934 // ECGNZ - GROUND STATE SHELL CORR. FRLDM 3935 // ECFNZ - SHELL CORRECTION FOR THE SADDL 3936 // VGSLD - DIFFERENCE BETWEEN DEFORMED G. 3937 // ALPHA - ALPHA GROUND STATE DEFORMATION 3938 // BETA2 = SQRT((4PI)/5) * ALPHA 3939 3940 // OPTIONS AND PARAMETERS FOR FISSION CHA 3941 // COMMON /FISS/ AKAP,BET,HOMEGA,KOEFF 3942 // OPTSHP,OPTXFIS,OPTLES 3943 // 3944 // AKAP - HBAR**2/(2* MN * R_0**2) = 1 3945 // BET - REDUCED NUCLEAR FRICTION COE 3946 // HOMEGA - CURVATURE OF THE FISSION BAR 3947 // KOEFF - COEFFICIENT FOR THE LD FISSI 3948 // IFIS - 0/1 FISSION CHANNEL OFF/ON 3949 // OPTSHP - INTEGER SWITCH FOR SHELL COR 3950 // = 0 NO MICROSCOPIC CORRECTIO 3951 // = 1 SHELL , NO PAIRING 3952 // = 2 PAIRING, NO SHELL 3953 // = 3 SHELL AND PAIRING 3954 // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT S 3955 // OPTXFIS- 0,1,2 FOR MYERS & SWIATECKI, 3956 // FISSILITY PARAMETER. 3957 // OPTLES - CONSTANT TEMPERATURE LEVEL D 3958 // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT O 3959 3960 // LEVEL DENSITY PARAMETERS 3961 // COMMON /ALD/ AV,AS,AK,OPTAFAN 3962 // AV,AS,AK - VOLUME,SURF 3963 // LEVEL DENSI 3964 // OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1 3965 // RECOMMENDED IS OPTAFAN = 0 3966 3967 // FISSION BARRIERS 3968 // COMMON /FB/ EFA 3969 // EFA - ARRAY OF FISSION BARRIERS 3970 3971 // OUTPUT: PROBN,PROBP,PROBA,PROBF,PTOTL: 3972 // - EMISSION PROBABILITIES FOR N EUTRON, 3973 // PARTICLES, F ISSION AND NORMALISATION 3974 // SN,SBP,SBA: SEPARATION ENERGIES N P A 3975 // INCLUDING EFFECTIVE BARRIERS 3976 // ECN,ECP,ECA,BP,BA 3977 // - AVERAGE KINETIC ENERGIES (2*T) AND E 3978 3979 G4double bk = 0.0; 3980 G4double bksp = 0.0; 3981 G4double bc = 0.0; 3982 G4int afp = 0; 3983 G4double het = 0.0; 3984 G4double at = 0.0; 3985 G4double bs = 0.0; 3986 G4double bssp = 0.0; 3987 G4double bshell = 0.0; 3988 G4double cf = 0.0; 3989 G4double defbet = 0.0; 3990 G4double densa = 0.0; 3991 G4double denshe = 0.0; 3992 G4double densg = 0.0; 3993 G4double densn = 0.0; 3994 G4double densp = 0.0; 3995 G4double densd = 0.0; 3996 G4double denst = 0.0; 3997 G4double denslamb0 = 0.0; 3998 G4double eer = 0.0; 3999 G4double ecor = 0.0; 4000 G4double ef = 0.0; 4001 G4double ft = 0.0; 4002 G4double timf = 0.0; 4003 G4double qr = 0.0; 4004 G4double qrcn = 0.0; 4005 G4double omegap = 0.0; 4006 G4double omegad = 0.0; 4007 G4double omegat = 0.0; 4008 G4double omegahe = 0.0; 4009 G4double omegaa = 0.0; 4010 G4double ga = 0.0; 4011 G4double ghe = 0.0; 4012 G4double gf = 0.0; 4013 G4double gff = 0.0; 4014 G4double gn = 0.0; 4015 G4double gp = 0.0; 4016 G4double gd = 0.0; 4017 G4double gt = 0.0; 4018 G4double gg = 0.0; 4019 G4double glamb0 = 0.0; 4020 G4double gimf = 0.0; 4021 G4double gimf3 = 0.0; 4022 G4double gimf5 = 0.0; 4023 G4double bimf = 0.0; 4024 G4double bsimf = 0.0; 4025 G4double sbimf = 0.0; 4026 G4double densimf = 0.0; 4027 G4double defbetimf = 0.0; 4028 G4double b_imf = 0.0; 4029 G4double a_imf = 0.0; 4030 G4double omegaimf = 0.0; 4031 G4int izimf = 0; 4032 G4double zimf = 0.0; 4033 G4double gsum = 0.0; 4034 G4double gtotal = 0.0; 4035 G4double hbar = 6.582122e-22; 4036 G4double emin = 0.0; 4037 G4int il = 0; 4038 G4int choice_fisspart = 0; 4039 G4double t_lapse = 0.0; 4040 G4int imaxwell = 0; 4041 G4int in = 0; 4042 G4int iz = 0; 4043 G4int ind = 0; 4044 G4int izd = 0; 4045 G4int j = 0; 4046 G4int k = 0; 4047 G4double ma1z = 0.0; 4048 G4double mazz = 0.0; 4049 G4double ma2z = 0.0; 4050 G4double ma1z1 = 0.0; 4051 G4double ma2z1 = 0.0; 4052 G4double ma3z1 = 0.0; 4053 G4double ma3z2 = 0.0; 4054 G4double ma4z2 = 0.0; 4055 G4double maz = 0.0; 4056 G4double nt = 0.0; 4057 G4double pi = 3.1415926535; 4058 G4double pt = 0.0; 4059 G4double dt = 0.0; 4060 G4double tt = 0.0; 4061 G4double lamb0t = 0.0; 4062 G4double gtemp = 0.0; 4063 G4double rdt = 0.0; 4064 G4double rtt = 0.0; 4065 G4double rat = 0.0; 4066 G4double rhet = 0.0; 4067 G4double refmod = 0.0; 4068 G4double rnt = 0.0; 4069 G4double rpt = 0.0; 4070 G4double rlamb0t = 0.0; 4071 G4double sbfis = 1.e40; 4072 G4double segs = 0.0; 4073 G4double selmax = 0.0; 4074 G4double tauc = 0.0; 4075 G4double temp = 0.0; 4076 G4double ts1 = 0.0; 4077 G4double xx = 0.0; 4078 G4double y = 0.0; 4079 G4double k1 = 0.0; 4080 G4double omegasp = 0.0; 4081 G4double homegasp = 0.0; 4082 G4double omegags = 0.0; 4083 G4double homegags = 0.0; 4084 G4double pa = 0.0; 4085 G4double gamma = 0.0; 4086 G4double gfactor = 0.0; 4087 G4double bscn; 4088 G4double bkcn; 4089 G4double bccn; 4090 G4double ftcn = 0.0; 4091 G4double mfcd; 4092 G4double jprfn = jprf; 4093 G4double jprfp = jprf; 4094 G4double jprfd = jprf; 4095 G4double jprft = jprf; 4096 G4double jprfhe = jprf; 4097 G4double jprfa = jprf; 4098 G4double jprflamb0 = jprf; 4099 G4double djprf = 0.0; 4100 G4double dlout = 0.0; 4101 G4double sdlout = 0.0; 4102 G4double iinert = 0.0; 4103 G4double erot = 0.0; 4104 G4double erotn = 0.0; 4105 G4double erotp = 0.0; 4106 G4double erotd = 0.0; 4107 G4double erott = 0.0; 4108 G4double erothe = 0.0; 4109 G4double erota = 0.0; 4110 G4double erotlamb0 = 0.0; 4111 G4double erotcn = 0.0; 4112 // G4double ecorcn=0.0; 4113 G4double imfarg = 0.0; 4114 G4double width_imf = 0.0; 4115 G4int IDjprf = 0; 4116 G4int fimf_allowed = opt->optimfallowed; 4117 4118 if (itest == 1) 4119 { 4120 } 4121 // Switch to calculate Maxwellian distrib 4122 imaxwell = 1; 4123 *sortie = 0; 4124 4125 // just a change of name until the end of 4126 eer = ee; 4127 if (inum == 1) 4128 { 4129 ilast = 1; 4130 } 4131 // calculation of masses 4132 // refmod = 1 ==> myers,swiatecki model 4133 // refmod = 0 ==> weizsaecker model 4134 refmod = 1; // Default = 1 4135 // 4136 if (refmod == 1) 4137 { 4138 mglms(a, zprf, fiss->optshp, &maz); 4139 mglms(a - 1.0, zprf, fiss->optshp, &m 4140 mglms(a - 2.0, zprf, fiss->optshp, &m 4141 mglms(a - 1.0, zprf - 1.0, fiss->opts 4142 mglms(a - 2.0, zprf - 1.0, fiss->opts 4143 mglms(a - 3.0, zprf - 1.0, fiss->opts 4144 mglms(a - 3.0, zprf - 2.0, fiss->opts 4145 mglms(a - 4.0, zprf - 2.0, fiss->opts 4146 } 4147 else 4148 { 4149 mglw(a, zprf, &maz); 4150 mglw(a - 1.0, zprf, &ma1z); 4151 mglw(a - 1.0, zprf - 1.0, &ma1z1); 4152 mglw(a - 2.0, zprf - 1.0, &ma2z1); 4153 mglw(a - 3.0, zprf - 1.0, &ma3z1); 4154 mglw(a - 3.0, zprf - 2.0, &ma3z2); 4155 mglw(a - 4.0, zprf - 2.0, &ma4z2); 4156 } 4157 4158 if ((a - 1.) == 3.0 && (zprf - 1.0) == 2. 4159 ma1z1 = -7.7181660; 4160 if ((a - 1.) == 4.0 && (zprf - 1.0) == 2. 4161 ma1z1 = -28.295992; 4162 4163 // separation energies 4164 sn = ma1z - maz; 4165 sp = ma1z1 - maz; 4166 sd = ma2z1 - maz - 2.2246; 4167 st = ma3z1 - maz - 8.481977; 4168 she = ma3z2 - maz - 7.7181660; 4169 sa = ma4z2 - maz - 28.295992; 4170 // 4171 if (NbLam0 > 1) 4172 { 4173 sn = gethyperbinding(a, zprf, NbLam0) 4174 sp = gethyperbinding(a, zprf, NbLam0) 4175 sd = gethyperbinding(a, zprf, NbLam0) 4176 st = gethyperbinding(a, zprf, NbLam0) 4177 she = gethyperbinding(a, zprf, NbLam0 4178 sa = gethyperbinding(a, zprf, NbLam0) 4179 slamb0 = gethyperbinding(a, zprf, NbL 4180 } 4181 if (NbLam0 == 1) 4182 { 4183 G4double deltasn = sn - (gethyperbind 4184 G4double deltasp = sp - (gethyperbind 4185 G4double deltasd = sd - (gethyperbind 4186 G4double deltast = st - (gethyperbind 4187 G4double deltashe = she - (gethyperbi 4188 G4double deltasa = sa - (gethyperbind 4189 4190 sn = deltasn + gethyperbinding(a, zpr 4191 sp = deltasp + gethyperbinding(a, zpr 4192 sd = deltasd + gethyperbinding(a, zpr 4193 st = deltast + gethyperbinding(a, zpr 4194 she = deltashe + gethyperbinding(a, z 4195 sa = deltasa + gethyperbinding(a, zpr 4196 slamb0 = gethyperseparation(a, zprf, 4197 } 4198 4199 // coulomb barriers 4200 // Proton 4201 if (zprf <= 1.0e0 || a <= 1.0e0 || (a - z 4202 { 4203 sbp = 1.0e75; 4204 bp = 1.0e75; 4205 } 4206 else 4207 { 4208 barrs(idnint(zprf - 1.), idnint(a - 1 4209 bp = max(bp, 0.1); 4210 sbp = sp + bp; 4211 } 4212 4213 // Deuteron 4214 if (zprf <= 1.0e0 || a <= 2.0e0 || (a - z 4215 { 4216 sbd = 1.0e75; 4217 bd = 1.0e75; 4218 } 4219 else 4220 { 4221 barrs(idnint(zprf - 1.), idnint(a - 2 4222 bd = max(bd, 0.1); 4223 sbd = sd + bd; 4224 } 4225 4226 // Triton 4227 if (zprf <= 1.0e0 || a <= 3.0e0 || (a - z 4228 { 4229 sbt = 1.0e75; 4230 bt = 1.0e75; 4231 } 4232 else 4233 { 4234 barrs(idnint(zprf - 1.), idnint(a - 3 4235 bt = max(bt, 0.1); 4236 sbt = st + bt; 4237 } 4238 4239 // Alpha 4240 if (a - 4.0 <= 0.0 || zprf <= 2.0 || (a - 4241 { 4242 sba = 1.0e+75; 4243 ba = 1.0e+75; 4244 } 4245 else 4246 { 4247 barrs(idnint(zprf - 2.), idnint(a - 4 4248 ba = max(ba, 0.1); 4249 sba = sa + ba; 4250 } 4251 4252 // He3 4253 if (a - 3.0 <= 0.0 || zprf <= 2.0 || (a - 4254 { 4255 sbhe = 1.0e+75; 4256 bhe = 1.0e+75; 4257 } 4258 else 4259 { 4260 barrs(idnint(zprf - 2.), idnint(a - 3 4261 bhe = max(bhe, 0.1); 4262 sbhe = she + bhe; 4263 } 4264 4265 // Dealing with particle-unbound systems 4266 emin = dmin1(sba, sbhe, dmin1(sbt, sbhe, 4267 4268 if (emin <= 0.0) 4269 { 4270 *sortie = 1; 4271 unbound(sn, 4272 sp, 4273 sd, 4274 st, 4275 she, 4276 sa, 4277 bp, 4278 bd, 4279 bt, 4280 bhe, 4281 ba, 4282 &probf, 4283 &probn, 4284 &probp, 4285 &probd, 4286 &probt, 4287 &probhe, 4288 &proba, 4289 &probimf, 4290 &probg, 4291 &ecn, 4292 &ecp, 4293 &ecd, 4294 &ect, 4295 &eche, 4296 &eca); 4297 goto direct70; 4298 } 4299 // 4300 k = idnint(zprf); 4301 j = idnint(a - zprf); 4302 if (fiss->ifis > 0) 4303 { 4304 // now ef is calculated from efa that 4305 // barfit which takes into account th 4306 // note *** shell correction (ecgnz) 4307 il = idnint(jprf); 4308 barfit(k, k + j, il, &sbfis, &segs, & 4309 if ((fiss->optshp == 1) || (fiss->opt 4310 { 4311 ef = G4double(sbfis) - ecld->ecgn 4312 // JLRS - Nov 2016 - Corrected va 4313 if (k == 90) 4314 { 4315 if (mod(j, 2) == 1) 4316 { 4317 ef = ef * (4.5114 - 2.268 4318 } 4319 else 4320 { 4321 ef = ef * (3.3931 - 1.533 4322 } 4323 } 4324 if (k == 92) 4325 { 4326 if ((a - zprf) / zprf > 1.52) 4327 ef = ef * (1.1222 - 0.108 4328 } 4329 if (k >= 94 && k <= 98 && j < 158 4330 { // Data in this range have been 4331 // tested e-e 4332 if (mod(j, 2) == 0 && mod(k, 4333 { 4334 if (k >= 94) 4335 { 4336 ef = ef - (11.54108 * 4337 } 4338 } 4339 // O-O 4340 if (mod(j, 2) == 1 && mod(k, 4341 { 4342 if (k >= 95) 4343 { 4344 ef = ef - (14.567 * ( 4345 } 4346 } 4347 // Odd A 4348 if (mod(j, 2) == 0 && mod(k, 4349 { 4350 if (j >= 144) 4351 { 4352 ef = ef - (13.662 * ( 4353 } 4354 } 4355 4356 if (mod(j, 2) == 1 && mod(k, 4357 { 4358 if (j >= 144) 4359 { 4360 ef = ef - (13.662 * ( 4361 } 4362 } 4363 } 4364 } 4365 else 4366 { 4367 ef = G4double(sbfis); 4368 } 4369 // 4370 // TO AVOID NEGATIVE VALUES FOR IMPOS 4371 // THE FISSION BARRIER IS SET TO ZERO 4372 // 4373 if (ef < 0.0) 4374 ef = 0.0; 4375 fb->efa[j][k] = ef; 4376 // 4377 // Hyper-fission barrier 4378 // 4379 if (NbLam0 > 0) 4380 { 4381 ef = ef + 0.51 * (1115. - 938. + 4382 } 4383 // 4384 // Set fission barrier 4385 // 4386 (*ef_par) = ef; 4387 // 4388 // calculation of surface and curvatu 4389 // to calculate the level density par 4390 xx = fissility((k + j), k, NbLam0, sn 4391 y = 1.00 - xx; 4392 if (y < 0.0) 4393 y = 0.0; 4394 if (y > 1.0) 4395 y = 1.0; 4396 bssp = bipol(1, y); 4397 bksp = bipol(2, y); 4398 } 4399 else 4400 { 4401 ef = 1.0e40; 4402 sbfis = 1.0e40; 4403 bssp = 1.0; 4404 bksp = 1.0; 4405 } 4406 // 4407 // COMPOUND NUCLEUS LEVEL DENSITY 4408 // 4409 // AK 2007 - Now DENSNIV called with cor 4410 4411 afp = idnint(a); 4412 iz = idnint(zprf); 4413 in = afp - iz; 4414 bshell = ecld->ecgnz[in][iz] - ecld->vgsl 4415 defbet = ecld->beta2[in][iz]; 4416 4417 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std 4418 erot = jprf * jprf * 197.328 * 197.328 / 4419 erotcn = erot; 4420 4421 bsbkbc(a, zprf, &bscn, &bkcn, &bccn); 4422 4423 // if(ee > erot+emin){ 4424 densniv( 4425 a, zprf, ee, 0.0, &densg, bshell, bsc 4426 ftcn = temp; 4427 /* 4428 //ecorcn = ecor; 4429 }else{ 4430 // If EE < EROT, only gamma emission can 4431 probf = 0.0; 4432 probp = 0.0; 4433 probd = 0.0; 4434 probt = 0.0; 4435 probn = 0.0; 4436 probhe = 0.0; 4437 proba = 0.0; 4438 probg = 1.0; 4439 probimf = 0.0; 4440 //c JLRS 03/2017 - Added this calculation 4441 //C According to A. Ignatyuk, GG : 4442 //C Here BS=BK=1, as this was assumed in 4443 pa = (ald->av)*a + (ald->as)*std 4444 (ald->ak)*std::pow(a,1./3.); gamma = 2.5 4445 = 1.+gamma*ecld->ecgnz[in][iz]; if(gfacto 4446 } 4447 // 4448 gtemp = 17.60/(std::pow(a,0.699) 4449 ecg = 4.0 * gtemp; 4450 // 4451 goto direct70; 4452 } 4453 */ 4454 4455 // ------------------------------------- 4456 // LEVEL DENSITIES AND TEMPERATURE 4457 // ------------------------------------- 4458 // 4459 // MVR - in case of charged particle emi 4460 // comes from random kinetic energy from 4461 // if option imaxwell = 1 (otherwise E=2 4462 // 4463 // AK - LEVEL DENSITY AND TEMPERATURE AT 4464 // in the subroutine FISSION_WIDTH 4465 // 4466 // 4467 // LEVEL DENSITY AND TEMPERATURE IN THE N 4468 // 4469 // KHS, AK 2007 - Reduction of angular mo 4470 // momentum of emitted fragment JLRS Nov- 4471 // abla++ 4472 4473 if (in >= 2) 4474 { 4475 ind = idnint(a) - idnint(zprf) - 1; 4476 izd = idnint(zprf); 4477 if (jprf > 0.10) 4478 { 4479 lorb(a, a - 1., jprf, ee - sn, &d 4480 djprf = gausshaz(1, dlout, sdlout 4481 if (IDjprf == 1) 4482 djprf = 0.0; 4483 jprfn = jprf + djprf; 4484 jprfn = dint(std::abs(jprfn)); // 4485 } 4486 bshell = ecld->ecgnz[ind][izd] - ecld 4487 defbet = ecld->beta2[ind][izd]; 4488 4489 iinert = 4490 0.4 * 931.49 * 1.16 * 1.16 * std: 4491 erotn = jprfn * jprfn * 197.328 * 197 4492 bsbkbc(a - 1., zprf, &bs, &bk, &bc); 4493 4494 // level density and temperature in t 4495 densniv(a - 1.0, 4496 zprf, 4497 ee, 4498 sn, 4499 &densn, 4500 bshell, 4501 bs, 4502 bk, 4503 &temp, 4504 fiss->optshp, 4505 fiss->optcol, 4506 defbet, 4507 &ecor, 4508 jprfn, 4509 0, 4510 &qr); 4511 nt = temp; 4512 ecn = 0.0; 4513 if (densn > 0.) 4514 { 4515 G4int IS = 0; 4516 if (imaxwell == 1) 4517 { 4518 rnt = nt; 4519 dir1234: 4520 ecn = fvmaxhaz_neut(rnt); 4521 IS++; 4522 if (IS > 100) 4523 { 4524 std::cout << "WARNING: FV 4525 goto exi1000; 4526 } 4527 if (ecn > (ee - sn)) 4528 { 4529 if ((ee - sn) < rnt) 4530 ecn = ee - sn; 4531 else 4532 goto dir1234; 4533 } 4534 if (ecn <= 0.0) 4535 goto dir1234; 4536 } 4537 else 4538 { 4539 ecn = 2.0 * nt; 4540 } 4541 } 4542 } 4543 else 4544 { 4545 densn = 0.0; 4546 ecn = 0.0; 4547 nt = 0.0; 4548 } 4549 exi1000: 4550 4551 // LEVEL DENSITY AND TEMPERATURE IN THE P 4552 // 4553 // Reduction of angular momentum due to o 4554 // fragment 4555 if (iz >= 2) 4556 { 4557 ind = idnint(a) - idnint(zprf); 4558 izd = idnint(zprf) - 1; 4559 if (jprf > 0.10) 4560 { 4561 lorb(a, a - 1., jprf, ee - sbp, & 4562 djprf = gausshaz(1, dlout, sdlout 4563 if (IDjprf == 1) 4564 djprf = 0.0; 4565 jprfp = jprf + djprf; 4566 jprfp = dint(std::abs(jprfp)); // 4567 } 4568 bshell = ecld->ecgnz[ind][izd] - ecld 4569 defbet = ecld->beta2[ind][izd]; 4570 4571 iinert = 4572 0.4 * 931.49 * 1.16 * 1.16 * std: 4573 erotp = jprfp * jprfp * 197.328 * 197 4574 4575 bsbkbc(a - 1., zprf - 1., &bs, &bk, & 4576 4577 // level density and temperature in t 4578 densniv(a - 1.0, 4579 zprf - 1.0, 4580 ee, 4581 sbp, 4582 &densp, 4583 bshell, 4584 bs, 4585 bk, 4586 &temp, 4587 fiss->optshp, 4588 fiss->optcol, 4589 defbet, 4590 &ecor, 4591 jprfp, 4592 0, 4593 &qr); 4594 pt = temp; 4595 ecp = 0.; 4596 if (densp > 0.) 4597 { 4598 G4int IS = 0; 4599 if (imaxwell == 1) 4600 { 4601 rpt = pt; 4602 dir1235: 4603 ecp = fvmaxhaz(rpt); 4604 IS++; 4605 if (IS > 100) 4606 { 4607 std::cout << "WARNING: FV 4608 goto exi1001; 4609 } 4610 if (ecp > (ee - sbp)) 4611 { 4612 if ((ee - sbp) < rpt) 4613 ecp = ee - sbp; 4614 else 4615 goto dir1235; 4616 } 4617 if (ecp <= 0.0) 4618 goto dir1235; 4619 ecp = ecp + bp; 4620 } 4621 else 4622 { 4623 ecp = 2.0 * pt + bp; 4624 } 4625 } 4626 } 4627 else 4628 { 4629 densp = 0.0; 4630 ecp = 0.0; 4631 pt = 0.0; 4632 } 4633 exi1001: 4634 4635 // FINAL LEVEL DENSITY AND TEMPERATURE A 4636 // 4637 // Reduction of angular momentum due to o 4638 // fragment 4639 if ((in >= 2) && (iz >= 2)) 4640 { 4641 ind = idnint(a) - idnint(zprf) - 1; 4642 izd = idnint(zprf) - 1; 4643 if (jprf > 0.10) 4644 { 4645 lorb(a, a - 2., jprf, ee - sbd, & 4646 djprf = gausshaz(1, dlout, sdlout 4647 if (IDjprf == 1) 4648 djprf = 0.0; 4649 jprfd = jprf + djprf; 4650 jprfd = dint(std::abs(jprfd)); // 4651 } 4652 bshell = ecld->ecgnz[ind][izd] - ecld 4653 defbet = ecld->beta2[ind][izd]; 4654 4655 iinert = 4656 0.4 * 931.49 * 1.16 * 1.16 * std: 4657 erotd = jprfd * jprfd * 197.328 * 197 4658 4659 bsbkbc(a - 2., zprf - 1., &bs, &bk, & 4660 4661 // level density and temperature in t 4662 densniv(a - 2.0, 4663 zprf - 1.0e0, 4664 ee, 4665 sbd, 4666 &densd, 4667 bshell, 4668 bs, 4669 bk, 4670 &temp, 4671 fiss->optshp, 4672 fiss->optcol, 4673 defbet, 4674 &ecor, 4675 jprfd, 4676 0, 4677 &qr); 4678 4679 dt = temp; 4680 ecd = 0.0; 4681 if (densd > 0.) 4682 { 4683 G4int IS = 0; 4684 if (imaxwell == 1) 4685 { 4686 rdt = dt; 4687 dir1236: 4688 ecd = fvmaxhaz(rdt); 4689 IS++; 4690 if (IS > 100) 4691 { 4692 std::cout << "WARNING: FV 4693 goto exi1002; 4694 } 4695 if (ecd > (ee - sbd)) 4696 { 4697 if ((ee - sbd) < rdt) 4698 ecd = ee - sbd; 4699 else 4700 goto dir1236; 4701 } 4702 if (ecd <= 0.0) 4703 goto dir1236; 4704 ecd = ecd + bd; 4705 } 4706 else 4707 { 4708 ecd = 2.0 * dt + bd; 4709 } 4710 } 4711 } 4712 else 4713 { 4714 densd = 0.0; 4715 ecd = 0.0; 4716 dt = 0.0; 4717 } 4718 exi1002: 4719 4720 // FINAL LEVEL DENSITY AND TEMPERATURE A 4721 // 4722 // Reduction of angular momentum due to o 4723 // fragment 4724 if ((in >= 3) && (iz >= 2)) 4725 { 4726 ind = idnint(a) - idnint(zprf) - 2; 4727 izd = idnint(zprf) - 1; 4728 if (jprf > 0.10) 4729 { 4730 lorb(a, a - 3., jprf, ee - sbt, & 4731 djprf = gausshaz(1, dlout, sdlout 4732 if (IDjprf == 1) 4733 djprf = 0.0; 4734 jprft = jprf + djprf; 4735 jprft = dint(std::abs(jprft)); // 4736 } 4737 bshell = ecld->ecgnz[ind][izd] - ecld 4738 defbet = ecld->beta2[ind][izd]; 4739 4740 iinert = 4741 0.4 * 931.49 * 1.16 * 1.16 * std: 4742 erott = jprft * jprft * 197.328 * 197 4743 4744 bsbkbc(a - 3., zprf - 1., &bs, &bk, & 4745 4746 // level density and temperature in t 4747 densniv(a - 3.0, 4748 zprf - 1.0, 4749 ee, 4750 sbt, 4751 &denst, 4752 bshell, 4753 bs, 4754 bk, 4755 &temp, 4756 fiss->optshp, 4757 fiss->optcol, 4758 defbet, 4759 &ecor, 4760 jprft, 4761 0, 4762 &qr); 4763 4764 tt = temp; 4765 ect = 0.; 4766 if (denst > 0.) 4767 { 4768 G4int IS = 0; 4769 if (imaxwell == 1) 4770 { 4771 rtt = tt; 4772 dir1237: 4773 ect = fvmaxhaz(rtt); 4774 IS++; 4775 if (IS > 100) 4776 { 4777 std::cout << "WARNING: FV 4778 goto exi1003; 4779 } 4780 if (ect > (ee - sbt)) 4781 { 4782 if ((ee - sbt) < rtt) 4783 ect = ee - sbt; 4784 else 4785 goto dir1237; 4786 } 4787 if (ect <= 0.0) 4788 goto dir1237; 4789 ect = ect + bt; 4790 } 4791 else 4792 { 4793 ect = 2.0 * tt + bt; 4794 } 4795 } 4796 } 4797 else 4798 { 4799 denst = 0.0; 4800 ect = 0.0; 4801 tt = 0.0; 4802 } 4803 exi1003: 4804 4805 // LEVEL DENSITY AND TEMPERATURE IN THE A 4806 // 4807 // Reduction of angular momentum due to o 4808 // fragment 4809 if ((in >= 3) && (iz >= 3)) 4810 { 4811 ind = idnint(a) - idnint(zprf) - 2; 4812 izd = idnint(zprf) - 2; 4813 if (jprf > 0.10) 4814 { 4815 lorb(a, a - 4., jprf, ee - sba, & 4816 djprf = gausshaz(1, dlout, sdlout 4817 if (IDjprf == 1) 4818 djprf = 0.0; 4819 jprfa = jprf + djprf; 4820 jprfa = dint(std::abs(jprfa)); // 4821 } 4822 bshell = ecld->ecgnz[ind][izd] - ecld 4823 defbet = ecld->beta2[ind][izd]; 4824 4825 iinert = 4826 0.4 * 931.49 * 1.16 * 1.16 * std: 4827 erota = jprfa * jprfa * 197.328 * 197 4828 4829 bsbkbc(a - 4., zprf - 2., &bs, &bk, & 4830 4831 // level density and temperature in t 4832 densniv(a - 4.0, 4833 zprf - 2.0, 4834 ee, 4835 sba, 4836 &densa, 4837 bshell, 4838 bs, 4839 bk, 4840 &temp, 4841 fiss->optshp, 4842 fiss->optcol, 4843 defbet, 4844 &ecor, 4845 jprfa, 4846 0, 4847 &qr); 4848 4849 at = temp; 4850 eca = 0.0; 4851 if (densa > 0.) 4852 { 4853 G4int IS = 0; 4854 if (imaxwell == 1) 4855 { 4856 rat = at; 4857 dir1238: 4858 eca = fvmaxhaz(rat); 4859 IS++; 4860 if (IS > 100) 4861 { 4862 std::cout << "WARNING: FV 4863 goto exi1004; 4864 } 4865 if (eca > (ee - sba)) 4866 { 4867 if ((ee - sba) < rat) 4868 eca = ee - sba; 4869 else 4870 goto dir1238; 4871 } 4872 if (eca <= 0.0) 4873 goto dir1238; 4874 eca = eca + ba; 4875 } 4876 else 4877 { 4878 eca = 2.0 * at + ba; 4879 } 4880 } 4881 } 4882 else 4883 { 4884 densa = 0.0; 4885 eca = 0.0; 4886 at = 0.0; 4887 } 4888 exi1004: 4889 4890 // FINAL LEVEL DENSITY AND TEMPERATURE A 4891 // 4892 // Reduction of angular momentum due to o 4893 // fragment 4894 if ((in >= 2) && (iz >= 3)) 4895 { 4896 ind = idnint(a) - idnint(zprf) - 1; 4897 izd = idnint(zprf) - 2; 4898 if (jprf > 0.10) 4899 { 4900 lorb(a, a - 3., jprf, ee - sbhe, 4901 djprf = gausshaz(1, dlout, sdlout 4902 if (IDjprf == 1) 4903 djprf = 0.0; 4904 jprfhe = jprf + djprf; 4905 jprfhe = dint(std::abs(jprfhe)); 4906 } 4907 bshell = ecld->ecgnz[ind][izd] - ecld 4908 defbet = ecld->beta2[ind][izd]; 4909 4910 iinert = 4911 0.4 * 931.49 * 1.16 * 1.16 * std: 4912 erothe = jprfhe * jprfhe * 197.328 * 4913 4914 bsbkbc(a - 3., zprf - 2., &bs, &bk, & 4915 4916 // level density and temperature in t 4917 densniv(a - 3.0, 4918 zprf - 2.0, 4919 ee, 4920 sbhe, 4921 &denshe, 4922 bshell, 4923 bs, 4924 bk, 4925 &temp, 4926 fiss->optshp, 4927 fiss->optcol, 4928 defbet, 4929 &ecor, 4930 jprfhe, 4931 0, 4932 &qr); 4933 4934 het = temp; 4935 eche = 0.0; 4936 if (denshe > 0.) 4937 { 4938 G4int IS = 0; 4939 if (imaxwell == 1) 4940 { 4941 rhet = het; 4942 dir1239: 4943 eche = fvmaxhaz(rhet); 4944 IS++; 4945 if (IS > 100) 4946 { 4947 std::cout << "WARNING: FV 4948 goto exi1005; 4949 } 4950 if (eche > (ee - sbhe)) 4951 { 4952 if ((ee - sbhe) < rhet) 4953 eche = ee - sbhe; 4954 else 4955 goto dir1239; 4956 } 4957 if (eche <= 0.0) 4958 goto dir1239; 4959 eche = eche + bhe; 4960 } 4961 else 4962 { 4963 eche = 2.0 * het + bhe; 4964 } 4965 } 4966 } 4967 else 4968 { 4969 denshe = 0.0; 4970 eche = 0.0; 4971 het = 0.0; 4972 } 4973 exi1005: 4974 4975 // LEVEL DENSITY AND TEMPERATURE IN THE L 4976 // 4977 // - Reduction of angular momentum due to 4978 // fragment JLRS Jun-2017 - Added these c 4979 4980 if (in >= 2 && NbLam0 > 0) 4981 { 4982 ind = idnint(a) - idnint(zprf) - 1; 4983 izd = idnint(zprf); 4984 if (jprf > 0.10) 4985 { 4986 lorb(a, a - 1., jprf, ee - slamb0 4987 djprf = gausshaz(1, dlout, sdlout 4988 if (IDjprf == 1) 4989 djprf = 0.0; 4990 jprflamb0 = jprf + djprf; 4991 jprflamb0 = dint(std::abs(jprflam 4992 } 4993 bshell = ecld->ecgnz[ind][izd] - ecld 4994 defbet = ecld->beta2[ind][izd]; 4995 4996 iinert = 4997 0.4 * 931.49 * 1.16 * 1.16 * std: 4998 erotlamb0 = jprflamb0 * jprflamb0 * 1 4999 bsbkbc(a - 1., zprf, &bs, &bk, &bc); 5000 5001 // level density and temperature in t 5002 densniv(a - 1.0, 5003 zprf, 5004 ee, 5005 slamb0, 5006 &denslamb0, 5007 bshell, 5008 bs, 5009 bk, 5010 &temp, 5011 fiss->optshp, 5012 fiss->optcol, 5013 defbet, 5014 &ecor, 5015 jprflamb0, 5016 0, 5017 &qr); 5018 lamb0t = temp; 5019 eclamb0 = 0.0; 5020 if (denslamb0 > 0.) 5021 { 5022 G4int IS = 0; 5023 if (imaxwell == 1) 5024 { 5025 rlamb0t = lamb0t; 5026 dir1240: 5027 eclamb0 = fvmaxhaz_neut(rlamb 5028 IS++; 5029 if (IS > 100) 5030 { 5031 std::cout << "WARNING: FV 5032 goto exi1006; 5033 } 5034 if (eclamb0 > (ee - slamb0)) 5035 { 5036 if ((ee - slamb0) < rlamb 5037 eclamb0 = ee - slamb0 5038 else 5039 goto dir1240; 5040 } 5041 if (eclamb0 <= 0.0) 5042 goto dir1240; 5043 } 5044 else 5045 { 5046 eclamb0 = 2.0 * lamb0t; 5047 } 5048 } 5049 } 5050 else 5051 { 5052 denslamb0 = 0.0; 5053 eclamb0 = 0.0; 5054 lamb0t = 0.0; 5055 } 5056 exi1006: 5057 5058 // Decay widths for particles 5059 if (densg > 0.) 5060 { 5061 // 5062 // CALCULATION OF THE PARTIAL DECAY W 5063 // USED FOR BOTH THE TIME SCALE AND T 5064 // 5065 // AKAP = HBAR**2/(2* MN * R_0** 5066 // 5067 // AK, KHS 2005 - Energy-dependen inv 5068 // of 5069 // Coulomb barrier for 5070 // JLRS 2017 - Implementation in abla 5071 5072 if (densn <= 0.0) 5073 { 5074 gn = 0.0; 5075 } 5076 else 5077 { 5078 gn = width(a, zprf, 1.0, 0.0, nt, 5079 } 5080 if (densp <= 0.0) 5081 { 5082 gp = 0.0; 5083 } 5084 else 5085 { 5086 gp = width(a, zprf, 1.0, 1.0, pt, 5087 } 5088 if (densd <= 0.0) 5089 { 5090 gd = 0.0; 5091 } 5092 else 5093 { 5094 gd = width(a, zprf, 2.0, 1.0, dt, 5095 } 5096 if (denst <= 0.0) 5097 { 5098 gt = 0.0; 5099 } 5100 else 5101 { 5102 gt = width(a, zprf, 3.0, 1.0, tt, 5103 } 5104 if (denshe <= 0.0) 5105 { 5106 ghe = 0.0; 5107 } 5108 else 5109 { 5110 ghe = width(a, zprf, 3.0, 2.0, he 5111 } 5112 if (densa <= 0.0) 5113 { 5114 ga = 0.0; 5115 } 5116 else 5117 { 5118 ga = width(a, zprf, 4.0, 2.0, at, 5119 } 5120 if (denslamb0 <= 0.0) 5121 { 5122 glamb0 = 0.0; 5123 } 5124 else 5125 { 5126 glamb0 = width(a, zprf, 1.0, -2.0 5127 } 5128 5129 // ************************** 5130 // * Treatment of IMFs * 5131 // * KHS, AK, MVR 2005-2006 * 5132 // ************************** 5133 5134 G4int izcn = 0, incn = 0, inmin = 0, 5135 G4double aimf, mares, maimf; 5136 5137 if (fimf_allowed == 0 || zprf <= 5.0 5138 { 5139 gimf = 0.0; 5140 } 5141 else 5142 { 5143 // Estimate the total decay 5144 // By using the logarithmic 5145 5146 mglms(a, zprf, opt->optshpimf, &m 5147 5148 gimf3 = 0.0; 5149 zimf = 3.0; 5150 izimf = 3; 5151 // *** Find the limits that 5152 izcn = idnint(zprf); // Z of 5153 incn = idnint(a) - izcn; // N of 5154 5155 isostab_lim(izimf, &inmin, 5156 &inmax); // Bound iso 5157 isostab_lim(izcn - izimf, 5158 &inmi, 5159 &inma); 5160 5161 inmin = max(inmin, incn - inma); 5162 inmax = min(inmax, incn - inmi); 5163 5164 inmax = max(inmax, inmin); // In 5165 5166 for (G4int iaimf = izimf + inmin; 5167 { 5168 aimf = G4double(iaimf); 5169 if (aimf >= a || zimf >= zprf 5170 { 5171 width_imf = 0.0; 5172 } 5173 else 5174 { 5175 // Q-values 5176 mglms(a - aimf, zprf - zi 5177 mglms(aimf, zimf, opt->op 5178 // Bass barrier 5179 barrs(idnint(zprf - zimf) 5180 sbimf = maimf + mares - m 5181 // Rotation energy 5182 defbetimf = ecld->beta2[i 5183 ecld->beta2[i 5184 5185 iinert = 0.40 * 931.490 * 5186 (std::pow(ai 5187 931.490 * 1.160 5188 (std::pow(ai 5189 (std::pow(ai 5190 5191 erot = jprf * jprf * 197. 5192 5193 // Width 5194 if (densg == 0.0 || ee < 5195 { 5196 width_imf = 0.0; 5197 } 5198 else 5199 { 5200 // To take into accou 5201 // BSIMF = ((A-A 5202 // AIMF**(2.D0/3 5203 bsimf = bscn; 5204 densniv( 5205 a, zprf, ee, sbim 5206 5207 imfarg = (sbimf + ero 5208 if (imfarg > 200.0) 5209 imfarg = 200.0; 5210 5211 // For IMF - The avai 5212 // densities in CN at 5213 // G=WIDTH*ro_CN(E-SB 5214 // approximation: ro( 5215 // included to take i 5216 // deformed. If (abov 5217 // this ratio is equa 5218 width_imf = 0.0; 5219 // 5220 width_imf = 5221 width(a, zprf, ai 5222 } // if densg 5223 } // if aimf 5224 gimf3 = gimf3 + width_imf; 5225 } // for IAIMF 5226 5227 // zimf = 5 5228 gimf5 = 0.0; 5229 zimf = 5.0; 5230 izimf = 5; 5231 // *** Find the limits that 5232 izcn = idnint(zprf); // Z of 5233 incn = idnint(a) - izcn; // N of 5234 5235 isostab_lim(izimf, &inmin, 5236 &inmax); // Bound iso 5237 isostab_lim(izcn - izimf, 5238 &inmi, 5239 &inma); 5240 5241 inmin = max(inmin, incn - inma); 5242 inmax = min(inmax, incn - inmi); 5243 5244 inmax = max(inmax, inmin); // In 5245 5246 for (G4int iaimf = izimf + inmin; 5247 { 5248 aimf = G4double(iaimf); 5249 if (aimf >= a || zimf >= zprf 5250 { 5251 width_imf = 0.0; 5252 } 5253 else 5254 { 5255 // Q-values 5256 mglms(a - aimf, zprf - zi 5257 mglms(aimf, zimf, opt->op 5258 // Bass barrier 5259 barrs(idnint(zprf - zimf) 5260 sbimf = maimf + mares - m 5261 // Rotation energy 5262 defbetimf = ecld->beta2[i 5263 ecld->beta2[i 5264 5265 iinert = 0.40 * 931.490 * 5266 (std::pow(ai 5267 931.490 * 1.160 5268 (std::pow(ai 5269 (std::pow(ai 5270 5271 erot = jprf * jprf * 197. 5272 // 5273 // Width 5274 if (densg == 0.0 || ee < 5275 { 5276 width_imf = 0.0; 5277 } 5278 else 5279 { 5280 // To take into accou 5281 // BSIMF = ((A-A 5282 // AIMF**(2.D0/3 5283 bsimf = bscn; 5284 densniv( 5285 a, zprf, ee, sbim 5286 // 5287 imfarg = (sbimf + ero 5288 if (imfarg > 200.0) 5289 imfarg = 200.0; 5290 // 5291 // For IMF - The avai 5292 // densities in CN at 5293 // G=WIDTH*ro_CN(E-SB 5294 // approximation: ro( 5295 // included to take i 5296 // deformed. If (abov 5297 // this ratio is equa 5298 width_imf = 0.0; 5299 width_imf = width(a, 5300 qrcn; //* 5301 } // 5302 } // 5303 gimf5 = gimf5 + width_imf; 5304 } // for IAIMF 5305 // It is assumed that GIMFi = A_I 5306 // integrates Int(A_IMF*ZIMF**B_I 5307 5308 if (gimf3 <= 0.0 || gimf5 <= 0.0) 5309 { 5310 gimf = 0.0; 5311 b_imf = -100.0; 5312 a_imf = 0.0; 5313 } 5314 else 5315 { 5316 // 5317 b_imf = (std::log10(gimf3) - 5318 // 5319 if (b_imf >= -1.01) 5320 b_imf = -1.01; 5321 if (b_imf <= -100.0) 5322 { 5323 b_imf = -100.0; 5324 a_imf = 0.0; 5325 gimf = 0.0; 5326 goto direct2007; 5327 } 5328 // 5329 a_imf = gimf3 / std::pow(3.0, 5330 gimf = a_imf * (std::pow(zprf 5331 } 5332 5333 direct2007: 5334 if (gimf < 1.e-10) 5335 gimf = 0.0; 5336 } // if fimf_allowed 5337 // 5338 // c JLRS 2016 - Added this calcula 5339 // C AK 2004 - Gamma width 5340 // C According to A. Ignatyuk, GG : 5341 // C Here BS=BK=1, as this was assume 5342 pa = (ald->av) * a + (ald->as) * std: 5343 gamma = 2.5 * pa * std::pow(a, -4. / 5344 gfactor = 1. + gamma * ecld->ecgnz[in 5345 if (gfactor <= 0.) 5346 { 5347 gfactor = 0.0; 5348 } 5349 // 5350 gtemp = 17.60 / (std::pow(a, 0.699) * 5351 // 5352 // C If one switches gammas off, one 5353 // through the fission barrier. 5354 gg = 0.624e-9 * std::pow(a, 1.6) * st 5355 // gammaemission==1 5356 // C For fission fragments, GG is ~ 2 5357 // c "oridnary" nuclei (A. Ignatyuk, 5358 if (gammaemission == 1) 5359 { 5360 gg = 2.0 * gg; 5361 } 5362 ecg = 4.0 * gtemp; 5363 // 5364 // 5365 gsum = ga + ghe + gd + gt + gp + gn + 5366 5367 // std::cout << gn << " " << gd << " 5368 5369 if (gsum > 0.0) 5370 { 5371 ts1 = hbar / gsum; 5372 } 5373 else 5374 { 5375 ts1 = 1.0e99; 5376 goto direct69; 5377 } 5378 // 5379 // Case of nuclei below Businaro-Gall 5380 if (fiss->ifis == 0 || (zprf * zprf / 5381 { 5382 goto direct69; 5383 } 5384 // 5385 // Calculation of the fission decay w 5386 // Deformation is calculated using th 5387 // 5388 defbet = y; 5389 fission_width(zprf, a, ee, bssp, bksp 5390 ft = temp; 5391 // 5392 // Case of very heavy nuclei that hav 5393 // For them fission is the only decay 5394 if (ef <= 0.0) 5395 { 5396 probf = 1.0; 5397 probp = 0.0; 5398 probd = 0.0; 5399 probt = 0.0; 5400 probn = 0.0; 5401 probhe = 0.0; 5402 proba = 0.0; 5403 probg = 0.0; 5404 probimf = 0.0; 5405 problamb0 = 0.0; 5406 goto direct70; 5407 } 5408 5409 if (fiss->bet <= 0.) 5410 { 5411 gtotal = ga + ghe + gp + gd + gt 5412 if (gtotal <= 0.0) 5413 { 5414 probf = 0.0; 5415 probp = 0.0; 5416 probd = 0.0; 5417 probt = 0.0; 5418 probn = 0.0; 5419 probhe = 0.0; 5420 proba = 0.0; 5421 probg = 0.0; 5422 probimf = 0.0; 5423 problamb0 = 0.0; 5424 goto direct70; 5425 } 5426 else 5427 { 5428 probf = gf / gtotal; 5429 probn = gn / gtotal; 5430 probp = gp / gtotal; 5431 probd = gd / gtotal; 5432 probt = gt / gtotal; 5433 probhe = ghe / gtotal; 5434 proba = ga / gtotal; 5435 probg = gg / gtotal; 5436 probimf = gimf / gtotal; 5437 problamb0 = glamb0 / gtotal; 5438 goto direct70; 5439 } 5440 } 5441 } 5442 else 5443 { 5444 goto direct69; 5445 } 5446 // 5447 if (inum > ilast) 5448 { // new event means reset the time scale 5449 tsum = 0.; 5450 } 5451 // 5452 // kramers factor for the dynamical hindr 5453 fomega_sp(a, y, &mfcd, &omegasp, &homegas 5454 cf = cram((NbLam0 > 0 ? fiss->bethyp : fi 5455 // 5456 // We calculate the transient time 5457 fomega_gs(a, zprf, &k1, &omegags, &homega 5458 tauc = tau((NbLam0 > 0 ? fiss->bethyp : f 5459 gf = gf * cf; 5460 // 5461 /* 5462 c The subroutine part_fiss calculates the 5463 to the time c dependence of the probabili 5464 the FOKKER-PLANCK eq c using a nucleus po 5465 parabola. It also gives the c decay time 5466 all particle decay channels and the c fis 5467 the nucleus decays by particle evaporatio 5468 CHOICE_FISSPART = 2 5469 */ 5470 // 5471 part_fiss((NbLam0 > 0 ? fiss->bethyp : fi 5472 gf = gff; 5473 // 5474 // We accumulate in TSUM the mean decay f 5475 // decay channels and fission 5476 tsum = tsum + t_lapse; 5477 5478 // If fission occurs 5479 if (choice_fisspart == 2) 5480 { 5481 probf = 1.0; 5482 probp = 0.0; 5483 probd = 0.0; 5484 probt = 0.0; 5485 probn = 0.0; 5486 probhe = 0.0; 5487 proba = 0.0; 5488 probg = 0.0; 5489 probimf = 0.0; 5490 problamb0 = 0.0; 5491 goto direct70; 5492 } 5493 else 5494 { 5495 // If particle evaporation occurs 5496 // The probabilities for the differen 5497 // account the fission width GFF that 5498 5499 gtotal = ga + ghe + gp + gd + gt + gn 5500 if (gtotal <= 0.0) 5501 { 5502 probf = 0.0; 5503 probp = 0.0; 5504 probd = 0.0; 5505 probt = 0.0; 5506 probn = 0.0; 5507 probhe = 0.0; 5508 proba = 0.0; 5509 probg = 0.0; 5510 probimf = 0.0; 5511 problamb0 = 0.0; 5512 goto direct70; 5513 } 5514 else 5515 { 5516 probf = 0.0; 5517 probn = gn / gtotal; 5518 probp = gp / gtotal; 5519 probd = gd / gtotal; 5520 probt = gt / gtotal; 5521 probhe = ghe / gtotal; 5522 proba = ga / gtotal; 5523 probg = gg / gtotal; 5524 probimf = gimf / gtotal; 5525 problamb0 = glamb0 / gtotal; 5526 goto direct70; 5527 } 5528 } 5529 // 5530 direct69: 5531 gtotal = ga + ghe + gp + gd + gt + gn + g 5532 if (gtotal <= 0.0) 5533 { 5534 probf = 0.0; 5535 probp = 0.0; 5536 probd = 0.0; 5537 probt = 0.0; 5538 probn = 0.0; 5539 probhe = 0.0; 5540 proba = 0.0; 5541 probg = 0.0; 5542 probimf = 0.0; 5543 problamb0 = 0.0; 5544 } 5545 else 5546 { 5547 probf = 0.0; 5548 probn = gn / gtotal; 5549 probp = gp / gtotal; 5550 probd = gd / gtotal; 5551 probt = gt / gtotal; 5552 probhe = ghe / gtotal; 5553 proba = ga / gtotal; 5554 probg = gg / gtotal; 5555 probimf = gimf / gtotal; 5556 problamb0 = glamb0 / gtotal; 5557 } 5558 5559 direct70: 5560 ptotl = probp + probd + probt + probn + p 5561 // 5562 ee = eer; 5563 ilast = inum; 5564 5565 // Return values: 5566 (*probp_par) = probp; 5567 (*probd_par) = probd; 5568 (*probt_par) = probt; 5569 (*probn_par) = probn; 5570 (*probhe_par) = probhe; 5571 (*proba_par) = proba; 5572 (*probg_par) = probg; 5573 (*probimf_par) = probimf; 5574 (*problamb0_par) = problamb0; 5575 (*probf_par) = probf; 5576 (*ptotl_par) = ptotl; 5577 (*sn_par) = sn; 5578 (*sp_par) = sp; 5579 (*sd_par) = sd; 5580 (*st_par) = st; 5581 (*she_par) = she; 5582 (*sa_par) = sa; 5583 (*slamb0_par) = slamb0; 5584 (*sbp_par) = sbp; 5585 (*sbd_par) = sbd; 5586 (*sbt_par) = sbt; 5587 (*sbhe_par) = sbhe; 5588 (*sba_par) = sba; 5589 (*ecn_par) = ecn; 5590 (*ecp_par) = ecp; 5591 (*ecd_par) = ecd; 5592 (*ect_par) = ect; 5593 (*eche_par) = eche; 5594 (*eca_par) = eca; 5595 (*ecg_par) = ecg; 5596 (*eclamb0_par) = eclamb0; 5597 (*bp_par) = bp; 5598 (*bd_par) = bd; 5599 (*bt_par) = bt; 5600 (*bhe_par) = bhe; 5601 (*ba_par) = ba; 5602 (*tcn) = ftcn; 5603 (*ts1_par) = ts1; 5604 (*jprfn_par) = jprfn; 5605 (*jprfp_par) = jprfp; 5606 (*jprfd_par) = jprfd; 5607 (*jprft_par) = jprft; 5608 (*jprfhe_par) = jprfhe; 5609 (*jprfa_par) = jprfa; 5610 (*jprflamb0_par) = jprflamb0; 5611 (*tsum_par) = tsum; 5612 return; 5613 } 5614 5615 void G4Abla::densniv(G4double a, 5616 G4double z, 5617 G4double ee, 5618 G4double esous, 5619 G4double* dens, 5620 G4double bshell, 5621 G4double bsin, 5622 G4double bkin, 5623 G4double* temp, 5624 G4int optshp, 5625 G4int optcol, 5626 G4double defbet, 5627 G4double* ecor, 5628 G4double jprf, 5629 G4int ifis, 5630 G4double* qr) 5631 { 5632 // 1498 C 5633 // 1499 C INPUT: 5634 // 1500 C A,EE,ESOUS,OPTSHP 5635 // 1501 C 5636 // 1502 C LEVEL DENSITY PARAMETERS 5637 // 1503 C COMMON /ALD/ AV,AS,AK, 5638 // 1504 C AV,AS,AK - VOLUME,SURFACE 5639 // 1505 C LEVEL DENSITY 5640 // 1506 C OPTAFAN - 0/1 AF/AN >=1 5641 // 1507 C RECOMMENDED IS 5642 // 1508 5643 // C----------------------------------- 5644 // 1509 C OUTPUT: DENS,TEMP 5645 // 1510 C 5646 // 1511 C 5647 // ____________________________________ 5648 // C / 1513 C / PROCEDURE FOR CALCU 5649 // COMPOUND NUCLEUS 1514 C 5650 // /___________________________________ 5651 // 1515 C 5652 // 1516 INTEGER AFP,IZ,OPTSHP,OPT 5653 // 1517 REAL*8 5654 // A,EE,ESOUS,DENS,E,Y0,Y1,Y2,Y01,Y11,Y 5655 // C=====INSERTED BY KUDYAEV=========== 5656 // 1519 COMMON /ALD/ AV,AS,AK,OPT 5657 // 1520 REAL*8 5658 // ECR,ER,DELTAU,Z,DELTPP,PARA,PARZ,FE, 5659 // 1521 REAL*8 5660 // BSHELL,DELTA0,AV,AK,AS,PONNIV,PONFE, 5661 // C=================================== 5662 // 1523 C 5663 // 1524 C 5664 // 1525 5665 // C----------------------------------- 5666 // 1526 C A MASS NU 5667 // 1527 C EE EXCITAT 5668 // 1528 C ESOUS SEPARAT 5669 // BARRIER 5670 // 1529 C DENS STATE D 5671 // EE-ESOUS-EC 1530 C BSHELL 5672 // NUCLEAR TEMPERATURE 1532 C E 5673 // DAUGHTER NUCLEUS 1533 C E1 5674 // 1534 C Y0,Y1,Y2,Y01,Y11,Y21 5675 // 1535 C LOCAL HELP VA 5676 // 1536 C PA LOCAL STATE-D 5677 // 1537 C EC KINETIC 5678 // WITHOUT 1538 C 5679 // FAKTOR FOR SUBSTRACTING KINETIC ENER 5680 // PAIRING GAP 12 FOR GROUND STATE 1541 5681 // SADDLE POINT 1542 C EITERA 5682 // TEMPERATURE ITERATION 1543 5683 // C----------------------------------- 5684 // 1544 C 5685 // 1545 C 5686 G4double delta0 = 0.0; 5687 G4double deltau = 0.0; 5688 G4double deltpp = 0.0; 5689 G4double e = 0.0; 5690 G4double e0 = 0.0; 5691 G4double ecor1 = 0.0; 5692 G4double ecr = 10.0; 5693 G4double fe = 0.0; 5694 G4double he = 0.0; 5695 G4double pa = 0.0; 5696 G4double para = 0.0; 5697 G4double parz = 0.0; 5698 G4double ponfe = 0.0; 5699 G4double ponniv = 0.0; 5700 G4double fqr = 1.0; 5701 G4double y01 = 0.0; 5702 G4double y11 = 0.0; 5703 G4double y2 = 0.0; 5704 G4double y21 = 0.0; 5705 G4double y1 = 0.0; 5706 G4double y0 = 0.0; 5707 G4double fnorm = 0.0; 5708 G4double fp_per = 0.; 5709 G4double fp_par = 0.; 5710 G4double sig_per = 0.; 5711 G4double sig_par = 0.; 5712 G4double sigma2; 5713 G4double jfact = 1.; 5714 G4double erot = 0.; 5715 G4double fdens = 0.; 5716 G4double fecor = 0.; 5717 G4double BSHELLCT = 0.; 5718 G4double gamma = 0.; 5719 G4double ftemp = 0.0; 5720 G4double tempct = 0.0; 5721 G4double densfm = 0.0; 5722 G4double densct = 0.0; 5723 G4double ein = 0.; 5724 G4double elim; 5725 G4double tfm; 5726 G4double bs = bsin; 5727 G4double bk = bkin; 5728 G4int IPARITE; 5729 G4int IOPTCT = fiss->optct; 5730 // 5731 G4double pi6 = std::pow(3.1415926535, 2) 5732 G4double pi = 3.1415926535; 5733 // 5734 G4int afp = idnint(a); 5735 G4int iz = idnint(z); 5736 G4int in = afp - iz; 5737 // 5738 if (ifis != 1) 5739 { 5740 BSHELLCT = ecld->ecgnz[in][iz]; 5741 } 5742 else 5743 { 5744 BSHELLCT = 0.0; 5745 } 5746 if (afp <= 20) 5747 BSHELLCT = 0.0; 5748 // 5749 parite(a, ¶); 5750 if (para < 0.0) 5751 { 5752 // Odd A 5753 IPARITE = 1; 5754 } 5755 else 5756 { 5757 // Even A 5758 parite(z, &parz); 5759 if (parz > 0.0) 5760 { 5761 // Even Z, even N 5762 IPARITE = 2; 5763 } 5764 else 5765 { 5766 // Odd Z, odd N 5767 IPARITE = 0; 5768 } 5769 } 5770 // 5771 ein = ee - esous; 5772 // 5773 if (ein > 1.e30) 5774 { 5775 fdens = 0.0; 5776 ftemp = 0.5; 5777 goto densniv100; 5778 } 5779 // 5780 e = ee - esous; 5781 // 5782 if (e < 0.0 && ifis != 1) 5783 { // TUNNELING 5784 fdens = 0.0; 5785 densfm = 0.0; 5786 densct = 0.0; 5787 if (ald->optafan == 1) 5788 { 5789 pa = (ald->av) * a + (ald->as) * 5790 } 5791 else 5792 { 5793 pa = (ald->av) * a + (ald->as) * 5794 (ald->ak) * bkin * std::pow( 5795 } 5796 gamma = 2.5 * pa * std::pow(a, -4.0 / 5797 fecor = 0.0; 5798 goto densniv100; 5799 } 5800 // 5801 if (ifis == 0 && bs != 1.0) 5802 { 5803 // - With increasing excitation energ 5804 // deformed: 5805 G4double ponq = (e - 100.0) / 5.0; 5806 if (ponq > 700.0) 5807 ponq = 700.0; 5808 bs = 1.0 / (1.0 + std::exp(-ponq)) + 5809 bk = 1.0 / (1.0 + std::exp(-ponq)) + 5810 } 5811 // 5812 // level density parameter 5813 if (ald->optafan == 1) 5814 { 5815 pa = (ald->av) * a + (ald->as) * std: 5816 } 5817 else 5818 { 5819 pa = (ald->av) * a + (ald->as) * bs * 5820 } 5821 // 5822 gamma = 2.5 * pa * std::pow(a, -4.0 / 3.0 5823 // 5824 // AK - 2009 - trial, in order to have tr 5825 // approach Idea - at the phase transitio 5826 // TEMP, and this determines critical ene 5827 if (a > 0.0) 5828 { 5829 ecr = pa * 17.60 / (std::pow(a, 0.699 5830 (std::pow(a, 0.699) * std::sqrt 5831 } 5832 5833 // pairing corrections 5834 if (ifis == 1) 5835 { 5836 delta0 = 14; 5837 } 5838 else 5839 { 5840 delta0 = 12; 5841 } 5842 5843 // shell corrections 5844 if (optshp > 0) 5845 { 5846 deltau = bshell; 5847 if (optshp == 2) 5848 { 5849 deltau = 0.0; 5850 } 5851 if (optshp >= 2) 5852 { 5853 // pairing energy shift with cond 5854 // deltpp = -0.25e0* (delta0/pow( 5855 // + 2.e0*delta0/sqrt(a); 5856 deltpp = -0.25e0 * std::pow((delt 5857 // Odd A 5858 if (IPARITE == 1) 5859 { 5860 // e = e - delta0/sqrt(a); 5861 e = e - (0.285 + 11.17 * std: 5862 } 5863 // Even Z, even N 5864 if (IPARITE == 2) 5865 { 5866 e = e - (22.34 * std::pow(a, 5867 } 5868 // Odd Z, odd N 5869 if (IPARITE == 0) 5870 { 5871 if (in == iz) 5872 { 5873 // e = e; 5874 } 5875 else 5876 { 5877 // e = e-30./a; 5878 } 5879 } 5880 } 5881 else 5882 { 5883 deltpp = 0.0; 5884 } 5885 } 5886 else 5887 { 5888 deltau = 0.0; 5889 deltpp = 0.0; 5890 } 5891 5892 if (e < 0.0) 5893 { 5894 e = 0.0; 5895 ftemp = 0.5; 5896 } 5897 5898 // washing out is made stronger 5899 ponfe = -2.5 * pa * e * std::pow(a, (-4.0 5900 5901 if (ponfe < -700.0) 5902 { 5903 ponfe = -700.0; 5904 } 5905 fe = 1.0 - std::exp(ponfe); 5906 if (e < ecr) 5907 { 5908 // priv. comm. k.-h. schmidt 5909 he = 1.0 - std::pow((1.0 - e / ecr), 5910 } 5911 else 5912 { 5913 he = 1.0; 5914 } 5915 // Excitation energy corrected for pairin 5916 // washing out with excitation energy is 5917 fecor = e + deltau * fe + deltpp * he; 5918 if (fecor <= 0.1) 5919 { 5920 fecor = 0.1; 5921 } 5922 // iterative procedure according to gross 5923 // to avoid the singularity e = 0 5924 if (ee < 5.0) 5925 { 5926 y1 = std::sqrt(pa * fecor); 5927 for (G4int j = 0; j < 5; j++) 5928 { 5929 y2 = pa * fecor * (1.e0 - std::ex 5930 y1 = std::sqrt(y2); 5931 } 5932 y0 = pa / y1; 5933 ftemp = 1.0 / y0; 5934 fdens = std::exp(y0 * fecor) / 5935 (std::pow((std::pow(fecor, 3) 5936 std::exp(y1) * (1.0 - std::ex 5937 if (fecor < 1.0) 5938 { 5939 ecor1 = 1.0; 5940 y11 = std::sqrt(pa * ecor1); 5941 for (G4int j = 0; j < 7; j++) 5942 { 5943 y21 = pa * ecor1 * (1.0 - std 5944 y11 = std::sqrt(y21); 5945 } 5946 5947 y01 = pa / y11; 5948 fdens = fdens * std::pow((y01 / y 5949 ftemp = ftemp * std::pow((y01 / y 5950 } 5951 } 5952 else 5953 { 5954 ponniv = 2.0 * std::sqrt(pa * fecor); 5955 if (ponniv > 700.0) 5956 { 5957 ponniv = 700.0; 5958 } 5959 // fermi gas state density 5960 fdens = 0.1477045 * std::exp(ponniv) 5961 ftemp = std::sqrt(fecor / pa); 5962 } 5963 // 5964 densfm = fdens; 5965 tfm = ftemp; 5966 // 5967 if (IOPTCT == 0) 5968 goto densniv100; 5969 tempct = 17.60 / (std::pow(a, 0.699) * st 5970 // tempct = 1.0 / ( (0.0570 + 0.00193*BSH 5971 // PRC 80 (2009) 054310 5972 5973 // - CONSTANT-TEMPERATURE LEVEL DENSITY P 5974 if (e < 30.) 5975 { 5976 if (a > 0.0) 5977 { 5978 if (optshp >= 2) 5979 { 5980 // Parametrization of CT mode 5981 // correspond to pairing shif 5982 // shifted taking odd-odd nuc 5983 // as bassis) 5984 // e-o, o-e 5985 if (IPARITE == 1) 5986 { 5987 e0 = 0.285 + 11.17 * std: 5988 } 5989 // e-e 5990 if (IPARITE == 2) 5991 { 5992 e0 = 22.34 * std::pow(a, 5993 } 5994 // o-o 5995 if (IPARITE == 0) 5996 { 5997 e0 = 0.0; 5998 } 5999 6000 ponniv = (ein - e0) / tempct; 6001 if (ifis != 1) 6002 ponniv = max(0.0, (ein - 6003 if (ponniv > 700.0) 6004 { 6005 ponniv = 700.0; 6006 } 6007 densct = std::exp(ponniv) / t 6008 6009 elim = ein; 6010 6011 if (elim >= ecr && densfm <= 6012 { 6013 fdens = densfm; 6014 // IREGCT = 0; 6015 } 6016 else 6017 { 6018 fdens = densct; 6019 // IREGCT = 1; 6020 // ecor = min(ein 6021 } 6022 if (elim >= ecr && tfm >= tem 6023 { 6024 ftemp = tfm; 6025 } 6026 else 6027 { 6028 ftemp = tempct; 6029 } 6030 } 6031 else 6032 { 6033 // Case of no pairing conside 6034 // ETEST = PA * TEMPCT 6035 ponniv = (ein) / tempct; 6036 if (ponniv > 700.0) 6037 { 6038 ponniv = 700.0; 6039 } 6040 densct = std::exp(ponniv) / t 6041 6042 if (ein >= ecr && densfm <= d 6043 { 6044 fdens = densfm; 6045 ftemp = tfm; 6046 // IREGCT = 0; 6047 } 6048 else 6049 { 6050 fdens = densct; 6051 ftemp = tempct; 6052 // ECOR = DMIN1( 6053 } 6054 6055 if (ein >= ecr && tfm >= temp 6056 { 6057 ftemp = tfm; 6058 } 6059 else 6060 { 6061 ftemp = tempct; 6062 } 6063 } 6064 } 6065 } 6066 6067 densniv100: 6068 6069 if (fdens == 0.0) 6070 { 6071 if (a > 0.0) 6072 { 6073 // Parametrization of CT model by 6074 ftemp = 17.60 / (std::pow(a, 0.69 6075 // ftemp = 1.0 / ( (0.0570 + 0.0 6076 // from PRC 80 (2009) 054310 6077 } 6078 else 6079 { 6080 ftemp = 0.5; 6081 } 6082 } 6083 // 6084 // spin cutoff parameter 6085 /* 6086 C PERPENDICULAR AND PARALLEL MOMENT OF IN 6087 c fnorm = R0*M0/hbar**2 = 1.16fm*931.49Me 6088 c in units 1/MeV 6089 */ 6090 fnorm = std::pow(1.16, 2) * 931.49 * 1.e- 6091 6092 if (ifis == 0 || ifis == 2) 6093 { 6094 /* 6095 C GROUND STATE: 6096 C FP_PER ~ 1+0.5*alpha2, FP_PAR ~ 1-a 6097 macr. nucl. phys.) C alpha2 = sqrt(5/ 6098 */ 6099 fp_per = 0.4 * std::pow(a, 5.0 / 3.0) 6100 fp_par = 0.40 * std::pow(a, 5.0 / 3.0 6101 } 6102 else 6103 { 6104 if (ifis == 1) 6105 { 6106 /* 6107 C SADDLE POINT 6108 C See Hasse&Myer, p. 100 6109 C Perpendicular moment of inertia 6110 */ 6111 fp_per = 2.0 / 5.0 * std::pow(a, 6112 (1.0 + 7.0 / 6.0 * defbe 6113 // Parallel moment of inertia 6114 fp_par = 2.0 / 5.0 * std::pow(a, 6115 (1.0 - 7.0 / 3.0 * defbe 6116 } 6117 else 6118 { 6119 if (ifis == 20) 6120 { 6121 // IMF - two fragments in con 6122 // See Hasse&Myers, p.106 6123 // Here, DEFBET = R1/R2, wher 6124 // partner Perpendicular mome 6125 fp_per = 0.4 * std::pow(a, 5. 6126 std::pow(1.0 + defbe 6127 fp_par = 0.4 * std::pow(a, 5. 6128 std::pow(1.0 + defbe 6129 } 6130 } 6131 } 6132 if (fp_par < 0.0) 6133 fp_par = 0.0; 6134 if (fp_per < 0.0) 6135 fp_per = 0.0; 6136 // 6137 sig_per = std::sqrt(fp_per * ftemp); 6138 sig_par = std::sqrt(fp_par * ftemp); 6139 // 6140 sigma2 = sig_per * sig_per + sig_par * si 6141 jfact = (2. * jprf + 1.) * std::exp(-1. * 6142 (std::sqrt(8.0 * 3.1415) * std::p 6143 erot = jprf * jprf / (2.0 * std::sqrt(fp_ 6144 // 6145 // collective enhancement 6146 if (optcol == 1) 6147 { 6148 qrot(z, a, defbet, sig_per, fecor - e 6149 } 6150 else 6151 { 6152 fqr = 1.0; 6153 } 6154 // 6155 fdens = fdens * fqr * jfact; 6156 // 6157 if (fdens < 1e-300) 6158 fdens = 0.0; 6159 // 6160 *dens = fdens; 6161 *ecor = fecor; 6162 *temp = ftemp; 6163 *qr = fqr; 6164 } 6165 6166 void G4Abla::qrot(G4double z, G4double a, G4d 6167 { 6168 /* 6169 C QROT INCLUDING DAMPING 6170 C 6171 C INPUT: Z,A,DEFBET,SIG,U 6172 C 6173 C OUTPUT: QR - COLLECTIVE ENHANCEMENT FAC 6174 C 6175 C SEE JUNGHANS ET AL., NUCL. PHYS. A 629 6176 C 6177 C 6178 C FR(U) EXPONENTIAL FUNCTION TO DEFI 6179 C UCR CRITICAL ENERGY FOR DAMPING 6180 C DCR WIDTH OF DAMPING 6181 C DEFBET BETA-DEFORMATION ! 6182 C SIG PERPENDICULAR SPIN CUTOFF FA 6183 C U ENERGY 6184 C QR COEFFICIENT OF COLLECTIVE EN 6185 C A MASS NUMBER 6186 C Z CHARGE NUMBER 6187 C 6188 */ 6189 // JLRS: July 2016: new values for the co 6190 // 6191 6192 G4double ucr = fiss->ucr; // Critical ene 6193 G4double dcr = fiss->dcr; // Width of dam 6194 G4double ponq = 0.0, dn = 0.0, n = 0.0, d 6195 G4int distn, distz, ndist, zdist; 6196 G4int nmn[8] = { 2, 8, 14, 20, 28, 50, 82 6197 G4int nmz[8] = { 2, 8, 14, 20, 28, 50, 82 6198 // 6199 sig = sig * sig; 6200 // 6201 if (std::abs(bet) <= 0.15) 6202 { 6203 goto qrot10; 6204 } 6205 else 6206 { 6207 goto qrot11; 6208 } 6209 // 6210 qrot10: 6211 n = a - z; 6212 distn = 10000000; 6213 distz = 10000000; 6214 6215 for (G4int i = 0; i < 8; i++) 6216 { 6217 ndist = std::fabs(idnint(n) - nmn[i]) 6218 if (ndist < distn) 6219 distn = ndist; 6220 zdist = std::fabs(idnint(z) - nmz[i]) 6221 if (zdist < distz) 6222 distz = zdist; 6223 } 6224 6225 dz = G4float(distz); 6226 dn = G4float(distn); 6227 6228 bet = 0.022 + 0.003 * dn + 0.002 * dz; 6229 6230 sig = 75.0 * std::pow(bet, 2.) * sig; 6231 6232 // NO VIBRATIONAL ENHANCEMENT 6233 qrot11: 6234 ponq = (u - ucr) / dcr; 6235 6236 if (ponq > 700.0) 6237 { 6238 ponq = 700.0; 6239 } 6240 if (sig < 1.0) 6241 { 6242 sig = 1.0; 6243 } 6244 (*qr) = 1.0 / (1.0 + std::exp(ponq)) * (s 6245 6246 if ((*qr) < 1.0) 6247 { 6248 (*qr) = 1.0; 6249 } 6250 6251 return; 6252 } 6253 6254 void G4Abla::lpoly(G4double x, G4int n, G4dou 6255 { 6256 // THIS SUBROUTINE CALCULATES THE ORDINAR 6257 // ORDER 0 TO N-1 OF ARGUMENT X AND STORE 6258 // THEY ARE CALCULATED BY RECURSION RELAT 6259 // POLYNOMIALS. 6260 // WRITTEN BY A.J.SIERK LANL T-9 FEBRU 6261 // NOTE: PL AND X MUST BE DOUBLE PRECISIO 6262 6263 pl[0] = 1.0; 6264 pl[1] = x; 6265 6266 for (G4int i = 2; i < n; i++) 6267 { 6268 pl[i] = ((2 * G4double(i + 1) - 3.0) 6269 (G4double(i + 1) - 1.0); 6270 } 6271 } 6272 6273 G4double G4Abla::eflmac(G4int ia, G4int iz, G 6274 { 6275 // CHANGED TO CALCULATE TOTAL BINDING ENE 6276 // SWITCH FOR PAIRING INCLUDED AS WELL. 6277 // BINDING = EFLMAC(IA,IZ,0,OPTSHP) 6278 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EE 6279 // A.J. 15.07.96 6280 6281 // this function will calculate the liqui 6282 // configuration according to the preprin 6283 // MASSES and DEFORMATIONS by P. M"oller 6284 // All constants are taken from this publ 6285 6286 // Parameters: 6287 // a: nuclear mass number 6288 // z: nuclear charge 6289 // flag: 0 - return mass excess 6290 // otherwise - return pairing (= 6291 6292 G4double eflmacResult = 0.0; 6293 6294 if (ia == 0) 6295 return eflmacResult; 6296 6297 G4int in = 0; 6298 G4double z = 0.0, n = 0.0, a = 0.0, av = 6299 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 6300 G4double ff = 0.0, ca = 0.0, w = 0.0, efl 6301 G4double r0 = 0.0, kf = 0.0, ks = 0.0; 6302 G4double kv = 0.0, rp = 0.0, ay = 0.0, ad 6303 G4double esq = 0.0, ael = 0.0, i = 0.0, e 6304 G4double pi = 3.141592653589793238e0; 6305 6306 // fundamental constants 6307 // electronic charge squared 6308 esq = 1.4399764; 6309 6310 // constants from considerations other th 6311 // electronic binding 6312 ael = 1.433e-5; 6313 6314 // proton rms radius 6315 rp = 0.8; 6316 6317 // nuclear radius constant 6318 r0 = 1.16; 6319 6320 // range of yukawa-plus-expon. potential 6321 ay = 0.68; 6322 6323 // range of yukawa function used to gener 6324 // nuclear charge distribution 6325 aden = 0.70; 6326 6327 // wigner constant 6328 w = 30.0; 6329 6330 // adjusted parameters 6331 // volume energy 6332 av = 16.00126; 6333 6334 // volume asymmetry 6335 kv = 1.92240; 6336 6337 // surface energy 6338 as = 21.18466; 6339 6340 // surface asymmetry 6341 ks = 2.345; 6342 // a^0 constant 6343 a0 = 2.615; 6344 6345 // charge asymmetry 6346 ca = 0.10289; 6347 6348 z = G4double(iz); 6349 a = G4double(ia); 6350 in = ia - iz; 6351 n = G4double(in); 6352 6353 if (flag == 1) 6354 { 6355 goto eflmac311; 6356 } 6357 6358 if (iz < 13 && in < 3) 6359 { 6360 if (masses->mexpiop[in][iz] == 1) 6361 { 6362 return masses->bind[in][iz]; 6363 } 6364 } 6365 6366 eflmac311: 6367 6368 c1 = 3.0 / 5.0 * esq / r0; 6369 c4 = 5.0 / 4.0 * std::pow((3.0 / (2.0 * p 6370 kf = std::pow((9.0 * pi * z / (4.0 * a)), 6371 6372 ff = -1.0 / 8.0 * rp * rp * esq / std::po 6373 (145.0 / 48.0 - 327.0 / 2880.0 * std 6374 1527.0 / 1209600.0 * std::pow(kf, 4 6375 i = (n - z) / a; 6376 6377 x0 = r0 * std::pow(a, (1.0 / 3.0)) / ay; 6378 y0 = r0 * std::pow(a, (1.0 / 3.0)) / aden 6379 6380 b1 = 1.0 - 3.0 / (std::pow(x0, 2)) + (1.0 6381 6382 b3 = 1.0 - 5.0 / std::pow(y0, 2) * 6383 (1.0 - 15.0 / (8.0 * y0) + 6384 3.0 / 4.0 * (1.0 + 9.0 / 6385 std::exp(-2.0 * y0)); 6386 6387 // now calculation of total binding energ 6388 6389 efl = -1.0 * av * (1.0 - kv * i * i) * a 6390 c1 * z * z * b3 / std::pow(a, (1.0 6391 ff * std::pow(z, 2) / a - ca * (n - 6392 6393 efl = efl + w * std::abs(i); 6394 6395 // pairing is made optional 6396 if (optshp >= 2) 6397 { 6398 // average pairing 6399 if (in == iz && (mod(in, 2) == 1) && 6400 { 6401 efl = efl + w / a; 6402 } 6403 6404 // AK 2008 - Parametrization of CT mo 6405 // The following part has been introd 6406 // between pairing in masses and leve 6407 // AK 2010 note that E0 is shifted t 6408 // Fermi-gas model (there, energy is 6409 // as bassis) 6410 6411 G4double para = 0.; 6412 parite(a, ¶); 6413 6414 if (para < 0.0) 6415 { 6416 // e-o, o-e 6417 e0 = 0.285 + 11.17 * std::pow(a, 6418 } 6419 else 6420 { 6421 G4double parz = 0.; 6422 parite(z, &parz); 6423 if (parz > 0.0) 6424 { 6425 // e-e 6426 e0 = 22.34 * std::pow(a, -0.4 6427 } 6428 else 6429 { 6430 // o-o 6431 e0 = 0.0; 6432 } 6433 } 6434 efl = efl - e0; 6435 // end if for pairing term 6436 } 6437 6438 eflmacResult = efl; 6439 6440 return eflmacResult; 6441 } 6442 6443 void G4Abla::appariem(G4double a, G4double z, 6444 { 6445 // CALCUL DE LA CORRECTION, DUE A L'APPAR 6446 // LIAISON D'UN NOYAU 6447 // PROCEDURE FOR CALCULATING THE PAIRING 6448 // ENERGY OF A SPECIFIC NUCLEUS 6449 6450 G4double para = 0.0, parz = 0.0; 6451 // A MASS NUMBER 6452 // Z NUCLEAR CHARGE 6453 // PARA HELP VARIABLE FOR PA 6454 // PARZ HELP VARIABLE FOR PA 6455 // DEL PAIRING CORRECTION 6456 6457 parite(a, ¶); 6458 6459 if (para < 0.0) 6460 { 6461 (*del) = 0.0; 6462 } 6463 else 6464 { 6465 parite(z, &parz); 6466 if (parz > 0.0) 6467 { 6468 (*del) = -12.0 / std::sqrt(a); 6469 } 6470 else 6471 { 6472 (*del) = 12.0 / std::sqrt(a); 6473 } 6474 } 6475 } 6476 6477 void G4Abla::parite(G4double n, G4double* par 6478 { 6479 // CALCUL DE LA PARITE DU NOMBRE N 6480 // 6481 // PROCEDURE FOR CALCULATING THE PARITY O 6482 // RETURNS -1 IF N IS ODD AND +1 IF N IS 6483 6484 G4double n1 = 0.0, n2 = 0.0, n3 = 0.0; 6485 6486 // N NUMBER TO BE TESTED 6487 // N1,N2 HELP VARIABLES 6488 // PAR HELP VARIABLE FOR PA 6489 6490 n3 = G4double(idnint(n)); 6491 n1 = n3 / 2.0; 6492 n2 = n1 - dint(n1); 6493 6494 if (n2 > 0.0) 6495 { 6496 (*par) = -1.0; 6497 } 6498 else 6499 { 6500 (*par) = 1.0; 6501 } 6502 } 6503 6504 G4double G4Abla::tau(G4double bet, G4double h 6505 { 6506 // INPUT : BET, HOMEGA, EF, T 6507 // OUTPUT: TAU - RISE TIME IN WHICH THE F 6508 // 90 PERCENT OF ITS FINAL 6509 // 6510 // BETA - NUCLEAR VISCOSITY 6511 // HOMEGA - CURVATURE OF POTENTIAL 6512 // EF - FISSION BARRIER 6513 // T - NUCLEAR TEMPERATURE 6514 6515 G4double tauResult = 0.0; 6516 6517 G4double tlim = 8.e0 * ef; 6518 if (t > tlim) 6519 { 6520 t = tlim; 6521 } 6522 // 6523 if (bet / (std::sqrt(2.0) * 10.0 * (homeg 6524 { 6525 tauResult = std::log(10.0 * ef / t) / 6526 } 6527 else 6528 { 6529 tauResult = std::log(10.0 * ef / t) / 6530 } // end if 6531 6532 return tauResult; 6533 } 6534 6535 G4double G4Abla::cram(G4double bet, G4double 6536 { 6537 // INPUT : BET, HOMEGA NUCLEAR VISCOSITY 6538 // OUTPUT: KRAMERS FAKTOR - REDUCTION OF 6539 // INDEPENDENT 6540 6541 G4double rel = bet / (20.0 * homega / 6.5 6542 G4double cramResult = std::sqrt(1.0 + std 6543 // limitation introduced 6.1.2000 by 6544 6545 if (cramResult > 1.0) 6546 { 6547 cramResult = 1.0; 6548 } 6549 6550 return cramResult; 6551 } 6552 6553 G4double G4Abla::bipol(G4int iflag, G4double 6554 { 6555 // CALCULATION OF THE SURFACE BS OR CURVA 6556 // RELATIVE TO THE SPHERICAL CONFIGURATIO 6557 // BASED ON MYERS, DROPLET MODEL FOR ARB 6558 6559 // INPUT: IFLAG - 0/1 BK/BS CALCULATION 6560 // Y - (1 - X) COMPLEMENT OF T 6561 6562 // LINEAR INTERPOLATION OF BS BK TABLE 6563 6564 G4int i = 0; 6565 6566 G4double bipolResult = 0.0; 6567 6568 const G4int bsbkSize = 54; 6569 6570 G4double bk[bsbkSize] = { 6571 0.0, 1.00000, 1.00087, 1.00352, 1 6572 1.10056, 1.12603, 1.15651, 1.19348, 1 6573 1.48308, 1.49068, 1.49692, 1.50226, 1 6574 1.53177, 1.53490, 1.53803, 1.54117, 1 6575 1.56980, 1.57413, 1.57860, 1.58301, 1 6576 }; // Zeroes at bk[0], and at 6577 // the end added by PK 6578 6579 G4double bs[bsbkSize] = { 0.0, 1.0000 6580 1.05195, 1.0660 6581 1.26532, 1.2761 6582 1.28235, 1.2814 6583 1.27314, 1.2721 6584 1.26418, 1.2632 6585 6586 i = idint(y / (2.0e-02)) + 1; 6587 6588 if ((i + 1) >= bsbkSize) 6589 { 6590 if (verboseLevel > 2) 6591 { 6592 // G4cout <<"G4Abla error: index 6593 // size permits." << G4endl; 6594 } 6595 bipolResult = 0.0; 6596 } 6597 else 6598 { 6599 if (iflag == 1) 6600 { 6601 bipolResult = bs[i] + (bs[i + 1] 6602 } 6603 else 6604 { 6605 bipolResult = bk[i] + (bk[i + 1] 6606 } 6607 } 6608 6609 return bipolResult; 6610 } 6611 6612 void G4Abla::fomega_sp(G4double AF, G4double 6613 { 6614 /* 6615 c Y 1 - Fissility 6616 c OMEGA Frequency at the gro 6617 */ 6618 G4double OMEGA, HOMEGA, ES0, MR02; 6619 6620 ES0 = 20.760 * std::pow(AF, 2.0 / 3.0); 6621 // In units 1.e-42 MeVs**2; r0 = 1.175e-1 6622 // u=931.49MeV/c**2=103.4MeV*s**2/m**2 di 6623 // to 1.e-42 6624 MR02 = std::pow(AF, 5.0 / 3.0) * 1.0340 * 6625 // Determination of the inertia of the fi 6626 (*MFCD) = MR02 * 3.0 / 10.0 * (1.0 + 3.0 6627 // Omega at saddle 6628 OMEGA = std::sqrt(ES0 / MR02) * std::sqrt 6629 // 6630 HOMEGA = 6.58122 * OMEGA / 10.0; 6631 // 6632 (*sOMEGA) = OMEGA; 6633 (*sHOMEGA) = HOMEGA; 6634 // 6635 return; 6636 } 6637 6638 void G4Abla::fomega_gs(G4double AF, G4double 6639 { 6640 /* 6641 c Y 1 - Fissility 6642 c OMEGA Frequency at the gro 6643 */ 6644 G4double OMEGA, HOMEGA, MR02, MINERT, C, 6645 // 6646 MR02 = std::pow(AF, 5.0 / 3.0) * 1.0340 * 6647 MINERT = 3. * MR02 / 10.0; 6648 C = 17.9439 * (1. - 1.7826 * std::pow((AF 6649 fk1 = 0.4 * C * std::pow(AF, 2.0 / 3.0) - 6650 OMEGA = std::sqrt(fk1 / MINERT); 6651 HOMEGA = 6.58122 * OMEGA / 10.0; 6652 // 6653 (*K1) = fk1; 6654 (*sOMEGA) = OMEGA; 6655 (*sHOMEGA) = HOMEGA; 6656 // 6657 return; 6658 } 6659 6660 void G4Abla::barrs(G4int Z1, G4int A1, G4int 6661 { /* 6662 C AK 2004 - Barriers for LCP and IMF are cal 6663 according to the C Bass model (Nuc 6664 C KHS 2007 - To speed up, barriers are read 6665 case thermal C expansion is consi 6666 are calculated. C INPUT: C EA - Excitatio 6667 nucleon C Z11, A11 - Charge and mass of daug 6668 Z22, A22 - Charge and mass of LCP or IMF 6669 C 6670 C OUTPUT: 6671 C BARR - Barrier 6672 C OMEGA - Curvature of the potential 6673 C 6674 C BASS MODEL NPA 1974 - used only if expansi 6675 (OPTEXP=1) C or one w 6676 explicitly (OPTBAR=1) C October 2011 - AK - 6677 parametrization of the barrier and its posit 6678 et al., NPA 868 (2011) 1; this is now C defa 6679 (OPTBAR=0) 6680 c 6681 c November 2016 - JLRS - Added this function 6682 c 6683 */ 6684 G4double BARR, OMEGA, RMAX; 6685 RMAX = 1.1 * (ecld->rms[A1 - Z1][Z1] + ec 6686 BARR = 1.345 * Z1 * Z2 / RMAX; 6687 // C Omega according to Avishai: 6688 OMEGA = 4.5 / 197.3287; 6689 6690 // if(Z1<60){ 6691 // if(Z2==1 && A2==2) BARR = BARR * 1.1; 6692 // if(Z2==1 && A2==3) BARR = BARR * 1.1; 6693 // if(Z2==2 && A2==3) BARR = BARR * 1.3 6694 // if(Z2==2 && A2==4) BARR = BARR * 1.1; 6695 // } 6696 6697 (*sOMEGA) = OMEGA; 6698 (*sBARR) = BARR; 6699 // 6700 return; 6701 } 6702 6703 void G4Abla::barfit(G4int iz, G4int ia, G4int 6704 { 6705 // 2223 C VERSION FOR 32BIT COMPUTE 6706 // 2224 C THIS SUBROUTINE RETURNS T 6707 // 2225 C GROUND-STATE ENERGY SEGS, 6708 // 2226 C AT WHICH THE FISSION BARR 6709 // 2227 C H-BAR, WHEN CALLED WITH I 6710 // 2228 C NUMBER, IA, THE ATOMIC MA 6711 // 2229 C MOMENTUM IN UNITS OF H-BA 6712 // 2230 C 2*PI). 6713 // 2231 C 6714 // 2232 C THE FISSION BARRIER FO 6715 // 2233 C ORDER FIT IN TWO VARIABLE 6716 // 2234 C BARRIERS FOR Z VALUES FRO 6717 // ARE 2235 C FIT WITH AN RMS DEVIA 6718 // 2236 C FUNCTION. 6719 // 2237 C IF BARFIT IS CALLED WITH 6720 // OF 2238 C THE BARRIER HEIGHT IS 6721 // 2239 C ON THE DEFAULT OUTPUT FIL 6722 // 2240 C 6723 // 2241 C FOR IL VALUES NOT EQUA 6724 // WHICH 2242 C THE BARRIER IS 80% 6725 // RESPECTIVELY 6726 // 2243 C FIT TO 20-PARAMETER FUNCT 6727 // 2244 C RESTRICTED RANGE OF A VAL 6728 // 2245 C THE VALUE OF L WHERE THE 6729 // TO 2246 C A 24-PARAMETER FUNCTI 6730 // 2247 C Z AND A VALUES AS L-80 AN 6731 // 2248 C ONCE AGAIN, IF AN (IZ, 6732 // OF 2249 C VALIDITY OF THE FIT, 6733 // 2250 C MESSAGE IS PRINTED. THESE 6734 // AND 2251 C L-20) AND THE CONSTRI 6735 // 2252 C L = LMAX AND L=0 LEAD TO 6736 // 2253 C L>L-20. THE FIRST THREE C 6737 // FIT 2254 C FOR THE REGION L < L- 6738 // GROUND STATE ENERGIES ARE CALCULATED 6739 // IN Z, A, AND L TO 214 GROUND-STATE E 6740 // AND A VALUES. 6741 // 2259 C (THE RANGE OF Z AND A IS 6742 // 2260 C L-MAX) 6743 // 2261 C 6744 // 2262 C THE CALCULATED BARRIER 6745 // WERE 2263 C CALCULATED IN 1983- 6746 // ALAMOS 2264 C NATIONAL LABORATO 6747 // YUKAWA-PLUS-EXPONENTIAL 6748 // 2265 C G4DOUBLE FOLDED NUCLEAR E 6749 // 2266 C CORRECTIONS, AND DIFFUSE- 6750 // 2267 C THE PARAMETERS OF THE MOD 6751 // 2268 C KAPPA-S = 2.3, A = 0.68 F 6752 // 2269 C THE DIFFUSENESS OF THE MA 6753 // USED 2270 C CORRESPONDS TO A SU 6754 // (DEFINED BY 2271 C MYERS) OF 0.9 6755 // 0 ARE 2272 C ACCURATE TO A LITTL 6756 // FROM 2273 C THIS SUBROUTINE IS 6757 // ERRORS MAY BE 6758 // 2274 C AS LARGE AS 0.5 MEV; CHAR 6759 // RANGE 6760 // 2275 C OF 0.1-0.2 MEV. THE RMS D 6761 // 2276 C FROM THE 214 INPUT VALUES 6762 // 2277 C OCCURS FOR LIGHT NUCLEI I 6763 // STATE 6764 // 2278 C IS PROLATE, AND MAY BE GR 6765 // NEUTRON 6766 // 2279 C DEFICIENT NUCLEI, WITH L 6767 // TO 2280 C BE ENCOUNTERED IN REA 6768 // 2281 C CLOSER TO 0.5 MEV, AGAIN 6769 // 2282 C 6770 // 2283 C WRITTEN BY A. J. SIERK, L 6771 // 2284 C VERSION 1.0 FEBRUARY, 198 6772 // 2285 C 6773 // 2286 C THE FOLLOWING IS NECESSAR 6774 // VAX, 2287 C IBM, ETC 6775 6776 G4double pa[7], pz[7], pl[10]; 6777 for (G4int init_i = 0; init_i < 7; init_i 6778 { 6779 pa[init_i] = 0.0; 6780 pz[init_i] = 0.0; 6781 } 6782 for (G4int init_i = 0; init_i < 10; init_ 6783 { 6784 pl[init_i] = 0.0; 6785 } 6786 6787 G4double a = 0.0, z = 0.0, amin = 0.0, am 6788 G4double amax2 = 0.0, aa = 0.0, zz = 0.0, 6789 G4double bfis0 = 0.0, ell = 0.0, el = 0.0 6790 G4double elmax = 0.0, sel80 = 0.0, sel20 6791 G4double aj = 0.0, ak = 0.0, a1 = 0.0, a2 6792 6793 G4int i = 0, j = 0, k = 0, m = 0; 6794 G4int l = 0; 6795 6796 G4double emncof[4][5] = { { -9.01100e+2, 6797 { 1.35355e+4, - 6798 { -3.26367e+3, 6799 { 7.48863e+3, - 6800 6801 G4double elmcof[4][5] = { { 1.84542e+3, - 6802 { -2.24577e+3, 6803 { 2.79772e+3, - 6804 { -3.01866e+1, 6805 6806 G4double emxcof[4][6] = { { 9.43596e4, -2 6807 { -1.655827e5, 6808 { 1.705447e5, - 6809 { -9.274555e4, 6810 6811 G4double elzcof[7][7] = { 6812 { 5.11819909e+5, -1.30303186e+6, 1.90 6813 { -1.13269453e+6, 2.97764590e+6, -4.5 6814 { 1.37543304e+6, -3.65808988e+6, 5.47 6815 { -8.56559835e+5, 2.48872266e+6, -4.0 6816 { 3.28723311e+5, -1.09892175e+6, 2.03 6817 { 4.15850238e+4, 7.29653408e+4, -4.93 6818 { -1.82751044e+5, 3.91386300e+5, -3.0 6819 }; 6820 6821 const G4int sizex = 5; 6822 const G4int sizey = 6; 6823 const G4int sizez = 4; 6824 6825 G4double egscof[sizey][sizey][sizez]; 6826 6827 G4double egs1[sizey][sizex] = { { 1.92781 6828 { -4.4996 6829 { 4.66774 6830 { -3.0179 6831 { 1.22651 6832 { -1.7528 6833 6834 G4double egs2[sizey][sizex] = { { -6.4591 6835 { 1.46985 6836 { -1.4351 6837 { 8.66529 6838 { -3.3028 6839 { 4.95816 6840 6841 G4double egs3[sizey][sizex] = { { 3.11703 6842 { -7.3949 6843 { 7.91899 6844 { -5.4210 6845 { 2.37077 6846 { -4.2276 6847 6848 G4double egs4[sizey][sizex] = { { -1.0727 6849 { 2.29876 6850 { -2.0936 6851 { 1.27461 6852 { -5.7157 6853 { 1.18944 6854 6855 for (i = 0; i < sizey; i++) 6856 { 6857 for (j = 0; j < sizex; j++) 6858 { 6859 egscof[i][j][0] = egs1[i][j]; 6860 egscof[i][j][1] = egs2[i][j]; 6861 egscof[i][j][2] = egs3[i][j]; 6862 egscof[i][j][3] = egs4[i][j]; 6863 } 6864 } 6865 6866 // the program starts here 6867 if (iz < 19 || iz > 122) 6868 { 6869 goto barfit900; 6870 } 6871 6872 if (iz > 122 && il > 0) 6873 { 6874 goto barfit902; 6875 } 6876 6877 z = G4double(iz); 6878 a = G4double(ia); 6879 el = G4double(il); 6880 amin = 1.2e0 * z + 0.01e0 * z * z; 6881 amax = 5.8e0 * z - 0.024e0 * z * z; 6882 6883 if (a < amin || a > amax) 6884 { 6885 goto barfit910; 6886 } 6887 6888 // angul.mom.zero barrier 6889 aa = 2.5e-3 * a; 6890 zz = 1.0e-2 * z; 6891 ell = 1.0e-2 * el; 6892 bfis0 = 0.0; 6893 lpoly(zz, 7, pz); 6894 lpoly(aa, 7, pa); 6895 6896 for (i = 0; i < 7; i++) 6897 { // do 10 i=1,7 6898 for (j = 0; j < 7; j++) 6899 { // do 10 j=1,7 6900 bfis0 = bfis0 + elzcof[j][i] * pz 6901 } 6902 } 6903 6904 bfis = bfis0; 6905 6906 (*sbfis) = bfis; 6907 egs = 0.0; 6908 (*segs) = egs; 6909 6910 // values of l at which the barrier 6911 // is 20%(el20) and 80%(el80) of l=0 valu 6912 amin2 = 1.4e0 * z + 0.009e0 * z * z; 6913 amax2 = 20.e0 + 3.0e0 * z; 6914 6915 if ((a < amin2 - 5.e0 || a > amax2 + 10.e 6916 { 6917 goto barfit920; 6918 } 6919 6920 lpoly(zz, 5, pz); 6921 lpoly(aa, 4, pa); 6922 el80 = 0.0; 6923 el20 = 0.0; 6924 elmax = 0.0; 6925 6926 for (i = 0; i < 4; i++) 6927 { 6928 for (j = 0; j < 5; j++) 6929 { 6930 el80 = el80 + elmcof[i][j] * pz[j 6931 el20 = el20 + emncof[i][j] * pz[j 6932 } 6933 } 6934 6935 sel80 = el80; 6936 sel20 = el20; 6937 6938 // value of l (elmax) where barrier disap 6939 lpoly(zz, 6, pz); 6940 lpoly(ell, 9, pl); 6941 6942 for (i = 0; i < 4; i++) 6943 { // do 30 i= 1,4 6944 for (j = 0; j < 6; j++) 6945 { // do 30 j=1,6 6946 elmax = elmax + emxcof[i][j] * pz 6947 } 6948 } 6949 6950 (*selmax) = elmax; 6951 6952 // value of barrier at ang.mom. l 6953 if (il < 1) 6954 { 6955 return; 6956 } 6957 6958 x = sel20 / (*selmax); 6959 y = sel80 / (*selmax); 6960 6961 if (el <= sel20) 6962 { 6963 // low l 6964 q = 0.2 / (std::pow(sel20, 2) * std:: 6965 qa = q * (4.0 * std::pow(sel80, 3) - 6966 qb = -q * (4.0 * std::pow(sel80, 2) - 6967 bfis = bfis * (1.0 + qa * std::pow(el 6968 } 6969 else 6970 { 6971 // high l 6972 aj = (-20.0 * std::pow(x, 5) + 25.e0 6973 ak = (-20.0 * std::pow(y, 5) + 25.0 * 6974 q = 0.2 / (std::pow((y - x) * ((1.0 - 6975 qa = q * (aj * y - ak * x); 6976 qb = -q * (aj * (2.0 * y + 1.0) - ak 6977 z = el / (*selmax); 6978 a1 = 4.0 * std::pow(z, 5) - 5.0 * std 6979 a2 = qa * (2.e0 * z + 1.e0); 6980 bfis = bfis * (a1 + (z - 1.e0) * (a2 6981 } 6982 6983 if (bfis <= 0.0) 6984 { 6985 bfis = 0.0; 6986 } 6987 6988 if (el > (*selmax)) 6989 { 6990 bfis = 0.0; 6991 } 6992 (*sbfis) = bfis; 6993 6994 // now calculate rotating ground state en 6995 if (el > (*selmax)) 6996 { 6997 return; 6998 } 6999 7000 for (k = 0; k < 4; k++) 7001 { 7002 for (l = 0; l < 6; l++) 7003 { 7004 for (m = 0; m < 5; m++) 7005 { 7006 egs = egs + egscof[l][m][k] * 7007 } 7008 } 7009 } 7010 7011 (*segs) = egs; 7012 if ((*segs) < 0.0) 7013 { 7014 (*segs) = 0.0; 7015 } 7016 7017 return; 7018 7019 barfit900: // continue 7020 (*sbfis) = 0.0; 7021 // for z<19 sbfis set to 1.0e3 7022 if (iz < 19) 7023 { 7024 (*sbfis) = 1.0e3; 7025 } 7026 (*segs) = 0.0; 7027 (*selmax) = 0.0; 7028 return; 7029 7030 barfit902: 7031 (*sbfis) = 0.0; 7032 (*segs) = 0.0; 7033 (*selmax) = 0.0; 7034 return; 7035 7036 barfit910: 7037 (*sbfis) = 0.0; 7038 (*segs) = 0.0; 7039 (*selmax) = 0.0; 7040 return; 7041 7042 barfit920: 7043 (*sbfis) = 0.0; 7044 (*segs) = 0.0; 7045 (*selmax) = 0.0; 7046 return; 7047 } 7048 7049 G4double G4Abla::erf(G4double x) 7050 { 7051 G4double ferf; 7052 7053 if (x < 0.) 7054 { 7055 ferf = -gammp(0.5, x * x); 7056 } 7057 else 7058 { 7059 ferf = gammp(0.5, x * x); 7060 ; 7061 } 7062 return ferf; 7063 } 7064 7065 G4double G4Abla::gammp(G4double a, G4double x 7066 { 7067 G4double fgammp; 7068 G4double gammcf, gamser, gln = 0.; 7069 7070 if (x < 0.0 || a <= 0.0) 7071 std::cout << "G4Abla::gammp = bad arg 7072 if (x < a + 1.) 7073 { 7074 gser(&gamser, a, x, gln); 7075 fgammp = gamser; 7076 } 7077 else 7078 { 7079 gcf(&gammcf, a, x, gln); 7080 fgammp = 1. - gammcf; 7081 } 7082 return fgammp; 7083 } 7084 7085 void G4Abla::gcf(G4double* gammcf, G4double a 7086 { 7087 G4double fgammcf, del; 7088 G4double eps = 3e-7; 7089 G4double fpmin = 1e-30; 7090 G4int itmax = 100; 7091 G4double an, b, c, d, h; 7092 7093 gln = gammln(a); 7094 b = x + 1. - a; 7095 c = 1. / fpmin; 7096 d = 1. / b; 7097 h = d; 7098 for (G4int i = 1; i <= itmax; i++) 7099 { 7100 an = -i * (i - a); 7101 b = b + 2.; 7102 d = an * d + b; 7103 if (std::fabs(d) < fpmin) 7104 d = fpmin; 7105 c = b + an / c; 7106 if (std::fabs(c) < fpmin) 7107 c = fpmin; 7108 d = 1.0 / d; 7109 del = d * c; 7110 h = h * del; 7111 if (std::fabs(del - 1.) < eps) 7112 goto dir1; 7113 } 7114 std::cout << "a too large, ITMAX too smal 7115 dir1: 7116 fgammcf = std::exp(-x + a * std::log(x) - 7117 (*gammcf) = fgammcf; 7118 return; 7119 } 7120 7121 void G4Abla::gser(G4double* gamser, G4double 7122 { 7123 G4double fgamser, ap, sum, del; 7124 G4double eps = 3e-7; 7125 G4int itmax = 100; 7126 7127 gln = gammln(a); 7128 if (x <= 0.) 7129 { 7130 if (x < 0.) 7131 std::cout << "G4Abla::gser = x < 7132 (*gamser) = 0.0; 7133 return; 7134 } 7135 ap = a; 7136 sum = 1. / a; 7137 del = sum; 7138 for (G4int n = 0; n < itmax; n++) 7139 { 7140 ap = ap + 1.; 7141 del = del * x / ap; 7142 sum = sum + del; 7143 if (std::fabs(del) < std::fabs(sum) * 7144 goto dir1; 7145 } 7146 std::cout << "a too large, ITMAX too smal 7147 dir1: 7148 fgamser = sum * std::exp(-x + a * std::lo 7149 (*gamser) = fgamser; 7150 return; 7151 } 7152 7153 G4double G4Abla::gammln(G4double xx) 7154 { 7155 G4double fgammln, x, ser, tmp, y; 7156 G4double cof[6] = { 76.18009172947146, - 7157 -1.231739572450155, 0 7158 G4double stp = 2.5066282746310005; 7159 7160 x = xx; 7161 y = x; 7162 tmp = x + 5.5; 7163 tmp = (x + 0.5) * std::log(tmp) - tmp; 7164 ser = 1.000000000190015; 7165 for (G4int j = 0; j < 6; j++) 7166 { 7167 y = y + 1.; 7168 ser = ser + cof[j] / y; 7169 } 7170 7171 return fgammln = tmp + std::log(stp * ser 7172 } 7173 7174 G4double G4Abla::fd(G4double E) 7175 { 7176 // DISTRIBUTION DE MAXWELL 7177 7178 return (E * std::exp(-E)); 7179 } 7180 7181 G4double G4Abla::f(G4double E) 7182 { 7183 // FONCTION INTEGRALE DE FD(E) 7184 return (1.0 - (E + 1.0) * std::exp(-E)); 7185 } 7186 7187 G4double G4Abla::fmaxhaz(G4double x) 7188 { 7189 return (-x * std::log(G4AblaRandom::flat( 7190 x * std::log(G4AblaRandom::flat() 7191 } 7192 7193 G4double G4Abla::fmaxhaz_old(G4double T) 7194 { 7195 // tirage aleatoire dans une maxwellienne 7196 // t : temperature 7197 // 7198 // declaration des variables 7199 // 7200 7201 const G4int pSize = 101; 7202 G4double p[pSize]; 7203 7204 // ial generateur pour le cascade (et les 7205 G4int i = 0; 7206 G4int itest = 0; 7207 // programme principal 7208 7209 // calcul des p(i) par approximation de n 7210 p[pSize - 1] = 8.0; 7211 G4double x = 0.1; 7212 G4double x1 = 0.0; 7213 G4double y = 0.0; 7214 7215 if (itest == 1) 7216 { 7217 goto fmaxhaz120; 7218 } 7219 7220 for (i = 1; i <= 99; i++) 7221 { 7222 fmaxhaz20: 7223 x1 = x - (f(x) - G4double(i) / 100.0) 7224 x = x1; 7225 if (std::fabs(f(x) - G4double(i) / 10 7226 { 7227 goto fmaxhaz100; 7228 } 7229 goto fmaxhaz20; 7230 fmaxhaz100: 7231 p[i] = x; 7232 } // end do 7233 7234 // itest = 1; 7235 itest = 0; 7236 // tirage aleatoire et calcul du x corres 7237 // par regression lineaire 7238 fmaxhaz120: 7239 y = G4AblaRandom::flat(); 7240 i = nint(y * 100); 7241 7242 // 2590 c ici on evite froidement les d 7243 // 3/9/99) 7244 if (i == 0) 7245 { 7246 goto fmaxhaz120; 7247 } 7248 7249 if (i == 1) 7250 { 7251 x = p[i] * y * 100; 7252 } 7253 else 7254 { 7255 x = (p[i] - p[i - 1]) * (y * 100 - i) 7256 } 7257 7258 return (x * T); 7259 } 7260 7261 void G4Abla::guet(G4double* x_par, G4double* 7262 { 7263 // TABLE DE MASSES ET FORMULE DE MASSE TI 7264 // Gives the theoritical value for mass e 7265 // Revisee pour x, z flottants 25/4/2002 7266 7267 // real*8 x,z 7268 // dimension q(0:50,0:70) 7269 G4double x = (*x_par); 7270 G4double z = (*z_par); 7271 G4double find = (*find_par); 7272 7273 const G4int qrows = 50; 7274 const G4int qcols = 70; 7275 G4double q[qrows][qcols]; 7276 for (G4int init_i = 0; init_i < qrows; in 7277 { 7278 for (G4int init_j = 0; init_j < qcols 7279 { 7280 q[init_i][init_j] = 0.0; 7281 } 7282 } 7283 7284 G4int ix = G4int(std::floor(x + 0.5)); 7285 G4int iz = G4int(std::floor(z + 0.5)); 7286 G4double zz = iz; 7287 G4double xx = ix; 7288 find = 0.0; 7289 G4double avol = 15.776; 7290 G4double asur = -17.22; 7291 G4double ac = -10.24; 7292 G4double azer = 8.0; 7293 G4double xjj = -30.03; 7294 G4double qq = -35.4; 7295 G4double c1 = -0.737; 7296 G4double c2 = 1.28; 7297 7298 if (ix <= 7) 7299 { 7300 q[0][1] = 939.50; 7301 q[1][1] = 938.21; 7302 q[1][2] = 1876.1; 7303 q[1][3] = 2809.39; 7304 q[2][4] = 3728.34; 7305 q[2][3] = 2809.4; 7306 q[2][5] = 4668.8; 7307 q[2][6] = 5606.5; 7308 q[3][5] = 4669.1; 7309 q[3][6] = 5602.9; 7310 q[3][7] = 6535.27; 7311 q[4][6] = 5607.3; 7312 q[4][7] = 6536.1; 7313 q[5][7] = 6548.3; 7314 find = q[iz][ix]; 7315 } 7316 else 7317 { 7318 G4double xneu = xx - zz; 7319 G4double si = (xneu - zz) / xx; 7320 G4double x13 = std::pow(xx, .333); 7321 G4double ee1 = c1 * zz * zz / x13; 7322 G4double ee2 = c2 * zz * zz / xx; 7323 G4double aux = 1. + (9. * xjj / 4. / 7324 G4double ee3 = xjj * xx * si * si / a 7325 G4double ee4 = avol * xx + asur * (st 7326 G4double tota = ee1 + ee2 + ee3 + ee4 7327 find = 939.55 * xneu + 938.77 * zz - 7328 } 7329 7330 (*x_par) = x; 7331 (*z_par) = z; 7332 (*find_par) = find; 7333 } 7334 // 7335 7336 void G4Abla::FillData(G4int IMULTBU, G4int IE 7337 { 7338 7339 const G4double c = 29.9792458; 7340 const G4double fmp = 938.27231, fmn = 939 7341 7342 varntp->ntrack = IMULTBU + IEV_TAB; 7343 7344 for (G4int i = 0; i < IMULTBU; i++) 7345 { 7346 7347 G4int iz = nint(BU_TAB[i][7]); 7348 G4int ia = nint(BU_TAB[i][8]); 7349 G4int is = nint(BU_TAB[i][11]); 7350 7351 Ainit = Ainit + ia; 7352 Zinit = Zinit + iz; 7353 Sinit = Sinit - is; 7354 7355 varntp->zvv.push_back(iz); 7356 varntp->avv.push_back(ia); 7357 varntp->svv.push_back(-1 * is); 7358 varntp->itypcasc.push_back(0); 7359 7360 G4double v2 = BU_TAB[i][4] * BU_TAB[i 7361 G4double gamma = std::sqrt(1.0 - v2 / 7362 G4double avvmass = iz * fmp + (ia - i 7363 G4double etot = avvmass / gamma; 7364 varntp->pxlab.push_back(etot * BU_TAB 7365 varntp->pylab.push_back(etot * BU_TAB 7366 varntp->pzlab.push_back(etot * BU_TAB 7367 varntp->enerj.push_back(etot - avvmas 7368 } 7369 7370 for (G4int i = 0; i < IEV_TAB; i++) 7371 { 7372 7373 G4int iz = nint(EV_TAB[i][0]); 7374 G4int ia = nint(EV_TAB[i][1]); 7375 G4int is = EV_TAB[i][5]; 7376 7377 varntp->itypcasc.push_back(0); 7378 7379 if (ia > 0) 7380 { // normal particles 7381 varntp->zvv.push_back(iz); 7382 varntp->avv.push_back(ia); 7383 varntp->svv.push_back(-1 * is); 7384 Ainit = Ainit + ia; 7385 Zinit = Zinit + iz; 7386 Sinit = Sinit - is; 7387 G4double v2 = EV_TAB[i][2] * EV_T 7388 G4double gamma = std::sqrt(1.0 - 7389 G4double avvmass = iz * fmp + (ia 7390 G4double etot = avvmass / gamma; 7391 varntp->pxlab.push_back(etot * EV 7392 varntp->pylab.push_back(etot * EV 7393 varntp->pzlab.push_back(etot * EV 7394 varntp->enerj.push_back(etot - av 7395 } 7396 else if (ia == -2) 7397 { // lambda0 7398 varntp->zvv.push_back(0); 7399 varntp->avv.push_back(1); 7400 varntp->svv.push_back(-1); 7401 Ainit = Ainit + 1; 7402 Sinit = Sinit - 1; 7403 G4double v2 = EV_TAB[i][2] * EV_T 7404 G4double gamma = std::sqrt(1.0 - 7405 G4double avvmass = fml; 7406 G4double etot = avvmass / gamma; 7407 varntp->pxlab.push_back(etot * EV 7408 varntp->pylab.push_back(etot * EV 7409 varntp->pzlab.push_back(etot * EV 7410 varntp->enerj.push_back(etot - av 7411 } 7412 else 7413 { // photons 7414 varntp->zvv.push_back(iz); 7415 varntp->avv.push_back(ia); 7416 varntp->svv.push_back(0); 7417 Ainit = Ainit + ia; 7418 Zinit = Zinit + iz; 7419 Sinit = Sinit - is; 7420 varntp->pxlab.push_back(EV_TAB[i] 7421 varntp->pylab.push_back(EV_TAB[i] 7422 varntp->pzlab.push_back(EV_TAB[i] 7423 varntp->enerj.push_back( 7424 std::sqrt(EV_TAB[i][2] * EV_T 7425 } 7426 } 7427 // 7428 return; 7429 } 7430 7431 // Utilities 7432 7433 G4double G4Abla::min(G4double a, G4double b) 7434 { 7435 if (a < b) 7436 { 7437 return a; 7438 } 7439 else 7440 { 7441 return b; 7442 } 7443 } 7444 7445 G4int G4Abla::min(G4int a, G4int b) 7446 { 7447 if (a < b) 7448 { 7449 return a; 7450 } 7451 else 7452 { 7453 return b; 7454 } 7455 } 7456 7457 G4double G4Abla::max(G4double a, G4double b) 7458 { 7459 if (a > b) 7460 { 7461 return a; 7462 } 7463 else 7464 { 7465 return b; 7466 } 7467 } 7468 7469 G4int G4Abla::max(G4int a, G4int b) 7470 { 7471 if (a > b) 7472 { 7473 return a; 7474 } 7475 else 7476 { 7477 return b; 7478 } 7479 } 7480 7481 G4double G4Abla::DSIGN(G4double a, G4double b 7482 { 7483 // A function that assigns the sign of th 7484 // absolute value of the first 7485 7486 if (b >= 0) 7487 { 7488 return std::abs(a); 7489 } 7490 else 7491 { 7492 return -1.0 * std::abs(a); 7493 } 7494 return 0; 7495 } 7496 7497 G4int G4Abla::ISIGN(G4int a, G4int b) 7498 { 7499 // A function that assigns the sign of th 7500 // absolute value of the first 7501 7502 if (b >= 0) 7503 { 7504 return std::abs(a); 7505 } 7506 else 7507 { 7508 return -1 * std::abs(a); 7509 } 7510 return 0; 7511 } 7512 7513 G4int G4Abla::nint(G4double number) 7514 { 7515 G4double intpart = 0.0; 7516 G4double fractpart = 0.0; 7517 fractpart = std::modf(number, &intpart); 7518 if (number == 0) 7519 { 7520 return 0; 7521 } 7522 if (number > 0) 7523 { 7524 if (fractpart < 0.5) 7525 { 7526 return G4int(std::floor(number)); 7527 } 7528 else 7529 { 7530 return G4int(std::ceil(number)); 7531 } 7532 } 7533 if (number < 0) 7534 { 7535 if (fractpart < -0.5) 7536 { 7537 return G4int(std::floor(number)); 7538 } 7539 else 7540 { 7541 return G4int(std::ceil(number)); 7542 } 7543 } 7544 7545 return G4int(std::floor(number)); 7546 } 7547 7548 G4int G4Abla::secnds(G4int x) 7549 { 7550 time_t mytime; 7551 tm* mylocaltime; 7552 7553 time(&mytime); 7554 mylocaltime = localtime(&mytime); 7555 7556 if (x == 0) 7557 { 7558 return (mylocaltime->tm_hour * 60 * 6 7559 } 7560 else 7561 { 7562 return G4int(mytime - x); 7563 } 7564 } 7565 7566 G4int G4Abla::mod(G4int a, G4int b) 7567 { 7568 if (b != 0) 7569 { 7570 return a % b; 7571 } 7572 else 7573 { 7574 return 0; 7575 } 7576 } 7577 7578 G4double G4Abla::dint(G4double x) 7579 { 7580 G4double value = 0.0; 7581 /* 7582 if(a < 0.0) { 7583 value = double(std::ceil(a)); 7584 } 7585 else { 7586 value = double(std::floor(a)); 7587 } 7588 */ 7589 if (x - std::floor(x) <= std::ceil(x) - x 7590 value = G4double(std::floor(x)); 7591 else 7592 value = G4double(std::ceil(x)); 7593 7594 return value; 7595 } 7596 7597 G4int G4Abla::idint(G4double x) 7598 { 7599 G4int value = 0; 7600 if (x - std::floor(x) <= std::ceil(x) - x 7601 value = G4int(std::floor(x)); 7602 else 7603 value = G4int(std::ceil(x)); 7604 7605 return value; 7606 } 7607 7608 G4int G4Abla::idnint(G4double x) 7609 { 7610 if (x - std::floor(x) <= std::ceil(x) - x 7611 return G4int(std::floor(x)); 7612 else 7613 return G4int(std::ceil(x)); 7614 } 7615 7616 G4double G4Abla::dmin1(G4double a, G4double b 7617 { 7618 if (a < b && a < c) 7619 { 7620 return a; 7621 } 7622 if (b < a && b < c) 7623 { 7624 return b; 7625 } 7626 if (c < a && c < b) 7627 { 7628 return c; 7629 } 7630 return a; 7631 } 7632 7633 G4double G4Abla::utilabs(G4double a) { return 7634 7635 G4double G4Abla::width(G4double AMOTHER, 7636 G4double ZMOTHER, 7637 G4double APART, 7638 G4double ZPART, 7639 G4double TEMP, 7640 G4double B1, 7641 G4double SB1, 7642 G4double EXC) 7643 { 7644 /* 7645 * Implemented by JLRS for Abla c++: 06/11 7646 * 7647 C Last update: 7648 C 28/10/13 - JLRS - from abrablav4 7649 */ 7650 G4int IZPART, IAPART, NMOTHER; 7651 G4double B, HBAR, PI, RGEOM, MPART, SB; 7652 G4double BKONST, C, C2, G, APARTNER, MU; 7653 G4double INT1, INT2, INT3, AKONST, EARG, 7654 G4double AEXP; 7655 G4double ARG; 7656 G4double PAR_A1 = 0., PAR_B1 = 0., FACT = 7657 G4double fwidth = 0.; 7658 G4int idlamb0 = 0; 7659 PI = 3.141592654; 7660 7661 if (ZPART == -2.) 7662 { 7663 ZPART = 0.; 7664 idlamb0 = 1; 7665 } 7666 7667 IZPART = idnint(ZPART); 7668 IAPART = idnint(APART); 7669 7670 B = B1; 7671 SB = SB1; 7672 NMOTHER = idnint(AMOTHER - ZMOTHER); 7673 7674 PAR_A1 = 0.0; 7675 PAR_B1 = 0.0; 7676 7677 if (SB > EXC) 7678 { 7679 return fwidth = 0.0; 7680 } 7681 else 7682 { 7683 // in MeV*s 7684 HBAR = 6.582122e-22; 7685 // HBAR2 = HBAR * HBAR 7686 // in m/s 7687 C = 2.99792458e8; 7688 C2 = C * C; 7689 APARTNER = AMOTHER - APART; 7690 MPARTNER = APARTNER * 931.49 / C2; 7691 7692 // g=(2s+1) 7693 if (IAPART == 1 && IZPART == 0) 7694 { 7695 G = 2.0; 7696 MPART = 939.56 / C2; 7697 if (idlamb0 == 1) 7698 MPART = 1115.683 / C2; 7699 } 7700 else 7701 { 7702 if (IAPART == 1 && IZPART == 1) 7703 { 7704 G = 2.0; 7705 MPART = 938.27 / C2; 7706 } 7707 else 7708 { 7709 if (IAPART == 2 && IZPART == 7710 { 7711 G = 1.0; 7712 MPART = 2. * 939.56 / C2; 7713 } 7714 else 7715 { 7716 if (IAPART == 2 && IZPART 7717 { 7718 G = 3.0; 7719 MPART = 1876.10 / C2; 7720 } 7721 else 7722 { 7723 if (IAPART == 3 && IZ 7724 { 7725 G = 2.0; 7726 MPART = 2809.39 / 7727 } 7728 else 7729 { 7730 if (IAPART == 3 & 7731 { 7732 G = 2.0; 7733 MPART = 2809. 7734 } 7735 else 7736 { 7737 if (IAPART == 7738 { 7739 G = 1.0; 7740 MPART = 3 7741 } 7742 else 7743 { 7744 // IMF 7745 G = 1.0; 7746 MPART = A 7747 } 7748 } 7749 } 7750 } 7751 } 7752 } 7753 } // end g 7754 7755 // Relative mass in MeV*s^2/m^2 7756 MU = MPARTNER * MPART / (MPARTNER + M 7757 // in m 7758 R0 = 1.16e-15; 7759 7760 RGEOM = R0 * (std::pow(APART, 1.0 / 3 7761 7762 // in m*sqrt(MeV) 7763 AKONST = HBAR * std::sqrt(1.0 / MU); 7764 7765 // in 1/(MeV*m^2) 7766 BKONST = MPART / (PI * PI * HBAR * HB 7767 // 7768 // USING ANALYTICAL APPROXIMATION 7769 7770 INT1 = 2.0 * std::pow(TEMP, 3.) / (2. 7771 7772 ARG = std::sqrt(B / TEMP); 7773 EARG = (erf(ARG) - 1.0); 7774 if (std::abs(EARG) < 1.e-9) 7775 EARG = 0.0; 7776 if (B == 0.0) 7777 { 7778 INT2 = 0.5 * std::sqrt(PI) * std: 7779 } 7780 else 7781 { 7782 AEXP = B / TEMP; 7783 if (AEXP > 700.0) 7784 AEXP = 700.0; 7785 INT2 = (2.0 * B * B + TEMP * B) / 7786 std::exp(AEXP) * std::sqrt 7787 if (INT2 < 0.0) 7788 INT2 = 0.0; 7789 // For very low temperatures when 7790 // values comming from the first 7791 // set to 0. 7792 if (EARG == 0.0) 7793 INT2 = 0.0; 7794 } // if B 7795 7796 INT3 = 2.0 * TEMP * TEMP * TEMP / (2. 7797 7798 if (IZPART < -1.0 && ZMOTHER < 151.0) 7799 { 7800 // IF(IZPART.LT.1)THEN 7801 // For neutrons, the width is giv 7802 // and QM values; Only QM contrib 7803 // be too strong for neutrons 7804 fwidth = PI * BKONST * G * 7805 std::sqrt((RGEOM * RGEOM 7806 RGEOM * INT1); 7807 } 7808 else 7809 { 7810 fwidth = PI * BKONST * G * (RGEOM 7811 } 7812 7813 // To correct for too high values of 7814 // numerical solution for energies cl 7815 if (IZPART < 3.0) 7816 { 7817 if (AMOTHER < 155.0) 7818 { 7819 PAR_A1 = std::exp(2.302585 * 7820 PAR_B1 = 0.59939389 + 0.00915 7821 } 7822 else 7823 { 7824 if (AMOTHER > 154.0 && AMOTHE 7825 { 7826 PAR_A1 = 1.0086961 - 8.62 7827 PAR_B1 = 1.5329331 + 0.00 7828 } 7829 else 7830 { 7831 if (AMOTHER > 194.0 && AM 7832 { 7833 PAR_A1 = 9.8356347 - 7834 PAR_B1 = 7.7701987 - 7835 } 7836 else 7837 { 7838 if (AMOTHER > 207.0 & 7839 { 7840 PAR_A1 = 15.10738 7841 PAR_B1 = -64.0780 7842 } 7843 else 7844 { 7845 if (AMOTHER > 227 7846 { 7847 if (mod(NMOTH 7848 { 7849 PAR_A1 = 7850 } 7851 else 7852 { 7853 if (mod(N 7854 PAR_A 7855 } 7856 PAR_B1 = 2.15 7857 } 7858 } 7859 } 7860 } 7861 } 7862 FACT = std::exp((2.302585 * PAR_A 7863 if (FACT < 1.0) 7864 FACT = 1.0; 7865 if (IZPART < -1. && ZMOTHER < 151 7866 { 7867 // IF(IZPART.LT.1)THEN 7868 fwidth = fwidth / std::sqrt(F 7869 } 7870 else 7871 { 7872 fwidth = fwidth / FACT; 7873 } 7874 } // if IZPART<3.0 7875 7876 if (fwidth <= 0.0) 7877 { 7878 std::cout << "LOOK IN PARTICLE_WI 7879 std::cout << "ACN,APART :" << AMO 7880 std::cout << "EXC,TEMP,B,SB :" << 7881 std::cout << "INTi, i=1-3 :" << I 7882 std::cout << " " << std::endl; 7883 } 7884 7885 } // if SB>EXC 7886 return fwidth; 7887 } 7888 7889 G4double G4Abla::pen(G4double A, G4double ap, 7890 { 7891 // JLRS: 06/11/2016 7892 // CORRECTIONS FOR BARRIER PENETRATION 7893 // AK, KHS 2005 - Energy-dependen inverse 7894 // of 7895 // Coulomb barrier for LCP 7896 7897 G4double fpen = 0., MU, HO; 7898 7899 // REDUCED MASSES (IN MeV/C**2) 7900 MU = (A - ap) * ap / A; 7901 7902 // ENERGY OF THE INVERSE PARABOLA AT THE 7903 // HERE hbar = 197.3287 fm*MeV/c, omega i 7904 HO = 197.3287 * omega; 7905 7906 if (T <= 0.0) 7907 { 7908 fpen = 0.0; 7909 } 7910 else 7911 { 7912 fpen = std::pow(10.0, 4.e-4 * std::po 7913 } 7914 7915 return fpen; 7916 } 7917 7918 void G4Abla::bsbkbc(G4double A, G4double Z, G 7919 { 7920 // Calculate BS and BK needed for a level 7921 // BETA2 and BETA4 = quadrupole and hexad 7922 7923 G4double PI = 3.14159265; 7924 G4int IZ = idnint(Z); 7925 G4int IN = idnint(A - Z); 7926 // alphaN = sqrt(2*N/(4*pi))*BetaN 7927 G4double ALPHA2 = std::sqrt(5.0 / (4.0 * 7928 G4double ALPHA4 = std::sqrt(9.0 / (4.0 * 7929 7930 (*BS) = 1.0 + 0.4 * ALPHA2 * ALPHA2 - 4.0 7931 66.0 / 175.0 * ALPHA2 * ALPHA2 * 7932 7933 (*BK) = 1.0 + 0.4 * ALPHA2 * ALPHA2 + 16. 7934 82.0 / 175.0 * ALPHA2 * ALPHA2 * 7935 7936 (*BC) = 0.0; 7937 7938 return; 7939 } 7940 7941 G4double G4Abla::fvmaxhaz(G4double T) 7942 { 7943 // Random generator according to a distri 7944 // Maxwell distribution with quantum-mech 7945 // according to KHS 7946 // Y = X**(1.5E0) / (B+X) * EXP(-X/T 7947 7948 return ( 7949 3.0 * T * 7950 std::pow(-1. * std::log(G4AblaRandom: 7951 0.333333)); 7952 } 7953 7954 G4double 7955 G4Abla::func_trans(G4double TIME, G4doubl 7956 { 7957 /* 7958 c This function determines the fission 7959 c according to the analytical solution 7960 distribution c at the barrier when the 7961 parabolic c potential. It is taken from 7962 (1943) 1 7963 c 7964 c***********************INPUT PARAMETERS* 7965 c Time Time at which we ev 7966 c ZF Z of nucleus 7967 C AF A of nucleus 7968 c BET Reduced dissipation 7969 c FT Nuclear temperature 7970 C**************************************** 7971 C********************************OUTPUT** 7972 C Fission decay width at the correspond 7973 C**************************************** 7974 c****************************OTHER VARIAB 7975 C SIGMA_SQR Square of the width 7976 C XB Deformation of the n 7977 c NORM Normalization factor 7978 c W Probability distribu 7979 c W_INFIN Probability distr. a 7980 c MFCD Mass of the fission 7981 C**************************************** 7982 */ 7983 G4double PI = 3.14159; 7984 G4double DEFO_INIT, OMEGA, HOMEGA, OMEGA_ 7985 G4double BET1, XACT, SIGMA_SQR, W_EXP, XB 7986 G4double FUNC_TRANS, LOG_SLOPE_INF, LOG_S 7987 // 7988 // Influence of initial deformation 7989 // Initial alpha2 deformation (GS) 7990 DEFO_INIT = std::sqrt(5.0 / (4.0 * PI)) * 7991 // 7992 fomega_sp(AF, Y, &MFCD, &OMEGA, &HOMEGA); 7993 fomega_gs(AF, ZF, &K1, &OMEGA_GS, &HOMEGA 7994 // 7995 // Determination of the square of the wid 7996 // For the overdamped regime BET**2 > 4*O 7997 if ((bet * bet) > 4.0 * OMEGA_GS * OMEGA_ 7998 { 7999 BET1 = std::sqrt(bet * bet - 4.0 * OM 8000 // 8001 // REMEMBER THAT HOMEGA IS ACTUALLY H 8002 // SO THAT HOMEGA1 = HOMEGA/HBAR 8003 // 8004 SIGMA_SQR = 8005 (FT / K1) * 8006 (1.0 - 8007 ((2.0 * bet * bet / (BET1 * BET1 8008 (0.5 * (std::exp(0.50 * (BET1 8009 (0.5 * (std::exp(0.50 * (BET1 8010 (bet / BET1 * 0.50 * (std::exp( 8011 1. * std::exp(-bet * 1.e21 * TI 8012 // 8013 // Evolution of the mean x-value (KHS 8014 XACT = DEFO_INIT * std::exp(-0.5 * (b 8015 // 8016 } 8017 else 8018 { 8019 // For the underdamped regime BET**2 8020 // number and the expression with sin 8021 // with sin and cos 8022 BET1 = std::sqrt(4.0 * OMEGA_GS * OME 8023 SIGMA_SQR = FT / K1 * 8024 (1. - std::exp(-1.0 * bet 8025 (bet * bet / (B 8026 bet / BET1 * s 8027 XACT = DEFO_INIT * std::cos(0.5 * BET 8028 } 8029 8030 // Determination of the deformation at th 8031 // "Geometrical relationships of Macrosco 8032 // page 100 This corresponds to alpha2 de 8033 XB = 7. / 3. * Y - 938. / 765. * Y * Y + 8034 // 8035 // Determination of the probability distr 8036 // 8037 if (SIGMA_SQR > 0.0) 8038 { 8039 NORM = 1. / std::sqrt(2. * PI * SIGMA 8040 // 8041 W_EXP = -1. * (XB - XACT) * (XB - XAC 8042 if (W_EXP < (-708.0)) 8043 W_EXP = -708.0; 8044 W = NORM * std::exp(W_EXP) * FT / (K1 8045 } 8046 else 8047 { 8048 W = 0.0; 8049 } 8050 // 8051 // Determination of the fission decay wid 8052 // overdamped regime 8053 // 8054 SIGMA_SQR_INF = FT / K1; 8055 W_EXP = -XB * XB / (2.0 * SIGMA_SQR_INF); 8056 if (W_EXP < (-708.0)) 8057 W_EXP = -708.0; 8058 W_INFIN = std::exp(W_EXP) / std::sqrt(2.0 8059 FUNC_TRANS = W / W_INFIN; 8060 // 8061 // Correction for the variation of the me 8062 // (see B. Jurado et al, Nucl. Phys. A74 8063 // 8064 LOG_SLOPE_INF = cram(bet, HOMEGA) * bet * 8065 LOG_SLOPE_ABS = (XB - XACT) / SIGMA_SQR - 8066 // 8067 FUNC_TRANS = FUNC_TRANS * LOG_SLOPE_ABS / 8068 // 8069 return FUNC_TRANS; 8070 } 8071 8072 void G4Abla::part_fiss(G4double BET, 8073 G4double GP, 8074 G4double GF, 8075 G4double Y, 8076 G4double TAUF, 8077 G4double TS1, 8078 G4double TSUM, 8079 G4int* CHOICE, 8080 G4double ZF, 8081 G4double AF, 8082 G4double FT, 8083 G4double* T_LAPSE, 8084 G4double* GF_LOC) 8085 { 8086 /* 8087 C THIS SUBROUTINE IS AIMED TO CHOOSE 8088 C AND FISSION 8089 C WE USE MONTE-CARLO METHODS AND SAMP 8090 c TO SIMULATE THE TRANSIENT TIME WITH 30 8091 C FOR t>1.5*TAUF , GF=CONSTANT=ASYMPT 8092 FACTOR) 8093 c---------------------------------------- 8094 c Modifications introduced by BEATRIZ 8095 c 1. Now this subrutine is included in 8096 c 2. TSUM does not include the current 8097 C 3. T_LAPSE is the time until decay, 8098 C 4. GF_LOC is also taken as an output 8099 C 5. BET (Diss. Coeff.) and HOMEGA (Fr 8100 c are included as input variables b 8101 C---------------------------------------- 8102 C ON INPUT: 8103 C GP Partial partic 8104 C GF Asymptotic val 8105 factor C AF Mass nu 8106 Transient time C TS1 8107 next step C TSUM Tota 8108 times, including C 8109 is in competition C 8110 Z of nucleus C AF A 8111 C---------------------------------------- 8112 C ON OUTPUT: 8113 C CHOICE Key for decay 8114 C 8115 C 8116 C---------------------------------------- 8117 C VARIABLES: 8118 C GP Partial partic 8119 C GF Asymptotic val 8120 factor C TAUF Transie 8121 decay time C TSUM Tot 8122 times C CHOICE Key for 8123 C AF A of nucleus 8124 C FT Used for Fermi 8125 C STEP_LENGTH Step in time t 8126 C BEGIN_TIME Total sum of p 8127 excluding C 8128 competition C 8129 Begin of time interval considered in one 8130 of time interval considered in one step C 8131 function for fission width, c 8132 asymptotic value C TS2 8133 time in one time step C HBAR 8134 Effective decay time in one time step C 8135 probability in one time step C X 8136 random generator 8137 C---------------------------------------- 8138 */ 8139 G4double K1, OMEGA, HOMEGA, t_0, STEP_LEN 8140 8141 G4double HBAR = 6.582122e-22; 8142 G4int fchoice = 0; 8143 G4double fGF_LOC = 0., fT_LAPSE = 0.; 8144 // 8145 if (GF <= 0.0) 8146 { 8147 *CHOICE = 1; 8148 *T_LAPSE = TS1; 8149 *GF_LOC = 0.0; 8150 goto direct107; 8151 } 8152 // 8153 fomega_gs(AF, ZF, &K1, &OMEGA, &HOMEGA); 8154 // 8155 // ************************************** 8156 // Calculation of the shift in time du 8157 // 8158 // Overdamped regime 8159 if (BET * BET > 4.0 * OMEGA * OMEGA) 8160 { 8161 // REMEMBER THAT HOMEGA IS AC 8162 // SO THAT HOMEGA1 = HOMEGA/H 8163 // Additional factor 1/16 propose 8164 // account the fact that the curv 8165 // larger than what predicted by 8166 // shell effects. 8167 t_0 = BET * 1.e21 * HBAR * HBAR / (4. 8168 } 8169 else 8170 { 8171 // Underdamped regime 8172 if (((2. * FT - HOMEGA / 16.) > 0.000 8173 { 8174 // Additional factor 1/16 pro 8175 // account the fact that the 8176 // larger than what predicted 8177 // shell effects. 8178 t_0 = (std::log(2. * FT / (2. * F 8179 } 8180 else 8181 { 8182 // Neglect fission transients 8183 // large. Suppresses large, s 8184 // low excitation energy in p 8185 // 8186 fchoice = 0; 8187 goto direct106; 8188 } 8189 } 8190 // ************************************** 8191 fchoice = 0; 8192 STEP_LENGTH = 1.5 * TAUF / 50.; 8193 // 8194 // AT FIRST WE CACULATE THE REAL CURRENT 8195 // TSUM includes only the time elapsed i 8196 // 8197 BEGIN_TIME = TSUM + t_0; 8198 // 8199 if (BEGIN_TIME < 0.0) 8200 std::cout << "CURRENT TIME < 0" << BE 8201 // 8202 if (BEGIN_TIME < 1.50 * TAUF) 8203 { 8204 LOC_TIME_BEGIN = BEGIN_TIME; 8205 // 8206 while ((LOC_TIME_BEGIN < 1.5 * TAUF) 8207 { 8208 8209 LOC_TIME_END = LOC_TIME_BEGIN + S 8210 // 8211 // NOW WE ESTIMATE THE MEAN VALUE 8212 // INTERVAL 8213 fGF_LOC = (func_trans(LOC_TIME_BE 8214 func_trans(LOC_TIME_EN 8215 2.0; 8216 // 8217 fGF_LOC = fGF_LOC * GF; 8218 8219 // TS2 IS THE MEAN DECAY TIME OF 8220 if (fGF_LOC > 0.0) 8221 { 8222 TS2 = HBAR / fGF_LOC; 8223 } 8224 else 8225 { 8226 TS2 = 0.0; 8227 } 8228 // 8229 if (TS2 > 0.0) 8230 { 8231 LAMBDA = 1.0 / TS1 + 1.0 / TS 8232 } 8233 else 8234 { 8235 LAMBDA = 1.0 / TS1; 8236 } 8237 // 8238 // This is the probability to sur 8239 REAC_PROB = std::exp(-1.0 * STEP_ 8240 // I GENERATE A RANDOM NUMBER 8241 X = G4AblaRandom::flat(); 8242 if (X > REAC_PROB) 8243 { 8244 // THEN THE EVAPORATION OR FI 8245 FISS_PROB = fGF_LOC / (fGF_LO 8246 X = G4AblaRandom::flat(); 8247 // WRIT 8248 if (X < FISS_PROB) 8249 { 8250 // FISSION OCCURED 8251 fchoice = 2; 8252 } 8253 else 8254 { 8255 // EVAPORATION OCCURED 8256 fchoice = 1; 8257 } 8258 } // if x 8259 LOC_TIME_BEGIN = LOC_TIME_END; 8260 } // while 8261 // Take the real decay time of this 8262 fT_LAPSE = LOC_TIME_END - BEGIN_TIME; 8263 } // if BEGIN_TIME 8264 // 8265 // NOW, IF NOTHING HAPPENED DURING TRAN 8266 direct106: 8267 if (fchoice == 0) 8268 { 8269 fGF_LOC = GF; 8270 FISS_PROB = GF / (GF + GP); 8271 8272 // Added for cases where already at t 8273 if (GF > 0.0) 8274 { 8275 TS2 = HBAR / GF; 8276 } 8277 else 8278 { 8279 TS2 = 0.0; 8280 } 8281 8282 if (TS2 > 0.0) 8283 { 8284 LAMBDA = 1. / TS1 + 1. / TS2; 8285 } 8286 else 8287 { 8288 LAMBDA = 1. / TS1; 8289 } 8290 // 8291 X = G4AblaRandom::flat(); 8292 8293 if (X < FISS_PROB) 8294 { 8295 // FISSION OCCURED 8296 fchoice = 2; 8297 } 8298 else 8299 { 8300 // EVAPORATION OCCURED 8301 fchoice = 1; 8302 } 8303 // 8304 // TIRAGE ALEATOIRE DANS UNE EXPONENT 8305 // EXPOHAZ=-T*LOG(HAZ(K)) 8306 fT_LAPSE = fT_LAPSE - 1.0 / LAMBDA * 8307 } 8308 // 8309 direct107: 8310 8311 (*T_LAPSE) = fT_LAPSE; 8312 (*GF_LOC) = fGF_LOC; 8313 (*CHOICE) = fchoice; 8314 return; 8315 } 8316 8317 G4double G4Abla::tunnelling(G4double A, 8318 G4double ZPRF, 8319 G4double Y, 8320 G4double EE, 8321 G4double EF, 8322 G4double TEMP, 8323 G4double DENSG, 8324 G4double DENSF, 8325 G4double ENH_FACT 8326 { 8327 // Subroutine to caluclate fission width 8328 // of tunnelling through the fission barr 8329 8330 G4double PI = 3.14159; 8331 G4int IZ, IN; 8332 G4double MFCD, OMEGA, HOMEGA1, HOMEGA2 = 8333 G4double E1, E2, EXP_FACT, CORR_FUNCT, FA 8334 8335 IZ = idnint(ZPRF); 8336 IN = idnint(A - ZPRF); 8337 8338 // For low energies system "sees" LD barr 8339 fomega_sp(A, Y, &MFCD, &OMEGA, &HOMEGA1); 8340 8341 if (mod(IN, 2) == 0 && mod(IZ, 2) == 0) 8342 { // e-e 8343 // Due to pairing gap, even-even nucl 8344 // lower than pairing gap (no levels 8345 EE = EE - 12.0 / std::sqrt(A); 8346 HOMEGA2 = 1.04; 8347 } 8348 8349 if (mod(IN, 2) == 1 && mod(IZ, 2) == 1) 8350 { // o-o 8351 HOMEGA2 = 0.65; 8352 } 8353 8354 if (mod(IN, 2) == 1 && mod(IZ, 2) == 0) 8355 { // o-e 8356 HOMEGA2 = 0.8; 8357 } 8358 8359 if (mod(IN, 2) == 0 && mod(IZ, 2) == 1) 8360 { // e-0 8361 HOMEGA2 = 0.8; 8362 } 8363 8364 E1 = EF + HOMEGA1 / 2.0 / PI * std::log(H 8365 8366 E2 = EF + HOMEGA2 / (2.0 * PI) * std::log 8367 8368 // AKH May 2013 - Due to approximations i 8369 // energies just above barrier Pf was to 8370 // somewhat higher. LInes below are suppo 8371 // in EXP_FACT comes from the slope of th 8372 // fission barrier. 8373 EXP_FACT = (EE - EF) / (HOMEGA2 / (2.0 * 8374 if (EXP_FACT > 700.0) 8375 EXP_FACT = 700.0; 8376 CORR_FUNCT = HOMEGA1 * (1.0 - 1.0 / (1.0 8377 if (mod(IN, 2) == 0 && mod(IZ, 2) == 0) 8378 { 8379 CORR_FUNCT = HOMEGA1 * (1.0 - 1.0 / ( 8380 } 8381 8382 FACT1 = HOMEGA1 / (2.0 * PI * TEMP + HOME 8383 FACT2 = (2.0 * PI / (2.0 * PI + HOMEGA2) 8384 FACT3 = HOMEGA2 / (2.0 * PI * TEMP - HOME 8385 8386 if (EE < E1) 8387 { 8388 GFTUN = FACT1 * 8389 (std::exp(EE / TEMP) * std::e 8390 } 8391 else 8392 { 8393 if (EE >= E1 && EE < E2) 8394 { 8395 GFTUN = std::exp(EE / TEMP) * (0. 8396 std::exp(E1 / TEMP) * (0. 8397 FACT1 * (std::exp(E1 / TE 8398 std::exp(-2.0 * 8399 } 8400 else 8401 { 8402 GFTUN = std::exp(EE / TEMP) * (1. 8403 std::exp(E2 / TEMP) * (1. 8404 std::exp(E2 / TEMP) * (0. 8405 std::exp(E1 / TEMP) * (0. 8406 FACT1 * (std::exp(E1 / TE 8407 std::exp(-2.0 * 8408 } 8409 } 8410 GFTUN = GFTUN / std::exp(EE / TEMP) * DEN 8411 GFTUN = GFTUN * CORR_FUNCT; 8412 return GFTUN; 8413 } 8414 8415 void G4Abla::fission_width(G4double ZPRF, 8416 G4double A, 8417 G4double EE, 8418 G4double BS, 8419 G4double BK, 8420 G4double EF, 8421 G4double Y, 8422 G4double* GF, 8423 G4double* TEMP, 8424 G4double JPR, 8425 G4int IEROT, 8426 G4int FF_ALLOWED, 8427 G4int OPTCOL, 8428 G4int OPTSHP, 8429 G4double DENSG) 8430 { 8431 // 8432 G4double FNORM, MASS_ASYM_SADD_B, FP_PER, 8433 G4double Z2OVERA, ftemp, fgf, DENSF, ECOR 8434 G4double DCR, UCR, ENH_FACTA, ENH_FACTB, 8435 G4double PI = 3.14159; 8436 8437 DCR = fiss->dcr; 8438 UCR = fiss->ucr; 8439 Z2OVERA = ZPRF * ZPRF / A; 8440 8441 // Nuclei below Businaro-Gallone point do 8442 if ((ZPRF <= 55.0) || (FF_ALLOWED == 0)) 8443 { 8444 (*GF) = 0.0; 8445 (*TEMP) = 0.5; 8446 return; 8447 } 8448 8449 // Level density above SP 8450 // Saddle-point deformation is defbet as 8451 // are calculated for fission in DENSNIV 8452 // parametrization is done as function of 8453 densniv(A, ZPRF, EE, EF, &DENSF, 0.0, BS, 8454 8455 if (OPTCOL == 0) 8456 { 8457 fgf = DENSF / DENSG / PI / 2.0 * ftem 8458 (*TEMP) = ftemp; 8459 (*GF) = fgf; 8460 return; 8461 } 8462 8463 // FP = 2/5*M0*R0**2/HBAR**2 * A**(5/3) * 8464 // FP is used to calculate the spin-cutof 8465 // hbar**2 is, therefore, included in FP 8466 // exponents The factor fnorm inlcudes th 8467 // R0*M0/hbar**2 = 1.2fm*931.49MeV/c**2 / 8468 // units 1/MeV 8469 FNORM = 1.2 * 1.2 * 931.49 * 1.e-2 / (9.0 8470 // FP_PER ~ 1+7*y/6, FP_PAR ~ 1-7*y/3 (Ha 8471 // phys.) Perpendicular moment of inertia 8472 FP_PER = 2.0 / 5.0 * std::pow(A, 5.0 / 3. 8473 8474 // AK - Jan 2011 - following line is need 8475 // FP_PER calculated according to above f 8476 // to too large ENH_FACT 8477 if (Z2OVERA <= 30.0) 8478 FP_PER = 6.50; 8479 8480 // Parallel moment of inertia 8481 FP_PAR = 2.0 / 5.0 * std::pow(A, 5.0 / 3. 8482 if (FP_PAR < 0.0) 8483 FP_PAR = 0.0; 8484 8485 EROT = JPR * JPR / (2.0 * std::sqrt(FP_PA 8486 if (IEROT == 1) 8487 EROT = 0.0; 8488 8489 // Perpendicular spin cut-off parameter 8490 SIG_PER_SP = std::sqrt(FP_PER * ftemp); 8491 8492 if (SIG_PER_SP < 1.0) 8493 SIG_PER_SP = 1.0; 8494 8495 // Parallel spin cut-off parameter 8496 SIG_PAR_SP = std::sqrt(FP_PAR * ftemp); 8497 ENH_FACT = 1.0; 8498 // 8499 if (A > 223.0) 8500 { 8501 MASS_ASYM_SADD_B = 2.0; 8502 } 8503 else 8504 { 8505 MASS_ASYM_SADD_B = 1.0; 8506 } 8507 8508 // actinides with low barriers 8509 if (Z2OVERA > 35. && Z2OVERA <= (110. * 1 8510 { 8511 // Barrier A is axial asymmetric 8512 ENH_FACTA = std::sqrt(8.0 * PI) * SIG 8513 // Barrier B is axial symmetric 8514 ENH_FACTB = MASS_ASYM_SADD_B * SIG_PE 8515 // Total enhancement 8516 ENH_FACT = ENH_FACTA * ENH_FACTB / (E 8517 } 8518 else 8519 { 8520 // nuclei with high fission barriers 8521 // symmetric) 8522 if (Z2OVERA <= 35.) 8523 { 8524 ENH_FACT = MASS_ASYM_SADD_B * SIG 8525 } 8526 else 8527 { 8528 // super-heavy nuclei (only barr 8529 ENH_FACT = std::sqrt(8.0 * PI) * 8530 } 8531 } 8532 8533 // Fading-out with excitation energy abov 8534 PONFE = (ECOR - UCR - EROT) / DCR; 8535 if (PONFE > 700.) 8536 PONFE = 700.0; 8537 // Fading-out according to Junghans: 8538 ENH_FACT = 1.0 / (1.0 + std::exp(PONFE)) 8539 8540 if (ENH_FACT < 1.0) 8541 ENH_FACT = 1.0; 8542 fgf = DENSF / DENSG / PI / 2.0 * ftemp * 8543 8544 // Tunneling 8545 if (EE < EF) 8546 { 8547 fgf = tunnelling(A, ZPRF, Y, EE, EF, 8548 } 8549 // 8550 (*GF) = fgf; 8551 (*TEMP) = ftemp; 8552 return; 8553 } 8554 8555 void G4Abla::lorb(G4double AMOTHER, 8556 G4double ADAUGHTER, 8557 G4double LMOTHER, 8558 G4double EEFINAL, 8559 G4double* LORBITAL, 8560 G4double* SIGMA_LORBITAL) 8561 { 8562 8563 G4double AFRAGMENT, S4FINAL, ALEVDENS; 8564 G4double THETA_MOTHER, THETA_ORBITAL; 8565 8566 /* 8567 C Values on input: 8568 C AMOTHER mass of mother n 8569 C ADAUGHTER mass of daughter 8570 C LMOTHER angular momentum 8571 C EEFINAL excitation energ 8572 C (sum of daught 8573 C 8574 C Values on output: 8575 C LORBITAL mean value of or 8576 C (assumed to b 8577 C SIGMA_LORBITAL standard deviati 8578 */ 8579 if (EEFINAL <= 0.01) 8580 EEFINAL = 0.01; 8581 AFRAGMENT = AMOTHER - ADAUGHTER; 8582 ALEVDENS = 0.073 * AMOTHER + 0.095 * std: 8583 S4FINAL = ALEVDENS * EEFINAL; 8584 if (S4FINAL <= 0.0 || S4FINAL > 100000.) 8585 { 8586 std::cout << "S4FINAL:" << S4FINAL << 8587 } 8588 THETA_MOTHER = 0.0111 * std::pow(AMOTHER, 8589 THETA_ORBITAL = 0.0323 / std::pow(AMOTHER 8590 std::pow(std::pow(AFRAGME 8591 (AFRAGMENT + ADAUGHTER); 8592 8593 *LORBITAL = -1. * THETA_ORBITAL * (LMOTHE 8594 8595 *SIGMA_LORBITAL = std::sqrt(std::sqrt(S4F 8596 8597 return; 8598 } 8599 8600 // Random generator according to a distributi 8601 // Maxwell distribution with quantum-mech. x- 8602 // KHS 8603 // Y = SQRT(X) * EXP(-X/T) (approximatio 8604 G4double G4Abla::fvmaxhaz_neut(G4double x) 8605 { 8606 8607 return (2.0 * x * std::sqrt(std::log(G4Ab 8608 } 8609 8610 void G4Abla::imf(G4double ACN, 8611 G4double ZCN, 8612 G4double TEMP, 8613 G4double EE, 8614 G4double* ZIMF, 8615 G4double* AIMF, 8616 G4double* BIMF, 8617 G4double* SBIMF, 8618 G4double* TIMF, 8619 G4double JPRF) 8620 { 8621 // input variables (compound nucleus) 8622 // output variable (IMF) Zimf,Aimf,Bi 8623 // 8624 // SBIMF = separation energy + coulom 8625 // 8626 // SDW(Z) is the sum over all isotope 8627 // DW(Z,A) is the decay width of a ce 8628 // 8629 // Last update: 8630 // 28/10/13 - JLRS - from abr 8631 // 13/11/16 - JLRS - Included 8632 8633 G4int IZIMFMAX = 0; 8634 G4int iz = 0, in = 0, IZIMF = 0, INMI = 0 8635 INNMAX = 0, INMIN = 0, IAIMF = 0, I 8636 G4double BS = 0, BK = 0, BC = 0, BSHELL = 8637 AIMF_1, OMEGAP = 0, fBIMF = 0.0, 8638 G4double DENSCN = 0, TEMPCN = 0, ECOR = 0 8639 QRCN = 0, DENSIMF = 0, fTIMF = 0 8640 G4double PI = 3.141592653589793238; 8641 G4double ZIMF_1 = 0.0; 8642 G4double SDWprevious = 0, SUMDW_TOT = 0, 8643 G4double SDW[98]; 8644 G4double DW[98][251]; 8645 G4double BBIMF[98][251]; 8646 G4double SSBIMF[98][251]; 8647 G4int OPTSHPIMF = opt->optshpimf; 8648 8649 // Initialization 8650 for (G4int ia = 0; ia < 98; ia++) 8651 for (G4int ib = 0; ib < 251; ib++) 8652 { 8653 BBIMF[ia][ib] = 0.0; 8654 SSBIMF[ia][ib] = 0.0; 8655 } 8656 8657 // take the half of the CN and transform 8658 IZIMFMAX = idnint(ZCN / 2.0); 8659 8660 if (IZIMFMAX < 3) 8661 { 8662 std::cout << "CHARGE_IMF line 46" << 8663 std::cout << "Problem: IZIMFMAX < 3 " 8664 std::cout << "ZCN,IZIMFMAX," << ZCN < 8665 } 8666 8667 iz = idnint(ZCN); 8668 in = idnint(ACN) - iz; 8669 BSHELL = ecld->ecgnz[in][iz] - ecld->vgsl 8670 DEFBET = ecld->beta2[in][iz]; 8671 8672 bsbkbc(ACN, ZCN, &BS, &BK, &BC); 8673 8674 densniv(ACN, ZCN, EE, 0.0, &DENSCN, BSHEL 8675 8676 IINERT = 0.4 * 931.49 * 1.16 * 1.16 * std 8677 EROTCN = JPRF * JPRF * 197.328 * 197.328 8678 // 8679 for (IZIMF = 3; IZIMF <= IZIMFMAX; IZIMF+ 8680 { 8681 8682 SDW[IZIMF] = 0.0; 8683 ZIMF_1 = 1.0 * IZIMF; 8684 8685 // *** Find the limits that both 8686 8687 isostab_lim(IZIMF, &INIMFMI, 8688 &INIMFMA); // Bound isoto 8689 // Idea - very proton-rich nuclei can 8690 // before decaying: 8691 INIMFMI = max(1, INIMFMI - 2); 8692 8693 IZCN = idnint(ZCN); // Z of C 8694 INCN = idnint(ACN) - IZCN; // N of C 8695 8696 isostab_lim(IZCN - IZIMF, 8697 &INMI, 8698 &INMA); // Daughter nucle 8699 // limits of boun 8700 INMI = max(1, INMI - 2); 8701 INMIN = max(INIMFMI, INCN - INMA); / 8702 INNMAX = min(INIMFMA, INCN - INMI); / 8703 8704 ILIMMAX = max(INNMAX, INMIN); // In o 8705 // 8706 8707 for (G4int INIMF = INMIN; INIMF <= IL 8708 { // Range of possible IMF isotopes 8709 IAIMF = IZIMF + INIMF; 8710 DW[IZIMF][IAIMF] = 0.0; 8711 AIMF_1 = 1.0 * (IAIMF); 8712 8713 // Q-values 8714 mglms(ACN - AIMF_1, ZCN - ZIMF_1, 8715 mglms(AIMF_1, ZIMF_1, OPTSHPIMF, 8716 mglms(ACN, ZCN, OPTSHPIMF, &MAZ); 8717 8718 // Barrier 8719 if (ACN <= AIMF_1) 8720 { 8721 SSBIMF[IZIMF][IAIMF] = 1.e37; 8722 } 8723 else 8724 { 8725 barrs(idnint(ZCN - ZIMF_1), i 8726 SSBIMF[IZIMF][IAIMF] = MAIMF 8727 BBIMF[IZIMF][IAIMF] = fBIMF; 8728 } 8729 8730 // ***** Width ***************** 8731 DEFBETIMF = ecld->beta2[idnint(AI 8732 ecld->beta2[idnint(AC 8733 8734 IINERT = 0.40 * 931.490 * 1.160 * 8735 (std::pow(AIMF_1, 5. 8736 931.490 * 1.160 * 1.160 8737 (std::pow(AIMF_1, 1. 8738 (std::pow(AIMF_1, 1. 8739 8740 EROT = JPRF * JPRF * 197.328 * 19 8741 8742 // IF(IEROT.EQ.1) EROT = 0.D 8743 if (EE < (SSBIMF[IZIMF][IAIMF] + 8744 { 8745 WIDTH_IMF = 0.0; 8746 // PRINT*,IDNINT(ACN 8747 } 8748 else 8749 { 8750 // here the temperat 8751 // Increase of the level dens 8752 // comment in ABLA 8753 // BSIMF = ((ACN-AIM 8754 // & ACN** 8755 BSIMF = BS; 8756 densniv(ACN, 8757 ZCN, 8758 EE, 8759 SSBIMF[IZIMF][IAIMF], 8760 &DENSIMF, 8761 0.0, 8762 BSIMF, 8763 1.0, 8764 &fTIMF, 8765 0, 8766 0, 8767 DEFBETIMF, 8768 &ECOR, 8769 JPRF, 8770 2, 8771 &QR); 8772 IMFARG = (SSBIMF[IZIMF][IAIMF 8773 if (IMFARG > 200.0) 8774 IMFARG = 200.0; 8775 8776 WIDTH1 = width(ACN, ZCN, AIMF 8777 8778 WIDTH_IMF = WIDTH1 * std::exp 8779 8780 if (WIDTH_IMF <= 0.0) 8781 { 8782 std::cout << "GAMMA_IMF=0 8783 std::cout << "ACN,ZCN,AIM 8784 << "," << idnin 8785 std::cout << "SSBIMF,TIMF 8786 std::cout << "DEXP(-IMFAR 8787 std::cout << "WIDTH1 =" < 8788 } 8789 } // if ee 8790 8791 SDW[IZIMF] = SDW[IZIMF] + WIDTH_I 8792 8793 DW[IZIMF][IAIMF] = WIDTH_IMF; 8794 8795 } // for INIMF 8796 } // for IZIMF 8797 // End loop to calculate the decay 8798 // ******************************** 8799 8800 // Loop to calculate where the gamma 8801 SDWprevious = 1.e20; 8802 IZSTOP = 0; 8803 8804 for (G4int III_ZIMF = 3; III_ZIMF <= IZIM 8805 { 8806 8807 if (SDW[III_ZIMF] == 0.0) 8808 { 8809 IZSTOP = III_ZIMF - 1; 8810 goto imfs30; 8811 } 8812 8813 if (SDW[III_ZIMF] > SDWprevious) 8814 { 8815 IZSTOP = III_ZIMF - 1; 8816 goto imfs30; 8817 } 8818 else 8819 { 8820 SDWprevious = SDW[III_ZIMF]; 8821 } 8822 8823 } // for III_ZIMF 8824 8825 imfs30: 8826 8827 if (IZSTOP <= 6) 8828 { 8829 IZSTOP = IZIMFMAX; 8830 goto imfs15; 8831 } 8832 8833 A1PAR = std::log10(SDW[IZSTOP] / SDW[IZST 8834 A2PAR = std::log10(SDW[IZSTOP]) - A1PAR * 8835 if (A2PAR > 0.) 8836 A2PAR = -1. * A2PAR; 8837 if (A1PAR > 0.) 8838 A1PAR = -1. * A1PAR; 8839 8840 // End loop to calculate where gamma 8841 8842 for (G4int II_ZIMF = IZSTOP; II_ZIMF <= I 8843 { 8844 SDW[II_ZIMF] = std::pow(10.0, A2PAR) 8845 if (SDW[II_ZIMF] < 0.0) 8846 SDW[II_ZIMF] = 0.0; 8847 } 8848 8849 imfs15: 8850 8851 // Sum of all decay widths (for normal 8852 SUMDW_TOT = 0.0; 8853 for (G4int I_ZIMF = 3; I_ZIMF <= IZIMFMAX 8854 { 8855 SUMDW_TOT = SUMDW_TOT + SDW[I_ZIMF]; 8856 } 8857 if (SUMDW_TOT <= 0.0) 8858 { 8859 std::cout << "*********************" 8860 std::cout << "IMF function" << std::e 8861 std::cout << "SUM of decay widths = " 8862 std::cout << "IZSTOP = " << IZSTOP << 8863 } 8864 8865 // End of Sum of all decay widths (for 8866 8867 // Loop to sample the nuclide that is 8868 // ------- sample Z ----------- 8869 imfs10: 8870 X = haz(1) * SUMDW_TOT; 8871 8872 // IF(X.EQ.0.D0) PRINT*,'WARNING: X= 8873 SUM_Z = 0.0; 8874 fZIMF = 0.0; 8875 IZMEM = 0; 8876 8877 for (G4int IZ = 3; IZ <= IZIMFMAX; IZ++) 8878 { 8879 SUM_Z = SUM_Z + SDW[IZ]; 8880 if (X < SUM_Z) 8881 { 8882 fZIMF = 1.0 * IZ; 8883 IZMEM = IZ; 8884 goto imfs20; 8885 } 8886 } // for IZ 8887 8888 imfs20: 8889 8890 // ------- sample N ----------- 8891 8892 isostab_lim(IZMEM, &INMINMEM, &INMAXMEM); 8893 INMINMEM = max(1, INMINMEM - 2); 8894 8895 isostab_lim(IZCN - IZMEM, &INMI, 8896 &INMA); // Daughter nucleus a 8897 INMI = max(1, INMI - 2); 8898 // limits of bound isotopes 8899 8900 INMINMEM = max(INMINMEM, INCN - INMA); // 8901 INMAXMEM = min(INMAXMEM, INCN - INMI); // 8902 8903 INMAXMEM = max(INMINMEM, INMAXMEM); 8904 8905 IA = 0; 8906 SUMDW_N_TOT = 0.0; 8907 for (G4int IIINIMF = INMINMEM; IIINIMF <= 8908 { 8909 IA = IZMEM + IIINIMF; 8910 if (IZMEM >= 3 && IZMEM <= 95 && IA > 8911 { 8912 SUMDW_N_TOT = SUMDW_N_TOT + DW[IZ 8913 } 8914 else 8915 { 8916 std::cout << "CHARGE IMF OUT OF R 8917 << ", " << TEMP << std: 8918 } 8919 } 8920 8921 XX = haz(1) * SUMDW_N_TOT; 8922 IIA = 0; 8923 SUM_A = 0.0; 8924 for (G4int IINIMF = INMINMEM; IINIMF <= I 8925 { 8926 IIA = IZMEM + IINIMF; 8927 // SUM_A = SUM_A + DW[IZ][IIA]; 8928 SUM_A = SUM_A + DW[IZMEM][IIA]; 8929 if (XX < SUM_A) 8930 { 8931 fAIMF = G4double(IIA); 8932 goto imfs25; 8933 } 8934 } 8935 8936 imfs25: 8937 // CHECK POINT 1 8938 NIMF = fAIMF - fZIMF; 8939 8940 if ((ACN - ZCN - NIMF) <= 0.0 || (ZCN - f 8941 { 8942 std::cout << "IMF Partner unstable:" 8943 std::cout << "System: Acn,Zcn,NCN:" < 8944 std::cout << idnint(ACN) << ", " << i 8945 std::cout << "IMF: A,Z,N:" << std::en 8946 std::cout << idnint(fAIMF) << ", " << 8947 std::cout << "Partner: A,Z,N:" << std 8948 std::cout << idnint(ACN - fAIMF) << " 8949 << std::endl; 8950 std::cout << "----nmin,nmax" << INMIN 8951 std::cout << "----- warning: Zimf=" < 8952 std::cout << "----- look in subroutin 8953 std::cout << "ACN,ZCN,ZIMF,AIMF,temp, 8954 << TEMP << ", " << EE << ", 8955 std::cout << "-IZSTOP,IZIMFMAX:" << I 8956 std::cout << "----X,SUM_Z,SUMDW_TOT:" 8957 // for(int III_ZIMF=3;III_ZIMF<=IZIMF 8958 // std::cout << "-**Z,SDW:" << II 8959 // std::endl; 8960 8961 goto imfs10; 8962 } 8963 if (fZIMF >= ZCN || fAIMF >= ACN || fZIMF 8964 { 8965 std::cout << "----nmin,nmax" << INMIN 8966 std::cout << "----- warning: Zimf=" < 8967 std::cout << "----- look in subroutin 8968 std::cout << "ACN,ZCN,ZIMF,AIMF,temp, 8969 << TEMP << ", " << EE << ", 8970 std::cout << "-IZSTOP,IZIMFMAX:" << I 8971 std::cout << "----X,SUM_Z,SUMDW_TOT:" 8972 for (int III_ZIMF = 3; III_ZIMF <= IZ 8973 std::cout << "-**Z,SDW:" << III_Z 8974 8975 fZIMF = 3.0; // provisorisch AK 8976 fAIMF = 4.0; 8977 } 8978 8979 // Characteristics of selected IMF (AIMF, 8980 fSBIMF = SSBIMF[idnint(fZIMF)][idnint(fAI 8981 fBIMF = BBIMF[idnint(fZIMF)][idnint(fAIMF 8982 8983 if ((ZCN - fZIMF) <= 0.0) 8984 std::cout << "CHARGE_IMF ZIMF > ZCN" 8985 if ((ACN - fAIMF) <= 0.0) 8986 std::cout << "CHARGE_IMF AIMF > ACN" 8987 8988 BSHELL = ecld->ecgnz[idnint(ACN - ZCN - N 8989 ecld->vgsld[idnint(ACN - ZCN - N 8990 8991 DEFBET = ecld->beta2[idnint(ACN - ZCN - N 8992 EEDAUG = (EE - fSBIMF) * (ACN - fAIMF) / 8993 bsbkbc(ACN - fAIMF, ZCN - fZIMF, &BS, &BK 8994 densniv(ACN - fAIMF, ZCN - fZIMF, EEDAUG, 8995 8996 if (fSBIMF > EE) 8997 { 8998 std::cout << "----- warning: EE=" << 8999 << " S+Bimf=" << fSBIMF << 9000 std::cout << "----- look in subroutin 9001 std::cout << "IMF will be resampled" 9002 goto imfs10; 9003 } 9004 (*ZIMF) = fZIMF; 9005 (*AIMF) = fAIMF; 9006 (*SBIMF) = fSBIMF; 9007 (*BIMF) = fBIMF; 9008 (*TIMF) = fTIMF; 9009 return; 9010 } 9011 9012 void G4Abla::isostab_lim(G4int z, G4int* nmin 9013 { 9014 9015 G4int VISOSTAB[191][2] = { 9016 { 0, 7 }, { 1, 8 }, { 1, 9 }, 9017 { 6, 22 }, { 6, 28 }, { 7, 28 } 9018 { 11, 38 }, { 10, 42 }, { 13, 50 9019 { 19, 60 }, { 19, 62 }, { 21, 64 9020 { 27, 78 }, { 29, 82 }, { 33, 82 9021 { 40, 92 }, { 38, 96 }, { 42, 102 9022 { 49, 116 }, { 46, 118 }, { 52, 120 9023 { 60, 126 }, { 58, 130 }, { 62, 132 9024 { 70, 148 }, { 70, 152 }, { 73, 152 9025 { 82, 166 }, { 80, 166 }, { 85, 168 9026 { 96, 184 }, { 95, 184 }, { 99, 184 9027 { 115, 204 }, { 110, 206 }, { 119, 21 9028 }; 9029 9030 if (z < 0) 9031 { 9032 *nmin = 0; 9033 *nmax = 0; 9034 } 9035 else 9036 { 9037 if (z == 0) 9038 { 9039 *nmin = 1; 9040 *nmax = 1; 9041 // AK (Dez2010) - Just to avoid n 9042 } 9043 else 9044 { 9045 if (z > 95) 9046 { 9047 *nmin = 130; 9048 *nmax = 200; 9049 } 9050 else 9051 { 9052 *nmin = VISOSTAB[z - 1][0]; 9053 *nmax = VISOSTAB[z - 1][1]; 9054 } 9055 } 9056 } 9057 9058 return; 9059 } 9060 9061 void G4Abla::evap_postsaddle(G4double A, 9062 G4double Z, 9063 G4double EXC, 9064 G4double* E_scis 9065 G4double* A_scis 9066 G4double* Z_scis 9067 G4double& vx_eva 9068 G4double& vy_eva 9069 G4double& vz_eva 9070 G4int* NbLam0_pa 9071 { 9072 9073 // AK 2006 - Now in case of fission deex 9074 // is explicitly calculated. L 9075 // Nadtochy used to parametris 9076 9077 G4double af, zf, ee; 9078 G4double epsiln = 0.0, probp = 0.0, probd 9079 probimf = 0.0, problamb0 = 0.0, 9080 G4double sn = 0.0, sbp = 0.0, sbd = 0.0, 9081 sp = 0.0, sd = 0.0, st = 0.0, sh 9082 G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, 9083 bd = 0.0, bt = 0.0, bhe = 0.0, b 9084 9085 G4double xcv = 0., ycv = 0., zcv = 0., VX 9086 9087 G4double jprfn = 0.0, jprfp = 0.0, jprfd 9088 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = 9089 G4double rnd = 0.0; 9090 9091 G4int itest = 0, sortie = 0; 9092 G4double probf = 0.0; 9093 9094 G4double ef = 0.0; 9095 G4double pc = 0.0; 9096 9097 G4double time, tauf, tau0, a0, a1, emin, 9098 G4int inttype = 0, inum = 0, gammadecay = 9099 G4double pleva = 0.0; 9100 G4double pxeva = 0.0; 9101 G4double pyeva = 0.0; 9102 G4double pteva = 0.0; 9103 G4double etot = 0.0; 9104 G4int NbLam0 = (*NbLam0_par); 9105 9106 const G4double c = 29.9792458; 9107 const G4double mu = 931.494; 9108 const G4double mu2 = 931.494 * 931.494; 9109 9110 vx_eva = 0.; 9111 vy_eva = 0.; 9112 vz_eva = 0.; 9113 IEV_TAB_SSC = 0; 9114 9115 af = dint(A); 9116 zf = dint(Z); 9117 ee = EXC; 9118 9119 fiss->ifis = 0; 9120 opt->optimfallowed = 0; 9121 gammaemission = 0; 9122 // Initialsation 9123 time = 0.0; 9124 9125 // in sec 9126 tau0 = 1.0e-21; 9127 a0 = 0.66482503 - 3.4678935 * std::exp(-0 9128 a1 = 5.6846e-04 + 0.00574515 * std::exp(- 9129 tauf = (a0 + a1 * zf * zf / std::pow(af, 9130 // 9131 post10: 9132 direct(zf, 9133 af, 9134 ee, 9135 0., 9136 &probp, 9137 &probd, 9138 &probt, 9139 &probn, 9140 &probhe, 9141 &proba, 9142 &probg, 9143 &probimf, 9144 &probf, 9145 &problamb0, 9146 &ptotl, 9147 &sn, 9148 &sbp, 9149 &sbd, 9150 &sbt, 9151 &sbhe, 9152 &sba, 9153 &slamb0, 9154 &ecn, 9155 &ecp, 9156 &ecd, 9157 &ect, 9158 &eche, 9159 &eca, 9160 &ecg, 9161 &eclamb0, 9162 &bp, 9163 &bd, 9164 &bt, 9165 &bhe, 9166 &ba, 9167 &sp, 9168 &sd, 9169 &st, 9170 &she, 9171 &sa, 9172 &ef, 9173 &ts1, 9174 inttype, 9175 inum, 9176 itest, 9177 &sortie, 9178 &tcn, 9179 &jprfn, 9180 &jprfp, 9181 &jprfd, 9182 &jprft, 9183 &jprfhe, 9184 &jprfa, 9185 &jprflamb0, 9186 &tsum, 9187 NbLam0); //:::FIXME::: Call 9188 // 9189 // HERE THE FINAL STEPS OF THE EVAPORATIO 9190 // 9191 if (ptotl <= 0.) 9192 goto post100; 9193 9194 emin = dmin1(sba, sbhe, dmin1(sbt, sbhe, 9195 9196 if (emin > 1e30) 9197 std::cout << "ERROR AT THE EXIT OF EV 9198 9199 if (sortie == 1) 9200 { 9201 if (probn != 0.0) 9202 { 9203 amoins = 1.0; 9204 zmoins = 0.0; 9205 epsiln = sn + ecn; 9206 pc = std::sqrt(std::pow((1.0 + ec 9207 gammadecay = 0; 9208 flamb0decay = 0; 9209 } 9210 else if (probp != 0.0) 9211 { 9212 amoins = 1.0; 9213 zmoins = 1.0; 9214 epsiln = sp + ecp; 9215 pc = std::sqrt(std::pow((1.0 + ec 9216 gammadecay = 0; 9217 flamb0decay = 0; 9218 } 9219 else if (probd != 0.0) 9220 { 9221 amoins = 2.0; 9222 zmoins = 1.0; 9223 epsiln = sd + ecd; 9224 pc = std::sqrt(std::pow((1.0 + ec 9225 gammadecay = 0; 9226 flamb0decay = 0; 9227 } 9228 else if (probt != 0.0) 9229 { 9230 amoins = 3.0; 9231 zmoins = 1.0; 9232 epsiln = st + ect; 9233 pc = std::sqrt(std::pow((1.0 + ec 9234 gammadecay = 0; 9235 flamb0decay = 0; 9236 } 9237 else if (probhe != 0.0) 9238 { 9239 amoins = 3.0; 9240 zmoins = 2.0; 9241 epsiln = she + eche; 9242 pc = std::sqrt(std::pow((1.0 + ec 9243 gammadecay = 0; 9244 flamb0decay = 0; 9245 } 9246 else 9247 { 9248 if (proba != 0.0) 9249 { 9250 amoins = 4.0; 9251 zmoins = 2.0; 9252 epsiln = sa + eca; 9253 pc = std::sqrt(std::pow((1.0 9254 gammadecay = 0; 9255 flamb0decay = 0; 9256 } 9257 } 9258 goto post99; 9259 } 9260 9261 // IRNDM = IRNDM+1; 9262 // 9263 // HERE THE NORMAL EVAPORATION CASCADE ST 9264 // RANDOM NUMBER FOR THE EVAPORATION 9265 9266 // random number for the evaporation 9267 x = G4AblaRandom::flat() * ptotl; 9268 9269 itest = 0; 9270 if (x < proba) 9271 { 9272 // alpha evaporation 9273 amoins = 4.0; 9274 zmoins = 2.0; 9275 epsiln = sa + eca; 9276 pc = std::sqrt(std::pow((1.0 + eca / 9277 gammadecay = 0; 9278 flamb0decay = 0; 9279 } 9280 else if (x < proba + probhe) 9281 { 9282 // He3 evaporation 9283 amoins = 3.0; 9284 zmoins = 2.0; 9285 epsiln = she + eche; 9286 pc = std::sqrt(std::pow((1.0 + eche / 9287 gammadecay = 0; 9288 flamb0decay = 0; 9289 } 9290 else if (x < proba + probhe + probt) 9291 { 9292 // triton evaporation 9293 amoins = 3.0; 9294 zmoins = 1.0; 9295 epsiln = st + ect; 9296 pc = std::sqrt(std::pow((1.0 + ect / 9297 gammadecay = 0; 9298 flamb0decay = 0; 9299 } 9300 else if (x < proba + probhe + probt + pro 9301 { 9302 // deuteron evaporation 9303 amoins = 2.0; 9304 zmoins = 1.0; 9305 epsiln = sd + ecd; 9306 pc = std::sqrt(std::pow((1.0 + ecd / 9307 gammadecay = 0; 9308 flamb0decay = 0; 9309 } 9310 else if (x < proba + probhe + probt + pro 9311 { 9312 // proton evaporation 9313 amoins = 1.0; 9314 zmoins = 1.0; 9315 epsiln = sp + ecp; 9316 pc = std::sqrt(std::pow((1.0 + ecp / 9317 gammadecay = 0; 9318 flamb0decay = 0; 9319 } 9320 else if (x < proba + probhe + probt + pro 9321 { 9322 // neutron evaporation 9323 amoins = 1.0; 9324 zmoins = 0.0; 9325 epsiln = sn + ecn; 9326 pc = std::sqrt(std::pow((1.0 + ecn / 9327 gammadecay = 0; 9328 flamb0decay = 0; 9329 } 9330 else if (x < proba + probhe + probt + pro 9331 { 9332 // lambda0 evaporation 9333 amoins = 1.0; 9334 zmoins = 0.0; 9335 epsiln = slamb0 + eclamb0; 9336 pc = std::sqrt(std::pow((1.0 + (eclam 9337 opt->nblan0 = opt->nblan0 - 1; 9338 NbLam0 = NbLam0 - 1; 9339 gammadecay = 0; 9340 flamb0decay = 1; 9341 } 9342 else if (x < proba + probhe + probt + pro 9343 { 9344 // gamma evaporation 9345 amoins = 0.0; 9346 zmoins = 0.0; 9347 epsiln = ecg; 9348 pc = ecg; 9349 gammadecay = 1; 9350 flamb0decay = 0; 9351 if (probp == 0.0 && probn == 0.0 && p 9352 problamb0 == 0.0 && probimf == 0. 9353 { 9354 // ee = ee-epsiln; 9355 // if(ee<=0.01) ee = 0.010; 9356 goto post100; 9357 } 9358 } 9359 9360 // CALCULATION OF THE DAUGHTER NUCLEUS 9361 // 9362 post99: 9363 9364 if (gammadecay == 1 && ee <= 0.01 + epsil 9365 { 9366 epsiln = ee - 0.01; 9367 time = tauf + 1.; 9368 } 9369 9370 af = af - amoins; 9371 zf = zf - zmoins; 9372 ee = ee - epsiln; 9373 9374 if (ee <= 0.01) 9375 ee = 0.010; 9376 9377 if (af < 2.5) 9378 goto post100; 9379 9380 time = time + ts1; 9381 9382 // Determination of x,y,z components of m 9383 if (flamb0decay == 1) 9384 { 9385 EV_TAB_SSC[IEV_TAB_SSC][0] = 0.; 9386 EV_TAB_SSC[IEV_TAB_SSC][1] = -2.; 9387 EV_TAB_SSC[IEV_TAB_SSC][5] = 1.; 9388 } 9389 else 9390 { 9391 EV_TAB_SSC[IEV_TAB_SSC][0] = zmoins; 9392 EV_TAB_SSC[IEV_TAB_SSC][1] = amoins; 9393 EV_TAB_SSC[IEV_TAB_SSC][5] = 0.; 9394 } 9395 9396 rnd = G4AblaRandom::flat(); 9397 ctet1 = 2.0 * rnd - 1.0; 9398 stet1 = std::sqrt(1.0 - std::pow(ctet1, 2 9399 rnd = G4AblaRandom::flat(); 9400 phi1 = rnd * 2.0 * 3.141592654; // angle 9401 xcv = stet1 * std::cos(phi1); // x comp 9402 ycv = stet1 * std::sin(phi1); // y comp 9403 zcv = ctet1; // z comp 9404 // In the 9405 if (gammadecay == 0) 9406 { 9407 // Light particle 9408 G4double ETOT_LP = std::sqrt(pc * pc 9409 if (flamb0decay == 1) 9410 ETOT_LP = std::sqrt(pc * pc + 111 9411 EV_TAB_SSC[IEV_TAB_SSC][2] = c * pc * 9412 EV_TAB_SSC[IEV_TAB_SSC][3] = c * pc * 9413 EV_TAB_SSC[IEV_TAB_SSC][4] = c * pc * 9414 } 9415 else 9416 { 9417 // gamma ray 9418 EV_TAB_SSC[IEV_TAB_SSC][2] = pc * xcv 9419 EV_TAB_SSC[IEV_TAB_SSC][3] = pc * ycv 9420 EV_TAB_SSC[IEV_TAB_SSC][4] = pc * zcv 9421 } 9422 lorentz_boost(vx_eva, 9423 vy_eva, 9424 vz_eva, 9425 EV_TAB_SSC[IEV_TAB_SSC][2], 9426 EV_TAB_SSC[IEV_TAB_SSC][3], 9427 EV_TAB_SSC[IEV_TAB_SSC][4], 9428 &VXOUT, 9429 &VYOUT, 9430 &VZOUT); 9431 EV_TAB_SSC[IEV_TAB_SSC][2] = VXOUT; 9432 EV_TAB_SSC[IEV_TAB_SSC][3] = VYOUT; 9433 EV_TAB_SSC[IEV_TAB_SSC][4] = VZOUT; 9434 9435 // Heavy residue 9436 if (gammadecay == 0) 9437 { 9438 G4double v2 = std::pow(EV_TAB_SSC[IEV 9439 std::pow(EV_TAB_SSC[IEV 9440 G4double gamma = 1.0 / std::sqrt(1.0 9441 G4double etot_lp = amoins * mu * gamm 9442 pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SS 9443 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SS 9444 pleva = pleva - EV_TAB_SSC[IEV_TAB_SS 9445 } 9446 else 9447 { 9448 // in case of gammas, EV_TEMP contain 9449 pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SS 9450 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SS 9451 pleva = pleva - EV_TAB_SSC[IEV_TAB_SS 9452 } 9453 pteva = std::sqrt(pxeva * pxeva + pyeva * 9454 // To be checked: 9455 etot = std::sqrt(pleva * pleva + pteva * 9456 vx_eva = c * pxeva / etot; // recoil velo 9457 vy_eva = c * pyeva / etot; 9458 vz_eva = c * pleva / etot; 9459 9460 IEV_TAB_SSC = IEV_TAB_SSC + 1; 9461 9462 if (time < tauf) 9463 goto post10; 9464 // 9465 post100: 9466 // 9467 *A_scission = af; 9468 *Z_scission = zf; 9469 *E_scission_post = ee; 9470 *NbLam0_par = NbLam0; 9471 return; 9472 } 9473 9474 G4double G4Abla::getdeltabinding(G4double A, 9475 { 9476 if (A < 1.) 9477 return (1. * H) / A * (10.68 * A - 21 9478 return (1. * H) / A * (10.68 * A - 21.27 9479 } 9480 9481 G4double G4Abla::gethyperseparation(G4double 9482 { 9483 if (A < 1.) 9484 return 1.e38; 9485 // For light nuclei we take experimental 9486 // Journal of Physics G, Nucl Part Phys 3 9487 if (ny == 1) 9488 { 9489 if (Z == 1 && A == 4) 9490 return 2.04; 9491 else if (Z == 2 && A == 4) 9492 return 2.39; 9493 else if (Z == 2 && A == 5) 9494 return 3.12; 9495 else if (Z == 2 && A == 6) 9496 return 4.18; 9497 else if (Z == 2 && A == 7) 9498 return 5.23; 9499 else if (Z == 2 && A == 8) 9500 return 7.16; 9501 else if (Z == 3 && A == 6) 9502 return 4.50; 9503 else if (Z == 3 && A == 7) 9504 return 5.58; 9505 else if (Z == 3 && A == 8) 9506 return 6.80; 9507 else if (Z == 3 && A == 9) 9508 return 8.50; 9509 else if (Z == 4 && A == 7) 9510 return 5.16; 9511 else if (Z == 4 && A == 8) 9512 return 6.84; 9513 else if (Z == 4 && A == 9) 9514 return 6.71; 9515 else if (Z == 4 && A == 10) 9516 return 9.11; 9517 else if (Z == 5 && A == 9) 9518 return 8.29; 9519 else if (Z == 5 && A == 10) 9520 return 9.01; 9521 else if (Z == 5 && A == 11) 9522 return 10.29; 9523 else if (Z == 5 && A == 12) 9524 return 11.43; 9525 else if (Z == 6 && A == 12) 9526 return 10.95; 9527 else if (Z == 6 && A == 13) 9528 return 11.81; 9529 else if (Z == 6 && A == 14) 9530 return 12.50; 9531 else if (Z == 7 && A == 14) 9532 return 12.17; 9533 else if (Z == 7 && A == 15) 9534 return 13.59; 9535 else if (Z == 8 && A == 16) 9536 return 12.50; 9537 else if (Z == 8 && A == 17) 9538 return 13.59; 9539 else if (Z == 14 && A == 28) 9540 return 16.0; 9541 else if (Z == 39 && A == 89) 9542 return 22.1; 9543 else if (Z == 57 && A == 139) 9544 return 23.8; 9545 else if (Z == 82 && A == 208) 9546 return 26.5; 9547 } // ny==1 9548 // For other nuclei we take Bethe-Weizsac 9549 return gethyperbinding(A, Z, ny) - gethyp 9550 } 9551 9552 G4double G4Abla::gethyperbinding(G4double A, 9553 { 9554 // 9555 // Bethe-Weizsacker mass formula 9556 // Journal of Physics G, Nucl Part Phys 3 9557 // 9558 if (A < 2 || Z < 2) 9559 return 0.; 9560 G4double N = A - Z - 1. * ny; 9561 G4double be = 0., my = 1115.683, av = 15. 9562 if (mod(N, 2) == 1 && mod(Z, 2) == 1) 9563 D = -12. / std::sqrt(A); 9564 if (mod(N, 2) == 0 && mod(Z, 2) == 0) 9565 D = 12. / std::sqrt(A); 9566 // 9567 G4double deltanew = (1. - std::exp(-1. * 9568 // 9569 be = av * A - as * std::pow(A, 2. / 3.) - 9570 asym * (N - Z) * (N - Z) / ((1. + st 9571 ny * (0.0335 * my - 26.7 - 48.7 / st 9572 return be; 9573 } 9574 9575 void G4Abla::unbound(G4double SN, 9576 G4double SP, 9577 G4double SD, 9578 G4double ST, 9579 G4double SHE, 9580 G4double SA, 9581 G4double BP, 9582 G4double BD, 9583 G4double BT, 9584 G4double BHE, 9585 G4double BA, 9586 G4double* PROBF, 9587 G4double* PROBN, 9588 G4double* PROBP, 9589 G4double* PROBD, 9590 G4double* PROBT, 9591 G4double* PROBHE, 9592 G4double* PROBA, 9593 G4double* PROBIMF, 9594 G4double* PROBG, 9595 G4double* ECN, 9596 G4double* ECP, 9597 G4double* ECD, 9598 G4double* ECT, 9599 G4double* ECHE, 9600 G4double* ECA) 9601 { 9602 G4double SBP = SP + BP; 9603 G4double SBD = SD + BD; 9604 G4double SBT = ST + BT; 9605 G4double SBHE = SHE + BHE; 9606 G4double SBA = SA + BA; 9607 9608 G4double e = dmin1(SBP, SBD, SBT); 9609 e = dmin1(SBHE, SN, e); 9610 e = dmin1(SBHE, SBA, e); 9611 // 9612 if (SN == e) 9613 { 9614 *ECN = (-1.0) * SN; 9615 *ECP = 0.0; 9616 *ECD = 0.0; 9617 *ECT = 0.0; 9618 *ECHE = 0.0; 9619 *ECA = 0.0; 9620 *PROBN = 1.0; 9621 *PROBP = 0.0; 9622 *PROBD = 0.0; 9623 *PROBT = 0.0; 9624 *PROBHE = 0.0; 9625 *PROBA = 0.0; 9626 *PROBIMF = 0.0; 9627 *PROBF = 0.0; 9628 *PROBG = 0.0; 9629 } 9630 else if (SBP == e) 9631 { 9632 *ECN = 0.0; 9633 *ECP = (-1.0) * SP + BP; 9634 *ECD = 0.0; 9635 *ECT = 0.0; 9636 *ECHE = 0.0; 9637 *ECA = 0.0; 9638 *PROBN = 0.0; 9639 *PROBP = 1.0; 9640 *PROBD = 0.0; 9641 *PROBT = 0.0; 9642 *PROBHE = 0.0; 9643 *PROBA = 0.0; 9644 *PROBIMF = 0.0; 9645 *PROBF = 0.0; 9646 *PROBG = 0.0; 9647 } 9648 else if (SBD == e) 9649 { 9650 *ECN = 0.0; 9651 *ECD = (-1.0) * SD + BD; 9652 *ECP = 0.0; 9653 *ECT = 0.0; 9654 *ECHE = 0.0; 9655 *ECA = 0.0; 9656 *PROBN = 0.0; 9657 *PROBP = 0.0; 9658 *PROBD = 1.0; 9659 *PROBT = 0.0; 9660 *PROBHE = 0.0; 9661 *PROBA = 0.0; 9662 *PROBIMF = 0.0; 9663 *PROBF = 0.0; 9664 *PROBG = 0.0; 9665 } 9666 else if (SBT == e) 9667 { 9668 *ECN = 0.0; 9669 *ECT = (-1.0) * ST + BT; 9670 *ECD = 0.0; 9671 *ECP = 0.0; 9672 *ECHE = 0.0; 9673 *ECA = 0.0; 9674 *PROBN = 0.0; 9675 *PROBP = 0.0; 9676 *PROBD = 0.0; 9677 *PROBT = 1.0; 9678 *PROBHE = 0.0; 9679 *PROBA = 0.0; 9680 *PROBIMF = 0.0; 9681 *PROBF = 0.0; 9682 *PROBG = 0.0; 9683 } 9684 else if (SBHE == e) 9685 { 9686 *ECN = 0.0; 9687 *ECHE = (-1.0) * SHE + BHE; 9688 *ECD = 0.0; 9689 *ECT = 0.0; 9690 *ECP = 0.0; 9691 *ECA = 0.0; 9692 *PROBN = 0.0; 9693 *PROBP = 0.0; 9694 *PROBD = 0.0; 9695 *PROBT = 0.0; 9696 *PROBHE = 1.0; 9697 *PROBA = 0.0; 9698 *PROBIMF = 0.0; 9699 *PROBF = 0.0; 9700 *PROBG = 0.0; 9701 } 9702 else 9703 { 9704 if (SBA == e) 9705 { 9706 *ECN = 0.0; 9707 *ECA = (-1.0) * SA + BA; 9708 *ECD = 0.0; 9709 *ECT = 0.0; 9710 *ECHE = 0.0; 9711 *ECP = 0.0; 9712 *PROBN = 0.0; 9713 *PROBP = 0.0; 9714 *PROBD = 0.0; 9715 *PROBT = 0.0; 9716 *PROBHE = 0.0; 9717 *PROBA = 1.0; 9718 *PROBIMF = 0.0; 9719 *PROBF = 0.0; 9720 *PROBG = 0.0; 9721 } 9722 } 9723 9724 return; 9725 } 9726 9727 void G4Abla::fissionDistri(G4double& A, 9728 G4double& Z, 9729 G4double& E, 9730 G4double& a1, 9731 G4double& z1, 9732 G4double& e1, 9733 G4double& v1, 9734 G4double& a2, 9735 G4double& z2, 9736 G4double& e2, 9737 G4double& v2, 9738 G4double& vx_eva_s 9739 G4double& vy_eva_s 9740 G4double& vz_eva_s 9741 G4int* NbLam0_par) 9742 { 9743 9744 /* 9745 Last update: 9746 9747 21/01/17 - J.L.R.S. - Implementation of 9748 9749 9750 Authors: K.-H. Schmidt, A. Kelic, M. V. 9751 J.L.Rodriguez-Sanchez(1995 - 2 9752 9753 On input: A, Z, E (mass, atomic number 9754 before fission) 9755 On output: Ai, Zi, Ei (mass, atomic num 9756 fragment 1 and 2 9757 9758 */ 9759 /* This program calculates isotopic distr 9760 /* with a semiempirical model 9761 /* The width and eventually a shift in N/ 9762 /* following rules: 9763 /* 9764 /* The line N/Z following UCD has an angl 9765 /* to the horizontal axis on a chart of n 9766 /* (For 238U the angle is 32.2 deg.) 9767 /* 9768 /* The following relations hold: (from 9769 c 9770 c sigma(N) (A=const) = sigma(Z) (A=con 9771 c sigma(A) (N=const) = sigma(Z) (N=con 9772 c sigma(A) (Z=const) = sigma(N) (Z=con 9773 c 9774 c From this we get: 9775 c sigma(Z) (N=const) * N = sigma(N) (Z 9776 c sigma(A) (Z=const) = sigma(Z) (A=con 9777 c sigma(N) (Z=const) = sigma(Z) (A=con 9778 c Z*sigma(N) (Z=const) = N*sigma(Z) (N 9779 // 9780 9781 /* Model parameters: 9782 C These parameters have been adjusted 9783 c For the fission of another compound 9784 c necessary to slightly adjust some p 9785 c The most important ones are 9786 C Delta_U1_shell_max and 9787 c Delta_u2_shell. 9788 */ 9789 G4double Nheavy1_in; // 'position of she 9790 Nheavy1_in = 83.0; 9791 9792 G4double Zheavy1_in; // 'position of she 9793 Zheavy1_in = 50.0; 9794 9795 G4double Nheavy2; // 'position of heavy 9796 Nheavy2 = 89.0; 9797 9798 G4double Delta_U1_shell_max; // 'Shell e 9799 Delta_U1_shell_max = -2.45; 9800 9801 G4double U1NZ_SLOPE; // Reduction of shel 9802 U1NZ_SLOPE = 0.2; 9803 9804 G4double Delta_U2_shell; // 'Shell effec 9805 Delta_U2_shell = -2.45; 9806 9807 G4double X_s2s; // 'Ratio (C_sad/C_scis) 9808 X_s2s = 0.8; 9809 9810 G4double hbom1, hbom2, hbom3; // 'Curvat 9811 hbom1 = 0.2; // hbom1 is 9812 hbom2 = 0.2; // hbom2 is 9813 hbom3 = 0.2; // hbom3 is 9814 9815 G4double Fwidth_asymm1, Fwidth_asymm2, Fw 9816 // 'Factors for widths of distr. 9817 Fwidth_asymm1 = 0.65; 9818 Fwidth_asymm2 = 0.65; 9819 Fwidth_symm = 1.16; 9820 9821 G4double xLevdens; // 'Parameter x: a = A 9822 xLevdens = 10.75; 9823 // The value of 1/0.093 = 10.75 is co 9824 // systematics of the mass widths of 9825 9826 G4double FGAMMA; // 'Factor to gamma' 9827 FGAMMA = 1.; // Theoretical expectati 9828 // Additional factor to attenuation c 9829 // with increasing excitation energy 9830 9831 G4double FGAMMA1; // 'Factor to gamma_hea 9832 FGAMMA1 = 2.; 9833 // Adjusted to reduce the weight of S 9834 // excitation energies, as required b 9835 9836 G4double FREDSHELL; 9837 FREDSHELL = 0.; 9838 // Adjusted to the reduced attenuatio 9839 // If FGAMMA is modified, 9840 // FGAMMA * FREADSHELL should remain 9841 // the attenuation of the shell effec 9842 // pairing energy ECRIT unchanged, wh 9843 // adjusted to the mass yields of Viv 9844 // energy range. A high value of FGAM 9845 // attenuation of shell effects above 9846 9847 G4double Ecrit; 9848 Ecrit = 5.; 9849 // The value of ECRIT determines the 9850 // decrease of the shell effect below 9851 // decrease above the superfluid rang 9852 const G4double d = 2.0; // 'Surface dista 9853 // d = 2.0; 9854 // Charge pola 9855 G4double cpol1; // Charge polaris 9856 cpol1 = 0.35; // calculated int 9857 G4double cpol2; // Charge polaris 9858 cpol2 = 0.; // calculated int 9859 G4double Friction_factor; 9860 Friction_factor = 1.0; 9861 G4double Nheavy1; // position 9862 G4double Delta_U1, Delta_U2; // used shel 9863 G4double cN_asymm1_shell, cN_asymm2_shell 9864 G4double gamma, gamma_heavy1, gamma_heavy 9865 G4double E_saddle_scission; 9866 G4double Ysymm = 0.; 9867 G4double Yasymm1 = 0.; 9868 G4double Yasymm2 = 0.; 9869 G4double Nheavy1_eff; 9870 G4double Nheavy2_eff; 9871 G4double eexc1_saddle; 9872 G4double eexc2_saddle; 9873 G4double EEXC_MAX; 9874 G4double r_e_o; 9875 G4double cN_symm; 9876 G4double CZ; 9877 G4double Nheavy2_NZ; 9878 G4double N; 9879 G4double Aheavy1, Aheavy2; 9880 G4double Sasymm1 = 0., Sasymm2 = 0., Ssym 9881 G4double Ssymm_mode1, Ssymm_mode2; 9882 G4double wNasymm1_saddle, wNasymm2_saddle 9883 G4double wNasymm2_scission, wNsymm_scissi 9884 G4double wNasymm1, wNasymm2, wNsymm; 9885 G4int imode; 9886 G4double rmode; 9887 G4double ZA1width; 9888 G4double N1r, N2r, A1r, N1, N2; 9889 G4double Zsymm, Nsymm; 9890 G4double N1mean, N1width; 9891 G4double dUeff; 9892 /* effective shell effect at lowest barri 9893 G4double Eld; 9894 /* Excitation energy with respect to ld b 9895 G4double re1, re2, re3; 9896 G4double eps1, eps2; 9897 G4double Z1UCD, Z2UCD; 9898 G4double beta = 0., beta1 = 0., beta2 = 0 9899 // double betacomplement; 9900 G4double DN1_POL; 9901 /* shift of most probable neutron number 9902 according to polarization */ 9903 G4int i_help; 9904 G4double A_levdens; 9905 /* level-density parameter */ 9906 // double A_levdens_light1,A_levdens_ligh 9907 G4double A_levdens_heavy1, A_levdens_heav 9908 9909 G4double R0 = 1.16; 9910 9911 G4double epsilon_1_saddle, epsilon0_1_sad 9912 G4double epsilon_2_saddle, epsilon0_2_sad 9913 G4double epsilon_1_scission; //,epsilon0_ 9914 G4double epsilon_2_scission; //,epsilon0_ 9915 G4double epsilon_symm_scission; 9916 /* modified energy */ 9917 G4double E_eff1_saddle, E_eff2_saddle; 9918 G4double Epot0_mode1_saddle, Epot0_mode2_ 9919 G4double Epot_mode1_saddle, Epot_mode2_sa 9920 G4double E_defo, E_defo1, E_defo2, E_scis 9921 G4double E_asym; 9922 G4double E1exc = 0., E2exc = 0.; 9923 G4double E1exc_sigma, E2exc_sigma; 9924 G4double TKER; 9925 G4double EkinR1, EkinR2; 9926 G4double MassCurv_scis, MassCurv_sadd; 9927 G4double cN_symm_sadd; 9928 G4double Nheavy1_shell, Nheavy2_shell; 9929 G4double wNasymm1_scission; 9930 G4double Aheavy1_eff, Aheavy2_eff; 9931 G4double Z1rr, Z1r; 9932 G4double E_HELP; 9933 G4double Z_scission, N_scission, A_scissi 9934 G4double Z2_over_A_eff; 9935 G4double beta1gs = 0., beta2gs = 0., beta 9936 G4double sigZmin; 9937 G4double DSN132, Delta_U1_shell, E_eff0_s 9938 G4int NbLam0 = (*NbLam0_par); 9939 // 9940 sigZmin = 0.5; 9941 N = A - Z; /* neutron number of the fiss 9942 // 9943 cN_asymm1_shell = 0.700 * N / Z; 9944 cN_asymm2_shell = 0.040 * N / Z; 9945 9946 //*************************************** 9947 9948 DSN132 = Nheavy1_in - N / Z * Zheavy1_in; 9949 Aheavy1 = Nheavy1_in + Zheavy1_in + 0.340 9950 /* Neutron number of valley Standard 1 */ 9951 /* It is assumed that the 82-neutron shel 9952 c the 50-proton shell effect. There 9953 c the fissioning nucleus from the N 9954 c change the position of the combin 9955 c deficient fissioning nuclei, the 9956 c versa. */ 9957 9958 Delta_U1_shell = Delta_U1_shell_max + U1N 9959 Delta_U1_shell = min(0., Delta_U1_shell); 9960 /* Empirical reduction of shell effect wi 9961 /* Fits (239U,n)f and 226Th e.-m.-induced 9962 9963 Nheavy1 = N / A * Aheavy1; /* UCD */ 9964 Aheavy2 = Nheavy2 * A / N; 9965 9966 Zsymm = Z / 2.0; /* proton number in symm 9967 Nsymm = N / 2.0; 9968 A_levdens = A / xLevdens; 9969 gamma = A_levdens / (0.40 * std::pow(A, 1 9970 A_levdens_heavy1 = Aheavy1 / xLevdens; 9971 gamma_heavy1 = A_levdens_heavy1 / (0.40 * 9972 A_levdens_heavy2 = Aheavy2 / xLevdens; 9973 gamma_heavy2 = A_levdens_heavy2 / (0.40 * 9974 9975 // Energy dissipated from saddle to s 9976 // F. Rejmund et al., Nucl. Phys. A 6 9977 E_saddle_scission = (-24. + 0.02227 * Z * 9978 E_saddle_scission = max(0.0, E_saddle_sci 9979 9980 // Fit to experimental result on curv 9981 // Parametrization of T. Enqvist acco 9982 // MassCurv taken at scission. */ 9983 9984 Z2_over_A_eff = Z * Z / A; 9985 9986 if (Z2_over_A_eff < 34.0) 9987 MassCurv_scis = std::pow(10., -1.0933 9988 else 9989 MassCurv_scis = std::pow(10., 3.05353 9990 9991 // to do: 9992 // fix the X with the channel intensi 9993 // replace then (all) cN_symm by cN_s 9994 MassCurv_sadd = X_s2s * MassCurv_scis; 9995 9996 cN_symm = 8.0 / std::pow(N, 2.) * MassCur 9997 cN_symm_sadd = 8.0 / std::pow(N, 2.) * Ma 9998 9999 Nheavy1_shell = Nheavy1; 10000 10001 if (E < 100.0) 10002 Nheavy1_eff = (cN_symm_sadd * Nsymm 10003 cN_asymm1_shell * Uwa 10004 (cN_symm_sadd + cN_asy 10005 else 10006 Nheavy1_eff = (cN_symm_sadd * Nsymm 10007 10008 /* Position of Standard II defined by ne 10009 Nheavy2_NZ = Nheavy2; 10010 Nheavy2_shell = Nheavy2_NZ; 10011 if (E < 100.) 10012 Nheavy2_eff = (cN_symm_sadd * Nsymm 10013 cN_asymm2_shell * Uwa 10014 (cN_symm_sadd + cN_asy 10015 else 10016 Nheavy2_eff = (cN_symm_sadd * Nsymm 10017 10018 Delta_U1 = Delta_U1_shell + (Nheavy1_she 10019 cN_asymm 10020 Delta_U1 = min(Delta_U1, 0.0); 10021 Delta_U2 = Delta_U2_shell + (Nheavy2_she 10022 cN_asymm 10023 Delta_U2 = min(Delta_U2, 0.0); 10024 10025 // liquid drop energies at the centre 10026 // with respect to liquid drop at sym 10027 Epot0_mode1_saddle = (Nheavy1_eff - Nsym 10028 Epot0_mode2_saddle = (Nheavy2_eff - Nsym 10029 Epot0_symm_saddle = 0.0; 10030 10031 // energies including shell effects a 10032 // shell effects with respect to liqu 10033 Epot_mode1_saddle = Epot0_mode1_saddle + 10034 Epot_mode2_saddle = Epot0_mode2_saddle + 10035 Epot_symm_saddle = Epot0_symm_saddle; 10036 10037 // minimum of potential with respect 10038 dUeff = min(Epot_mode1_saddle, Epot_mode 10039 dUeff = min(dUeff, Epot_symm_saddle); 10040 dUeff = dUeff - Epot_symm_saddle; 10041 10042 Eld = E + dUeff; 10043 // E = energy above lowest effecti 10044 // Eld = energy above liquid-drop ba 10045 // Due to this treatment the energy 10046 // energy above the lowest saddle. 10047 10048 // excitation energies at saddle mode 10049 epsilon0_1_saddle = Eld - Epot0_mode1_sa 10050 epsilon0_2_saddle = Eld - Epot0_mode2_sa 10051 10052 // excitation energies at saddle mode 10053 epsilon_1_saddle = Eld - Epot_mode1_sadd 10054 epsilon_2_saddle = Eld - Epot_mode2_sadd 10055 10056 epsilon_symm_saddle = Eld - Epot_symm_sa 10057 // epsilon_symm_saddle = Eld - dUeff; 10058 10059 eexc1_saddle = epsilon_1_saddle; 10060 eexc2_saddle = epsilon_2_saddle; 10061 10062 // EEXC_MAX is energy above the lowes 10063 EEXC_MAX = max(eexc1_saddle, eexc2_saddl 10064 EEXC_MAX = max(EEXC_MAX, Eld); 10065 10066 // excitation energy at scission */ 10067 epsilon_1_scission = Eld + E_saddle_scis 10068 epsilon_2_scission = Eld + E_saddle_scis 10069 10070 // excitation energy of symmetric fra 10071 epsilon_symm_scission = Eld + E_saddle_s 10072 10073 // calculate widhts at the saddle 10074 E_eff1_saddle = 10075 epsilon0_1_saddle - Delta_U1 * Uwash 10076 10077 if (E_eff1_saddle < A_levdens * hbom1 * 10078 E_eff1_saddle = A_levdens * hbom1 * 10079 10080 wNasymm1_saddle = std::sqrt( 10081 0.50 * std::sqrt(1.0 / A_levdens * E 10082 (cN_asymm1_shell * Uwash(epsilon_1_s 10083 10084 E_eff2_saddle = 10085 epsilon0_2_saddle - Delta_U2 * Uwash 10086 10087 if (E_eff2_saddle < A_levdens * hbom2 * 10088 E_eff2_saddle = A_levdens * hbom2 * 10089 10090 wNasymm2_saddle = std::sqrt( 10091 0.50 * std::sqrt(1.0 / A_levdens * E 10092 (cN_asymm2_shell * Uwash(epsilon_2_s 10093 10094 E_eff0_saddle = epsilon_symm_saddle; 10095 if (E_eff0_saddle < A_levdens * hbom3 * 10096 E_eff0_saddle = A_levdens * hbom3 * 10097 10098 wNsymm_saddle = std::sqrt(0.50 * std::sq 10099 10100 if (epsilon_symm_scission > 0.0) 10101 { 10102 E_HELP = max(E_saddle_scission, epsi 10103 wNsymm_scission = std::sqrt(0.50 * s 10104 } 10105 else 10106 { 10107 wNsymm_scission = std::sqrt(0.50 * s 10108 } 10109 10110 // Calculate widhts at the scission p 10111 // fits of ref. Beizin 1991 (Plots by 10112 10113 if (E_saddle_scission == 0.0) 10114 { 10115 wNasymm1_scission = wNasymm1_saddle; 10116 wNasymm2_scission = wNasymm2_saddle; 10117 } 10118 else 10119 { 10120 if (Nheavy1_eff > 75.0) 10121 { 10122 wNasymm1_scission = std::sqrt(21 10123 wNasymm2_scission = max(12.8 - 1 10124 } 10125 else 10126 { 10127 wNasymm1_scission = wNasymm1_sad 10128 wNasymm2_scission = wNasymm2_sad 10129 } 10130 } 10131 10132 wNasymm1_scission = max(wNasymm1_scissio 10133 wNasymm2_scission = max(wNasymm2_scissio 10134 10135 wNasymm1 = wNasymm1_scission * Fwidth_as 10136 wNasymm2 = wNasymm2_scission * Fwidth_as 10137 wNsymm = wNsymm_scission * Fwidth_symm; 10138 10139 // mass and charge of fragments usin 10140 Aheavy1_eff = Nheavy1_eff * A / N; 10141 Aheavy2_eff = Nheavy2_eff * A / N; 10142 10143 A_levdens_heavy1 = Aheavy1_eff / xLevden 10144 A_levdens_heavy2 = Aheavy2_eff / xLevden 10145 gamma_heavy1 = A_levdens_heavy1 / (0.40 10146 gamma_heavy2 = A_levdens_heavy2 / (0.40 10147 10148 if (epsilon_symm_saddle < A_levdens * hb 10149 Ssymm = 2.0 * std::sqrt(A_levdens * 10150 (epsilon_symm_saddle - A_lev 10151 else 10152 Ssymm = 2.0 * std::sqrt(A_levdens * 10153 10154 Ysymm = 1.0; 10155 10156 if (epsilon0_1_saddle < A_levdens * hbom 10157 Ssymm_mode1 = 2.0 * std::sqrt(A_levd 10158 (epsilon0_1_saddle - A 10159 else 10160 Ssymm_mode1 = 2.0 * std::sqrt(A_levd 10161 10162 if (epsilon0_2_saddle < A_levdens * hbom 10163 Ssymm_mode2 = 2.0 * std::sqrt(A_levd 10164 (epsilon0_2_saddle - A 10165 else 10166 Ssymm_mode2 = 2.0 * std::sqrt(A_levd 10167 10168 if (epsilon0_1_saddle - Delta_U1 * Uwash 10169 A_levdens * hbom1 * hbom1) 10170 Sasymm1 = 10171 2.0 * std::sqrt(A_levdens * A_le 10172 (epsilon0_1_saddle - Delta_U1 * 10173 A_levdens * hbom1 * hbom1) / 10174 hbom1; 10175 else 10176 Sasymm1 = 2.0 * std::sqrt(A_levdens 10177 (epsilon0_ 10178 Delta_U1 10179 10180 if (epsilon0_2_saddle - Delta_U2 * Uwash 10181 A_levdens * hbom2 * hbom2) 10182 Sasymm2 = 10183 2.0 * std::sqrt(A_levdens * A_le 10184 (epsilon0_1_saddle - Delta_U1 * 10185 A_levdens * hbom2 * hbom2) / 10186 hbom2; 10187 else 10188 Sasymm2 = 2.0 * std::sqrt(A_levdens 10189 (epsilon0_ 10190 Delta_U2 10191 10192 Yasymm1 = (std::exp(Sasymm1 - Ssymm) - s 10193 10194 Yasymm2 = (std::exp(Sasymm2 - Ssymm) - s 10195 10196 Ysum = Ysymm + Yasymm1 + Yasymm2; /* nor 10197 10198 if (Ysum > 0.00) 10199 { 10200 Ysymm = Ysymm / Ysum; 10201 Yasymm1 = Yasymm1 / Ysum; 10202 Yasymm2 = Yasymm2 / Ysum; 10203 Yasymm = Yasymm1 + Yasymm2; 10204 } 10205 else 10206 { 10207 Ysymm = 0.0; 10208 Yasymm1 = 0.0; 10209 Yasymm2 = 0.0; 10210 // search minimum threshold an 10211 if ((epsilon_symm_saddle < epsilon_1 10212 Ysymm = 1.0; 10213 else if (epsilon_1_saddle < epsilon_ 10214 Yasymm1 = 1.0; 10215 else 10216 Yasymm2 = 1.0; 10217 } 10218 // even-odd effect 10219 // Parametrization from Rejmund et al. 10220 if (mod(Z, 2.0) == 0) 10221 r_e_o = std::pow(10.0, -0.0170 * (E_ 10222 else 10223 r_e_o = 0.0; 10224 10225 /* --------------------------------- 10226 c selecting the fission mode using t 10227 c ---------------------------------- 10228 c random decision: symmetric or asym 10229 c IMODE = 1 means asymmetric fission 10230 c IMODE = 2 means asymmetric fission 10231 c IMODE = 3 means symmetric fission 10232 c testcase: 238U, E*= 6 MeV : 646 10233 c 12779 10234 c 31991 10235 c E*=12 MeV : 15340 10236 10237 fiss321: // rmode = DBLE(HAZ(k)) 10238 rmode = G4AblaRandom::flat(); 10239 if (rmode < Yasymm1) 10240 imode = 1; 10241 else if ((rmode > Yasymm1) && (rmode < Y 10242 imode = 2; 10243 else 10244 imode = 3; 10245 10246 // determine parameters of the neutro 10247 // at scission 10248 10249 if (imode == 1) 10250 { 10251 N1mean = Nheavy1_eff; 10252 N1width = wNasymm1; 10253 } 10254 else 10255 { 10256 if (imode == 2) 10257 { 10258 N1mean = Nheavy2_eff; 10259 N1width = wNasymm2; 10260 } 10261 else 10262 { 10263 // if( imode == 3 ) then 10264 N1mean = Nsymm; 10265 N1width = wNsymm; 10266 } 10267 } 10268 10269 // N2mean needed by CZ below 10270 // N2mean = N - N1mean; 10271 10272 // fission mode found, then the dete 10273 // neutron numbers N1 and N2 at scis 10274 N1r = 1.0; 10275 N2r = 1.0; 10276 while (N1r < 5.0 || N2r < 5.0) 10277 { 10278 // N1r = DBLE(GaussHaz(k,sngl(N1mea 10279 // N1r = N1mean+G4AblaRandom::gaus(N 10280 N1r = gausshaz(0, N1mean, N1width); 10281 N2r = N - N1r; 10282 } 10283 10284 // --------------------------------- 10285 // first approximation of fission fr 10286 // --------------------------------- 10287 Z1UCD = Z / N * N1r; 10288 Z2UCD = Z / N * N2r; 10289 A1r = A / N * N1r; 10290 // 10291 // -------------------------- 10292 // deformations: starting ... 10293 // -------------------------- */ 10294 if (imode == 1) 10295 { 10296 // --- N = 82 */ 10297 E_scission_pre = max(epsilon_1_sciss 10298 // ! Eexc at scission, neutron eva 10299 // considered */ 10300 if (N1mean > N * 0.50) 10301 { 10302 beta1 = 0.0; /* 1. fragment i 10303 beta2 = 0.55; /* 2. fragment i 10304 } 10305 else 10306 { 10307 beta1 = 0.55; /* 1. fragment is 10308 beta2 = 0.00; /* 2. fragment is 10309 } 10310 } 10311 if (imode == 2) 10312 { 10313 // --- N appr. 86 */ 10314 E_scission_pre = max(epsilon_2_sciss 10315 if (N1mean > N * 0.50) 10316 { 10317 beta1 = (N1r - 92.0) * 0.030 + 0 10318 10319 beta1gs = ecld->beta2[idint(N1r) 10320 beta2gs = ecld->beta2[idint(N2r) 10321 10322 beta1 = max(beta1, beta1gs); 10323 beta2 = 1.0 - beta1; 10324 beta2 = max(beta2, beta2gs); 10325 } 10326 else 10327 { 10328 10329 beta1gs = ecld->beta2[idint(N1r) 10330 beta2gs = ecld->beta2[idint(N2r) 10331 10332 beta2 = (N2r - 92.0) * 0.030 + 0 10333 beta2 = max(beta2, beta2gs); 10334 beta1 = 1.0 - beta2; 10335 beta1 = max(beta1, beta1gs); 10336 } 10337 } 10338 beta = 0.0; 10339 if (imode == 3) 10340 { 10341 // if( imode >0 ){ 10342 // --- Symmetric fission channel 10343 // the fit function for beta i 10344 // at the scission point, d = 10345 // beta : deformation of symm 10346 // beta1 : deformation of firs 10347 // beta2 : deformation of seco 10348 betags = ecld->beta2[idint(Nsymm)][i 10349 beta1gs = ecld->beta2[idint(N1r)][id 10350 beta2gs = ecld->beta2[idint(N2r)][id 10351 beta = max(0.177963 + 0.0153241 * Zs 10352 beta1 = max(0.177963 + 0.0153241 * Z 10353 beta2 = max(0.177963 + 0.0153241 * Z 10354 10355 E_asym = frldm(Z1UCD, N1r, beta1) + 10356 ecoul(Z1UCD, N1r, beta1, Z2 10357 ecoul(Zsymm, Nsymm, beta, Z 10358 E_scission_pre = max(epsilon_symm_sc 10359 } 10360 // ----------------------- 10361 // ... end of deformations 10362 // ----------------------- 10363 10364 // --------------------------------- 10365 // evaporation from saddle to scissi 10366 // --------------------------------- 10367 if (E_scission_pre > 5. && NbLam0 < 1) 10368 { 10369 evap_postsaddle( 10370 A, Z, E_scission_pre, &E_scissio 10371 N_scission = A_scission - Z_scission 10372 } 10373 else 10374 { 10375 A_scission = A; 10376 Z_scission = Z; 10377 E_scission_post = E_scission_pre; 10378 N_scission = A_scission - Z_scission 10379 } 10380 // --------------------------------- 10381 // second approximation of fission f 10382 // --------------------------------- 10383 // 10384 N1r = N1r * N_scission / N; 10385 N2r = N2r * N_scission / N; 10386 Z1UCD = Z1UCD * Z_scission / Z; 10387 Z2UCD = Z2UCD * Z_scission / Z; 10388 A1r = Z1UCD + N1r; 10389 10390 // --------------------------------- 10391 // determination of the charge and m 10392 // --------------------------------- 10393 10394 // - CZ is the curvature of charge d 10395 // common to all modes, gives the 10396 // The physics picture behind is t 10397 // fissioning nucleus in N and Z i 10398 // one nascent fragment to the oth 10399 // N/Z degree of freedom is concer 10400 // minima in direction of mass tra 10401 // potential minimum in N/Z direct 10402 // The minima in direction of m 10403 // by the liquid-drop (LD) pote 10404 // by LD + N=82 shell (for stan 10405 // by LD + N=86 shell (for stan 10406 // Since the variation of N/Z i 10407 // the potential and is thus de 10408 // Thus, we calculate the mean 10409 // at scission. 10410 // For the SL mode, the mean N/ 10411 // minimum of the potential at 10412 // fixed mass. 10413 // For the S1 and S2 modes, thi 10414 // empirical charge polarisatio 10415 // For the SL mode, the fluctua 10416 // from the curvature of the po 10417 // of N/Z. This value is also u 10418 10419 // Polarisation assumed for standard 10420 // Z - Zucd = cpol (for A = const); 10421 // from this we get (see remarks ab 10422 // Z - Zucd = Acn/Ncn * cpol (for 10423 // 10424 CZ = (frldm(Z1UCD - 1.0, N1r + 1.0, beta 10425 frldm(Z1UCD + 1.0, N1r - 1.0, beta 10426 ecoul(Z1UCD - 1.0, N1r + 1.0, beta 10427 ecoul(Z1UCD + 1.0, N1r - 1.0, beta 10428 2.0 * ecoul(Z1UCD, N1r, beta1, Z2U 10429 2.0 * frldm(Z2UCD, N2r, beta2)) * 10430 0.50; 10431 // 10432 if (1.0 / A_levdens * E_scission_post < 10433 std::cout << "DSQRT 1 < 0" << A_levd 10434 10435 if (0.50 * std::sqrt(1.0 / A_levdens * E 10436 { 10437 std::cout << "DSQRT 2 < 0 " << CZ << 10438 std::cout << "This event was not con 10439 goto fiss321; 10440 } 10441 10442 ZA1width = std::sqrt(0.5 * std::sqrt(1.0 10443 10444 // Minimum width in N/Z imposed. 10445 // Value of minimum width taken from 10446 // sigma_Z(A=const) = 0.4 to 0.5 (f 10447 // 34) sigma_N(Z=const) = 0.45 * A/Z 10448 // therefore: SIGZMIN = 1.16 10449 // Physics; variation in N/Z for fix 10450 // Thermal energy at scission is re 10451 // pre-scission neutron evaporation 10452 10453 ZA1width = max(ZA1width, sigZmin); 10454 10455 if (imode == 1 && cpol1 != 0.0) 10456 { 10457 // --- asymmetric fission, mod 10458 G4int IS = 0; 10459 fiss2801: 10460 Z1rr = Z1UCD - cpol1 * A_scission / 10461 // Z1r = DBLE(GaussHaz(k,sngl(Z1rr), 10462 // Z1r = Z1rr+G4AblaRandom::gaus(ZA1 10463 Z1r = gausshaz(0, Z1rr, ZA1width); 10464 IS = IS + 1; 10465 if (IS > 100) 10466 { 10467 std::cout << "WARNING: GAUSSHAZ 10468 "CALCULATING Z1R IN 10469 << std::endl; 10470 Z1r = Z1rr; 10471 } 10472 if ((utilabs(Z1rr - Z1r) > 3.0 * ZA1 10473 goto fiss2801; 10474 N1r = A1r - Z1r; 10475 } 10476 else 10477 { 10478 if (imode == 2 && cpol2 != 0.0) 10479 { 10480 // --- asymmetric fission, 10481 G4int IS = 0; 10482 fiss2802: 10483 Z1rr = Z1UCD - cpol2 * A_scissio 10484 // Z1r = Z1rr+G4AblaRandom::gaus 10485 Z1r = gausshaz(0, Z1rr, ZA1width 10486 IS = IS + 1; 10487 if (IS > 100) 10488 { 10489 std::cout << "WARNING: GAUSS 10490 "CALCULATING Z1 10491 << std::endl; 10492 Z1r = Z1rr; 10493 } 10494 if ((utilabs(Z1rr - Z1r) > 3.0 * 10495 goto fiss2802; 10496 N1r = A1r - Z1r; 10497 } 10498 else 10499 { 10500 // Otherwise do; /* Imode = 10501 // 0 */ 10502 // and symmetric case 10503 // We treat a simultaneo 10504 // polarisation */ 10505 10506 re1 = frldm(Z1UCD - 1.0, N1r + 1 10507 ecoul(Z1UCD - 1.0, N1r + 1 10508 re2 = frldm(Z1UCD, N1r, beta1) + 10509 ecoul(Z1UCD, N1r, beta1, Z 10510 re3 = frldm(Z1UCD + 1.0, N1r - 1 10511 ecoul(Z1UCD + 1.0, N1r - 1 10512 eps2 = (re1 - 2.0 * re2 + re3) / 10513 eps1 = (re3 - re1) / 2.0; 10514 DN1_POL = -eps1 / (2.0 * eps2); 10515 // 10516 Z1rr = Z1UCD + DN1_POL; 10517 10518 // Polarization of Standar 10519 if (imode == 1) 10520 { 10521 if (Z1rr > 50.0) 10522 { 10523 DN1_POL = DN1_POL - 0.6 10524 Z1rr = Z1UCD + DN1_POL; 10525 if (Z1rr < 50.) 10526 Z1rr = 50.0; 10527 } 10528 else 10529 { 10530 DN1_POL = DN1_POL + 0.60 10531 Z1rr = Z1UCD + DN1_POL; 10532 if (Z1rr > 50.0) 10533 Z1rr = 50.0; 10534 } 10535 } 10536 10537 G4int IS = 0; 10538 fiss2803: 10539 // Z1r = Z1rr+G4AblaRandom::gaus 10540 Z1r = gausshaz(0, Z1rr, ZA1width 10541 IS = IS + 1; 10542 if (IS > 100) 10543 { 10544 std::cout << "WARNING: GAUSS 10545 "CALCULATING Z1 10546 << std::endl; 10547 Z1r = Z1rr; 10548 } 10549 10550 if ((utilabs(Z1rr - Z1r) > 3.0 * 10551 goto fiss2803; 10552 N1r = A1r - Z1r; 10553 } 10554 } 10555 10556 // --------------------------------- 10557 // Integer proton number with even-o 10558 // --------------------------------- 10559 even_odd(Z1r, r_e_o, i_help); 10560 10561 z1 = G4double(i_help); 10562 z2 = dint(Z_scission) - z1; 10563 N1 = dint(N1r); 10564 N2 = dint(N_scission) - N1; 10565 a1 = z1 + N1; 10566 a2 = z2 + N2; 10567 10568 if ((z1 < 0) || (z2 < 0) || (a1 < 0) || 10569 { 10570 std::cout << " --------------------- 10571 std::cout << " Z, A, N : " << Z << " 10572 std::cout << z1 << " " << z2 << " " 10573 std::cout << E_scission_post << " " 10574 10575 std::cout << " --------------------- 10576 } 10577 10578 // ----------------------- 10579 // excitation energies ... 10580 // ----------------------- 10581 // 10582 if (imode == 1) 10583 { 10584 // ---- N = 82 10585 if (N1mean > N * 0.50) 10586 { 10587 // (a) 1. fragment is sp 10588 E_defo = 0.0; 10589 beta2gs = ecld->beta2[idint(N2)] 10590 if (beta2 < beta2gs) 10591 beta2 = beta2gs; 10592 E1exc = E_scission_pre * a1 / A 10593 E_defo = frldm(z2, N2, beta2) - 10594 E2exc = E_scission_pre * a2 / A 10595 } 10596 else 10597 { 10598 // (b) 1. fragment is de 10599 beta1gs = ecld->beta2[idint(N1)] 10600 if (beta1 < beta1gs) 10601 beta1 = beta1gs; 10602 E_defo = frldm(z1, N1, beta1) - 10603 E1exc = E_scission_pre * a1 / A 10604 E_defo = 0.0; 10605 E2exc = E_scission_pre * a2 / A 10606 } 10607 } 10608 10609 if (imode == 2) 10610 { 10611 // --- N appr. 86 */ 10612 if (N1mean > N * 0.5) 10613 { 10614 /* 2. fragment is spherical */ 10615 beta1gs = ecld->beta2[idint(N1)] 10616 if (beta1 < beta1gs) 10617 beta1 = beta1gs; 10618 E_defo = frldm(z1, N1, beta1) - 10619 E1exc = E_scission_pre * a1 / A 10620 beta2gs = ecld->beta2[idint(N2)] 10621 if (beta2 < beta2gs) 10622 beta2 = beta2gs; 10623 E_defo = frldm(z2, N2, beta2) - 10624 E2exc = E_scission_pre * a2 / A 10625 } 10626 else 10627 { 10628 /* 1. fragment is spherical */ 10629 beta2gs = ecld->beta2[idint(N2)] 10630 if (beta2 < beta2gs) 10631 beta2 = beta2gs; 10632 E_defo = frldm(z2, N2, beta2) - 10633 E2exc = E_scission_pre * a2 / A 10634 beta1gs = ecld->beta2[idint(N1)] 10635 if (beta1 < beta1gs) 10636 beta1 = beta1gs; 10637 E_defo = frldm(z1, N1, beta1) - 10638 E1exc = E_scission_pre * a1 / A 10639 } 10640 } 10641 10642 if (imode == 3) 10643 { 10644 // --- Symmetric fission channel 10645 beta1gs = ecld->beta2[idint(N1)][idi 10646 if (beta1 < beta1gs) 10647 beta1 = beta1gs; 10648 beta2gs = ecld->beta2[idint(N2)][idi 10649 if (beta2 < beta2gs) 10650 beta2 = beta2gs; 10651 E_defo1 = frldm(z1, N1, beta1) - frl 10652 E_defo2 = frldm(z2, N2, beta2) - frl 10653 E1exc = E_scission_pre * a1 / A + E_ 10654 E2exc = E_scission_pre * a2 / A + E_ 10655 } 10656 10657 // pre-neutron-emission total kinetic e 10658 TKER = (z1 * z2 * 1.440) / (R0 * std::po 10659 R0 * std::po 10660 // Pre-neutron-emission kinetic energie 10661 EkinR1 = TKER * a2 / A; 10662 EkinR2 = TKER * a1 / A; 10663 v1 = std::sqrt(EkinR1 / a1) * 1.3887; 10664 v2 = std::sqrt(EkinR2 / a2) * 1.3887; 10665 10666 // Extracted from Lang et al. Nucl. Phy 10667 E1exc_sigma = 5.50; 10668 E2exc_sigma = 5.50; 10669 10670 fis987: 10671 // e1 = E1exc+G4AblaRandom::gaus(E1exc_s 10672 e1 = gausshaz(0, E1exc, E1exc_sigma); 10673 if (e1 < 0.) 10674 goto fis987; 10675 fis988: 10676 // e2 = E2exc+G4AblaRandom::gaus(E2exc_s 10677 e2 = gausshaz(0, E2exc, E2exc_sigma); 10678 if (e2 < 0.) 10679 goto fis988; 10680 10681 (*NbLam0_par) = NbLam0; 10682 return; 10683 } 10684 10685 void G4Abla::even_odd(G4double r_origin, G4d 10686 { 10687 // Procedure to calculate I_OUT from R_I 10688 // on the average a flat distribution in 10689 // fluctuating distribution in I_OUT wit 10690 // given by R_EVEN_ODD 10691 10692 // /* ------------------------------ 10693 // /* EXAMPLES : 10694 // /* ------------------------------ 10695 // /* If R_EVEN_ODD = 0 : 10696 // /* CEIL(R_IN) ---- 10697 // /* 10698 // /* R_IN -> 10699 // /* (somewhere in betwe 10700 // /* 10701 // /* FLOOR(R_IN) ---- 10702 // /* ------------------------------ 10703 // /* If R_EVEN_ODD > 0 : 10704 // /* The interval for the abov 10705 // /* larger for FLOOR(R_IN) 10706 // /* smaller for FLOOR(R_IN 10707 // /* For R_EVEN_ODD < 0 : just o 10708 // /* ------------------------------ 10709 10710 // /* ------------------------------ 10711 // /* On input: R_ORIGIN nuclea 10712 // /* R_EVEN_ODD reques 10713 // /* Intermediate quantity: R_IN = 10714 // /* On output: I_OUT nuclea 10715 // /* ------------------------------ 10716 10717 // G4double R_ORIGIN,R_IN,R_EVEN_OD 10718 G4double r_in = 0.0, r_rest = 0.0, r_hel 10719 G4double r_floor = 0.0; 10720 G4double r_middle = 0.0; 10721 // G4int I_OUT,N_FLOOR; 10722 G4int n_floor = 0; 10723 10724 r_in = r_origin + 0.5; 10725 r_floor = (G4double)((G4int)(r_in)); 10726 if (r_even_odd < 0.001) 10727 { 10728 i_out = (G4int)(r_floor); 10729 } 10730 else 10731 { 10732 r_rest = r_in - r_floor; 10733 r_middle = r_floor + 0.5; 10734 n_floor = (G4int)(r_floor); 10735 if (n_floor % 2 == 0) 10736 { 10737 // even before modif. 10738 r_help = r_middle + (r_rest - 0. 10739 } 10740 else 10741 { 10742 // odd before modification 10743 r_help = r_middle + (r_rest - 0. 10744 } 10745 i_out = (G4int)(r_help); 10746 } 10747 } 10748 10749 double G4Abla::umass(G4double z, G4double n, 10750 { 10751 // liquid-drop mass, Myers & Swiatecki, 10752 // pure liquid drop, without pairing and 10753 10754 // On input: Z nuclear charge of 10755 // N number of neutrons 10756 // beta deformation of nuc 10757 // On output: binding energy of nucleu 10758 10759 G4double a = 0.0, fumass = 0.0; 10760 G4double alpha = 0.0; 10761 G4double xcom = 0.0, xvs = 0.0, xe = 0.0 10762 const G4double pi = 3.1416; 10763 10764 a = n + z; 10765 alpha = (std::sqrt(5.0 / (4.0 * pi))) * 10766 10767 xcom = 1.0 - 1.7826 * ((a - 2.0 * z) / a 10768 // factor for asymmetry dependence of su 10769 xvs = -xcom * (15.4941 * a - 17.9439 * s 10770 // sum of volume and surface energy 10771 xe = z * z * (0.7053 / (std::pow(a, 1.0 10772 fumass = xvs + xe; 10773 10774 return fumass; 10775 } 10776 10777 double G4Abla::ecoul(G4double z1, G4double n 10778 { 10779 // Coulomb potential between two nuclei 10780 // surfaces are in a distance of d 10781 // in a tip to tip configuration 10782 10783 // approximate formulation 10784 // On input: Z1 nuclear charge of f 10785 // N1 number of neutrons 10786 // beta1 deformation of firs 10787 // Z2 nuclear charge of s 10788 // N2 number of neutrons 10789 // beta2 deformation of seco 10790 // d distance of surface 10791 10792 // G4double Z1,N1,beta1,Z2,N2,beta2 10793 G4double fecoul = 0; 10794 G4double dtot = 0; 10795 const G4double r0 = 1.16; 10796 10797 dtot = r0 * (std::pow((z1 + n1), 1.0 / 3 10798 std::pow((z2 + n2), 1.0 / 3 10799 d; 10800 fecoul = z1 * z2 * 1.44 / dtot; 10801 10802 return fecoul; 10803 } 10804 10805 G4double G4Abla::Uwash(G4double E, G4double 10806 { 10807 // E excitation energy 10808 // Ecrit critical pairing energy 10809 // Freduction reduction factor for shel 10810 G4double R_wash, uwash; 10811 if (E < Ecrit) 10812 R_wash = std::exp(-E * Freduction * 10813 else 10814 R_wash = std::exp(-Ecrit * Freductio 10815 10816 uwash = R_wash; 10817 return uwash; 10818 } 10819 10820 G4double G4Abla::frldm(G4double z, G4double 10821 { 10822 10823 // Liquid-drop mass, Myers & Swiatec 10824 // pure liquid drop, without pairing 10825 // 10826 // On input: Z nuclear charge 10827 // N number of neut 10828 // beta deformation of 10829 // On output: binding energy of nu 10830 // The idea is to use FRLDM model for be 10831 // model to get the deformation energy 10832 10833 G4double a; 10834 a = n + z; 10835 return eflmac_profi(a, z) + umass(z, n, 10836 } 10837 10838 //****************************************** 10839 // * 10840 // * this function will calculate the liquid 10841 // * configuration according to the preprint 10842 // * MASSES and DEFORMATIONS by P. M"oller e 10843 // * All constants are taken from this publi 10844 // * 10845 // * Parameters: 10846 // * a: nuclear mass number 10847 // * z: nuclear charge 10848 // ***************************************** 10849 10850 G4double G4Abla::eflmac_profi(G4double ia, G 10851 { 10852 // CHANGED TO CALCULATE TOTAL BINDING EN 10853 // SWITCH FOR PAIRING INCLUDED AS WELL. 10854 // BINDING = EFLMAC(IA,IZ,0,OPTSHP) 10855 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/E 10856 // A.J. 15.07.96 10857 10858 // this function will calculate the liqu 10859 // configuration according to the prepri 10860 // MASSES and DEFORMATIONS by P. M"oller 10861 // All constants are taken from this pub 10862 10863 // Parameters: 10864 // a: nuclear mass number 10865 // z: nuclear charge 10866 10867 G4double eflmacResult = 0.0; 10868 10869 G4int in = 0; 10870 G4double z = 0.0, n = 0.0, a = 0.0, av = 10871 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b 10872 G4double ff = 0.0, ca = 0.0, w = 0.0, ef 10873 G4double r0 = 0.0, kf = 0.0, ks = 0.0; 10874 G4double kv = 0.0, rp = 0.0, ay = 0.0, a 10875 G4double esq = 0.0, ael = 0.0, i = 0.0; 10876 G4double pi = 3.141592653589793238e0; 10877 10878 // fundamental constants 10879 // electronic charge squared 10880 esq = 1.4399764; 10881 10882 // constants from considerations other t 10883 // electronic binding 10884 ael = 1.433e-5; 10885 10886 // proton rms radius 10887 rp = 0.8; 10888 10889 // nuclear radius constant 10890 r0 = 1.16; 10891 10892 // range of yukawa-plus-expon. potential 10893 ay = 0.68; 10894 10895 // range of yukawa function used to gene 10896 // nuclear charge distribution 10897 aden = 0.70; 10898 10899 // wigner constant 10900 w = 30.0; 10901 10902 // adjusted parameters 10903 // volume energy 10904 av = 16.00126; 10905 10906 // volume asymmetry 10907 kv = 1.92240; 10908 10909 // surface energy 10910 as = 21.18466; 10911 10912 // surface asymmetry 10913 ks = 2.345; 10914 // a^0 constant 10915 a0 = 2.615; 10916 10917 // charge asymmetry 10918 ca = 0.10289; 10919 10920 z = G4double(iz); 10921 a = G4double(ia); 10922 in = ia - iz; 10923 n = G4double(in); 10924 10925 c1 = 3.0 / 5.0 * esq / r0; 10926 c4 = 5.0 / 4.0 * std::pow((3.0 / (2.0 * 10927 kf = std::pow((9.0 * pi * z / (4.0 * a)) 10928 10929 ff = -1.0 / 8.0 * rp * rp * esq / std::p 10930 (145.0 / 48.0 - 327.0 / 2880.0 * st 10931 1527.0 / 1209600.0 * std::pow(kf, 10932 10933 i = (n - z) / a; 10934 10935 x0 = r0 * std::pow(a, (1.0 / 3.0)) / ay; 10936 y0 = r0 * std::pow(a, (1.0 / 3.0)) / ade 10937 10938 b1 = 1.0 - 3.0 / (std::pow(x0, 2)) + (1. 10939 10940 b3 = 1.0 - 5.0 / std::pow(y0, 2) * 10941 (1.0 - 15.0 / (8.0 * y0) 10942 3.0 / 4.0 * (1.0 + 9.0 / 10943 std::exp(-2.0 * y0)) 10944 10945 // now calculation of total binding ener 10946 10947 efl = -1.0 * av * (1.0 - kv * i * i) * a 10948 c1 * z * z * b3 / std::pow(a, (1.0 10949 ff * std::pow(z, 2) / a - ca * (n 10950 10951 efl = efl + w * utilabs(i); 10952 10953 eflmacResult = efl; 10954 10955 return eflmacResult; 10956 } 10957 // 10958 // 10959 // 10960 void G4Abla::unstable_nuclei(G4int AFP, 10961 G4int ZFP, 10962 G4int* AFPNEW, 10963 G4int* ZFPNEW, 10964 G4int& IOUNSTAB 10965 G4double VX, 10966 G4double VY, 10967 G4double VZ, 10968 G4double* VP1X, 10969 G4double* VP1Y, 10970 G4double* VP1Z, 10971 G4double BU_TAB 10972 G4int* ILOOP) 10973 { 10974 // 10975 G4int INMIN, INMAX, NDIF = 0, IMEM; 10976 G4int NEVA = 0, PEVA = 0; 10977 G4double VP2X, VP2Y, VP2Z; 10978 10979 *AFPNEW = AFP; 10980 *ZFPNEW = ZFP; 10981 IOUNSTABLE = 0; 10982 *ILOOP = 0; 10983 IMEM = 0; 10984 for (G4int i = 0; i < indexpart; i++) 10985 { 10986 BU_TAB_TEMP[i][0] = 0.0; 10987 BU_TAB_TEMP[i][1] = 0.0; 10988 BU_TAB_TEMP[i][2] = 0.0; 10989 BU_TAB_TEMP[i][3] = 0.0; 10990 BU_TAB_TEMP[i][4] = 0.0; 10991 // BU_TAB_TEMP[i][5] = 0.0; 10992 } 10993 *VP1X = 0.0; 10994 *VP1Y = 0.0; 10995 *VP1Z = 0.0; 10996 10997 if (AFP == 0 && ZFP == 0) 10998 { 10999 // PRINT*,'UNSTABLE NUCLEI, AF 11000 return; 11001 } 11002 if ((AFP == 1 && ZFP == 0) || (AFP == 1 11003 (AFP == 3 && ZFP == 2) || (AFP == 4 11004 { 11005 *VP1X = VX; 11006 *VP1Y = VY; 11007 *VP1Z = VZ; 11008 return; 11009 } 11010 11011 if ((AFP - ZFP) == 0 && ZFP > 1) 11012 { 11013 for (G4int I = 0; I <= AFP - 2; I++) 11014 { 11015 unstable_tke(G4double(AFP - I), 11016 G4double(AFP - I), 11017 G4double(AFP - I - 11018 G4double(AFP - I - 11019 VX, 11020 VY, 11021 VZ, 11022 &(*VP1X), 11023 &(*VP1Y), 11024 &(*VP1Z), 11025 &VP2X, 11026 &VP2Y, 11027 &VP2Z); 11028 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11029 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11030 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11031 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11032 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11033 *ILOOP = *ILOOP + 1; 11034 VX = *VP1X; 11035 VY = *VP1Y; 11036 VZ = *VP1Z; 11037 } 11038 // PEVA = PEVA + ZFP - 1; 11039 AFP = 1; 11040 ZFP = 1; 11041 IOUNSTABLE = 1; 11042 } 11043 // 11044 //*** Find the limits nucleus is bound : 11045 isostab_lim(ZFP, &INMIN, &INMAX); 11046 NDIF = AFP - ZFP; 11047 if (NDIF < INMIN) 11048 { 11049 // Proton unbound 11050 IOUNSTABLE = 1; 11051 for (G4int I = 1; I <= 10; I++) 11052 { 11053 isostab_lim(ZFP - I, &INMIN, &IN 11054 if (INMIN <= NDIF) 11055 { 11056 IMEM = I; 11057 ZFP = ZFP - I; 11058 AFP = ZFP + NDIF; 11059 PEVA = I; 11060 goto u10; 11061 } 11062 } 11063 // 11064 u10: 11065 for (G4int I = 0; I < IMEM; I++) 11066 { 11067 unstable_tke(G4double(NDIF + ZFP 11068 G4double(ZFP + IMEM 11069 G4double(NDIF + ZFP 11070 G4double(ZFP + IMEM 11071 VX, 11072 VY, 11073 VZ, 11074 &(*VP1X), 11075 &(*VP1Y), 11076 &(*VP1Z), 11077 &VP2X, 11078 &VP2Y, 11079 &VP2Z); 11080 BU_TAB_TEMP[I + 1 + *ILOOP][0] = 11081 BU_TAB_TEMP[I + 1 + *ILOOP][1] = 11082 BU_TAB_TEMP[I + 1 + *ILOOP][2] = 11083 BU_TAB_TEMP[I + 1 + *ILOOP][3] = 11084 BU_TAB_TEMP[I + 1 + *ILOOP][4] = 11085 VX = *VP1X; 11086 VY = *VP1Y; 11087 VZ = *VP1Z; 11088 } 11089 *ILOOP = *ILOOP + IMEM; 11090 } 11091 if (NDIF > INMAX) 11092 { 11093 // Neutron unbound 11094 NEVA = NDIF - INMAX; 11095 AFP = ZFP + INMAX; 11096 IOUNSTABLE = 1; 11097 for (G4int I = 0; I < NEVA; I++) 11098 { 11099 unstable_tke(G4double(ZFP + NDIF 11100 G4double(ZFP), 11101 G4double(ZFP + NDIF 11102 G4double(ZFP), 11103 VX, 11104 VY, 11105 VZ, 11106 &(*VP1X), 11107 &(*VP1Y), 11108 &(*VP1Z), 11109 &VP2X, 11110 &VP2Y, 11111 &VP2Z); 11112 11113 BU_TAB_TEMP[*ILOOP][0] = 0.0; 11114 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11115 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11116 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11117 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11118 *ILOOP = *ILOOP + 1; 11119 VX = *VP1X; 11120 VY = *VP1Y; 11121 VZ = *VP1Z; 11122 } 11123 } 11124 11125 if ((AFP >= 2) && (ZFP == 0)) 11126 { 11127 for (G4int I = 0; I <= AFP - 2; I++) 11128 { 11129 unstable_tke(G4double(AFP - I), 11130 G4double(ZFP), 11131 G4double(AFP - I - 11132 G4double(ZFP), 11133 VX, 11134 VY, 11135 VZ, 11136 &(*VP1X), 11137 &(*VP1Y), 11138 &(*VP1Z), 11139 &VP2X, 11140 &VP2Y, 11141 &VP2Z); 11142 11143 BU_TAB_TEMP[*ILOOP][0] = 0.0; 11144 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11145 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11146 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11147 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11148 *ILOOP = *ILOOP + 1; 11149 VX = *VP1X; 11150 VY = *VP1Y; 11151 VZ = *VP1Z; 11152 } 11153 11154 // NEVA = NEVA + (AFP - 1); 11155 AFP = 1; 11156 ZFP = 0; 11157 IOUNSTABLE = 1; 11158 } 11159 if (AFP < ZFP) 11160 { 11161 std::cout << "WARNING - BU UNSTABLE: 11162 AFP = 0; 11163 ZFP = 0; 11164 IOUNSTABLE = 1; 11165 } 11166 if ((AFP >= 4) && (ZFP == 1)) 11167 { 11168 // Heavy residue is treated as 3H an 11169 // neutrons: 11170 for (G4int I = 0; I < AFP - 3; I++) 11171 { 11172 unstable_tke(G4double(AFP - I), 11173 G4double(ZFP), 11174 G4double(AFP - I - 11175 G4double(ZFP), 11176 VX, 11177 VY, 11178 VZ, 11179 &(*VP1X), 11180 &(*VP1Y), 11181 &(*VP1Z), 11182 &VP2X, 11183 &VP2Y, 11184 &VP2Z); 11185 11186 BU_TAB_TEMP[*ILOOP][0] = 0.0; 11187 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11188 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11189 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11190 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11191 *ILOOP = *ILOOP + 1; 11192 VX = *VP1X; 11193 VY = *VP1Y; 11194 VZ = *VP1Z; 11195 } 11196 11197 // NEVA = NEVA + (AFP - 3); 11198 AFP = 3; 11199 ZFP = 1; 11200 IOUNSTABLE = 1; 11201 } 11202 11203 if ((AFP == 4) && (ZFP == 3)) 11204 { 11205 // 4Li -> 3He + p -> 11206 AFP = 3; 11207 ZFP = 2; 11208 // PEVA = PEVA + 1; 11209 IOUNSTABLE = 1; 11210 unstable_tke(4.0, 3.0, 3.0, 2.0, VX, 11211 11212 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11213 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11214 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11215 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11216 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11217 *ILOOP = *ILOOP + 1; 11218 } 11219 if ((AFP == 5) && (ZFP == 2)) 11220 { 11221 // 5He -> 4He + n -> 11222 AFP = 4; 11223 ZFP = 2; 11224 // NEVA = NEVA + 1; 11225 IOUNSTABLE = 1; 11226 unstable_tke(5.0, 2.0, 4.0, 2.0, VX, 11227 BU_TAB_TEMP[*ILOOP][0] = 0.0; 11228 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11229 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11230 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11231 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11232 *ILOOP = *ILOOP + 1; 11233 } 11234 11235 if ((AFP == 5) && (ZFP == 3)) 11236 { 11237 // 5Li -> 4He + p 11238 AFP = 4; 11239 ZFP = 2; 11240 // PEVA = PEVA + 1; 11241 IOUNSTABLE = 1; 11242 unstable_tke(5.0, 3.0, 4.0, 2.0, VX, 11243 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11244 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11245 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11246 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11247 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11248 *ILOOP = *ILOOP + 1; 11249 } 11250 11251 if ((AFP == 6) && (ZFP == 4)) 11252 { 11253 // 6Be -> 4He + 2p (velocity in two 11254 AFP = 4; 11255 ZFP = 2; 11256 // PEVA = PEVA + 2; 11257 IOUNSTABLE = 1; 11258 // 6Be -> 5Li + p 11259 unstable_tke(6.0, 4.0, 5.0, 3.0, VX, 11260 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11261 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11262 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11263 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11264 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11265 *ILOOP = *ILOOP + 1; 11266 VX = *VP1X; 11267 VY = *VP1Y; 11268 VZ = *VP1Z; 11269 11270 // 5Li -> 4He + p 11271 unstable_tke(5.0, 3.0, 4.0, 2.0, VX, 11272 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11273 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11274 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11275 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11276 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11277 *ILOOP = *ILOOP + 1; 11278 } 11279 if ((AFP == 7) && (ZFP == 2)) 11280 { 11281 // 7He -> 6He + n 11282 AFP = 6; 11283 ZFP = 2; 11284 // NEVA = NEVA + 1; 11285 IOUNSTABLE = 1; 11286 unstable_tke(7.0, 2.0, 6.0, 2.0, VX, 11287 BU_TAB_TEMP[*ILOOP][0] = 0.0; 11288 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11289 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11290 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11291 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11292 *ILOOP = *ILOOP + 1; 11293 } 11294 11295 if ((AFP == 7) && (ZFP == 5)) 11296 { 11297 // 7B -> 6Be + p -> 4He + 3p 11298 for (int I = 0; I <= AFP - 5; I++) 11299 { 11300 unstable_tke(double(AFP - I), 11301 double(ZFP - I), 11302 double(AFP - I - 1) 11303 double(ZFP - I - 1) 11304 VX, 11305 VY, 11306 VZ, 11307 &(*VP1X), 11308 &(*VP1Y), 11309 &(*VP1Z), 11310 &VP2X, 11311 &VP2Y, 11312 &VP2Z); 11313 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11314 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11315 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11316 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11317 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11318 *ILOOP = *ILOOP + 1; 11319 VX = *VP1X; 11320 VY = *VP1Y; 11321 VZ = *VP1Z; 11322 } 11323 11324 AFP = 4; 11325 ZFP = 2; 11326 // PEVA = PEVA + 3; 11327 IOUNSTABLE = 1; 11328 } 11329 if ((AFP == 8) && (ZFP == 4)) 11330 { 11331 // 8Be -> 4He + 4He 11332 AFP = 4; 11333 ZFP = 2; 11334 IOUNSTABLE = 1; 11335 unstable_tke(8.0, 4.0, 4.0, 2.0, VX, 11336 BU_TAB_TEMP[*ILOOP][0] = 2.0; 11337 BU_TAB_TEMP[*ILOOP][1] = 4.0; 11338 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11339 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11340 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11341 *ILOOP = *ILOOP + 1; 11342 } 11343 if ((AFP == 8) && (ZFP == 6)) 11344 { 11345 // 8C -> 2p + 6Be 11346 AFP = 6; 11347 ZFP = 4; 11348 // PEVA = PEVA + 2; 11349 IOUNSTABLE = 1; 11350 11351 unstable_tke(8.0, 6.0, 7.0, 5.0, VX, 11352 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11353 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11354 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11355 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11356 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11357 *ILOOP = *ILOOP + 1; 11358 VX = *VP1X; 11359 VY = *VP1Y; 11360 VZ = *VP1Z; 11361 11362 unstable_tke(7.0, 5.0, 6.0, 4.0, VX, 11363 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11364 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11365 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11366 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11367 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11368 *ILOOP = *ILOOP + 1; 11369 VX = *VP1X; 11370 VY = *VP1Y; 11371 VZ = *VP1Z; 11372 } 11373 11374 if ((AFP == 9) && (ZFP == 2)) 11375 { 11376 // 9He -> 8He + n 11377 AFP = 8; 11378 ZFP = 2; 11379 // NEVA = NEVA + 1; 11380 IOUNSTABLE = 1; 11381 11382 unstable_tke(9.0, 2.0, 8.0, 2.0, VX, 11383 BU_TAB_TEMP[*ILOOP][0] = 0.0; 11384 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11385 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11386 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11387 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11388 *ILOOP = *ILOOP + 1; 11389 VX = *VP1X; 11390 VY = *VP1Y; 11391 VZ = *VP1Z; 11392 } 11393 11394 if ((AFP == 9) && (ZFP == 5)) 11395 { 11396 // 9B -> 4He + 4He + p -> 11397 AFP = 4; 11398 ZFP = 2; 11399 // PEVA = PEVA + 1; 11400 IOUNSTABLE = 1; 11401 unstable_tke(9.0, 5.0, 8.0, 4.0, VX, 11402 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11403 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11404 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11405 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11406 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11407 *ILOOP = *ILOOP + 1; 11408 VX = *VP1X; 11409 VY = *VP1Y; 11410 VZ = *VP1Z; 11411 11412 unstable_tke(8.0, 4.0, 4.0, 2.0, VX, 11413 BU_TAB_TEMP[*ILOOP][0] = 2.0; 11414 BU_TAB_TEMP[*ILOOP][1] = 4.0; 11415 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11416 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11417 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11418 *ILOOP = *ILOOP + 1; 11419 VX = *VP1X; 11420 VY = *VP1Y; 11421 VZ = *VP1Z; 11422 } 11423 11424 if ((AFP == 10) && (ZFP == 2)) 11425 { 11426 // 10He -> 8He + 2n 11427 AFP = 8; 11428 ZFP = 2; 11429 // NEVA = NEVA + 2; 11430 IOUNSTABLE = 1; 11431 // 10He -> 9He + n 11432 unstable_tke(10.0, 2.0, 9.0, 2.0, VX 11433 BU_TAB_TEMP[*ILOOP][0] = 0.0; 11434 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11435 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11436 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11437 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11438 *ILOOP = *ILOOP + 1; 11439 VX = *VP1X; 11440 VY = *VP1Y; 11441 VZ = *VP1Z; 11442 11443 // 9He -> 8He + n 11444 unstable_tke(9.0, 2.0, 8.0, 2.0, VX, 11445 BU_TAB_TEMP[*ILOOP][0] = 0.0; 11446 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11447 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11448 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11449 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11450 *ILOOP = *ILOOP + 1; 11451 VX = *VP1X; 11452 VY = *VP1Y; 11453 VZ = *VP1Z; 11454 } 11455 if ((AFP == 10) && (ZFP == 3)) 11456 { 11457 // 10Li -> 9Li + n -> 11458 AFP = 9; 11459 ZFP = 3; 11460 // NEVA = NEVA + 1; 11461 IOUNSTABLE = 1; 11462 unstable_tke(10.0, 3.0, 9.0, 3.0, VX 11463 BU_TAB_TEMP[*ILOOP][0] = 0.0; 11464 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11465 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11466 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11467 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11468 *ILOOP = *ILOOP + 1; 11469 VX = *VP1X; 11470 VY = *VP1Y; 11471 VZ = *VP1Z; 11472 } 11473 if ((AFP == 10) && (ZFP == 7)) 11474 { 11475 // 10N -> 9C + p -> 11476 AFP = 9; 11477 ZFP = 6; 11478 // PEVA = PEVA + 1; 11479 IOUNSTABLE = 1; 11480 unstable_tke(10.0, 7.0, 9.0, 6.0, VX 11481 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11482 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11483 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11484 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11485 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11486 *ILOOP = *ILOOP + 1; 11487 VX = *VP1X; 11488 VY = *VP1Y; 11489 VZ = *VP1Z; 11490 } 11491 11492 if ((AFP == 11) && (ZFP == 7)) 11493 { 11494 // 11N -> 10C + p -> 11495 AFP = 10; 11496 ZFP = 6; 11497 // PEVA = PEVA + 1; 11498 IOUNSTABLE = 1; 11499 unstable_tke(11.0, 7.0, 10.0, 6.0, V 11500 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11501 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11502 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11503 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11504 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11505 *ILOOP = *ILOOP + 1; 11506 VX = *VP1X; 11507 VY = *VP1Y; 11508 VZ = *VP1Z; 11509 } 11510 if ((AFP == 12) && (ZFP == 8)) 11511 { 11512 // 12O -> 10C + 2p -> 11513 AFP = 10; 11514 ZFP = 6; 11515 // PEVA = PEVA + 2; 11516 IOUNSTABLE = 1; 11517 11518 unstable_tke(12.0, 8.0, 11.0, 7.0, V 11519 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11520 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11521 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11522 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11523 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11524 *ILOOP = *ILOOP + 1; 11525 VX = *VP1X; 11526 VY = *VP1Y; 11527 VZ = *VP1Z; 11528 11529 unstable_tke(11.0, 7.0, 10.0, 6.0, V 11530 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11531 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11532 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11533 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11534 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11535 *ILOOP = *ILOOP + 1; 11536 VX = *VP1X; 11537 VY = *VP1Y; 11538 VZ = *VP1Z; 11539 } 11540 if ((AFP == 15) && (ZFP == 9)) 11541 { 11542 // 15F -> 14O + p -> 11543 AFP = 14; 11544 ZFP = 8; 11545 // PEVA = PEVA + 1; 11546 IOUNSTABLE = 1; 11547 unstable_tke(15.0, 9.0, 14.0, 8.0, V 11548 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11549 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11550 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11551 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11552 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11553 *ILOOP = *ILOOP + 1; 11554 VX = *VP1X; 11555 VY = *VP1Y; 11556 VZ = *VP1Z; 11557 } 11558 11559 if ((AFP == 16) && (ZFP == 9)) 11560 { 11561 // 16F -> 15O + p -> 11562 AFP = 15; 11563 ZFP = 8; 11564 // PEVA = PEVA + 1; 11565 IOUNSTABLE = 1; 11566 unstable_tke(16.0, 9.0, 15.0, 8.0, V 11567 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11568 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11569 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11570 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11571 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11572 *ILOOP = *ILOOP + 1; 11573 VX = *VP1X; 11574 VY = *VP1Y; 11575 VZ = *VP1Z; 11576 } 11577 11578 if ((AFP == 16) && (ZFP == 10)) 11579 { 11580 // 16Ne -> 14O + 2p -> 11581 AFP = 14; 11582 ZFP = 8; 11583 // PEVA = PEVA + 2; 11584 IOUNSTABLE = 1; 11585 unstable_tke(16.0, 10.0, 15.0, 9.0, 11586 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11587 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11588 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11589 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11590 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11591 *ILOOP = *ILOOP + 1; 11592 VX = *VP1X; 11593 VY = *VP1Y; 11594 VZ = *VP1Z; 11595 11596 unstable_tke(15.0, 9.0, 14.0, 8.0, V 11597 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11598 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11599 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11600 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11601 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11602 *ILOOP = *ILOOP + 1; 11603 VX = *VP1X; 11604 VY = *VP1Y; 11605 VZ = *VP1Z; 11606 } 11607 if ((AFP == 18) && (ZFP == 11)) 11608 { 11609 // 18Na -> 17Ne + p -> 11610 AFP = 17; 11611 ZFP = 10; 11612 // PEVA = PEVA + 1; 11613 IOUNSTABLE = 1; 11614 unstable_tke(18.0, 11.0, 17.0, 10.0, 11615 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11616 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11617 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11618 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11619 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11620 *ILOOP = *ILOOP + 1; 11621 VX = *VP1X; 11622 VY = *VP1Y; 11623 VZ = *VP1Z; 11624 } 11625 if ((AFP == 19) && (ZFP == 11)) 11626 { 11627 // 19Na -> 18Ne + p -> 11628 AFP = 18; 11629 ZFP = 10; 11630 // PEVA = PEVA + 1; 11631 IOUNSTABLE = 1; 11632 unstable_tke(19.0, 11.0, 18.0, 10.0, 11633 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11634 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11635 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11636 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11637 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11638 *ILOOP = *ILOOP + 1; 11639 VX = *VP1X; 11640 VY = *VP1Y; 11641 VZ = *VP1Z; 11642 } 11643 if (ZFP >= 4 && (AFP - ZFP) == 1) 11644 { 11645 // Heavy residue is treated as 3He 11646 NEVA = AFP - 3; 11647 PEVA = ZFP - 2; 11648 11649 for (G4int I = 0; I < NEVA; I++) 11650 { 11651 unstable_tke(G4double(AFP - I), 11652 G4double(ZFP), 11653 G4double(AFP - I - 11654 G4double(ZFP), 11655 VX, 11656 VY, 11657 VZ, 11658 &(*VP1X), 11659 &(*VP1Y), 11660 &(*VP1Z), 11661 &VP2X, 11662 &VP2Y, 11663 &VP2Z); 11664 BU_TAB_TEMP[*ILOOP][0] = 0.0; 11665 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11666 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11667 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11668 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11669 *ILOOP = *ILOOP + 1; 11670 VX = *VP1X; 11671 VY = *VP1Y; 11672 VZ = *VP1Z; 11673 } 11674 for (G4int I = 0; I < PEVA; I++) 11675 { 11676 unstable_tke(G4double(AFP - NEVA 11677 G4double(ZFP - I), 11678 G4double(AFP - NEVA 11679 G4double(ZFP - I - 11680 VX, 11681 VY, 11682 VZ, 11683 &(*VP1X), 11684 &(*VP1Y), 11685 &(*VP1Z), 11686 &VP2X, 11687 &VP2Y, 11688 &VP2Z); 11689 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11690 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11691 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11692 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11693 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11694 *ILOOP = *ILOOP + 1; 11695 VX = *VP1X; 11696 VY = *VP1Y; 11697 VZ = *VP1Z; 11698 } 11699 11700 AFP = 3; 11701 ZFP = 2; 11702 IOUNSTABLE = 1; 11703 } 11704 // 11705 *AFPNEW = AFP; 11706 *ZFPNEW = ZFP; 11707 return; 11708 } 11709 11710 // 11711 // 11712 void G4Abla::unstable_tke(G4double ain, 11713 G4double zin, 11714 G4double anew, 11715 G4double znew, 11716 G4double vxin, 11717 G4double vyin, 11718 G4double vzin, 11719 G4double* v1x, 11720 G4double* v1y, 11721 G4double* v1z, 11722 G4double* v2x, 11723 G4double* v2y, 11724 G4double* v2z) 11725 { 11726 // 11727 G4double EKIN_P1 = 0., ekin_tot = 0.; 11728 G4double PX1, PX2, PY1, PY2, PZ1, PZ2, P 11729 G4double RNDT, CTET1, STET1, RNDP, PHI1, 11730 G4double MASS, MASS1, MASS2; 11731 G4double vxout = 0., vyout = 0., vzout = 11732 G4int iain, izin, ianew, iznew, inin, in 11733 // 11734 G4double C = 29.97924580; // cm/ 11735 G4double AMU = 931.4940; // MeV 11736 // 11737 iain = idnint(ain); 11738 izin = idnint(zin); 11739 inin = iain - izin; 11740 ianew = idnint(anew); 11741 iznew = idnint(znew); 11742 innew = ianew - iznew; 11743 // 11744 if (ain == 0) 11745 return; 11746 // 11747 if (izin > 12) 11748 { 11749 mglms(ain, zin, 3, &MASS); 11750 mglms(anew, znew, 3, &MASS1); 11751 mglms(ain - anew, zin - znew, 3, &MA 11752 ekin_tot = MASS - MASS1 - MASS2; 11753 } 11754 else 11755 { 11756 // ekin_tot = 11757 // MEXP(ININ,IZIN)-(MEXP(INNEW,IZNE 11758 ekin_tot = 11759 masses->massexp[inin][izin] - (m 11760 if (izin > 12) 11761 std::cout << "*** ZIN > 12 ***" 11762 } 11763 11764 if (ekin_tot < 0.00) 11765 { 11766 // if( iain.ne.izin .and. iz 11767 // print *,"Negative Q-va 11768 // print *,"ekin_tot=",ek 11769 // print *,"ain,zin=",ain 11770 // print *,"anew,znew=",a 11771 // print * 11772 // } 11773 ekin_tot = 0.0; 11774 } 11775 // 11776 EKIN_P1 = ekin_tot * (ain - anew) / ain; 11777 ETOT_P1 = EKIN_P1 + anew * AMU; 11778 PTOT = anew * AMU * std::sqrt((EKIN_P1 / 11779 11780 RNDT = G4AblaRandom::flat(); 11781 CTET1 = 2.0 * RNDT - 1.0; 11782 STET1 = std::sqrt(1.0 - CTET1 * CTET1); 11783 RNDP = G4AblaRandom::flat(); 11784 PHI1 = RNDP * 2.0 * 3.141592654; 11785 PX1 = PTOT * STET1 * std::cos(PHI1); 11786 PY1 = PTOT * STET1 * std::sin(PHI1); 11787 PZ1 = PTOT * CTET1; 11788 *v1x = C * PX1 / ETOT_P1; 11789 *v1y = C * PY1 / ETOT_P1; 11790 *v1z = C * PZ1 / ETOT_P1; 11791 lorentz_boost(vxin, vyin, vzin, *v1x, *v 11792 *v1x = vxout; 11793 *v1y = vyout; 11794 *v1z = vzout; 11795 // 11796 PX2 = -PX1; 11797 PY2 = -PY1; 11798 PZ2 = -PZ1; 11799 ETOT_P2 = (ekin_tot - EKIN_P1) + (ain - 11800 *v2x = C * PX2 / ETOT_P2; 11801 *v2y = C * PY2 / ETOT_P2; 11802 *v2z = C * PZ2 / ETOT_P2; 11803 lorentz_boost(vxin, vyin, vzin, *v2x, *v 11804 *v2x = vxout; 11805 *v2y = vyout; 11806 *v2z = vzout; 11807 // 11808 return; 11809 } 11810 // 11811 //****************************************** 11812 // 11813 void G4Abla::lorentz_boost(G4double VXRIN, 11814 G4double VYRIN, 11815 G4double VZRIN, 11816 G4double VXIN, 11817 G4double VYIN, 11818 G4double VZIN, 11819 G4double* VXOUT, 11820 G4double* VYOUT, 11821 G4double* VZOUT) 11822 { 11823 // 11824 // Calculate velocities of a given fragm 11825 // Frame 1 is moving with velocity v=(vx 11826 // Velocity of the fragment in frame 1 - 11827 // Velocity of the fragment in frame 2 - 11828 // 11829 G4double VXR, VYR, VZR; 11830 G4double GAMMA, VR, C, CC, DENO, VXNOM, 11831 // 11832 C = 29.9792458; // cm/ns 11833 CC = C * C; 11834 // 11835 // VXR,VYR,VZR are velocities of frame 1 11836 // 2 we need to multiply them by -1 11837 VXR = -1.0 * VXRIN; 11838 VYR = -1.0 * VYRIN; 11839 VZR = -1.0 * VZRIN; 11840 // 11841 VR = std::sqrt(VXR * VXR + VYR * VYR + V 11842 if (VR < 1e-9) 11843 { 11844 *VXOUT = VXIN; 11845 *VYOUT = VYIN; 11846 *VZOUT = VZIN; 11847 return; 11848 } 11849 GAMMA = 1.0 / std::sqrt(1.0 - VR * VR / 11850 DENO = 1.0 - VXR * VXIN / CC - VYR * VYI 11851 11852 // X component 11853 VXNOM = -GAMMA * VXR + (1.0 + (GAMMA - 1 11854 (GAMMA - 1.0) * VXR * VYR / (VR 11855 11856 *VXOUT = VXNOM / (GAMMA * DENO); 11857 11858 // Y component 11859 VYNOM = -GAMMA * VYR + (1.0 + (GAMMA - 1 11860 (GAMMA - 1.0) * VXR * VYR / (VR 11861 11862 *VYOUT = VYNOM / (GAMMA * DENO); 11863 11864 // Z component 11865 VZNOM = -GAMMA * VZR + (1.0 + (GAMMA - 1 11866 (GAMMA - 1.0) * VXR * VZR / (VR 11867 11868 *VZOUT = VZNOM / (GAMMA * DENO); 11869 11870 return; 11871 } 11872 11873 void G4Abla::fission(G4double AF, 11874 G4double ZF, 11875 G4double EE, 11876 G4double JPRF, 11877 G4double* VX1_FISSION_p 11878 G4double* VY1_FISSION_p 11879 G4double* VZ1_FISSION_p 11880 G4double* VX2_FISSION_p 11881 G4double* VY2_FISSION_p 11882 G4double* VZ2_FISSION_p 11883 G4int* ZFP1, 11884 G4int* AFP1, 11885 G4int* SFP1, 11886 G4int* ZFP2, 11887 G4int* AFP2, 11888 G4int* SFP2, 11889 G4int* imode_par, 11890 G4double* VX_EVA_SC_par 11891 G4double* VY_EVA_SC_par 11892 G4double* VZ_EVA_SC_par 11893 G4double EV_TEMP[indexp 11894 G4int* IEV_TAB_FIS_par, 11895 G4int* NbLam0_par) 11896 { 11897 /// 11898 G4double EFF1 = 0., EFF2 = 0., VFF1 = 0. 11899 AFF2 = 0., ZFF2 = 0., vz1_eva = 11900 vx_eva_sc = 0., vy_eva_sc = 0., 11901 VY2OUT = 0., VZ2OUT = 0.; 11902 G4int IEV_TAB_FIS = 0, IEV_TAB_TEMP = 0; 11903 G4double EV_TEMP1[indexpart][6], EV_TEMP 11904 G4int inttype = 0, inum = 0; 11905 IEV_TAB_SSC = 0; 11906 (*imode_par) = 0; 11907 G4int NbLam0 = (*NbLam0_par); 11908 11909 for (G4int I1 = 0; I1 < indexpart; I1++) 11910 for (G4int I2 = 0; I2 < 6; I2++) 11911 { 11912 EV_TEMP[I1][I2] = 0.0; 11913 EV_TEMP1[I1][I2] = 0.0; 11914 EV_TEMP2[I1][I2] = 0.0; 11915 } 11916 11917 G4double et = EE - JPRF * JPRF * 197. * 11918 11919 fissionDistri(AF, ZF, et, AF1, ZF1, EFF1 11920 11921 // Lambda particles 11922 G4int NbLam1 = 0; 11923 G4int NbLam2 = 0; 11924 G4double pbH = (AF1 - ZF1) / (AF1 - ZF1 11925 for (G4int i = 0; i < NbLam0; i++) 11926 { 11927 if (G4AblaRandom::flat() < pbH) 11928 { 11929 NbLam1++; 11930 } 11931 else 11932 { 11933 NbLam2++; 11934 } 11935 } 11936 // Copy of the evaporated particles 11937 for (G4int IJ = 0; IJ < IEV_TAB_SSC; IJ+ 11938 { 11939 EV_TEMP[IJ][0] = EV_TAB_SSC[IJ][0]; 11940 EV_TEMP[IJ][1] = EV_TAB_SSC[IJ][1]; 11941 EV_TEMP[IJ][2] = EV_TAB_SSC[IJ][2]; 11942 EV_TEMP[IJ][3] = EV_TAB_SSC[IJ][3]; 11943 EV_TEMP[IJ][4] = EV_TAB_SSC[IJ][4]; 11944 EV_TEMP[IJ][5] = EV_TAB_SSC[IJ][5]; 11945 } 11946 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_SSC; 11947 11948 // Velocities 11949 G4double VZ1_FISSION = (2.0 * G4AblaRand 11950 G4double VPERP1 = std::sqrt(VFF1 * VFF1 11951 G4double ALPHA1 = G4AblaRandom::flat() * 11952 G4double VX1_FISSION = VPERP1 * std::sin 11953 G4double VY1_FISSION = VPERP1 * std::cos 11954 G4double VX2_FISSION = -VX1_FISSION / VF 11955 G4double VY2_FISSION = -VY1_FISSION / VF 11956 G4double VZ2_FISSION = -VZ1_FISSION / VF 11957 // 11958 // Fission fragment 1 11959 if ((ZF1 <= 0.0) || (AF1 <= 0.0) || (AF1 11960 { 11961 std::cout << "F1 unphysical: " << ZF 11962 } 11963 else 11964 { 11965 // fission and IMF emission are not 11966 opt->optimfallowed = 0; // IMF is n 11967 fiss->ifis = 0; // fission 11968 gammaemission = 1; 11969 G4int FF11 = 0, FIMF11 = 0; 11970 G4double ZIMFF1 = 0., AIMFF1 = 0., T 11971 // 11972 evapora(ZF1, 11973 AF1, 11974 &EFF1, 11975 0., 11976 &ZFF1, 11977 &AFF1, 11978 &mtota, 11979 &vz1_eva, 11980 &vx1_eva, 11981 &vy1_eva, 11982 &FF11, 11983 &FIMF11, 11984 &ZIMFF1, 11985 &AIMFF1, 11986 &TKEIMF1, 11987 &JPRFOUT, 11988 &inttype, 11989 &inum, 11990 EV_TEMP1, 11991 &IEV_TAB_TEMP, 11992 &NbLam1); 11993 11994 for (G4int IJ = 0; IJ < IEV_TAB_TEMP 11995 { 11996 EV_TEMP[IJ + IEV_TAB_FIS][0] = E 11997 EV_TEMP[IJ + IEV_TAB_FIS][1] = E 11998 // Lorentz kinematics 11999 // EV_TEMP(IJ+IEV_ 12000 // EV_TEMP(IJ+IEV_ 12001 // EV_TEMP(IJ+IEV_ 12002 // Lorentz transformation 12003 lorentz_boost(VX1_FISSION, 12004 VY1_FISSION, 12005 VZ1_FISSION, 12006 EV_TEMP1[IJ][2], 12007 EV_TEMP1[IJ][3], 12008 EV_TEMP1[IJ][4], 12009 &VXOUT, 12010 &VYOUT, 12011 &VZOUT); 12012 lorentz_boost(vx_eva_sc, vy_eva_ 12013 EV_TEMP[IJ + IEV_TAB_FIS][2] = V 12014 EV_TEMP[IJ + IEV_TAB_FIS][3] = V 12015 EV_TEMP[IJ + IEV_TAB_FIS][4] = V 12016 // 12017 } 12018 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_ 12019 } 12020 // 12021 // Fission fragment 2 12022 if ((ZF2 <= 0.0) || (AF2 <= 0.0) || (AF2 12023 { 12024 std::cout << "F2 unphysical: " << ZF 12025 } 12026 else 12027 { 12028 // fission and IMF emission are not 12029 opt->optimfallowed = 0; // IMF is n 12030 fiss->ifis = 0; // fission 12031 gammaemission = 1; 12032 G4int FF22 = 0, FIMF22 = 0; 12033 G4double ZIMFF2 = 0., AIMFF2 = 0., T 12034 // 12035 evapora(ZF2, 12036 AF2, 12037 &EFF2, 12038 0., 12039 &ZFF2, 12040 &AFF2, 12041 &mtota, 12042 &vz2_eva, 12043 &vx2_eva, 12044 &vy2_eva, 12045 &FF22, 12046 &FIMF22, 12047 &ZIMFF2, 12048 &AIMFF2, 12049 &TKEIMF2, 12050 &JPRFOUT, 12051 &inttype, 12052 &inum, 12053 EV_TEMP2, 12054 &IEV_TAB_TEMP, 12055 &NbLam2); 12056 12057 for (G4int IJ = 0; IJ < IEV_TAB_TEMP 12058 { 12059 EV_TEMP[IJ + IEV_TAB_FIS][0] = E 12060 EV_TEMP[IJ + IEV_TAB_FIS][1] = E 12061 // Lorentz kinematics 12062 // EV_TEMP(IJ+IEV_ 12063 // EV_TEMP(IJ+IEV_ 12064 // EV_TEMP(IJ+IEV_ 12065 // Lorentz transformation 12066 lorentz_boost(VX2_FISSION, 12067 VY2_FISSION, 12068 VZ2_FISSION, 12069 EV_TEMP2[IJ][2], 12070 EV_TEMP2[IJ][3], 12071 EV_TEMP2[IJ][4], 12072 &VXOUT, 12073 &VYOUT, 12074 &VZOUT); 12075 lorentz_boost(vx_eva_sc, vy_eva_ 12076 EV_TEMP[IJ + IEV_TAB_FIS][2] = V 12077 EV_TEMP[IJ + IEV_TAB_FIS][3] = V 12078 EV_TEMP[IJ + IEV_TAB_FIS][4] = V 12079 // 12080 } 12081 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_ 12082 } 12083 // 12084 // Lorentz kinematics 12085 // vx1_fission = vx1_fission + vx1_ 12086 // vy1_fission = vy1_fission + vy1_ 12087 // vz1_fission = vz1_fission + vz1_ 12088 // vx2_fission = vx2_fission + vx2_ 12089 // vy2_fission = vy2_fission + vy2_ 12090 // vz2_fission = vz2_fission + vz2_ 12091 // The v_eva_sc contribution is consider 12092 // Lorentz transformations 12093 lorentz_boost(vx1_eva, vy1_eva, vz1_eva, 12094 VX1_FISSION = VXOUT; 12095 VY1_FISSION = VYOUT; 12096 VZ1_FISSION = VZOUT; 12097 lorentz_boost(vx2_eva, vy2_eva, vz2_eva, 12098 VX2_FISSION = VXOUT; 12099 VY2_FISSION = VYOUT; 12100 VZ2_FISSION = VZOUT; 12101 // 12102 (*ZFP1) = idnint(ZFF1); 12103 (*AFP1) = idnint(AFF1); 12104 (*SFP1) = NbLam1; 12105 (*VX1_FISSION_par) = VX1_FISSION; 12106 (*VY1_FISSION_par) = VY1_FISSION; 12107 (*VZ1_FISSION_par) = VZ1_FISSION; 12108 (*VX_EVA_SC_par) = vx_eva_sc; 12109 (*VY_EVA_SC_par) = vy_eva_sc; 12110 (*VZ_EVA_SC_par) = vz_eva_sc; 12111 (*ZFP2) = idnint(ZFF2); 12112 (*AFP2) = idnint(AFF2); 12113 (*SFP2) = NbLam2; 12114 (*VX2_FISSION_par) = VX2_FISSION; 12115 (*VY2_FISSION_par) = VY2_FISSION; 12116 (*VZ2_FISSION_par) = VZ2_FISSION; 12117 (*IEV_TAB_FIS_par) = IEV_TAB_FIS; 12118 (*NbLam0_par) = NbLam1 + NbLam2; 12119 if (NbLam0 > (NbLam1 + NbLam2)) 12120 varntp->kfis = 25; 12121 return; 12122 } 12123 //****************************************** 12124 // 12125 void G4Abla::tke_bu(G4double Z, G4double A, 12126 { 12127 12128 G4double V_over_V0, R0, RALL, RHAZ, R, T 12129 12130 V_over_V0 = 6.0; 12131 R0 = 1.16; 12132 12133 if (Z < 1.0) 12134 { 12135 *VX = 0.0; 12136 *VY = 0.0; 12137 *VZ = 0.0; 12138 return; 12139 } 12140 12141 RALL = R0 * std::pow(V_over_V0, 1.0 / 3. 12142 RHAZ = G4double(haz(1)); 12143 R = std::pow(RHAZ, 1.0 / 3.0) * RALL; 12144 TKE = 1.44 * Z * ZALL * R * R * (1.0 - A 12145 12146 Ekin = TKE * (AAL - A) / AAL; 12147 // print*,'!!!',IDNINT(AAl),IDNINT 12148 V = std::sqrt(Ekin / A) * 1.3887; 12149 *VZ = (2.0 * G4double(haz(1)) - 1.0) * V 12150 VPERP = std::sqrt(V * V - (*VZ) * (*VZ)) 12151 ALPHA1 = G4double(haz(1)) * 2.0 * 3.142; 12152 *VX = VPERP * std::sin(ALPHA1); 12153 *VY = VPERP * std::cos(ALPHA1); 12154 return; 12155 } 12156 12157 G4double G4Abla::haz(G4int k) 12158 { 12159 // const G4int pSize = 110; 12160 // static G4ThreadLocal G4double p[pSize 12161 static G4ThreadLocal G4int ix = 0; 12162 static G4ThreadLocal G4double x = 0.0, y 12163 // k =< -1 on initialise 12164 // k = -1 c'est reproductible 12165 // k < -1 || k > -1 ce n'est pas reprod 12166 /* 12167 // Zero is invalid random seed. Set pr 12168 collection: if(ix == 0) { 12169 // ix = hazard->ial; 12170 } 12171 */ 12172 if (k <= -1) 12173 { // then 12174 if (k == -1) 12175 { // then 12176 ix = 0; 12177 } 12178 else 12179 { 12180 x = 0.0; 12181 y = secnds(G4int(x)); 12182 ix = G4int(y * 100 + 43543000); 12183 if (mod(ix, 2) == 0) 12184 { 12185 ix = ix + 1; 12186 } 12187 } 12188 } 12189 12190 return G4AblaRandom::flat(); 12191 } 12192 12193 // Random generator according to the 12194 // powerfunction y = x**(lambda) in the ran 12195 // xmin, xmax and y are integers. 12196 // lambda must be different from -1 ! 12197 G4int G4Abla::IPOWERLIMHAZ(G4double lambda, 12198 { 12199 G4double y, l_plus, rxmin, rxmax; 12200 l_plus = lambda + 1.; 12201 rxmin = G4double(xmin) - 0.5; 12202 rxmax = G4double(xmax) + 0.5; 12203 // y=(HAZ(k)*(rxmax**l_plus-rxmin* 12204 // rxmin**l_plus)**(1.E0/l_plus) 12205 y = std::pow(G4AblaRandom::flat() * (std 12206 1.0 / l_plus); 12207 return nint(y); 12208 } 12209 12210 void G4Abla::AMOMENT(G4double AABRA, G4doubl 12211 { 12212 12213 G4int ISIGOPT = 0; 12214 G4double GOLDHA_BU = 0., GOLDHA = 0.; 12215 G4double PI = 3.141592653589793; 12216 // nu = 1.d0 12217 12218 // G4double BETAP = sqrt(1.0 - 1.0/sqrt 12219 // G4double GAMMAP = 1.0 / sqrt(1. - BE 12220 // G4double FACT_PROJ = (GAMMAP + 1.) / 12221 12222 // G4double R = 1.160 * pow(APRF,1.0/3.0 12223 12224 // G4double RNDT = double(haz(1)); 12225 // G4double CTET = 2.0*RNDT-1.0; 12226 // G4double TETA = acos(CTET); 12227 // G4double RNDP = double(haz(1)); 12228 // G4double PHI = RNDP*2.0*PI; 12229 // G4double STET = sqrt(1.0-CTET*CTET); 12230 // RX = R * STET * DCOS(PHI) 12231 // RY = R * STET * DSIN(PHI) 12232 // RZ = R * CTET 12233 12234 // G4double RZ = 0.0; 12235 // G4double RY = R * sin(PHI); 12236 // G4double RX = R * cos(PHI); 12237 12238 // In MeV/C 12239 G4double V0_over_VBU = 1.0 / 6.0; 12240 G4double SIGMA_0 = 118.50; 12241 G4double Efermi = 5.0 * SIGMA_0 * SIGMA_ 12242 12243 if (IMULTIFR == 1) 12244 { 12245 if (ISIGOPT == 0) 12246 { 12247 // "Fermi model" picture: 12248 // Influence of expansion: 12249 SIGMA_0 = SIGMA_0 * std::pow(V0_ 12250 // To take into account the infl 12251 // W. Bauer, PRC 51 (1995) 803) 12252 // Efermi = 5.D0 * SIGMA_ 12253 12254 GOLDHA_BU = SIGMA_0 * std::sqrt( 12255 GOLDHA = 12256 GOLDHA_BU * std::sqrt(1.0 + 12257 // PRINT*,'AFTER BU fermi: 12258 // & 12259 } 12260 else 12261 { 12262 // Thermal equilibrium picture ( 12263 // with sigma2=M*T) The factor ( 12264 // conservation: 12265 GOLDHA_BU = std::sqrt(APRF * T_f 12266 GOLDHA = GOLDHA_BU; 12267 // PRINT*,'AFTER BU therm: 12268 // & 12269 } 12270 } 12271 else 12272 { 12273 GOLDHA = SIGMA_0 * std::sqrt((APRF * 12274 } 12275 12276 G4int IS = 0; 12277 mom123: 12278 *PX = G4double(gausshaz(1, 0.0, GOLDHA)) 12279 IS = IS + 1; 12280 if (IS > 100) 12281 { 12282 std::cout << "WARNING: GAUSSHAZ CALL 12283 "CALCULATING PX IN Rn07 12284 << std::endl; 12285 *PX = (AABRA - 1.0) * 931.4940; 12286 } 12287 if (std::abs(*PX) >= AABRA * 931.494) 12288 { 12289 // PRINT*,'VX > C',PX,IDNINT(A 12290 goto mom123; 12291 } 12292 IS = 0; 12293 mom456: 12294 *PY = G4double(gausshaz(1, 0.0, GOLDHA)) 12295 IS = IS + 1; 12296 if (IS > 100) 12297 { 12298 std::cout << "WARNING: GAUSSHAZ CALL 12299 "CALCULATING PY IN Rn07 12300 << std::endl; 12301 *PY = (AABRA - 1.0) * 931.4940; 12302 } 12303 if (std::abs(*PY) >= AABRA * 931.494) 12304 { 12305 // PRINT*,'VX > C',PX,IDNINT(A 12306 goto mom456; 12307 } 12308 IS = 0; 12309 mom789: 12310 *PZ = G4double(gausshaz(1, 0.0, GOLDHA)) 12311 IS = IS + 1; 12312 if (IS > 100) 12313 { 12314 std::cout << "WARNING: GAUSSHAZ CALL 12315 "CALCULATING PZ IN Rn07 12316 << std::endl; 12317 *PZ = (AABRA - 1.0) * 931.4940; 12318 } 12319 if (std::abs(*PZ) >= AABRA * 931.494) 12320 { 12321 // PRINT*,'VX > C',PX,IDNINT(A 12322 goto mom789; 12323 } 12324 return; 12325 } 12326 12327 G4double G4Abla::gausshaz(G4int k, G4double 12328 { 12329 // Gaussian random numbers: 12330 12331 // 1005 C*** TIRAGE ALEATOIRE DA 12332 // MOYENNE XMOY 12333 static G4ThreadLocal G4int iset = 0; 12334 static G4ThreadLocal G4double v1, v2, r, 12335 12336 if (iset == 0) 12337 { // then 12338 do 12339 { 12340 v1 = 2.0 * haz(k) - 1.0; 12341 v2 = 2.0 * haz(k) - 1.0; 12342 r = std::pow(v1, 2) + std::pow(v 12343 } while (r >= 1); 12344 12345 fac = std::sqrt(-2. * std::log(r) / 12346 gset = v1 * fac; 12347 fgausshaz = v2 * fac * sig + xmoy; 12348 iset = 1; 12349 } 12350 else 12351 { 12352 fgausshaz = gset * sig + xmoy; 12353 iset = 0; 12354 } 12355 return fgausshaz; 12356 } 12357