Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4Abla Class Reference

#include <G4Abla.hh>

Public Member Functions

 G4Abla (G4VarNtp *aVarntp)
 ~G4Abla ()=default
 G4Abla (G4Abla const &other)
 Dummy copy constructor.
G4Ablaoperator= (G4Abla const &other)
 Dummy assignment operator.
void setVerboseLevel (G4int level)
void DeexcitationAblaxx (G4int nucleusA, G4int nucleusZ, G4double excitationEnergy, G4double angularMomentum, G4double momX, G4double momY, G4double momZ, G4int eventnumber)
void DeexcitationAblaxx (G4int nucleusA, G4int nucleusZ, G4double excitationEnergy, G4double angularMomentum, G4double momX, G4double momY, G4double momZ, G4int eventnumber, G4int nucleusS)
void initEvapora ()
void SetParameters ()
void SetParametersG4 (G4int z, G4int a)
void qrot (G4double z, G4double a, G4double bet, G4double sig, G4double u, G4double *qr)
void mglw (G4double a, G4double z, G4double *el)
void mglms (G4double a, G4double z, G4int refopt4, G4double *el)
G4double fissility (G4int a, G4int z, G4int ny, G4double sn, G4double slam, G4int optxfis)
void evapora (G4double zprf, G4double aprf, G4double *ee_par, G4double jprf, G4double *zf_par, G4double *af_par, G4double *mtota_par, G4double *vleva_par, G4double *vxeva_par, G4double *vyeva_par, G4int *ff_par, G4int *fimf_par, G4double *fzimf, G4double *faimf, G4double *tkeimf_par, G4double *jprfout, G4int *inttype_par, G4int *inum_par, G4double EV_TEMP[indexpart][6], G4int *iev_tab_temp_par, G4int *nblam0)
void direct (G4double zprf, G4double a, G4double ee, G4double jprf, G4double *probp_par, G4double *probd_par, G4double *probt_par, G4double *probn_par, G4double *probhe_par, G4double *proba_par, G4double *probg_par, G4double *probimf_par, G4double *probf_par, G4double *problamb0_par, G4double *ptotl_par, G4double *sn_par, G4double *sbp_par, G4double *sbd_par, G4double *sbt_par, G4double *sbhe_par, G4double *sba_par, G4double *slamb0_par, G4double *ecn_par, G4double *ecp_par, G4double *ecd_par, G4double *ect_par, G4double *eche_par, G4double *eca_par, G4double *ecg_par, G4double *eclamb0_par, G4double *bp_par, G4double *bd_par, G4double *bt_par, G4double *bhe_par, G4double *ba_par, G4double *sp_par, G4double *sd_par, G4double *st_par, G4double *she_par, G4double *sa_par, G4double *ef_par, G4double *ts1_par, G4int, G4int inum, G4int itest, G4int *sortie, G4double *tcn, G4double *jprfn_par, G4double *jprfp_par, G4double *jprfd_par, G4double *jprft_par, G4double *jprfhe_par, G4double *jprfa_par, G4double *jprflamb0_par, G4double *tsum_par, G4int NbLam0)
void fission (G4double AF, G4double ZF, G4double EE, G4double JPRF, G4double *VX1_FISSION, G4double *VY1_FISSION, G4double *VZ1_FISSION, G4double *VX2_FISSION, G4double *VY2_FISSION, G4double *VZ2_FISSION, G4int *ZFP1, G4int *AFP1, G4int *SFP1, G4int *ZFP2, G4int *AFP2, G4int *SFP2, G4int *imode, G4double *VX_EVA_SC, G4double *VY_EVA_SC, G4double *VZ_EVA_SC, G4double EV_TEMP[indexpart][6], G4int *IEV_TAB_FIS, G4int *NbLam0)
void lorentz_boost (G4double VXRIN, G4double VYRIN, G4double VZRIN, G4double VXIN, G4double VYIN, G4double VZIN, G4double *VXOUT, G4double *VYOUT, G4double *VZOUT)
void unstable_nuclei (G4int AFP, G4int ZFP, G4int *AFPNEW, G4int *ZFPNEW, G4int &IOUNSTABLE, G4double VX, G4double VY, G4double VZ, G4double *VP1X, G4double *VP1Y, G4double *VP1Z, G4double BU_TAB_TEMP[indexpart][6], G4int *ILOOP)
void unstable_tke (G4double AIN, G4double ZIN, G4double ANEW, G4double ZNEW, G4double VXIN, G4double VYIN, G4double VZIN, G4double *V1X, G4double *V1Y, G4double *V1Z, G4double *V2X, G4double *V2Y, G4double *V2Z)
void tke_bu (G4double Z, G4double A, G4double ZALL, G4double AAL, G4double *VX, G4double *VY, G4double *VZ)
void AMOMENT (G4double AABRA, G4double APRF, G4int IMULTIFR, G4double *PX, G4double *PY, G4double *PZ)
void barrs (G4int Z1, G4int A1, G4int Z2, G4int A2, G4double *sBARR, G4double *sOMEGA)
void evap_postsaddle (G4double A, G4double Z, G4double E_scission_pre, G4double *E_scission_post, G4double *A_scission, G4double *Z_scission, G4double &vx_eva, G4double &vy_eva, G4double &vz_eva, G4int *NbLam0_par)
void imf (G4double ACN, G4double ZCN, G4double TEMP, G4double EE, G4double *ZIMF, G4double *AIMF, G4double *BIMF, G4double *SBIMF, G4double *TIMF, G4double JPRF)
void fomega_sp (G4double AF, G4double Y, G4double *MFCD, G4double *sOMEGA, G4double *sHOMEGA)
void fomega_gs (G4double AF, G4double ZF, G4double *K1, G4double *sOMEGA, G4double *sHOMEGA)
G4double tunnelling (G4double A, G4double ZPRF, G4double Y, G4double EE, G4double EF, G4double TEMP, G4double DENSG, G4double DENSF, G4double ENH_FACT)
void fission_width (G4double ZPRF, G4double A, G4double EE, G4double BS, G4double BK, G4double EF, G4double Y, G4double *GF, G4double *TEMP, G4double JPR, G4int IEROT, G4int FF_ALLOWED, G4int OPTCOL, G4int OPTSHP, G4double DENSG)
void unbound (G4double SN, G4double SP, G4double SD, G4double ST, G4double SHE, G4double SA, G4double BP, G4double BD, G4double BT, G4double BHE, G4double BA, G4double *PROBF, G4double *PROBN, G4double *PROBP, G4double *PROBD, G4double *PROBT, G4double *PROBHE, G4double *PROBA, G4double *PROBIMF, G4double *PROBG, G4double *ECN, G4double *ECP, G4double *ECD, G4double *ECT, G4double *ECHE, G4double *ECA)
void fissionDistri (G4double &a, G4double &z, G4double &e, G4double &a1, G4double &z1, G4double &e1, G4double &v1, G4double &a2, G4double &z2, G4double &e2, G4double &v2, G4double &vx_eva_sc, G4double &vy_eva_sc, G4double &vz_eva_sc, G4int *NbLam0_par)
void even_odd (G4double r_origin, G4double r_even_odd, G4int &i_out)
G4double umass (G4double z, G4double n, G4double beta)
G4double ecoul (G4double z1, G4double n1, G4double beta1, G4double z2, G4double n2, G4double beta2, G4double d)
G4double Uwash (G4double E, G4double Ecrit, G4double Freduction, G4double gamma)
G4double frldm (G4double z, G4double n, G4double beta)
G4double eflmac_profi (G4double a, G4double z)
G4double gausshaz (G4int k, G4double xmoy, G4double sig)
G4double haz (G4int k)
void densniv (G4double a, G4double z, G4double ee, G4double ef, G4double *dens, G4double bshell, G4double bs, G4double bk, G4double *temp, G4int optshp, G4int optcol, G4double defbet, G4double *ecor, G4double jprf, G4int ifis, G4double *qr)
void part_fiss (G4double BET, G4double GP, G4double GF, G4double Y, G4double TAUF, G4double TS1, G4double TSUM, G4int *CHOICE, G4double ZF, G4double AF, G4double FT, G4double *T_LAPSE, G4double *GF_LOC)
G4double func_trans (G4double TIME, G4double ZF, G4double AF, G4double BET, G4double Y, G4double FT, G4double T_0)
void lpoly (G4double x, G4int n, G4double pl[])
G4double eflmac (G4int ia, G4int iz, G4int flag, G4int optshp)
void appariem (G4double a, G4double z, G4double *del)
void parite (G4double n, G4double *par)
G4double tau (G4double bet, G4double homega, G4double ef, G4double t)
G4double cram (G4double bet, G4double homega)
G4double bipol (G4int iflag, G4double y)
void barfit (G4int iz, G4int ia, G4int il, G4double *sbfis, G4double *segs, G4double *selmax)
G4double width (G4double AMOTHER, G4double ZMOTHER, G4double APART, G4double ZPART, G4double TEMP, G4double B1, G4double SB1, G4double EXC)
G4double pen (G4double A, G4double ap, G4double omega, G4double T)
void lorb (G4double AMOTHER, G4double ADAUGHTER, G4double LMOTHER, G4double EEFINAL, G4double *LORBITAL, G4double *SIGMA_LORBITAL)
void bsbkbc (G4double A, G4double Z, G4double *BS, G4double *BK, G4double *BC)
G4double erf (G4double x)
G4double gammp (G4double a, G4double x)
void gcf (G4double *gammcf, G4double a, G4double x, G4double gln)
void gser (G4double *gamser, G4double a, G4double x, G4double gln)
G4double fvmaxhaz (G4double T)
G4double fvmaxhaz_neut (G4double x)
void standardRandom (G4double *rndm, G4long *seed)
G4double gammln (G4double xx)
G4double fd (G4double E)
G4double f (G4double E)
G4double fmaxhaz (G4double T)
G4double fmaxhaz_old (G4double T)
G4int IPOWERLIMHAZ (G4double lambda, G4int xmin, G4int xmax)
void guet (G4double *x_par, G4double *z_par, G4double *find_par)
void isostab_lim (G4int z, G4int *nmin, G4int *nmax)
void FillData (G4int IMULTBU, G4int IEV_TAB)
G4double gethyperseparation (G4double A, G4double Z, G4int ny)
G4double getdeltabinding (G4double a, G4int nblamb)
G4double gethyperbinding (G4double A, G4double Z, G4int ny)
G4int min (G4int a, G4int b)
G4double min (G4double a, G4double b)
G4int max (G4int a, G4int b)
G4double max (G4double a, G4double b)
G4double DSIGN (G4double a, G4double b)
G4int ISIGN (G4int a, G4int b)
G4int nint (G4double number)
G4int secnds (G4int x)
G4int mod (G4int a, G4int b)
G4double dmod (G4double a, G4double b)
G4double dint (G4double a)
G4int idint (G4double a)
G4int idnint (G4double value)
G4double utilabs (G4double a)
G4double dmin1 (G4double a, G4double b, G4double c)

Detailed Description

Class containing ABLA++ de-excitation code.

Definition at line 46 of file G4Abla.hh.

Constructor & Destructor Documentation

◆ G4Abla() [1/2]

G4Abla::G4Abla ( G4VarNtp * aVarntp)

This constructor is used by standalone test driver and the Geant4 interface.

Parameters
aHazardrandom seeds
aVolantdata structure for ABLA output
aVarNtpdata structure for transfering ABLA output to Geant4 interface

Definition at line 47 of file G4Abla.cc.

48{
49 verboseLevel = 0;
50 ilast = 0;
51 varntp = static_cast<G4VarNtp*>(aVarntp); // Output data structure
52
53 verboseLevel = 0;
54 gammaemission = 0; // 0 presaddle, 1 postsaddle
55 T_freeze_out_in = T_freeze_out = 0.;
56 Ainit = 0;
57 Zinit = 0;
58 Sinit = 0;
59 IEV_TAB_SSC = 0;
60
61 ald = std::make_unique<G4Ald>();
62 ec2sub = std::make_unique<G4Ec2sub>();
63 ecld = std::make_unique<G4Ecld>();
64 masses = std::make_unique<G4Mexp>();
65 fb = std::make_unique<G4Fb>();
66 fiss = std::make_unique<G4Fiss>();
67 opt = std::make_unique<G4Opt>();
68}

Referenced by G4Abla(), and operator=().

◆ ~G4Abla()

G4Abla::~G4Abla ( )
default

Basic destructor.

◆ G4Abla() [2/2]

G4Abla::G4Abla ( G4Abla const & other)

Dummy copy constructor.

Member Function Documentation

◆ AMOMENT()

void G4Abla::AMOMENT ( G4double AABRA,
G4double APRF,
G4int IMULTIFR,
G4double * PX,
G4double * PY,
G4double * PZ )

Calculation of the angular momentum of breakup fragments according to Goldhaber model

Definition at line 10453 of file G4Abla.cc.

10455{
10456 G4int ISIGOPT = 0;
10457 G4double GOLDHA_BU = 0., GOLDHA = 0.;
10458 G4double PI = 3.141592653589793;
10459 // nu = 1.d0
10460
10461 // G4double BETAP = sqrt(1.0 - 1.0/sqrt(1.0+EAP/931.494));
10462 // G4double GAMMAP = 1.0 / sqrt(1. - BETAP*BETAP);
10463 // G4double FACT_PROJ = (GAMMAP + 1.) / (BETAP * GAMMAP);
10464
10465 // G4double R = 1.160 * pow(APRF,1.0/3.0);
10466
10467 // G4double RNDT = double(haz(1));
10468 // G4double CTET = 2.0*RNDT-1.0;
10469 // G4double TETA = acos(CTET);
10470 // G4double RNDP = double(haz(1));
10471 // G4double PHI = RNDP*2.0*PI;
10472 // G4double STET = sqrt(1.0-CTET*CTET);
10473 // RX = R * STET * DCOS(PHI)
10474 // RY = R * STET * DSIN(PHI)
10475 // RZ = R * CTET
10476
10477 // G4double RZ = 0.0;
10478 // G4double RY = R * sin(PHI);
10479 // G4double RX = R * cos(PHI);
10480
10481 // In MeV/C
10482 G4double V0_over_VBU = 1.0 / 6.0;
10483 G4double SIGMA_0 = 118.50;
10484 G4double Efermi = 5.0 * SIGMA_0 * SIGMA_0 / (2.0 * 931.4940);
10485
10486 if (IMULTIFR == 1) {
10487 if (ISIGOPT == 0) {
10488 // "Fermi model" picture:
10489 // Influence of expansion:
10490 SIGMA_0 = SIGMA_0 * std::pow(V0_over_VBU, 1.0 / 3.0);
10491 // To take into account the influence of thermal motion of nucleons (see
10492 // W. Bauer, PRC 51 (1995) 803)
10493 // Efermi = 5.D0 * SIGMA_0 * SIGMA_0 / (2.D0 * 931.49D0)
10494
10495 GOLDHA_BU = SIGMA_0 * std::sqrt((APRF * (AABRA - APRF)) / (AABRA - 1.0));
10496 GOLDHA =
10497 GOLDHA_BU
10498 * std::sqrt(1.0 + 5.0 * PI * PI / 12.0 * (T_freeze_out / Efermi) * (T_freeze_out / Efermi));
10499 // PRINT*,'AFTER BU fermi:',IDNINT(AABRA),IDNINT(APRF),GOLDHA,
10500 // & GOLDHA_BU
10501 }
10502 else {
10503 // Thermal equilibrium picture (<=> to Boltzmann distribution in momentum
10504 // with sigma2=M*T) The factor (AABRA-APRF)/AP comes from momentum
10505 // conservation:
10506 GOLDHA_BU = std::sqrt(APRF * T_freeze_out * 931.494 * (AABRA - APRF) / AABRA);
10507 GOLDHA = GOLDHA_BU;
10508 // PRINT*,'AFTER BU therm:',IDNINT(AABRA),IDNINT(APRF),GOLDHA,
10509 // & GOLDHA_BU
10510 }
10511 }
10512 else {
10513 GOLDHA = SIGMA_0 * std::sqrt((APRF * (AABRA - APRF)) / (AABRA - 1.0));
10514 }
10515
10516 G4int IS = 0;
10517mom123:
10518 *PX = G4double(gausshaz(1, 0.0, GOLDHA));
10519 IS = IS + 1;
10520 if (IS > 100) {
10521 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN "
10522 "CALCULATING PX IN Rn07.FOR. A VALUE WILL BE FORCED."
10523 << std::endl;
10524 *PX = (AABRA - 1.0) * 931.4940;
10525 }
10526 if (std::abs(*PX) >= AABRA * 931.494) {
10527 // PRINT*,'VX > C',PX,IDNINT(APRF)
10528 goto mom123;
10529 }
10530 IS = 0;
10531mom456:
10532 *PY = G4double(gausshaz(1, 0.0, GOLDHA));
10533 IS = IS + 1;
10534 if (IS > 100) {
10535 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN "
10536 "CALCULATING PY IN Rn07.FOR. A VALUE WILL BE FORCED."
10537 << std::endl;
10538 *PY = (AABRA - 1.0) * 931.4940;
10539 }
10540 if (std::abs(*PY) >= AABRA * 931.494) {
10541 // PRINT*,'VX > C',PX,IDNINT(APRF)
10542 goto mom456;
10543 }
10544 IS = 0;
10545mom789:
10546 *PZ = G4double(gausshaz(1, 0.0, GOLDHA));
10547 IS = IS + 1;
10548 if (IS > 100) {
10549 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN "
10550 "CALCULATING PZ IN Rn07.FOR. A VALUE WILL BE FORCED."
10551 << std::endl;
10552 *PZ = (AABRA - 1.0) * 931.4940;
10553 }
10554 if (std::abs(*PZ) >= AABRA * 931.494) {
10555 // PRINT*,'VX > C',PX,IDNINT(APRF)
10556 goto mom789;
10557 }
10558 return;
10559}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
G4double gausshaz(G4int k, G4double xmoy, G4double sig)
Definition G4Abla.cc:10561

Referenced by DeexcitationAblaxx().

◆ appariem()

void G4Abla::appariem ( G4double a,
G4double z,
G4double * del )

Procedure for calculating the pairing correction to the binding energy of a specific nucleus.

Definition at line 5270 of file G4Abla.cc.

5271{
5272 // CALCUL DE LA CORRECTION, DUE A L'APPARIEMENT, DE L'ENERGIE DE
5273 // LIAISON D'UN NOYAU
5274 // PROCEDURE FOR CALCULATING THE PAIRING CORRECTION TO THE BINDING
5275 // ENERGY OF A SPECIFIC NUCLEUS
5276
5277 G4double para = 0.0, parz = 0.0;
5278 // A MASS NUMBER
5279 // Z NUCLEAR CHARGE
5280 // PARA HELP VARIABLE FOR PARITY OF A
5281 // PARZ HELP VARIABLE FOR PARITY OF Z
5282 // DEL PAIRING CORRECTION
5283
5284 parite(a, &para);
5285
5286 if (para < 0.0) {
5287 (*del) = 0.0;
5288 }
5289 else {
5290 parite(z, &parz);
5291 if (parz > 0.0) {
5292 (*del) = -12.0 / std::sqrt(a);
5293 }
5294 else {
5295 (*del) = 12.0 / std::sqrt(a);
5296 }
5297 }
5298}
void parite(G4double n, G4double *par)
Definition G4Abla.cc:5300

◆ barfit()

void G4Abla::barfit ( G4int iz,
G4int ia,
G4int il,
G4double * sbfis,
G4double * segs,
G4double * selmax )

THIS SUBROUTINE RETURNS THE BARRIER HEIGHT BFIS, THE GROUND-STATE ENERGY SEGS, IN MEV, AND THE ANGULAR MOMENTUM AT WHICH THE FISSION BARRIER DISAPPEARS, LMAX, IN UNITS OF H-BAR, WHEN CALLED WITH INTEGER AGUMENTS IZ, THE ATOMIC NUMBER, IA, THE ATOMIC MASS NUMBER, AND IL, THE ANGULAR MOMENTUM IN UNITS OF H-BAR. (PLANCK'S CONSTANT DIVIDED BY 2*PI).

Definition at line 5517 of file G4Abla.cc.

5518{
5519 // 2223 C VERSION FOR 32BIT COMPUTER
5520 // 2224 C THIS SUBROUTINE RETURNS THE BARRIER HEIGHT BFIS, THE
5521 // 2225 C GROUND-STATE ENERGY SEGS, IN MEV, AND THE ANGULAR MOMENTUM
5522 // 2226 C AT WHICH THE FISSION BARRIER DISAPPEARS, LMAX, IN UNITS OF
5523 // 2227 C H-BAR, WHEN CALLED WITH INTEGER AGUMENTS IZ, THE ATOMIC
5524 // 2228 C NUMBER, IA, THE ATOMIC MASS NUMBER, AND IL, THE ANGULAR
5525 // 2229 C MOMENTUM IN UNITS OF H-BAR. (PLANCK'S CONSTANT DIVIDED BY
5526 // 2230 C 2*PI).
5527 // 2231 C
5528 // 2232 C THE FISSION BARRIER FO IL = 0 IS CALCULATED FROM A 7TH
5529 // 2233 C ORDER FIT IN TWO VARIABLES TO 638 CALCULATED FISSION
5530 // 2234 C BARRIERS FOR Z VALUES FROM 20 TO 110. THESE 638 BARRIERS
5531 // ARE 2235 C FIT WITH AN RMS DEVIATION OF 0.10 MEV BY THIS 49-PARAMETER
5532 // 2236 C FUNCTION.
5533 // 2237 C IF BARFIT IS CALLED WITH (IZ,IA) VALUES OUTSIDE THE RANGE
5534 // OF 2238 C THE BARRIER HEIGHT IS SET TO 0.0, AND A MESSAGE IS PRINTED
5535 // 2239 C ON THE DEFAULT OUTPUT FILE.
5536 // 2240 C
5537 // 2241 C FOR IL VALUES NOT EQUAL TO ZERO, THE VALUES OF L AT
5538 // WHICH 2242 C THE BARRIER IS 80% AND 20% OF THE L=0 VALUE ARE
5539 // RESPECTIVELY
5540 // 2243 C FIT TO 20-PARAMETER FUNCTIONS OF Z AND A, OVER A MORE
5541 // 2244 C RESTRICTED RANGE OF A VALUES, THAN IS THE CASE FOR L = 0.
5542 // 2245 C THE VALUE OF L WHERE THE BARRIER DISAPPEARS, LMAX IS FIT
5543 // TO 2246 C A 24-PARAMETER FUNCTION OF Z AND A, WITH THE SAME RANGE OF
5544 // 2247 C Z AND A VALUES AS L-80 AND L-20.
5545 // 2248 C ONCE AGAIN, IF AN (IZ,IA) PAIR IS OUTSIDE OF THE RANGE
5546 // OF 2249 C VALIDITY OF THE FIT, THE BARRIER VALUE IS SET TO 0.0 AND A
5547 // 2250 C MESSAGE IS PRINTED. THESE THREE VALUES (BFIS(L=0),L-80,
5548 // AND 2251 C L-20) AND THE CONSTRINTS OF BFIS = 0 AND D(BFIS)/DL = 0 AT
5549 // 2252 C L = LMAX AND L=0 LEAD TO A FIFTH-ORDER FIT TO BFIS(L) FOR
5550 // 2253 C L>L-20. THE FIRST THREE CONSTRAINTS LEAD TO A THIRD-ORDER
5551 // FIT 2254 C FOR THE REGION L < L-20. 2255 C 2256 C THE
5552 // GROUND STATE ENERGIES ARE CALCULATED FROM A 2257 C 120-PARAMETER FIT
5553 // IN Z, A, AND L TO 214 GROUND-STATE ENERGIES 2258 C FOR 36 DIFFERENT Z
5554 // AND A VALUES.
5555 // 2259 C (THE RANGE OF Z AND A IS THE SAME AS FOR L-80, L-20, AND
5556 // 2260 C L-MAX)
5557 // 2261 C
5558 // 2262 C THE CALCULATED BARRIERS FROM WHICH THE FITS WERE MADE
5559 // WERE 2263 C CALCULATED IN 1983-1984 BY A. J. SIERK OF LOS
5560 // ALAMOS 2264 C NATIONAL LABORATORY GROUP T-9, USING
5561 // YUKAWA-PLUS-EXPONENTIAL
5562 // 2265 C G4DOUBLE FOLDED NUCLEAR ENERGY, EXACT COULOMB DIFFUSENESS
5563 // 2266 C CORRECTIONS, AND DIFFUSE-MATTER MOMENTS OF INERTIA.
5564 // 2267 C THE PARAMETERS OF THE MODEL R-0 = 1.16 FM, AS 21.13 MEV,
5565 // 2268 C KAPPA-S = 2.3, A = 0.68 FM.
5566 // 2269 C THE DIFFUSENESS OF THE MATTER AND CHARGE DISTRIBUTIONS
5567 // USED 2270 C CORRESPONDS TO A SURFACE DIFFUSENESS PARAMETER
5568 // (DEFINED BY 2271 C MYERS) OF 0.99 FM. THE CALCULATED BARRIERS FOR L =
5569 // 0 ARE 2272 C ACCURATE TO A LITTLE LESS THAN 0.1 MEV; THE OUTPUT
5570 // FROM 2273 C THIS SUBROUTINE IS A LITTLE LESS ACCURATE. WORST
5571 // ERRORS MAY BE
5572 // 2274 C AS LARGE AS 0.5 MEV; CHARACTERISTIC UNCERTAINY IS IN THE
5573 // RANGE
5574 // 2275 C OF 0.1-0.2 MEV. THE RMS DEVIATION OF THE GROUND-STATE FIT
5575 // 2276 C FROM THE 214 INPUT VALUES IS 0.20 MEV. THE MAXIMUM ERROR
5576 // 2277 C OCCURS FOR LIGHT NUCLEI IN THE REGION WHERE THE GROUND
5577 // STATE
5578 // 2278 C IS PROLATE, AND MAY BE GREATER THAN 1.0 MEV FOR VERY
5579 // NEUTRON
5580 // 2279 C DEFICIENT NUCLEI, WITH L NEAR LMAX. FOR MOST NUCLEI LIKELY
5581 // TO 2280 C BE ENCOUNTERED IN REAL EXPERIMENTS, THE MAXIMUM ERROR IS
5582 // 2281 C CLOSER TO 0.5 MEV, AGAIN FOR LIGHT NUCLEI AND L NEAR LMAX.
5583 // 2282 C
5584 // 2283 C WRITTEN BY A. J. SIERK, LANL T-9
5585 // 2284 C VERSION 1.0 FEBRUARY, 1984
5586 // 2285 C
5587 // 2286 C THE FOLLOWING IS NECESSARY FOR 32-BIT MACHINES LIKE DEC
5588 // VAX, 2287 C IBM, ETC
5589
5590 G4double pa[7], pz[7], pl[10];
5591 for (G4int init_i = 0; init_i < 7; init_i++) {
5592 pa[init_i] = 0.0;
5593 pz[init_i] = 0.0;
5594 }
5595 for (G4int init_i = 0; init_i < 10; init_i++) {
5596 pl[init_i] = 0.0;
5597 }
5598
5599 G4double a = 0.0, z = 0.0, amin = 0.0, amax = 0.0, amin2 = 0.0;
5600 G4double amax2 = 0.0, aa = 0.0, zz = 0.0, bfis = 0.0;
5601 G4double bfis0 = 0.0, ell = 0.0, el = 0.0, egs = 0.0, el80 = 0.0, el20 = 0.0;
5602 G4double elmax = 0.0, sel80 = 0.0, sel20 = 0.0, x = 0.0, y = 0.0, q = 0.0, qa = 0.0, qb = 0.0;
5603 G4double aj = 0.0, ak = 0.0, a1 = 0.0, a2 = 0.0;
5604
5605 G4int i = 0, j = 0, k = 0, m = 0;
5606 G4int l = 0;
5607
5608 auto in = ia - iz;
5609
5610 G4double emncof[4][5] = {{-9.01100e+2, -1.40818e+3, 2.77000e+3, -7.06695e+2, 8.89867e+2},
5611 {1.35355e+4, -2.03847e+4, 1.09384e+4, -4.86297e+3, -6.18603e+2},
5612 {-3.26367e+3, 1.62447e+3, 1.36856e+3, 1.31731e+3, 1.53372e+2},
5613 {7.48863e+3, -1.21581e+4, 5.50281e+3, -1.33630e+3, 5.05367e-2}};
5614
5615 G4double elmcof[4][5] = {{1.84542e+3, -5.64002e+3, 5.66730e+3, -3.15150e+3, 9.54160e+2},
5616 {-2.24577e+3, 8.56133e+3, -9.67348e+3, 5.81744e+3, -1.86997e+3},
5617 {2.79772e+3, -8.73073e+3, 9.19706e+3, -4.91900e+3, 1.37283e+3},
5618 {-3.01866e+1, 1.41161e+3, -2.85919e+3, 2.13016e+3, -6.49072e+2}};
5619
5620 G4double emxcof[4][6] = {
5621 {9.43596e4, -2.241997e5, 2.223237e5, -1.324408e5, 4.68922e4, -8.83568e3},
5622 {-1.655827e5, 4.062365e5, -4.236128e5, 2.66837e5, -9.93242e4, 1.90644e4},
5623 {1.705447e5, -4.032e5, 3.970312e5, -2.313704e5, 7.81147e4, -1.322775e4},
5624 {-9.274555e4, 2.278093e5, -2.422225e5, 1.55431e5, -5.78742e4, 9.97505e3}};
5625
5626 G4double elzcof[7][7] = {{5.11819909e+5, -1.30303186e+6, 1.90119870e+6, -1.20628242e+6,
5627 5.68208488e+5, 5.48346483e+4, -2.45883052e+4},
5628 {-1.13269453e+6, 2.97764590e+6, -4.54326326e+6, 3.00464870e+6,
5629 -1.44989274e+6, -1.02026610e+5, 6.27959815e+4},
5630 {1.37543304e+6, -3.65808988e+6, 5.47798999e+6, -3.78109283e+6,
5631 1.84131765e+6, 1.53669695e+4, -6.96817834e+4},
5632 {-8.56559835e+5, 2.48872266e+6, -4.07349128e+6, 3.12835899e+6,
5633 -1.62394090e+6, 1.19797378e+5, 4.25737058e+4},
5634 {3.28723311e+5, -1.09892175e+6, 2.03997269e+6, -1.77185718e+6,
5635 9.96051545e+5, -1.53305699e+5, -1.12982954e+4},
5636 {4.15850238e+4, 7.29653408e+4, -4.93776346e+5, 6.01254680e+5,
5637 -4.01308292e+5, 9.65968391e+4, -3.49596027e+3},
5638 {-1.82751044e+5, 3.91386300e+5, -3.03639248e+5, 1.15782417e+5,
5639 -4.24399280e+3, -6.11477247e+3, 3.66982647e+2}};
5640
5641 const G4int sizex = 5;
5642 const G4int sizey = 6;
5643 const G4int sizez = 4;
5644
5645 G4double egscof[sizey][sizey][sizez];
5646
5647 G4double egs1[sizey][sizex] = {{1.927813e5, 7.666859e5, 6.628436e5, 1.586504e5, -7.786476e3},
5648 {-4.499687e5, -1.784644e6, -1.546968e6, -4.020658e5, -3.929522e3},
5649 {4.667741e5, 1.849838e6, 1.641313e6, 5.229787e5, 5.928137e4},
5650 {-3.017927e5, -1.206483e6, -1.124685e6, -4.478641e5, -8.682323e4},
5651 {1.226517e5, 5.015667e5, 5.032605e5, 2.404477e5, 5.603301e4},
5652 {-1.752824e4, -7.411621e4, -7.989019e4, -4.175486e4, -1.024194e4}};
5653
5654 G4double egs2[sizey][sizex] = {{-6.459162e5, -2.903581e6, -3.048551e6, -1.004411e6, -6.558220e4},
5655 {1.469853e6, 6.564615e6, 6.843078e6, 2.280839e6, 1.802023e5},
5656 {-1.435116e6, -6.322470e6, -6.531834e6, -2.298744e6, -2.639612e5},
5657 {8.665296e5, 3.769159e6, 3.899685e6, 1.520520e6, 2.498728e5},
5658 {-3.302885e5, -1.429313e6, -1.512075e6, -6.744828e5, -1.398771e5},
5659 {4.958167e4, 2.178202e5, 2.400617e5, 1.167815e5, 2.663901e4}};
5660
5661 G4double egs3[sizey][sizex] = {{3.117030e5, 1.195474e6, 9.036289e5, 6.876190e4, -6.814556e4},
5662 {-7.394913e5, -2.826468e6, -2.152757e6, -2.459553e5, 1.101414e5},
5663 {7.918994e5, 3.030439e6, 2.412611e6, 5.228065e5, 8.542465e3},
5664 {-5.421004e5, -2.102672e6, -1.813959e6, -6.251700e5, -1.184348e5},
5665 {2.370771e5, 9.459043e5, 9.026235e5, 4.116799e5, 1.001348e5},
5666 {-4.227664e4, -1.738756e5, -1.795906e5, -9.292141e4, -2.397528e4}};
5667
5668 G4double egs4[sizey][sizex] = {{-1.072763e5, -5.973532e5, -6.151814e5, 7.371898e4, 1.255490e5},
5669 {2.298769e5, 1.265001e6, 1.252798e6, -2.306276e5, -2.845824e5},
5670 {-2.093664e5, -1.100874e6, -1.009313e6, 2.705945e5, 2.506562e5},
5671 {1.274613e5, 6.190307e5, 5.262822e5, -1.336039e5, -1.115865e5},
5672 {-5.715764e4, -2.560989e5, -2.228781e5, -3.222789e3, 1.575670e4},
5673 {1.189447e4, 5.161815e4, 4.870290e4, 1.266808e4, 2.069603e3}};
5674
5675 for (i = 0; i < sizey; i++) {
5676 for (j = 0; j < sizex; j++) {
5677 egscof[i][j][0] = egs1[i][j];
5678 egscof[i][j][1] = egs2[i][j];
5679 egscof[i][j][2] = egs3[i][j];
5680 egscof[i][j][3] = egs4[i][j];
5681 }
5682 }
5683
5684 // the program starts here
5685 if (iz < 19 || iz > 122) {
5686 goto barfit900;
5687 }
5688
5689 if (iz > 122 && il > 0) {
5690 goto barfit902;
5691 }
5692
5693 z = G4double(iz);
5694 a = G4double(ia);
5695 el = G4double(il);
5696 amin = 1.2e0 * z + 0.01e0 * z * z;
5697 amax = 5.8e0 * z - 0.024e0 * z * z;
5698
5699 if (a < amin || a > amax) {
5700 goto barfit910;
5701 }
5702
5703 // angul.mom.zero barrier
5704 aa = 2.5e-3 * a;
5705 zz = 1.0e-2 * z;
5706 ell = 1.0e-2 * el;
5707 bfis0 = 0.0;
5708 lpoly(zz, 7, pz);
5709 lpoly(aa, 7, pa);
5710
5711 for (i = 0; i < 7; i++) { // do 10 i=1,7
5712 for (j = 0; j < 7; j++) { // do 10 j=1,7
5713 bfis0 = bfis0 + elzcof[j][i] * pz[i] * pa[j];
5714 }
5715 }
5716
5717 bfis = bfis0;
5718
5719 if ((fiss->optshp == 1) || (fiss->optshp == 3)) {
5720 bfis = bfis - ecld->ecgnz[in][iz];
5721 // JLRS - Nov 2016 - Corrected values of fission barriers for actinides
5722 if (iz == 90) {
5723 if (mod(in, 2) == 1) {
5724 bfis = bfis * (4.5114 - 2.2687 * in / iz);
5725 }
5726 else {
5727 bfis = bfis * (3.3931 - 1.5338 * in / iz);
5728 }
5729 }
5730 if (iz == 92) {
5731 if (in * 1.0 / iz > 1.52) bfis = bfis * (1.1222 - 0.10886 * (in) / iz) - 0.1;
5732 }
5733 if (iz >= 94 && iz <= 98 && in < 156) { // Data in this range have been
5734 // tested e-e
5735 if (mod(in, 2) == 0 && mod(iz, 2) == 0) {
5736 if (iz >= 94) {
5737 bfis = bfis - (11.54108 * in / iz - 18.074);
5738 }
5739 }
5740 // O-O
5741 if (mod(in, 2) == 1 && mod(iz, 2) == 1) {
5742 if (iz >= 95) {
5743 bfis = bfis - (14.567 * in / iz - 23.266);
5744 }
5745 }
5746 // Odd A
5747 if (mod(in, 2) == 0 && mod(iz, 2) == 1) {
5748 if (j >= 144) {
5749 bfis = bfis - (13.662 * in / iz - 21.656);
5750 }
5751 }
5752
5753 if (mod(in, 2) == 1 && mod(iz, 2) == 0) {
5754 if (in >= 144) {
5755 bfis = bfis - (13.662 * in / iz - 21.656);
5756 }
5757 }
5758 }
5759 else if (iz == 84) {
5760 bfis -= 0.31;
5761 }
5762 else if (iz == 83) {
5763 bfis += 0.57;
5764 }
5765 else if (iz == 82) {
5766 bfis += 0.92;
5767 }
5768 else if (iz == 81) {
5769 bfis += 0.734;
5770 }
5771 else if (iz == 80) {
5772 bfis -= 0.235;
5773 }
5774 else if (iz <= 79) {
5775 bfis -= 1.;
5776 }
5777 }
5778
5779 (*sbfis) = bfis;
5780 egs = 0.0;
5781 (*segs) = egs;
5782
5783 // values of l at which the barrier
5784 // is 20%(el20) and 80%(el80) of l=0 value
5785 amin2 = 1.4e0 * z + 0.009e0 * z * z;
5786 amax2 = 20.e0 + 3.0e0 * z;
5787
5788 if ((a < amin2 - 5.e0 || a > amax2 + 10.e0) && il > 0) {
5789 goto barfit920;
5790 }
5791
5792 lpoly(zz, 5, pz);
5793 lpoly(aa, 4, pa);
5794 el80 = 0.0;
5795 el20 = 0.0;
5796 elmax = 0.0;
5797
5798 for (i = 0; i < 4; i++) {
5799 for (j = 0; j < 5; j++) {
5800 el80 = el80 + elmcof[i][j] * pz[j] * pa[i];
5801 el20 = el20 + emncof[i][j] * pz[j] * pa[i];
5802 }
5803 }
5804
5805 sel80 = el80;
5806 sel20 = el20;
5807
5808 // value of l (elmax) where barrier disapp.
5809 lpoly(zz, 6, pz);
5810 lpoly(ell, 9, pl);
5811
5812 for (i = 0; i < 4; i++) { // do 30 i= 1,4
5813 for (j = 0; j < 6; j++) { // do 30 j=1,6
5814 elmax = elmax + emxcof[i][j] * pz[j] * pa[i];
5815 }
5816 }
5817
5818 (*selmax) = elmax;
5819
5820 // value of barrier at ang.mom. l
5821 if (il < 1) {
5822 return;
5823 }
5824
5825 x = sel20 / (*selmax);
5826 y = sel80 / (*selmax);
5827
5828 if (el <= sel20) {
5829 // low l
5830 q = 0.2 / (std::pow(sel20, 2) * std::pow(sel80, 2) * (sel20 - sel80));
5831 qa = q * (4.0 * std::pow(sel80, 3) - std::pow(sel20, 3));
5832 qb = -q * (4.0 * std::pow(sel80, 2) - std::pow(sel20, 2));
5833 bfis = bfis * (1.0 + qa * std::pow(el, 2) + qb * std::pow(el, 3));
5834 }
5835 else {
5836 // high l
5837 aj = (-20.0 * std::pow(x, 5) + 25.e0 * std::pow(x, 4) - 4.0) * std::pow((y - 1.0), 2) * y * y;
5838 ak = (-20.0 * std::pow(y, 5) + 25.0 * std::pow(y, 4) - 1.0) * std::pow((x - 1.0), 2) * x * x;
5839 q = 0.2 / (std::pow((y - x) * ((1.0 - x) * (1.0 - y) * x * y), 2));
5840 qa = q * (aj * y - ak * x);
5841 qb = -q * (aj * (2.0 * y + 1.0) - ak * (2.0 * x + 1.0));
5842 z = el / (*selmax);
5843 a1 = 4.0 * std::pow(z, 5) - 5.0 * std::pow(z, 4) + 1.0;
5844 a2 = qa * (2.e0 * z + 1.e0);
5845 bfis = bfis * (a1 + (z - 1.e0) * (a2 + qb * z) * z * z * (z - 1.e0));
5846 }
5847
5848 if (bfis <= 0.0) {
5849 bfis = 0.0;
5850 }
5851
5852 if (el > (*selmax)) {
5853 bfis = 0.0;
5854 }
5855 (*sbfis) = bfis;
5856
5857 // now calculate rotating ground state energy
5858 if (el > (*selmax)) {
5859 return;
5860 }
5861
5862 for (k = 0; k < 4; k++) {
5863 for (l = 0; l < 6; l++) {
5864 for (m = 0; m < 5; m++) {
5865 egs = egs + egscof[l][m][k] * pz[l] * pa[k] * pl[2 * m];
5866 }
5867 }
5868 }
5869
5870 (*segs) = egs;
5871 if ((*segs) < 0.0) {
5872 (*segs) = 0.0;
5873 }
5874
5875 return;
5876
5877barfit900: // continue
5878 (*sbfis) = 0.0;
5879 // for z<19 sbfis set to 1.0e3
5880 if (iz < 19) {
5881 (*sbfis) = 1.0e3;
5882 }
5883 (*segs) = 0.0;
5884 (*selmax) = 0.0;
5885 return;
5886
5887barfit902:
5888 (*sbfis) = 0.0;
5889 (*segs) = 0.0;
5890 (*selmax) = 0.0;
5891 return;
5892
5893barfit910:
5894 (*sbfis) = 0.0;
5895 (*segs) = 0.0;
5896 (*selmax) = 0.0;
5897 return;
5898
5899barfit920:
5900 (*sbfis) = 0.0;
5901 (*segs) = 0.0;
5902 (*selmax) = 0.0;
5903 return;
5904}
G4int mod(G4int a, G4int b)
Definition G4Abla.cc:6373
void lpoly(G4double x, G4int n, G4double pl[])
Definition G4Abla.cc:5088

Referenced by direct().

◆ barrs()

void G4Abla::barrs ( G4int Z1,
G4int A1,
G4int Z2,
G4int A2,
G4double * sBARR,
G4double * sOMEGA )

Calculation of particle emission barriers.

Definition at line 5474 of file G4Abla.cc.

5475{ /*
5476 C AK 2004 - Barriers for LCP and IMF are calculated now
5477 according to the C Bass model (Nucl. Phys. A (1974))
5478 C KHS 2007 - To speed up, barriers are read from tabels; in
5479 case thermal C expansion is considered, barriers
5480 are calculated. C INPUT: C EA - Excitation energy per
5481 nucleon C Z11, A11 - Charge and mass of daughter nucleus C
5482 Z22, A22 - Charge and mass of LCP or IMF
5483 C
5484 C OUTPUT:
5485 C BARR - Barrier
5486 C OMEGA - Curvature of the potential
5487 C
5488 C BASS MODEL NPA 1974 - used only if expansion is considered
5489 (OPTEXP=1) C or one wants this model
5490 explicitly (OPTBAR=1) C October 2011 - AK - new
5491 parametrization of the barrier and its position, C see W.W. Qu
5492 et al., NPA 868 (2011) 1; this is now C default option
5493 (OPTBAR=0)
5494 c
5495 c November 2016 - JLRS - Added this function from abla07v4
5496 c
5497 */
5498 G4double BARR, OMEGA, RMAX;
5499 RMAX = 1.1 * (ecld->rms[A1 - Z1][Z1] + ecld->rms[A2 - Z2][Z2]) + 2.8;
5500 BARR = 1.345 * Z1 * Z2 / RMAX;
5501 // C Omega according to Avishai:
5502 OMEGA = 4.5 / 197.3287;
5503
5504 // if(Z1<60){
5505 // if(Z2==1 && A2==2) BARR = BARR * 1.1;
5506 // if(Z2==1 && A2==3) BARR = BARR * 1.1;
5507 // if(Z2==2 && A2==3) BARR = BARR * 1.3;
5508 // if(Z2==2 && A2==4) BARR = BARR * 1.1;
5509 // }
5510
5511 (*sOMEGA) = OMEGA;
5512 (*sBARR) = BARR;
5513 //
5514 return;
5515}

Referenced by direct(), and imf().

◆ bipol()

G4double G4Abla::bipol ( G4int iflag,
G4double y )

CALCULATION OF THE SURFACE BS OR CURVATURE BK OF A NUCLEUS RELATIVE TO THE SPHERICAL CONFIGURATION BASED ON MYERS, DROPLET MODEL FOR ARBITRARY SHAPES

Definition at line 5371 of file G4Abla.cc.

5372{
5373 // CALCULATION OF THE SURFACE BS OR CURVATURE BK OF A NUCLEUS
5374 // RELATIVE TO THE SPHERICAL CONFIGURATION
5375 // BASED ON MYERS, DROPLET MODEL FOR ARBITRARY SHAPES
5376
5377 // INPUT: IFLAG - 0/1 BK/BS CALCULATION
5378 // Y - (1 - X) COMPLEMENT OF THE FISSILITY
5379
5380 // LINEAR INTERPOLATION OF BS BK TABLE
5381
5382 G4int i = 0;
5383
5384 G4double bipolResult = 0.0;
5385
5386 const G4int bsbkSize = 54;
5387
5388 G4double bk[bsbkSize] = {
5389 0.0, 1.00000, 1.00087, 1.00352, 1.00799, 1.01433, 1.02265, 1.03306, 1.04576, 1.06099,
5390 1.07910, 1.10056, 1.12603, 1.15651, 1.19348, 1.23915, 1.29590, 1.35951, 1.41013, 1.44103,
5391 1.46026, 1.47339, 1.48308, 1.49068, 1.49692, 1.50226, 1.50694, 1.51114, 1.51502, 1.51864,
5392 1.52208, 1.52539, 1.52861, 1.53177, 1.53490, 1.53803, 1.54117, 1.54473, 1.54762, 1.55096,
5393 1.55440, 1.55798, 1.56173, 1.56567, 1.56980, 1.57413, 1.57860, 1.58301, 1.58688, 1.58688,
5394 1.58688, 1.58740, 1.58740, 0.0}; // Zeroes at bk[0], and at
5395 // the end added by PK
5396
5397 G4double bs[bsbkSize] = {0.0, 1.00000, 1.00086, 1.00338, 1.00750, 1.01319, 1.02044, 1.02927,
5398 1.03974, 1.05195, 1.06604, 1.08224, 1.10085, 1.12229, 1.14717, 1.17623,
5399 1.20963, 1.24296, 1.26532, 1.27619, 1.28126, 1.28362, 1.28458, 1.28477,
5400 1.28450, 1.28394, 1.28320, 1.28235, 1.28141, 1.28042, 1.27941, 1.27837,
5401 1.27732, 1.27627, 1.27522, 1.27418, 1.27314, 1.27210, 1.27108, 1.27006,
5402 1.26906, 1.26806, 1.26707, 1.26610, 1.26514, 1.26418, 1.26325, 1.26233,
5403 1.26147, 1.26147, 1.26147, 1.25992, 1.25992, 0.0};
5404
5405 i = idint(y / (2.0e-02)) + 1;
5406
5407 if ((i + 1) >= bsbkSize) {
5408 if (verboseLevel > 2) {
5409 // G4cout <<"G4Abla error: index " << i + 1 << " is greater than array
5410 // size permits." << G4endl;
5411 }
5412 bipolResult = 0.0;
5413 }
5414 else {
5415 if (iflag == 1) {
5416 bipolResult = bs[i] + (bs[i + 1] - bs[i]) / 2.0e-02 * (y - 2.0e-02 * (i - 1));
5417 }
5418 else {
5419 bipolResult = bk[i] + (bk[i + 1] - bk[i]) / 2.0e-02 * (y - 2.0e-02 * (i - 1));
5420 }
5421 }
5422
5423 return bipolResult;
5424}
G4int idint(G4double a)
Definition G4Abla.cc:6402

Referenced by direct().

◆ bsbkbc()

void G4Abla::bsbkbc ( G4double A,
G4double Z,
G4double * BS,
G4double * BK,
G4double * BC )

Calculation of BS and BK for the nuclear-level density.

Definition at line 6675 of file G4Abla.cc.

6676{
6677 // Calculate BS and BK needed for a level-density parameter:
6678 // BETA2 and BETA4 = quadrupole and hexadecapole deformation
6679
6680 G4double PI = 3.14159265;
6681 G4int IZ = idnint(Z);
6682 G4int IN = idnint(A - Z);
6683 // alphaN = sqrt(2*N/(4*pi))*BetaN
6684 G4double ALPHA2 = std::sqrt(5.0 / (4.0 * PI)) * ecld->beta2[IN][IZ];
6685 G4double ALPHA4 = std::sqrt(9.0 / (4.0 * PI)) * ecld->beta4[IN][IZ];
6686
6687 (*BS) = 1.0 + 0.4 * ALPHA2 * ALPHA2 - 4.0 / 105.0 * ALPHA2 * ALPHA2 * ALPHA2
6688 - 66.0 / 175.0 * ALPHA2 * ALPHA2 * ALPHA2 * ALPHA2 - 4.0 / 35.0 * ALPHA2 * ALPHA2 * ALPHA4
6689 + ALPHA4 * ALPHA4;
6690
6691 (*BK) = 1.0 + 0.4 * ALPHA2 * ALPHA2 + 16.0 / 105.0 * ALPHA2 * ALPHA2 * ALPHA2
6692 - 82.0 / 175.0 * ALPHA2 * ALPHA2 * ALPHA2 * ALPHA2 + 2.0 / 35.0 * ALPHA2 * ALPHA2 * ALPHA4
6693 + ALPHA4 * ALPHA4;
6694
6695 (*BC) = 0.0;
6696
6697 return;
6698}
const G4double A[17]
G4int idnint(G4double value)
Definition G4Abla.cc:6413

Referenced by direct(), and imf().

◆ cram()

G4double G4Abla::cram ( G4double bet,
G4double homega )

KRAMERS FAKTOR - REDUCTION OF THE FISSION PROBABILITY INDEPENDENT OF EXCITATION ENERGY

Definition at line 5354 of file G4Abla.cc.

5355{
5356 // INPUT : BET, HOMEGA NUCLEAR VISCOSITY + CURVATURE OF POTENTIAL
5357 // OUTPUT: KRAMERS FAKTOR - REDUCTION OF THE FISSION PROBABILITY
5358 // INDEPENDENT OF EXCITATION ENERGY
5359
5360 G4double rel = bet / (20.0 * homega / 6.582122);
5361 G4double cramResult = std::sqrt(1.0 + std::pow(rel, 2)) - rel;
5362 // limitation introduced 6.1.2000 by khs
5363
5364 if (cramResult > 1.0) {
5365 cramResult = 1.0;
5366 }
5367
5368 return cramResult;
5369}

Referenced by direct(), and func_trans().

◆ DeexcitationAblaxx() [1/2]

void G4Abla::DeexcitationAblaxx ( G4int nucleusA,
G4int nucleusZ,
G4double excitationEnergy,
G4double angularMomentum,
G4double momX,
G4double momY,
G4double momZ,
G4int eventnumber )

Main interface to the de-excitation code.

Parameters
nucleusAmass number of the nucleus
nucleusZcharge number of the nucleus
excitationEnergyexcitation energy of the nucleus
angularMomentumangular momentum of the nucleus (produced as output by INCL4)
momXmomentum x-component
momYmomentum y-component
momZmomentum z-component
eventnumbernumber of the event

Definition at line 76 of file G4Abla.cc.

79{
80 DeexcitationAblaxx(nucleusA, nucleusZ, excitationEnergy, angularMomentum, momX, momY, momZ,
81 eventnumber, 0);
82}
void DeexcitationAblaxx(G4int nucleusA, G4int nucleusZ, G4double excitationEnergy, G4double angularMomentum, G4double momX, G4double momY, G4double momZ, G4int eventnumber)
Definition G4Abla.cc:76

Referenced by DeexcitationAblaxx().

◆ DeexcitationAblaxx() [2/2]

void G4Abla::DeexcitationAblaxx ( G4int nucleusA,
G4int nucleusZ,
G4double excitationEnergy,
G4double angularMomentum,
G4double momX,
G4double momY,
G4double momZ,
G4int eventnumber,
G4int nucleusS )

Main interface to the de-excitation code for hyper-nuclei.

Parameters
nucleusAmass number of the nucleus
nucleusZcharge number of the nucleus
excitationEnergyexcitation energy of the nucleus
angularMomentumangular momentum of the nucleus (produced as output by INCL)
momXmomentum x-component
momYmomentum y-component
momZmomentum z-component
eventnumbernumber of the event
nucleusSis the strange number

Definition at line 85 of file G4Abla.cc.

88{
89 const G4double amu = 931.4940; // MeV/C^2
90 const G4double C = 29.9792458; // cm/ns
91
92 SetParametersG4(nucleusZ, nucleusA);
93
94mult10:
95 G4int IS = 0;
96
97 varntp->clear(); // Clean up an initialize ABLA output.
98
99 if (nucleusS > 0) nucleusS = 0; // S=1 from INCL ????
100
101 G4int NbLam0 = std::abs(nucleusS);
102
103 Ainit = -1 * nucleusA;
104 Zinit = -1 * nucleusZ;
105 Sinit = -1 * nucleusS;
106
107 G4double aff = 0.0;
108 G4double zff = 0.0;
109 G4int ZFP1 = 0, AFP1 = 0, AFPIMF = 0, ZFPIMF = 0, ZFP2 = 0, AFP2 = 0, SFP1 = 0, SFP2 = 0,
110 SFPIMF = 0;
111 G4double vx_eva = 0.0, vy_eva = 0.0, vz_eva = 0.0;
112 G4double VX_PREF = 0., VY_PREF = 0., VZ_PREF = 00, VP1X, VP1Y, VP1Z, VXOUT, VYOUT, VZOUT, V_CM[3],
113 VFP1_CM[3], VFP2_CM[3], VIMF_CM[3], VX2OUT, VY2OUT, VZ2OUT;
114 G4double zf = 0.0, af = 0.0, mtota = 0.0, tkeimf = 0.0, jprf0 = 0.;
115 G4int ff = 0, afpnew = 0, zfpnew = 0, aprfp = 0, zprfp = 0, IOUNSTABLE = 0, ILOOP = 0,
116 IEV_TAB = 0, IEV_TAB_TEMP = 0;
117 G4int fimf = 0, INMIN = 0, INMAX = 0;
118 G4int ftype = 0; //,ftype1=0;
119 G4int inum = eventnumber;
120 G4int inttype = 0;
121 opt->optimfallowed = 1;
122
123 if (fiss->zt > 56) {
124 fiss->ifis = 1;
125 }
126 else {
127 fiss->ifis = 0;
128 }
129
130 if (NbLam0 > 0) {
131 opt->nblan0 = NbLam0;
132 }
133
134 G4double aprf = (G4double)nucleusA;
135 G4double zprf = (G4double)nucleusZ;
136 G4double ee = excitationEnergy;
137 G4double jprf = angularMomentum; // actually root-mean-squared
138
139 G4double pxrem = momX;
140 G4double pyrem = momY;
141 G4double pzrem = momZ;
142 G4double zimf, aimf;
143
144 gammaemission = 0;
145 G4double T_init = 0., T_diff = 0., a_tilda = 0., a_tilda_BU = 0., EE_diff = 0., EINCL = 0.,
146 A_FINAL = 0., Z_FINAL = 0., E_FINAL = 0.;
147
148 G4double A_diff = 0., ASLOPE1, ASLOPE2, A_ACC, ABU_SLOPE, ABU_SUM = 0., AMEM = 0., ZMEM = 0.,
149 EMEM = 0., JMEM = 0., PX_BU_SUM = 0.0, PY_BU_SUM = 0.0, PZ_BU_SUM = 0.0, ETOT_SUM = 0.,
150 P_BU_SUM = 0., ZBU_SUM = 0., Z_Breakup_sum = 0., A_Breakup, Z_Breakup, N_Breakup, G_SYMM,
151 CZ, Sigma_Z, Z_Breakup_Mean, ZTEMP = 0., ATEMP = 0.;
152
153 G4double ETOT_PRF = 0.0, PXPRFP = 0., PYPRFP = 0., PZPRFP = 0., PPRFP = 0., VX1_BU = 0.,
154 VY1_BU = 0., VZ1_BU = 0., VBU2 = 0., GAMMA_REL = 1.0, Eexc_BU_SUM = 0., VX_BU_SUM = 0.,
155 VY_BU_SUM = 0., VZ_BU_SUM = 0., E_tot_BU = 0., EKIN_BU = 0., ZIMFBU = 0., AIMFBU = 0.,
156 ZFFBU = 0., AFFBU = 0., AFBU = 0., ZFBU = 0., EEBU = 0., TKEIMFBU = 0., vx_evabu = 0.,
157 vy_evabu = 0., vz_evabu = 0., Bvalue_BU = 0., P_BU = 0., ETOT_BU = 1., PX_BU = 0.,
158 PY_BU = 0., PZ_BU = 0., VX2_BU = 0., VY2_BU = 0., VZ2_BU = 0.;
159
160 G4int ABU_DIFF, ZBU_DIFF, NBU_DIFF;
161 G4int INEWLOOP = 0, ILOOPBU = 0;
162
163 G4double BU_TAB_TEMP[indexpart][6], BU_TAB_TEMP1[indexpart][6];
164 G4double EV_TAB_TEMP[indexpart][6], EV_TEMP[indexpart][6];
165 G4int IMEM_BU[indexpart], IMEM = 0;
166
167 if (nucleusA < 1) {
168 std::cout << "Error - Remnant with a mass number A below 1." << std::endl;
169 // INCL_ERROR("Remnant with a mass number A below 1.");
170 return;
171 }
172
173 for (G4int j = 0; j < 3; j++) {
174 V_CM[j] = 0.;
175 VFP1_CM[j] = 0.;
176 VFP2_CM[j] = 0.;
177 VIMF_CM[j] = 0.;
178 }
179
180 for (G4int I1 = 0; I1 < indexpart; I1++) {
181 for (G4int I2 = 0; I2 < 12; I2++)
182 BU_TAB[I1][I2] = 0.0;
183 for (G4int I2 = 0; I2 < 6; I2++) {
184 BU_TAB_TEMP[I1][I2] = 0.0;
185 BU_TAB_TEMP1[I1][I2] = 0.0;
186 EV_TAB_TEMP[I1][I2] = 0.0;
187 EV_TAB[I1][I2] = 0.0;
188 EV_TAB_SSC[I1][I2] = 0.0;
189 EV_TEMP[I1][I2] = 0.0;
190 }
191 }
192
193 G4int idebug = 0;
194 if (idebug == 1) {
195 zprf = 81.;
196 aprf = 201.;
197 // ee = 86.5877686;
198 ee = 100.0;
199 jprf = 10.;
200 zf = 0.;
201 af = 0.;
202 mtota = 0.;
203 ff = 1;
204 inttype = 0;
205 // inum = 2;
206 }
207 //
208 G4double AAINCL = aprf;
209 G4double ZAINCL = zprf;
210 EINCL = ee;
211 //
212 // Velocity after the first stage of reaction (INCL)
213 // For coupling with INCL, comment the lines below, and use output
214 // of INCL as pxincl, pyincl,pzincl
215 //
216 G4double pincl = std::sqrt(pxrem * pxrem + pyrem * pyrem + pzrem * pzrem);
217 // PPRFP is in MeV/c
218 G4double ETOT_incl = std::sqrt(pincl * pincl + (AAINCL * amu) * (AAINCL * amu));
219 G4double VX_incl = C * pxrem / ETOT_incl;
220 G4double VY_incl = C * pyrem / ETOT_incl;
221 G4double VZ_incl = C * pzrem / ETOT_incl;
222 //
223 // Multiplicity in the break-up event
224 G4int IMULTBU = 0;
225 G4int IMULTIFR = 0;
226 G4int I_Breakup = 0;
227 G4int NbLamprf = 0;
228 IEV_TAB = 0;
229
230 /*
231 C Set maximum temperature for sequential decay (evaporation)
232 C Remove additional energy by simultaneous break up
233 C (vaporisation or multi-fragmentation)
234
235 C Idea: If the temperature of the projectile spectator exceeds
236 c the limiting temperature T_freeze_out, the additional
237 C energy which is present in the spectator is used for
238 C a stage of simultaneous break up. It is either the
239 C simultaneous emission of a gaseous phase or the simultaneous
240 C emission of several intermediate-mass fragments. Only one
241 C piece of the projectile spectator (assumed to be the largest
242 C one) is kept track.
243
244 C MVR, KHS, October 2001
245 C KHS, AK 2007 - Masses from the power low; slope parameter dependent
246 on C energy per nucleon; symmtery-energy coeff.
247 dependent on C energy per nucleon.
248
249 c Clear BU_TAB (array of multifragmentation products)
250 */
251
252 T_freeze_out =
253 (T_freeze_out_in >= 0.0) ? T_freeze_out_in : max(9.33 * std::exp(-0.00282 * AAINCL), 5.5);
254
255 a_tilda =
256 ald->av * aprf + ald->as * std::pow(aprf, 2.0 / 3.0) + ald->ak * std::pow(aprf, 1.0 / 3.0);
257
258 T_init = std::sqrt(EINCL / a_tilda);
259
260 T_diff = T_init - T_freeze_out;
261
262 if (T_diff > 0.1 && zprf > 2. && (aprf - zprf) > 0.) {
263 // T_Diff is set to be larger than 0.1 MeV in order to avoid strange cases
264 // for which T_Diff is of the order of 1.e-3 and less.
265 varntp->kfis = 10;
266
267 for (G4int i = 0; i < 5; i++) {
268 EE_diff = EINCL - a_tilda * T_freeze_out * T_freeze_out;
269 // Energy removed 10*5/T_init per nucleon removed in
270 // simultaneous breakup adjusted to frag. xsections 238U
271 // (1AGeV) + Pb data, KHS Dec. 2005
272 // This should maybe be re-checked, in a meanwhile several things in
273 // break-up description have changed (AK).
274
275 A_diff = dint(EE_diff / (8.0 * 5.0 / T_freeze_out));
276
277 if (A_diff > AAINCL) A_diff = AAINCL;
278
279 A_FINAL = AAINCL - A_diff;
280
281 a_tilda = ald->av * A_FINAL + ald->as * std::pow(A_FINAL, 2.0 / 3.0)
282 + ald->ak * std::pow(A_FINAL, 1.0 / 3.0);
283 E_FINAL = a_tilda * T_freeze_out * T_freeze_out;
284
285 if (A_FINAL < 4.0) { // To avoid numerical problems
286 EE_diff = EINCL - E_FINAL;
287 A_FINAL = 1.0;
288 Z_FINAL = 1.0;
289 E_FINAL = 0.0;
290 goto mul4325;
291 }
292 }
293 mul4325:
294 // The idea is similar to Z determination of multifragment - Z of "heavy"
295 // partner is not fixed by the A/Z of the prefragment, but randomly picked
296 // from Gaussian Z_FINAL_MEAN = dint(zprf * A_FINAL / (aprf));
297
298 Z_FINAL = dint(zprf * A_FINAL / (aprf));
299
300 if (E_FINAL < 0.0) E_FINAL = 0.0;
301
302 aprf = A_FINAL;
303 zprf = Z_FINAL;
304 ee = E_FINAL;
305
306 A_diff = AAINCL - aprf;
307
308 // Creation of multifragmentation products by breakup
309 if (A_diff <= 1.0) {
310 aprf = AAINCL;
311 zprf = ZAINCL;
312 ee = EINCL;
313 IMULTIFR = 0;
314 goto mult7777;
315 }
316 else if (A_diff > 1.0) {
317 A_ACC = 0.0;
318 // Energy-dependence of the slope parameter, acc. to A. Botvina, fits also
319 // to exp. data (see e.g. Sfienti et al, NPA 2007)
320 ASLOPE1 = -2.400; // e*/a=7 -2.4
321 ASLOPE2 = -1.200; // e*/a=3 -1.2
322
323 a_tilda = ald->av * AAINCL + ald->as * std::pow(AAINCL, 2.0 / 3.0)
324 + ald->ak * std::pow(AAINCL, 1.0 / 3.0);
325
326 E_FINAL = a_tilda * T_freeze_out * T_freeze_out;
327
328 ABU_SLOPE =
329 (ASLOPE1 - ASLOPE2) / 4.0 * (E_FINAL / AAINCL) + ASLOPE1 - (ASLOPE1 - ASLOPE2) * 7.0 / 4.0;
330
331 // Botvina et al, PRC 74 (2006) 044609, fig. 5 for B0=18 MeV
332 // ABU_SLOPE = 5.57489D0-2.08149D0*(E_FINAL/AAABRA)+
333 // & 0.3552D0*(E_FINAL/AAABRA)**2-0.024927D0*(E_FINAL/AAABRA)**3+
334 // & 7.268D-4*(E_FINAL/AAABRA)**4
335 // They fit with A**(-tau) and here is done A**(tau)
336 // ABU_SLOPE = ABU_SLOPE*(-1.D0)
337
338 // ABU_SLOPE = -2.60D0
339 // print*,ABU_SLOPE,(E_FINAL/AAABRA)
340
341 if (ABU_SLOPE > -1.01) ABU_SLOPE = -1.01;
342
343 I_Breakup = 0;
344 Z_Breakup_sum = Z_FINAL;
345 ABU_SUM = 0.0;
346 ZBU_SUM = 0.0;
347
348 for (G4int i = 0; i < 100; i++) {
349 IS = 0;
350 mult4326:
351 A_Breakup = dint(G4double(IPOWERLIMHAZ(ABU_SLOPE, 1, idnint(A_diff))));
352 // Power law with exponent ABU_SLOPE
353 IS = IS + 1;
354 if (IS > 100) {
355 std::cout << "WARNING: IPOWERLIMHAZ CALLED MORE THAN 100 TIMES WHEN "
356 "CALCULATING A_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED: "
357 << A_Breakup << std::endl;
358 goto mult10;
359 }
360
361 if (A_Breakup > AAINCL) goto mult4326;
362
363 if (A_Breakup <= 0.0) {
364 std::cout << "A_BREAKUP <= 0 " << std::endl;
365 goto mult10;
366 }
367
368 A_ACC = A_ACC + A_Breakup;
369
370 if (A_ACC <= A_diff) {
371 Z_Breakup_Mean = dint(A_Breakup * ZAINCL / AAINCL);
372
373 Z_Breakup_sum = Z_Breakup_sum + Z_Breakup_Mean;
374 //
375 // See G.A. Souliotis et al, PRC 75 (2007) 011601R (Fig. 2)
376 G_SYMM = 34.2281 - 5.14037 * E_FINAL / AAINCL;
377 if (E_FINAL / AAINCL < 2.0) G_SYMM = 25.0;
378 if (E_FINAL / AAINCL > 4.0) G_SYMM = 15.0;
379
380 // G_SYMM = 23.6;
381
382 G_SYMM = 25.0; // 25
383 CZ = 2.0 * G_SYMM * 4.0 / A_Breakup;
384 // 2*CZ=d^2(Esym)/dZ^2, Esym=Gamma*(A-2Z)**2/A
385 // gamma = 23.6D0 is the symmetry-energy coefficient
386 G4int IIS = 0;
387 Sigma_Z = std::sqrt(T_freeze_out / CZ);
388
389 IS = 0;
390 mult4333:
391 Z_Breakup = dint(G4double(gausshaz(1, Z_Breakup_Mean, Sigma_Z)));
392 IS = IS + 1;
393 //
394 if (IS > 100) {
395 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN "
396 "CALCULATING Z_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE "
397 "DICED: "
398 << A_Breakup << " " << Z_Breakup << std::endl;
399 goto mult10;
400 }
401
402 if (Z_Breakup < 0.0) goto mult4333;
403 if ((A_Breakup - Z_Breakup) < 0.0) goto mult4333;
404 if ((A_Breakup - Z_Breakup) == 0.0 && Z_Breakup != 1.0) goto mult4333;
405
406 if (Z_Breakup >= ZAINCL) {
407 IIS = IIS + 1;
408 if (IIS > 10) {
409 std::cout << "Z_BREAKUP RESAMPLED MORE THAN 10 TIMES; EVENT WILL "
410 "BE RESAMPLED AGAIN "
411 << std::endl;
412 goto mult10;
413 }
414 goto mult4333;
415 }
416
417 // *** Find the limits that fragment is bound :
418 isostab_lim(idnint(Z_Breakup), &INMIN, &INMAX);
419 // INMIN = MAX(1,INMIN-2)
420 if (Z_Breakup > 2.0) {
421 if (idnint(A_Breakup - Z_Breakup) < INMIN
422 || idnint(A_Breakup - Z_Breakup) > (INMAX + 5))
423 {
424 // PRINT*,'N_Breakup >< NMAX',
425 // & IDNINT(Z_Breakup),IDNINT(A_Breakup-Z_Breakup),INMIN,INMAX
426 goto mult4343;
427 }
428 }
429
430 mult4343:
431
432 // We consider all products, also nucleons created in the break-up
433 // I_Breakup = I_Breakup + 1;// moved below
434
435 N_Breakup = A_Breakup - Z_Breakup;
436 BU_TAB[I_Breakup][0] = dint(Z_Breakup); // Mass of break-up product
437 BU_TAB[I_Breakup][1] = dint(A_Breakup); // Z of break-up product
438 ABU_SUM = ABU_SUM + BU_TAB[i][1];
439 ZBU_SUM = ZBU_SUM + BU_TAB[i][0];
440 //
441 // Break-up products are given zero angular momentum (simplification)
442 BU_TAB[I_Breakup][3] = 0.0;
443 I_Breakup = I_Breakup + 1;
444 IMULTBU = IMULTBU + 1;
445 }
446 else {
447 // There are A_DIFF - A_ACC nucleons lost by breakup, but they do
448 // not end up in multifragmentation products. This is a deficiency
449 // of the Monte-Carlo method applied above to determine the sizes
450 // of the fragments according to the power law.
451 // print*,'Deficiency',IDNINT(A_DIFF-A_ACC)
452
453 goto mult4327;
454 } // if(A_ACC<=A_diff)
455 } // for
456 // mult4327:
457 // IMULTIFR = 1;
458 } // if(A_diff>1.0)
459 mult4327:
460 IMULTIFR = 1;
461
462 // "Missing" A and Z picked from the power law:
463 ABU_DIFF = idnint(ABU_SUM + aprf - AAINCL);
464 ZBU_DIFF = idnint(ZBU_SUM + zprf - ZAINCL);
465 NBU_DIFF = idnint((ABU_SUM - ZBU_SUM) + (aprf - zprf) - (AAINCL - ZAINCL));
466 //
467 if (IMULTBU > 200) std::cout << "WARNING - MORE THAN 200 BU " << IMULTBU << std::endl;
468
469 if (IMULTBU < 1) std::cout << "WARNING - LESS THAN 1 BU " << IMULTBU << std::endl;
470 //,AABRA,ZABRA,IDNINT(APRF),IDNINT(ZPRF),ABU_DIFF,ZBU_DIFF
471
472 G4int IPROBA = 0;
473 for (G4int i = 0; i < IMULTBU; i++)
474 IMEM_BU[i] = 0;
475
476 while (NBU_DIFF != 0 && ZBU_DIFF != 0) {
477 // (APRF,ZPRF) is also inlcuded in this game, as from time to time the
478 // program is entering into endless loop, as it can not find proper
479 // nucleus for adapting A and Z.
480 IS = 0;
481 mult5555:
482 G4double RHAZ = G4AblaRandom::flat() * G4double(IMULTBU);
483 IPROBA = IPROBA + 1;
484 IS = IS + 1;
485 if (IS > 100) {
486 std::cout << "WARNING: HAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING "
487 "N_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED."
488 << std::endl;
489 goto mult10;
490 }
491 G4int IEL = G4int(RHAZ);
492 if (IMEM_BU[IEL] == 1) goto mult5555;
493 if (!(IEL < 200)) std::cout << "5555:" << IEL << RHAZ << IMULTBU << std::endl;
494 if (IEL < 0) std::cout << "5555:" << IEL << RHAZ << IMULTBU << std::endl;
495 if (IEL <= IMULTBU) {
496 N_Breakup = dint(BU_TAB[IEL][1] - BU_TAB[IEL][0] - DSIGN(1.0, G4double(NBU_DIFF)));
497 }
498 else if (IEL > IMULTBU) {
499 N_Breakup = dint(aprf - zprf - DSIGN(1.0, G4double(NBU_DIFF)));
500 }
501 if (N_Breakup < 0.0) {
502 IMEM_BU[IEL] = 1;
503 goto mult5555;
504 }
505 if (IEL <= IMULTBU) {
506 ZTEMP = dint(BU_TAB[IEL][0] - DSIGN(1.0, G4double(ZBU_DIFF)));
507 }
508 else if (IEL > IMULTBU) {
509 ZTEMP = dint(zprf - DSIGN(1.0, G4double(ZBU_DIFF)));
510 }
511 if (ZTEMP < 0.0) {
512 IMEM_BU[IEL] = 1;
513 goto mult5555;
514 }
515 if (ZTEMP < 1.0 && N_Breakup < 1.0) {
516 IMEM_BU[IEL] = 1;
517 goto mult5555;
518 }
519 // Nuclei with A=Z and Z>1 are allowed in this stage, as otherwise,
520 // for more central collisions there is not enough mass which can be
521 // shufeled in order to conserve A and Z. These are mostly nuclei with
522 // Z=2 and in less extent 3, 4 or 5.
523 // IF(ZTEMP.GT.1.D0 .AND. N_Breakup.EQ.0.D0) THEN
524 // GOTO 5555
525 // ENDIF
526 if (IEL <= IMULTBU) {
527 BU_TAB[IEL][0] = dint(ZTEMP);
528 BU_TAB[IEL][1] = dint(ZTEMP + N_Breakup);
529 }
530 else if (IEL > IMULTBU) {
531 zprf = dint(ZTEMP);
532 aprf = dint(ZTEMP + N_Breakup);
533 }
534 NBU_DIFF = NBU_DIFF - ISIGN(1, NBU_DIFF);
535 ZBU_DIFF = ZBU_DIFF - ISIGN(1, ZBU_DIFF);
536 } // while
537
538 IPROBA = 0;
539 for (G4int i = 0; i < IMULTBU; i++)
540 IMEM_BU[i] = 0;
541
542 if (NBU_DIFF != 0 && ZBU_DIFF == 0) {
543 while (NBU_DIFF > 0 || NBU_DIFF < 0) {
544 IS = 0;
545 mult5556:
546 G4double RHAZ = G4AblaRandom::flat() * G4double(IMULTBU);
547 IS = IS + 1;
548 if (IS > 100) {
549 std::cout << "WARNING: HAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING "
550 "N_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED."
551 << std::endl;
552 goto mult10;
553 }
554 G4int IEL = G4int(RHAZ);
555 if (IMEM_BU[IEL] == 1) goto mult5556;
556 // IPROBA = IPROBA + 1;
557 if (IPROBA > IMULTBU + 1 && NBU_DIFF > 0) {
558 std::cout << "###',IPROBA,IMULTBU,NBU_DIFF,ZBU_DIFF,T_freeze_out" << std::endl;
559 IPROBA = IPROBA + 1;
560 if (IEL <= IMULTBU) {
561 BU_TAB[IEL][1] = dint(BU_TAB[IEL][1] - G4double(NBU_DIFF));
562 }
563 else {
564 if (IEL > IMULTBU) aprf = dint(aprf - G4double(NBU_DIFF));
565 }
566 goto mult5432;
567 }
568 if (!(IEL < 200)) std::cout << "5556:" << IEL << RHAZ << IMULTBU << std::endl;
569 if (IEL < 0) std::cout << "5556:" << IEL << RHAZ << IMULTBU << std::endl;
570 if (IEL <= IMULTBU) {
571 N_Breakup = dint(BU_TAB[IEL][1] - BU_TAB[IEL][0] - DSIGN(1.0, G4double(NBU_DIFF)));
572 }
573 else if (IEL > IMULTBU) {
574 N_Breakup = dint(aprf - zprf - DSIGN(1.0, G4double(NBU_DIFF)));
575 }
576 if (N_Breakup < 0.0) {
577 IMEM_BU[IEL] = 1;
578 goto mult5556;
579 }
580 if (IEL <= IMULTBU) {
581 ATEMP = dint(BU_TAB[IEL][0] + N_Breakup);
582 }
583 else if (IEL > IMULTBU) {
584 ATEMP = dint(zprf + N_Breakup);
585 }
586 if ((ATEMP - N_Breakup) < 1.0 && N_Breakup < 1.0) {
587 IMEM_BU[IEL] = 1;
588 goto mult5556;
589 }
590 // IF((ATEMP - N_Breakup).GT.1.D0 .AND.
591 // & N_Breakup.EQ.0.D0) THEN
592 // IMEM_BU(IEL) = 1
593 // GOTO 5556
594 // ENDIF
595 if (IEL <= IMULTBU)
596 BU_TAB[IEL][1] = dint(BU_TAB[IEL][0] + N_Breakup);
597 else if (IEL > IMULTBU)
598 aprf = dint(zprf + N_Breakup);
599 //
600 NBU_DIFF = NBU_DIFF - ISIGN(1, NBU_DIFF);
601 } // while(NBU_DIFF > 0 || NBU_DIFF < 0)
602
603 IPROBA = 0;
604 for (G4int i = 0; i < IMULTBU; i++)
605 IMEM_BU[i] = 0;
606 }
607 else { // if(NBU_DIFF != 0 && ZBU_DIFF == 0)
608 if (ZBU_DIFF != 0 && NBU_DIFF == 0) {
609 while (ZBU_DIFF > 0 || ZBU_DIFF < 0) {
610 IS = 0;
611 mult5557:
612 G4double RHAZ = G4AblaRandom::flat() * G4double(IMULTBU);
613 IS = IS + 1;
614 if (IS > 100) {
615 std::cout << "WARNING: HAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING "
616 "N_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED."
617 << std::endl;
618 goto mult10;
619 }
620 G4int IEL = G4int(RHAZ);
621 if (IMEM_BU[IEL] == 1) goto mult5557;
622 // IPROBA = IPROBA + 1;
623 if (IPROBA > IMULTBU + 1 && ZBU_DIFF > 0) {
624 std::cout << "###',IPROBA,IMULTBU,NBU_DIFF,ZBU_DIFF,T_freeze_out" << std::endl;
625 IPROBA = IPROBA + 1;
626 if (IEL <= IMULTBU) {
627 N_Breakup = dint(BU_TAB[IEL][1] - BU_TAB[IEL][0]);
628 BU_TAB[IEL][0] = dint(BU_TAB[IEL][0] - G4double(ZBU_DIFF));
629 BU_TAB[IEL][1] = dint(BU_TAB[IEL][0] + N_Breakup);
630 }
631 else {
632 if (IEL > IMULTBU) {
633 N_Breakup = aprf - zprf;
634 zprf = dint(zprf - G4double(ZBU_DIFF));
635 aprf = dint(zprf + N_Breakup);
636 }
637 }
638 goto mult5432;
639 }
640 if (!(IEL < 200)) std::cout << "5557:" << IEL << RHAZ << IMULTBU << std::endl;
641 if (IEL < 0) std::cout << "5557:" << IEL << RHAZ << IMULTBU << std::endl;
642 if (IEL <= IMULTBU) {
643 N_Breakup = dint(BU_TAB[IEL][1] - BU_TAB[IEL][0]);
644 ZTEMP = dint(BU_TAB[IEL][0] - DSIGN(1.0, G4double(ZBU_DIFF)));
645 }
646 else if (IEL > IMULTBU) {
647 N_Breakup = dint(aprf - zprf);
648 ZTEMP = dint(zprf - DSIGN(1.0, G4double(ZBU_DIFF)));
649 }
650 ATEMP = dint(ZTEMP + N_Breakup);
651 if (ZTEMP < 0.0) {
652 IMEM_BU[IEL] = 1;
653 goto mult5557;
654 }
655 if ((ATEMP - ZTEMP) < 0.0) {
656 IMEM_BU[IEL] = 1;
657 goto mult5557;
658 }
659 if ((ATEMP - ZTEMP) < 1.0 && ZTEMP < 1.0) {
660 IMEM_BU[IEL] = 1;
661 goto mult5557;
662 }
663 if (IEL <= IMULTBU) {
664 BU_TAB[IEL][0] = dint(ZTEMP);
665 BU_TAB[IEL][1] = dint(ZTEMP + N_Breakup);
666 }
667 else {
668 if (IEL > IMULTBU) {
669 zprf = dint(ZTEMP);
670 aprf = dint(ZTEMP + N_Breakup);
671 }
672 }
673 ZBU_DIFF = ZBU_DIFF - ISIGN(1, ZBU_DIFF);
674 } // while
675 } // if(ZBU_DIFF != 0 && NBU_DIFF == 0)
676 } // if(NBU_DIFF != 0 && ZBU_DIFF == 0)
677
678 mult5432:
679 // Looking for the heaviest fragment among all multifragmentation events,
680 // and "giving" excitation energy to fragments
681 ZMEM = 0.0;
682
683 for (G4int i = 0; i < IMULTBU; i++) {
684 // For particles with Z>2 we calculate excitation energy from freeze-out
685 // temperature.
686 // For particels with Z<3 we assume that they form a gas, and that
687 // temperature results in kinetic energy (which is sampled from Maxwell
688 // distribution with T=Tfreeze-out) and not excitation energy.
689 if (BU_TAB[i][0] > 2.0) {
690 a_tilda_BU = ald->av * BU_TAB[i][1] + ald->as * std::pow(BU_TAB[i][1], 2.0 / 3.0)
691 + ald->ak * std::pow(BU_TAB[i][1], 1.0 / 3.0);
692 BU_TAB[i][2] = a_tilda_BU * T_freeze_out * T_freeze_out; // E* of break-up product
693 }
694 else {
695 BU_TAB[i][2] = 0.0;
696 }
697 //
698 if (BU_TAB[i][0] > ZMEM) {
699 IMEM = i;
700 ZMEM = BU_TAB[i][0];
701 AMEM = BU_TAB[i][1];
702 EMEM = BU_TAB[i][2];
703 JMEM = BU_TAB[i][3];
704 }
705 } // for IMULTBU
706
707 if (zprf < ZMEM) {
708 BU_TAB[IMEM][0] = zprf;
709 BU_TAB[IMEM][1] = aprf;
710 BU_TAB[IMEM][2] = ee;
711 BU_TAB[IMEM][3] = jprf;
712 zprf = ZMEM;
713 aprf = AMEM;
714 aprfp = idnint(aprf);
715 zprfp = idnint(zprf);
716 ee = EMEM;
717 jprf = JMEM;
718 }
719
720 // Just for checking:
721 ABU_SUM = aprf;
722 ZBU_SUM = zprf;
723 for (G4int i = 0; i < IMULTBU; i++) {
724 ABU_SUM = ABU_SUM + BU_TAB[i][1];
725 ZBU_SUM = ZBU_SUM + BU_TAB[i][0];
726 }
727 ABU_DIFF = idnint(ABU_SUM - AAINCL);
728 ZBU_DIFF = idnint(ZBU_SUM - ZAINCL);
729 //
730 if (ABU_DIFF != 0 || ZBU_DIFF != 0)
731 std::cout << "Problem of mass in BU " << ABU_DIFF << " " << ZBU_DIFF << std::endl;
732 PX_BU_SUM = 0.0;
733 PY_BU_SUM = 0.0;
734 PZ_BU_SUM = 0.0;
735 // Momenta of break-up products are calculated. They are all given in the
736 // rest frame of the primary prefragment (i.e. after incl): Goldhaber model
737 // **************************************** "Heavy" residue
738 AMOMENT(AAINCL, aprf, 1, &PXPRFP, &PYPRFP, &PZPRFP);
739 PPRFP = std::sqrt(PXPRFP * PXPRFP + PYPRFP * PYPRFP + PZPRFP * PZPRFP);
740 // ********************************************************
741 // PPRFP is in MeV/c
742 ETOT_PRF = std::sqrt(PPRFP * PPRFP + (aprf * amu) * (aprf * amu));
743 VX_PREF = C * PXPRFP / ETOT_PRF;
744 VY_PREF = C * PYPRFP / ETOT_PRF;
745 VZ_PREF = C * PZPRFP / ETOT_PRF;
746
747 // Contribution from Coulomb repulsion ********************
748 tke_bu(zprf, aprf, ZAINCL, AAINCL, &VX1_BU, &VY1_BU, &VZ1_BU);
749
750 // Lorentz kinematics
751 // VX_PREF = VX_PREF + VX1_BU
752 // VY_PREF = VY_PREF + VY1_BU
753 // VZ_PREF = VZ_PREF + VZ1_BU
754 // Lorentz transformation
755 lorentz_boost(VX1_BU, VY1_BU, VZ1_BU, VX_PREF, VY_PREF, VZ_PREF, &VXOUT, &VYOUT, &VZOUT);
756
757 VX_PREF = VXOUT;
758 VY_PREF = VYOUT;
759 VZ_PREF = VZOUT;
760
761 // Total momentum: Goldhaber + Coulomb
762 VBU2 = VX_PREF * VX_PREF + VY_PREF * VY_PREF + VZ_PREF * VZ_PREF;
763 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C * C));
764 ETOT_PRF = aprf * amu / GAMMA_REL;
765 PXPRFP = ETOT_PRF * VX_PREF / C;
766 PYPRFP = ETOT_PRF * VY_PREF / C;
767 PZPRFP = ETOT_PRF * VZ_PREF / C;
768
769 // ********************************************************
770 // Momentum: Total width of abrasion and breakup assumed to be given
771 // by Fermi momenta of nucleons
772 // *****************************************
773
774 PX_BU_SUM = PXPRFP;
775 PY_BU_SUM = PYPRFP;
776 PZ_BU_SUM = PZPRFP;
777
778 Eexc_BU_SUM = ee;
779 Bvalue_BU = eflmac(idnint(aprf), idnint(zprf), 1, 0);
780
781 for (I_Breakup = 0; I_Breakup < IMULTBU; I_Breakup++) {
782 // For bu products:
783 Bvalue_BU =
784 Bvalue_BU + eflmac(idnint(BU_TAB[I_Breakup][1]), idnint(BU_TAB[I_Breakup][0]), 1, 0);
785 Eexc_BU_SUM = Eexc_BU_SUM + BU_TAB[I_Breakup][2];
786
787 AMOMENT(AAINCL, BU_TAB[I_Breakup][1], 1, &PX_BU, &PY_BU, &PZ_BU);
788 P_BU = std::sqrt(PX_BU * PX_BU + PY_BU * PY_BU + PZ_BU * PZ_BU);
789 // *******************************************************
790 // PPRFP is in MeV/c
791 ETOT_BU =
792 std::sqrt(P_BU * P_BU + (BU_TAB[I_Breakup][1] * amu) * (BU_TAB[I_Breakup][1] * amu));
793 BU_TAB[I_Breakup][4] = C * PX_BU / ETOT_BU; // Velocity in x
794 BU_TAB[I_Breakup][5] = C * PY_BU / ETOT_BU; // Velocity in y
795 BU_TAB[I_Breakup][6] = C * PZ_BU / ETOT_BU; // Velocity in z
796 // Contribution from Coulomb repulsion:
797 tke_bu(BU_TAB[I_Breakup][0], BU_TAB[I_Breakup][1], ZAINCL, AAINCL, &VX2_BU, &VY2_BU, &VZ2_BU);
798 // Lorentz kinematics
799 // BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) + VX2_BU ! velocity
800 // change by Coulomb repulsion BU_TAB(I_Breakup,6) =
801 // BU_TAB(I_Breakup,6) + VY2_BU BU_TAB(I_Breakup,7) =
802 // BU_TAB(I_Breakup,7) + VZ2_BU
803 // Lorentz transformation
804 lorentz_boost(VX2_BU, VY2_BU, VZ2_BU, BU_TAB[I_Breakup][4], BU_TAB[I_Breakup][5],
805 BU_TAB[I_Breakup][6], &VXOUT, &VYOUT, &VZOUT);
806
807 BU_TAB[I_Breakup][4] = VXOUT;
808 BU_TAB[I_Breakup][5] = VYOUT;
809 BU_TAB[I_Breakup][6] = VZOUT;
810
811 // Total momentum: Goldhaber + Coulomb
812 VBU2 = BU_TAB[I_Breakup][4] * BU_TAB[I_Breakup][4]
813 + BU_TAB[I_Breakup][5] * BU_TAB[I_Breakup][5]
814 + BU_TAB[I_Breakup][6] * BU_TAB[I_Breakup][6];
815 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C * C));
816 ETOT_BU = BU_TAB[I_Breakup][1] * amu / GAMMA_REL;
817 PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C;
818 PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C;
819 PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C;
820
821 PX_BU_SUM = PX_BU_SUM + PX_BU;
822 PY_BU_SUM = PY_BU_SUM + PY_BU;
823 PZ_BU_SUM = PZ_BU_SUM + PZ_BU;
824
825 } // for I_Breakup
826
827 // In the frame of source (i.e. prefragment after abrasion or INCL)
828 P_BU_SUM = std::sqrt(PX_BU_SUM * PX_BU_SUM + PY_BU_SUM * PY_BU_SUM + PZ_BU_SUM * PZ_BU_SUM);
829 // ********************************************************
830 // PPRFP is in MeV/c
831 ETOT_SUM = std::sqrt(P_BU_SUM * P_BU_SUM + (AAINCL * amu) * (AAINCL * amu));
832
833 VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM;
834 VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM;
835 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM;
836
837 // Lorentz kinematics - DM 17/5/2010
838 // VX_PREF = VX_PREF - VX_BU_SUM
839 // VY_PREF = VY_PREF - VY_BU_SUM
840 // VZ_PREF = VZ_PREF - VZ_BU_SUM
841 // Lorentz transformation
842 lorentz_boost(-VX_BU_SUM, -VY_BU_SUM, -VZ_BU_SUM, VX_PREF, VY_PREF, VZ_PREF, &VXOUT, &VYOUT,
843 &VZOUT);
844
845 VX_PREF = VXOUT;
846 VY_PREF = VYOUT;
847 VZ_PREF = VZOUT;
848
849 VBU2 = VX_PREF * VX_PREF + VY_PREF * VY_PREF + VZ_PREF * VZ_PREF;
850 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C * C));
851 ETOT_PRF = aprf * amu / GAMMA_REL;
852 PXPRFP = ETOT_PRF * VX_PREF / C;
853 PYPRFP = ETOT_PRF * VY_PREF / C;
854 PZPRFP = ETOT_PRF * VZ_PREF / C;
855
856 PX_BU_SUM = 0.0;
857 PY_BU_SUM = 0.0;
858 PZ_BU_SUM = 0.0;
859
860 PX_BU_SUM = PXPRFP;
861 PY_BU_SUM = PYPRFP;
862 PZ_BU_SUM = PZPRFP;
863 E_tot_BU = ETOT_PRF;
864
865 EKIN_BU = aprf * amu / GAMMA_REL - aprf * amu;
866
867 for (I_Breakup = 0; I_Breakup < IMULTBU; I_Breakup++) {
868 // Lorentz kinematics - DM 17/5/2010
869 // BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) - VX_BU_SUM
870 // BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) - VY_BU_SUM
871 // BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) - VZ_BU_SUM
872 // Lorentz transformation
873 lorentz_boost(-VX_BU_SUM, -VY_BU_SUM, -VZ_BU_SUM, BU_TAB[I_Breakup][4], BU_TAB[I_Breakup][5],
874 BU_TAB[I_Breakup][6], &VXOUT, &VYOUT, &VZOUT);
875
876 BU_TAB[I_Breakup][4] = VXOUT;
877 BU_TAB[I_Breakup][5] = VYOUT;
878 BU_TAB[I_Breakup][6] = VZOUT;
879
880 VBU2 = BU_TAB[I_Breakup][4] * BU_TAB[I_Breakup][4]
881 + BU_TAB[I_Breakup][5] * BU_TAB[I_Breakup][5]
882 + BU_TAB[I_Breakup][6] * BU_TAB[I_Breakup][6];
883 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C * C));
884
885 ETOT_BU = BU_TAB[I_Breakup][1] * amu / GAMMA_REL;
886
887 EKIN_BU = EKIN_BU + BU_TAB[I_Breakup][1] * amu / GAMMA_REL - BU_TAB[I_Breakup][1] * amu;
888
889 PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C;
890 PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C;
891 PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C;
892 E_tot_BU = E_tot_BU + ETOT_BU;
893
894 PX_BU_SUM = PX_BU_SUM + PX_BU;
895 PY_BU_SUM = PY_BU_SUM + PY_BU;
896 PZ_BU_SUM = PZ_BU_SUM + PZ_BU;
897 } // for I_Breakup
898
899 if (std::abs(PX_BU_SUM) > 10. || std::abs(PY_BU_SUM) > 10. || std::abs(PZ_BU_SUM) > 10.) {
900 // In the frame of source (i.e. prefragment after INCL)
901 P_BU_SUM = std::sqrt(PX_BU_SUM * PX_BU_SUM + PY_BU_SUM * PY_BU_SUM + PZ_BU_SUM * PZ_BU_SUM);
902 // ********************************************************
903 // PPRFP is in MeV/c
904 ETOT_SUM = std::sqrt(P_BU_SUM * P_BU_SUM + (AAINCL * amu) * (AAINCL * amu));
905
906 VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM;
907 VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM;
908 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM;
909
910 // Lorentz kinematics
911 // VX_PREF = VX_PREF - VX_BU_SUM
912 // VY_PREF = VY_PREF - VY_BU_SUM
913 // VZ_PREF = VZ_PREF - VZ_BU_SUM
914 // Lorentz transformation
915 lorentz_boost(-VX_BU_SUM, -VY_BU_SUM, -VZ_BU_SUM, VX_PREF, VY_PREF, VZ_PREF, &VXOUT, &VYOUT,
916 &VZOUT);
917
918 VX_PREF = VXOUT;
919 VY_PREF = VYOUT;
920 VZ_PREF = VZOUT;
921
922 VBU2 = VX_PREF * VX_PREF + VY_PREF * VY_PREF + VZ_PREF * VZ_PREF;
923 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C * C));
924 ETOT_PRF = aprf * amu / GAMMA_REL;
925 PXPRFP = ETOT_PRF * VX_PREF / C;
926 PYPRFP = ETOT_PRF * VY_PREF / C;
927 PZPRFP = ETOT_PRF * VZ_PREF / C;
928
929 PX_BU_SUM = 0.0;
930 PY_BU_SUM = 0.0;
931 PZ_BU_SUM = 0.0;
932
933 PX_BU_SUM = PXPRFP;
934 PY_BU_SUM = PYPRFP;
935 PZ_BU_SUM = PZPRFP;
936 E_tot_BU = ETOT_PRF;
937
938 EKIN_BU = aprf * amu / GAMMA_REL - aprf * amu;
939
940 for (I_Breakup = 0; I_Breakup < IMULTBU; I_Breakup++) {
941 // Lorentz kinematics - DM 17/5/2010
942 // BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) - VX_BU_SUM
943 // BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) - VY_BU_SUM
944 // BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) - VZ_BU_SUM
945 // Lorentz transformation
946 lorentz_boost(-VX_BU_SUM, -VY_BU_SUM, -VZ_BU_SUM, BU_TAB[I_Breakup][4],
947 BU_TAB[I_Breakup][5], BU_TAB[I_Breakup][6], &VXOUT, &VYOUT, &VZOUT);
948
949 BU_TAB[I_Breakup][4] = VXOUT;
950 BU_TAB[I_Breakup][5] = VYOUT;
951 BU_TAB[I_Breakup][6] = VZOUT;
952
953 VBU2 = BU_TAB[I_Breakup][4] * BU_TAB[I_Breakup][4]
954 + BU_TAB[I_Breakup][5] * BU_TAB[I_Breakup][5]
955 + BU_TAB[I_Breakup][6] * BU_TAB[I_Breakup][6];
956 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C * C));
957
958 ETOT_BU = BU_TAB[I_Breakup][1] * amu / GAMMA_REL;
959
960 EKIN_BU = EKIN_BU + BU_TAB[I_Breakup][1] * amu / GAMMA_REL - BU_TAB[I_Breakup][1] * amu;
961
962 PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C;
963 PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C;
964 PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C;
965 E_tot_BU = E_tot_BU + ETOT_BU;
966
967 PX_BU_SUM = PX_BU_SUM + PX_BU;
968 PY_BU_SUM = PY_BU_SUM + PY_BU;
969 PZ_BU_SUM = PZ_BU_SUM + PZ_BU;
970 } // for I_Breakup
971 } // if DABS(PX_BU_SUM).GT.10.d0
972 //
973 // Find the limits that fragment is bound - only done for neutrons and
974 // LCPs and for nuclei with A=Z, for other nuclei it will be done after
975 // decay:
976
977 INEWLOOP = 0;
978 for (G4int i = 0; i < IMULTBU; i++) {
979 if (BU_TAB[i][0] < 3.0 || BU_TAB[i][0] == BU_TAB[i][1]) {
980 unstable_nuclei(idnint(BU_TAB[i][1]), idnint(BU_TAB[i][0]), &afpnew, &zfpnew, IOUNSTABLE,
981 BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], &VP1X, &VP1Y, &VP1Z, BU_TAB_TEMP,
982 &ILOOP);
983
984 if (IOUNSTABLE > 0) {
985 // Properties of "heavy fragment":
986 BU_TAB[i][1] = G4double(afpnew);
987 BU_TAB[i][0] = G4double(zfpnew);
988 BU_TAB[i][4] = VP1X;
989 BU_TAB[i][5] = VP1Y;
990 BU_TAB[i][6] = VP1Z;
991
992 // Properties of "light" fragments:
993 for (int IJ = 0; IJ < ILOOP; IJ++) {
994 BU_TAB[IMULTBU + INEWLOOP + IJ][0] = BU_TAB_TEMP[IJ][0];
995 BU_TAB[IMULTBU + INEWLOOP + IJ][1] = BU_TAB_TEMP[IJ][1];
996 BU_TAB[IMULTBU + INEWLOOP + IJ][4] = BU_TAB_TEMP[IJ][2];
997 BU_TAB[IMULTBU + INEWLOOP + IJ][5] = BU_TAB_TEMP[IJ][3];
998 BU_TAB[IMULTBU + INEWLOOP + IJ][6] = BU_TAB_TEMP[IJ][4];
999 BU_TAB[IMULTBU + INEWLOOP + IJ][2] = 0.0;
1000 BU_TAB[IMULTBU + INEWLOOP + IJ][3] = 0.0;
1001 } // for ILOOP
1002
1003 INEWLOOP = INEWLOOP + ILOOP;
1004
1005 } // if IOUNSTABLE.GT.0
1006 } // if BU_TAB[I_Breakup][0]<3.0
1007 } // for IMULTBU
1008
1009 // Increased array of BU_TAB
1010 IMULTBU = IMULTBU + INEWLOOP;
1011 // Evaporation from multifragmentation products
1012 opt->optimfallowed = 1; // IMF is allowed
1013 fiss->ifis = 0; // fission is not allowed
1014 gammaemission = 0;
1015 ILOOPBU = 0;
1016
1017 // Vector for lambda emission from breakup fragments
1018 std::vector<G4double> problamb(IMULTBU);
1019
1020 G4double sumN = aprf - zprf;
1021 for (G4int i = 0; i < IMULTBU; i++)
1022 sumN = sumN + BU_TAB[i][1] - BU_TAB[i][0];
1023
1024 for (G4int i = 0; i < IMULTBU; i++) {
1025 problamb[i] = (BU_TAB[i][1] - BU_TAB[i][0]) / sumN;
1026 }
1027
1028 std::vector<G4int> Nblamb(IMULTBU, 0);
1029 for (G4int j = 0; j < NbLam0;) {
1030 G4double probtotal = (aprf - zprf) / sumN;
1032 // Lambdas in the heavy breakup fragment
1033 if (ran <= probtotal) {
1034 NbLamprf++;
1035 goto directlamb0;
1036 }
1037 for (G4int i = 0; i < IMULTBU; i++) {
1038 // Lambdas in the light breakup residues
1039 if (probtotal < ran && ran <= probtotal + problamb[i]) {
1040 Nblamb[i] = Nblamb[i] + 1;
1041 goto directlamb0;
1042 }
1043 probtotal = probtotal + problamb[i];
1044 }
1045 directlamb0:
1046 j++;
1047 }
1048 //
1049 for (G4int i = 0; i < IMULTBU; i++) {
1050 EEBU = BU_TAB[i][2];
1051 BU_TAB[i][10] = BU_TAB[i][6];
1052 G4double jprfbu = BU_TAB[i][9];
1053 if (BU_TAB[i][0] > 2.0) {
1054 G4int nbl = Nblamb[i];
1055 evapora(BU_TAB[i][0], BU_TAB[i][1], &EEBU, 0.0, &ZFBU, &AFBU, &mtota, &vz_evabu, &vx_evabu,
1056 &vy_evabu, &ff, &fimf, &ZIMFBU, &AIMFBU, &TKEIMFBU, &jprfbu, &inttype, &inum,
1057 EV_TEMP, &IEV_TAB_TEMP, &nbl);
1058
1059 Nblamb[i] = nbl;
1060 BU_TAB[i][9] = jprfbu;
1061
1062 // Velocities of evaporated particles (in the frame of the primary
1063 // prefragment)
1064 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ++) {
1065 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ][0];
1066 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ][1];
1067 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ][5];
1068 // Lorentz kinematics
1069 // DO IK = 3, 5, 1
1070 // EV_TAB(IJ+IEV_TAB,IK) = EV_TEMP(IJ,IK) +
1071 // BU_TAB(I,IK+2) ENDDO
1072 // Lorentz transformation
1073 lorentz_boost(BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], EV_TEMP[IJ][2], EV_TEMP[IJ][3],
1074 EV_TEMP[IJ][4], &VXOUT, &VYOUT, &VZOUT);
1075 EV_TAB[IJ + IEV_TAB][2] = VXOUT;
1076 EV_TAB[IJ + IEV_TAB][3] = VYOUT;
1077 EV_TAB[IJ + IEV_TAB][4] = VZOUT;
1078 }
1079 IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1080
1081 // All velocities in the frame of the "primary" prefragment (after INC)
1082 // Lorentz kinematics
1083 // BU_TAB(I,5) = BU_TAB(I,5) + VX_EVABU
1084 // BU_TAB(I,6) = BU_TAB(I,6) + VY_EVABU
1085 // BU_TAB(I,7) = BU_TAB(I,7) + VZ_EVABU
1086 // Lorentz transformation
1087 lorentz_boost(vx_evabu, vy_evabu, vz_evabu, BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6],
1088 &VXOUT, &VYOUT, &VZOUT);
1089 BU_TAB[i][4] = VXOUT;
1090 BU_TAB[i][5] = VYOUT;
1091 BU_TAB[i][6] = VZOUT;
1092
1093 if (fimf == 0) {
1094 BU_TAB[i][7] = dint(ZFBU);
1095 BU_TAB[i][8] = dint(AFBU);
1096 BU_TAB[i][11] = nbl;
1097 } // if fimf==0
1098
1099 if (fimf == 1) {
1100 // PRINT*,'IMF EMISSION FROM BU PRODUCTS'
1101 // IMF emission: Heavy partner is not allowed to fission or to emitt
1102 // IMF.
1103 // double FEE = EEBU;
1104 G4int FFBU1 = 0;
1105 G4int FIMFBU1 = 0;
1106 opt->optimfallowed = 0; // IMF is not allowed
1107 fiss->ifis = 0; // fission is not allowed
1108 // Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF
1109 G4double EkinR1 = TKEIMFBU * AIMFBU / (AFBU + AIMFBU);
1110 G4double EkinR2 = TKEIMFBU * AFBU / (AFBU + AIMFBU);
1111 G4double V1 = std::sqrt(EkinR1 / AFBU) * 1.3887;
1112 G4double V2 = std::sqrt(EkinR2 / AIMFBU) * 1.3887;
1113 G4double VZ1_IMF = (2.0 * G4AblaRandom::flat() - 1.0) * V1;
1114 G4double VPERP1 = std::sqrt(V1 * V1 - VZ1_IMF * VZ1_IMF);
1115 G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142;
1116 G4double VX1_IMF = VPERP1 * std::sin(ALPHA1);
1117 G4double VY1_IMF = VPERP1 * std::cos(ALPHA1);
1118 G4double VX2_IMF = -VX1_IMF / V1 * V2;
1119 G4double VY2_IMF = -VY1_IMF / V1 * V2;
1120 G4double VZ2_IMF = -VZ1_IMF / V1 * V2;
1121
1122 G4double EEIMFP = EEBU * AFBU / (AFBU + AIMFBU);
1123 G4double EEIMF = EEBU * AIMFBU / (AFBU + AIMFBU);
1124
1125 // Decay of heavy partner
1126 G4double IINERTTOT = 0.40 * 931.490 * 1.160 * 1.160
1127 * (std::pow(AIMFBU, 5.0 / 3.0) + std::pow(AFBU, 5.0 / 3.0))
1128 + 931.490 * 1.160 * 1.160 * AIMFBU * AFBU / (AIMFBU + AFBU)
1129 * (std::pow(AIMFBU, 1. / 3.) + std::pow(AFBU, 1. / 3.))
1130 * (std::pow(AIMFBU, 1. / 3.) + std::pow(AFBU, 1. / 3.));
1131
1132 G4double JPRFHEAVY =
1133 BU_TAB[i][9] * 0.4 * 931.49 * 1.16 * 1.16 * std::pow(AFBU, 5.0 / 3.0) / IINERTTOT;
1134 G4double JPRFLIGHT =
1135 BU_TAB[i][9] * 0.4 * 931.49 * 1.16 * 1.16 * std::pow(AIMFBU, 5.0 / 3.0) / IINERTTOT;
1136
1137 // Lorentz kinematics
1138 // BU_TAB(I,5) = BU_TAB(I,5) + VX1_IMF
1139 // BU_TAB(I,6) = BU_TAB(I,6) + VY1_IMF
1140 // BU_TAB(I,7) = BU_TAB(I,7) + VZ1_IMF
1141 // Lorentz transformation
1142 lorentz_boost(VX1_IMF, VY1_IMF, VZ1_IMF, BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], &VXOUT,
1143 &VYOUT, &VZOUT);
1144 BU_TAB[i][4] = VXOUT;
1145 BU_TAB[i][5] = VYOUT;
1146 BU_TAB[i][6] = VZOUT;
1147
1148 G4double vx1ev_imf = 0., vy1ev_imf = 0., vz1ev_imf = 0., zdummy = 0., adummy = 0.,
1149 tkedummy = 0., jprf1 = 0.;
1150
1151 // Lambda particles
1152 G4int NbLamH = 0;
1153 G4int NbLamimf = 0;
1154 G4double pbH = (AFBU - ZFBU) / (AFBU - ZFBU + AIMFBU - ZIMFBU);
1155 for (G4int j = 0; j < nbl; j++) {
1156 if (G4AblaRandom::flat() < pbH) {
1157 NbLamH++;
1158 }
1159 else {
1160 NbLamimf++;
1161 }
1162 }
1163 // Decay of IMF's partner:
1164 evapora(ZFBU, AFBU, &EEIMFP, JPRFHEAVY, &ZFFBU, &AFFBU, &mtota, &vz1ev_imf, &vx1ev_imf,
1165 &vy1ev_imf, &FFBU1, &FIMFBU1, &zdummy, &adummy, &tkedummy, &jprf1, &inttype,
1166 &inum, EV_TEMP, &IEV_TAB_TEMP, &NbLamH);
1167
1168 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ++) {
1169 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ][0];
1170 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ][1];
1171 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ][5];
1172 // Lorentz kinematics
1173 // DO IK = 3, 5, 1
1174 // EV_TAB(IJ+IEV_TAB,IK) = EV_TEMP(IJ,IK) +
1175 // BU_TAB(I,IK+2) ENDDO
1176 // Lorentz transformation
1177 lorentz_boost(BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], EV_TEMP[IJ][2], EV_TEMP[IJ][3],
1178 EV_TEMP[IJ][4], &VXOUT, &VYOUT, &VZOUT);
1179 EV_TAB[IJ + IEV_TAB][2] = VXOUT;
1180 EV_TAB[IJ + IEV_TAB][3] = VYOUT;
1181 EV_TAB[IJ + IEV_TAB][4] = VZOUT;
1182 }
1183 IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1184
1185 BU_TAB[i][7] = dint(ZFFBU);
1186 BU_TAB[i][8] = dint(AFFBU);
1187 BU_TAB[i][11] = NbLamH;
1188 // Lorentz kinematics
1189 // BU_TAB(I,5) = BU_TAB(I,5) + vx1ev_imf
1190 // BU_TAB(I,6) = BU_TAB(I,6) + vy1ev_imf
1191 // BU_TAB(I,7) = BU_TAB(I,7) + vz1ev_imf
1192 lorentz_boost(vx1ev_imf, vy1ev_imf, vz1ev_imf, BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6],
1193 &VXOUT, &VYOUT, &VZOUT);
1194 BU_TAB[i][4] = VXOUT;
1195 BU_TAB[i][5] = VYOUT;
1196 BU_TAB[i][6] = VZOUT;
1197 // For IMF - fission and IMF emission are not allowed
1198 G4int FFBU2 = 0;
1199 G4int FIMFBU2 = 0;
1200 opt->optimfallowed = 0; // IMF is not allowed
1201 fiss->ifis = 0; // fission is not allowed
1202 // Decay of IMF
1203 G4double zffimf, affimf, zdummy1, adummy1, tkedummy1, jprf2, vx2ev_imf, vy2ev_imf,
1204 vz2ev_imf;
1205
1206 evapora(ZIMFBU, AIMFBU, &EEIMF, JPRFLIGHT, &zffimf, &affimf, &mtota, &vz2ev_imf,
1207 &vx2ev_imf, &vy2ev_imf, &FFBU2, &FIMFBU2, &zdummy1, &adummy1, &tkedummy1, &jprf2,
1208 &inttype, &inum, EV_TEMP, &IEV_TAB_TEMP, &NbLamimf);
1209
1210 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ++) {
1211 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ][0];
1212 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ][1];
1213 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ][5];
1214 // Lorentz kinematics
1215 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + BU_TAB(I,5)
1216 // +VX2_IMF EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) +
1217 // BU_TAB(I,6) +VY2_IMF EV_TAB(IJ+IEV_TAB,5) =
1218 // EV_TEMP(IJ,5) + BU_TAB(I,7) +VZ2_IMF
1219 // Lorentz transformation
1220 lorentz_boost(BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], EV_TEMP[IJ][2], EV_TEMP[IJ][3],
1221 EV_TEMP[IJ][4], &VXOUT, &VYOUT, &VZOUT);
1222 lorentz_boost(VX2_IMF, VY2_IMF, VZ2_IMF, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1223 &VZ2OUT);
1224 EV_TAB[IJ + IEV_TAB][2] = VX2OUT;
1225 EV_TAB[IJ + IEV_TAB][3] = VY2OUT;
1226 EV_TAB[IJ + IEV_TAB][4] = VZ2OUT;
1227 }
1228 IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1229
1230 BU_TAB[IMULTBU + ILOOPBU][0] = BU_TAB[i][0];
1231 BU_TAB[IMULTBU + ILOOPBU][1] = BU_TAB[i][1];
1232 BU_TAB[IMULTBU + ILOOPBU][2] = BU_TAB[i][2];
1233 BU_TAB[IMULTBU + ILOOPBU][3] = BU_TAB[i][3];
1234 BU_TAB[IMULTBU + ILOOPBU][7] = dint(zffimf);
1235 BU_TAB[IMULTBU + ILOOPBU][8] = dint(affimf);
1236 BU_TAB[IMULTBU + ILOOPBU][11] = NbLamimf;
1237 // Lorentz transformation
1238 lorentz_boost(VX2_IMF, VY2_IMF, VZ2_IMF, BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], &VXOUT,
1239 &VYOUT, &VZOUT);
1240 lorentz_boost(vx2ev_imf, vy2ev_imf, vz2ev_imf, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1241 &VZ2OUT);
1242 BU_TAB[IMULTBU + ILOOPBU][4] = VX2OUT;
1243 BU_TAB[IMULTBU + ILOOPBU][5] = VY2OUT;
1244 BU_TAB[IMULTBU + ILOOPBU][6] = VZ2OUT;
1245 ILOOPBU = ILOOPBU + 1;
1246 } // if fimf==1
1247 }
1248 else { // if BU_TAB(I,1).GT.2.D0
1249 // BU_TAB[i][0] = BU_TAB[i][0];
1250 // BU_TAB[i][1] = BU_TAB[i][1];
1251 // BU_TAB[i][2] = BU_TAB[i][2];
1252 // BU_TAB[i][3] = BU_TAB[i][3];
1253 BU_TAB[i][7] = BU_TAB[i][0];
1254 BU_TAB[i][8] = BU_TAB[i][1];
1255 // BU_TAB[i][4] = BU_TAB[i][4];
1256 // BU_TAB[i][5] = BU_TAB[i][5];
1257 // BU_TAB[i][6] = BU_TAB[i][6];
1258 BU_TAB[i][11] = Nblamb[i];
1259 } // if BU_TAB(I,1).GT.2.D0
1260 } // for IMULTBU
1261
1262 IMULTBU = IMULTBU + ILOOPBU;
1263 //
1264 // RESOLVE UNSTABLE NUCLEI
1265 //
1266 INEWLOOP = 0;
1267 ABU_SUM = 0.0;
1268 ZBU_SUM = 0.0;
1269 //
1270 for (G4int i = 0; i < IMULTBU; i++) {
1271 ABU_SUM = ABU_SUM + BU_TAB[i][8];
1272 ZBU_SUM = ZBU_SUM + BU_TAB[i][7];
1273 unstable_nuclei(idnint(BU_TAB[i][8]), idnint(BU_TAB[i][7]), &afpnew, &zfpnew, IOUNSTABLE,
1274 BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], &VP1X, &VP1Y, &VP1Z, BU_TAB_TEMP1,
1275 &ILOOP);
1276
1277 // From now on, all neutrons and LCP created in above subroutine are part
1278 // of the
1279 // BU_TAB array (see below - Properties of "light" fragments). Therefore,
1280 // NEVA, PEVA ... are not needed any more in the break-up stage.
1281
1282 if (IOUNSTABLE > 0) {
1283 // Properties of "heavy fragment":
1284 ABU_SUM = ABU_SUM + G4double(afpnew) - BU_TAB[i][8];
1285 ZBU_SUM = ZBU_SUM + G4double(zfpnew) - BU_TAB[i][7];
1286 BU_TAB[i][8] = G4double(afpnew);
1287 BU_TAB[i][7] = G4double(zfpnew);
1288 BU_TAB[i][4] = VP1X;
1289 BU_TAB[i][5] = VP1Y;
1290 BU_TAB[i][6] = VP1Z;
1291
1292 // Properties of "light" fragments:
1293 for (G4int IJ = 0; IJ < ILOOP; IJ++) {
1294 BU_TAB[IMULTBU + INEWLOOP + IJ][7] = BU_TAB_TEMP1[IJ][0];
1295 BU_TAB[IMULTBU + INEWLOOP + IJ][8] = BU_TAB_TEMP1[IJ][1];
1296 BU_TAB[IMULTBU + INEWLOOP + IJ][4] = BU_TAB_TEMP1[IJ][2];
1297 BU_TAB[IMULTBU + INEWLOOP + IJ][5] = BU_TAB_TEMP1[IJ][3];
1298 BU_TAB[IMULTBU + INEWLOOP + IJ][6] = BU_TAB_TEMP1[IJ][4];
1299 BU_TAB[IMULTBU + INEWLOOP + IJ][2] = 0.0;
1300 BU_TAB[IMULTBU + INEWLOOP + IJ][3] = 0.0;
1301 BU_TAB[IMULTBU + INEWLOOP + IJ][0] = BU_TAB[i][0];
1302 BU_TAB[IMULTBU + INEWLOOP + IJ][1] = BU_TAB[i][1];
1303 BU_TAB[IMULTBU + INEWLOOP + IJ][11] = BU_TAB[i][11];
1304 ABU_SUM = ABU_SUM + BU_TAB[IMULTBU + INEWLOOP + IJ][8];
1305 ZBU_SUM = ZBU_SUM + BU_TAB[IMULTBU + INEWLOOP + IJ][7];
1306 } // for ILOOP
1307
1308 INEWLOOP = INEWLOOP + ILOOP;
1309 } // if(IOUNSTABLE>0)
1310 } // for IMULTBU unstable
1311
1312 // Increased array of BU_TAB
1313 IMULTBU = IMULTBU + INEWLOOP;
1314
1315 // Transform all velocities into the rest frame of the projectile
1316 lorentz_boost(VX_incl, VY_incl, VZ_incl, VX_PREF, VY_PREF, VZ_PREF, &VXOUT, &VYOUT, &VZOUT);
1317 VX_PREF = VXOUT;
1318 VY_PREF = VYOUT;
1319 VZ_PREF = VZOUT;
1320
1321 for (G4int i = 0; i < IMULTBU; i++) {
1322 lorentz_boost(VX_incl, VY_incl, VZ_incl, BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], &VXOUT,
1323 &VYOUT, &VZOUT);
1324 BU_TAB[i][4] = VXOUT;
1325 BU_TAB[i][5] = VYOUT;
1326 BU_TAB[i][6] = VZOUT;
1327 }
1328 for (G4int i = 0; i < IEV_TAB; i++) {
1329 lorentz_boost(VX_incl, VY_incl, VZ_incl, EV_TAB[i][2], EV_TAB[i][3], EV_TAB[i][4], &VXOUT,
1330 &VYOUT, &VZOUT);
1331 EV_TAB[i][2] = VXOUT;
1332 EV_TAB[i][3] = VYOUT;
1333 EV_TAB[i][4] = VZOUT;
1334 }
1335 if (IMULTBU > 200) std::cout << "IMULTBU>200 " << IMULTBU << std::endl;
1336 } // if(T_diff>0.1)
1337 // End of multi-fragmentation
1338mult7777:
1339
1340 // Start basic de-excitation of fragments
1341 aprfp = idnint(aprf);
1342 zprfp = idnint(zprf);
1343
1344 if (IMULTIFR == 0) {
1345 // These momenta are in the frame of the projectile (or target in case of
1346 // direct kinematics)
1347 VX_PREF = VX_incl;
1348 VY_PREF = VY_incl;
1349 VZ_PREF = VZ_incl;
1350 }
1351 // Lambdas after multi-fragmentation
1352 if (IMULTIFR == 1) {
1353 NbLam0 = NbLamprf;
1354 }
1355 //
1356 // CALL THE EVAPORATION SUBROUTINE
1357 //
1358 opt->optimfallowed = 1; // IMF is allowed
1359 fiss->ifis = 1; // fission is allowed
1360 fimf = 0;
1361 ff = 0;
1362
1363 // To spare computing time; these events in any case cannot decay
1364 // IF(ZPRFP.LE.2.AND.ZPRFP.LT.APRFP)THEN FIXME: <= or <
1365 if (zprfp <= 2 && zprfp < aprfp) {
1366 zf = zprf;
1367 af = aprf;
1368 ee = 0.0;
1369 ff = 0;
1370 fimf = 0;
1371 ftype = 0;
1372 aimf = 0.0;
1373 zimf = 0.0;
1374 tkeimf = 0.0;
1375 vx_eva = 0.0;
1376 vy_eva = 0.0;
1377 vz_eva = 0.0;
1378 jprf0 = jprf;
1379 goto a1972;
1380 }
1381
1382 // if(ZPRFP.LE.2.AND.ZPRFP.EQ.APRFP)
1383 if (zprfp <= 2 && zprfp == aprfp) {
1384 unstable_nuclei(aprfp, zprfp, &afpnew, &zfpnew, IOUNSTABLE, VX_PREF, VY_PREF, VZ_PREF, &VP1X,
1385 &VP1Y, &VP1Z, EV_TAB_TEMP, &ILOOP);
1386 af = G4double(afpnew);
1387 zf = G4double(zfpnew);
1388 VX_PREF = VP1X;
1389 VY_PREF = VP1Y;
1390 VZ_PREF = VP1Z;
1391 for (G4int I = 0; I < ILOOP; I++) {
1392 for (G4int IJ = 0; IJ < 6; IJ++)
1393 EV_TAB[I + IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
1394 }
1395 IEV_TAB = IEV_TAB + ILOOP;
1396 ee = 0.0;
1397 ff = 0;
1398 fimf = 0;
1399 ftype = 0;
1400 aimf = 0.0;
1401 zimf = 0.0;
1402 tkeimf = 0.0;
1403 vx_eva = 0.0;
1404 vy_eva = 0.0;
1405 vz_eva = 0.0;
1406 jprf0 = jprf;
1407 goto a1972;
1408 }
1409
1410 // IF(ZPRFP.EQ.APRFP)THEN
1411 if (zprfp == aprfp) {
1412 unstable_nuclei(aprfp, zprfp, &afpnew, &zfpnew, IOUNSTABLE, VX_PREF, VY_PREF, VZ_PREF, &VP1X,
1413 &VP1Y, &VP1Z, EV_TAB_TEMP, &ILOOP);
1414 af = G4double(afpnew);
1415 zf = G4double(zfpnew);
1416 VX_PREF = VP1X;
1417 VY_PREF = VP1Y;
1418 VZ_PREF = VP1Z;
1419 for (G4int I = 0; I < ILOOP; I++) {
1420 for (G4int IJ = 0; IJ < 6; IJ++)
1421 EV_TAB[I + IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
1422 }
1423 IEV_TAB = IEV_TAB + ILOOP;
1424 ee = 0.0;
1425 ff = 0;
1426 fimf = 0;
1427 ftype = 0;
1428 aimf = 0.0;
1429 zimf = 0.0;
1430 tkeimf = 0.0;
1431 vx_eva = 0.0;
1432 vy_eva = 0.0;
1433 vz_eva = 0.0;
1434 jprf0 = jprf;
1435 goto a1972;
1436 }
1437 //
1438 evapora(zprf, aprf, &ee, jprf, &zf, &af, &mtota, &vz_eva, &vx_eva, &vy_eva, &ff, &fimf, &zimf,
1439 &aimf, &tkeimf, &jprf0, &inttype, &inum, EV_TEMP, &IEV_TAB_TEMP, &NbLam0);
1440 //
1441 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ++) {
1442 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ][0];
1443 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ][1];
1444 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ][5];
1445 //
1446 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1447 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1448 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1449 // Lorentz transformation
1450 lorentz_boost(VX_PREF, VY_PREF, VZ_PREF, EV_TEMP[IJ][2], EV_TEMP[IJ][3], EV_TEMP[IJ][4], &VXOUT,
1451 &VYOUT, &VZOUT);
1452 EV_TAB[IJ + IEV_TAB][2] = VXOUT;
1453 EV_TAB[IJ + IEV_TAB][3] = VYOUT;
1454 EV_TAB[IJ + IEV_TAB][4] = VZOUT;
1455 }
1456 IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1457
1458a1972:
1459
1460 // vi_pref - velocity of the prefragment; vi_eva - recoil due to evaporation
1461 lorentz_boost(VX_PREF, VY_PREF, VZ_PREF, vx_eva, vy_eva, vz_eva, &VXOUT, &VYOUT, &VZOUT);
1462 V_CM[0] = VXOUT;
1463 V_CM[1] = VYOUT;
1464 V_CM[2] = VZOUT;
1465 //
1466 if (ff == 0 && fimf == 0) {
1467 // Evaporation of neutrons and LCP; no IMF, no fission
1468 ftype = 0;
1469 ZFP1 = idnint(zf);
1470 AFP1 = idnint(af);
1471 SFP1 = NbLam0;
1472 AFPIMF = 0;
1473 ZFPIMF = 0;
1474 SFPIMF = 0;
1475 ZFP2 = 0;
1476 AFP2 = 0;
1477 SFP2 = 0;
1478 VFP1_CM[0] = V_CM[0];
1479 VFP1_CM[1] = V_CM[1];
1480 VFP1_CM[2] = V_CM[2];
1481 for (G4int j = 0; j < 3; j++) {
1482 VIMF_CM[j] = 0.0;
1483 VFP2_CM[j] = 0.0;
1484 }
1485 }
1486 //
1487 if (ff == 1 && fimf == 0) ftype = 1; // fission
1488 if (ff == 0 && fimf == 1)
1489 ftype = 2; // IMF emission
1490 //
1491 // AFP,ZFP IS THE FINAL FRAGMENT IF NO FISSION OR IMF EMISSION OCCURS
1492 // IN CASE OF FISSION IT IS THE NUCLEUS THAT UNDERGOES FISSION OR IMF
1493 //
1494
1495 //***************** FISSION ***************************************
1496 //
1497 if (ftype == 1) {
1498 varntp->kfis = 1;
1499 if (NbLam0 > 0) varntp->kfis = 20;
1500 // ftype1=0;
1501
1502 G4int IEV_TAB_FIS = 0, imode = 0;
1503
1504 G4double vx1_fission = 0., vy1_fission = 0., vz1_fission = 0.;
1505 G4double vx2_fission = 0., vy2_fission = 0., vz2_fission = 0.;
1506 G4double vx_eva_sc = 0., vy_eva_sc = 0., vz_eva_sc = 0.;
1507
1508 fission(af, zf, ee, jprf0, &vx1_fission, &vy1_fission, &vz1_fission, &vx2_fission, &vy2_fission,
1509 &vz2_fission, &ZFP1, &AFP1, &SFP1, &ZFP2, &AFP2, &SFP2, &imode, &vx_eva_sc, &vy_eva_sc,
1510 &vz_eva_sc, EV_TEMP, &IEV_TAB_FIS, &NbLam0);
1511
1512 for (G4int IJ = 0; IJ < IEV_TAB_FIS; IJ++) {
1513 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ][0];
1514 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ][1];
1515 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ][5];
1516 // Lorentz kinematics
1517 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1518 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1519 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1520 // Lorentz transformation
1521 lorentz_boost(V_CM[0], V_CM[1], V_CM[2], EV_TEMP[IJ][2], EV_TEMP[IJ][3], EV_TEMP[IJ][4],
1522 &VXOUT, &VYOUT, &VZOUT);
1523 EV_TAB[IJ + IEV_TAB][2] = VXOUT;
1524 EV_TAB[IJ + IEV_TAB][3] = VYOUT;
1525 EV_TAB[IJ + IEV_TAB][4] = VZOUT;
1526 }
1527 IEV_TAB = IEV_TAB + IEV_TAB_FIS;
1528
1529 // if(imode==1) ftype1 = 1; // S1 mode
1530 // if(imode==2) ftype1 = 2; // S2 mode
1531
1532 AFPIMF = 0;
1533 ZFPIMF = 0;
1534 SFPIMF = 0;
1535
1536 // VX_EVA_SC,VY_EVA_SC,VZ_EVA_SC - recoil due to particle emisison
1537 // between saddle and scission
1538 // Lorentz kinematics
1539 // VFP1_CM(1) = V_CM(1) + VX1_FISSION + VX_EVA_SC ! Velocity of FF1
1540 // in x VFP1_CM(2) = V_CM(2) + VY1_FISSION + VY_EVA_SC ! Velocity of
1541 // FF1 in y VFP1_CM(3) = V_CM(3) + VZ1_FISSION + VZ_EVA_SC ! Velocity
1542 // of FF1 in x
1543 lorentz_boost(vx1_fission, vy1_fission, vz1_fission, V_CM[0], V_CM[1], V_CM[2], &VXOUT, &VYOUT,
1544 &VZOUT);
1545 lorentz_boost(vx_eva_sc, vy_eva_sc, vz_eva_sc, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT, &VZ2OUT);
1546 VFP1_CM[0] = VX2OUT;
1547 VFP1_CM[1] = VY2OUT;
1548 VFP1_CM[2] = VZ2OUT;
1549
1550 // Lorentz kinematics
1551 // VFP2_CM(1) = V_CM(1) + VX2_FISSION + VX_EVA_SC ! Velocity of FF2
1552 // in x VFP2_CM(2) = V_CM(2) + VY2_FISSION + VY_EVA_SC ! Velocity of
1553 // FF2 in y VFP2_CM(3) = V_CM(3) + VZ2_FISSION + VZ_EVA_SC ! Velocity
1554 // of FF2 in x
1555 lorentz_boost(vx2_fission, vy2_fission, vz2_fission, V_CM[0], V_CM[1], V_CM[2], &VXOUT, &VYOUT,
1556 &VZOUT);
1557 lorentz_boost(vx_eva_sc, vy_eva_sc, vz_eva_sc, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT, &VZ2OUT);
1558 VFP2_CM[0] = VX2OUT;
1559 VFP2_CM[1] = VY2OUT;
1560 VFP2_CM[2] = VZ2OUT;
1561
1562 //************** IMF EMISSION
1563 //************************************************
1564 //
1565 }
1566 else if (ftype == 2) {
1567 // IMF emission: Heavy partner is allowed to fission and to emitt IMF, but
1568 // ONLY once.
1569 G4int FF11 = 0;
1570 G4int FIMF11 = 0;
1571 opt->optimfallowed = 1; // IMF is allowed
1572 fiss->ifis = 1; // fission is allowed
1573 // Lambda particles
1574 G4int NbLamH = 0;
1575 G4int NbLamimf = 0;
1576 G4double pbH = (af - zf) / (af - zf + aimf - zimf);
1577 // double pbL = aimf / (af+aimf);
1578 for (G4int i = 0; i < NbLam0; i++) {
1579 if (G4AblaRandom::flat() < pbH) {
1580 NbLamH++;
1581 }
1582 else {
1583 NbLamimf++;
1584 }
1585 }
1586 //
1587 // Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF
1588 G4double EkinR1 = tkeimf * aimf / (af + aimf);
1589 G4double EkinR2 = tkeimf * af / (af + aimf);
1590 G4double V1 = std::sqrt(EkinR1 / af) * 1.3887;
1591 G4double V2 = std::sqrt(EkinR2 / aimf) * 1.3887;
1592 G4double VZ1_IMF = (2.0 * G4AblaRandom::flat() - 1.0) * V1;
1593 G4double VPERP1 = std::sqrt(V1 * V1 - VZ1_IMF * VZ1_IMF);
1594 G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142;
1595 G4double VX1_IMF = VPERP1 * std::sin(ALPHA1);
1596 G4double VY1_IMF = VPERP1 * std::cos(ALPHA1);
1597 G4double VX2_IMF = -VX1_IMF / V1 * V2;
1598 G4double VY2_IMF = -VY1_IMF / V1 * V2;
1599 G4double VZ2_IMF = -VZ1_IMF / V1 * V2;
1600
1601 G4double EEIMFP = ee * af / (af + aimf);
1602 G4double EEIMF = ee * aimf / (af + aimf);
1603
1604 // Decay of heavy partner
1605 G4double IINERTTOT =
1606 0.40 * 931.490 * 1.160 * 1.160 * (std::pow(aimf, 5.0 / 3.0) + std::pow(af, 5.0 / 3.0))
1607 + 931.490 * 1.160 * 1.160 * aimf * af / (aimf + af)
1608 * (std::pow(aimf, 1. / 3.) + std::pow(af, 1. / 3.))
1609 * (std::pow(aimf, 1. / 3.) + std::pow(af, 1. / 3.));
1610
1611 G4double JPRFHEAVY = jprf0 * 0.4 * 931.49 * 1.16 * 1.16 * std::pow(af, 5.0 / 3.0) / IINERTTOT;
1612 G4double JPRFLIGHT = jprf0 * 0.4 * 931.49 * 1.16 * 1.16 * std::pow(aimf, 5.0 / 3.0) / IINERTTOT;
1613 if (af < 2.0) std::cout << "RN117-4,AF,ZF,EE,JPRFheavy" << std::endl;
1614
1615 G4double vx1ev_imf = 0., vy1ev_imf = 0., vz1ev_imf = 0., zdummy = 0., adummy = 0.,
1616 tkedummy = 0., jprf1 = 0.;
1617
1618 evapora(zf, af, &EEIMFP, JPRFHEAVY, &zff, &aff, &mtota, &vz1ev_imf, &vx1ev_imf, &vy1ev_imf,
1619 &FF11, &FIMF11, &zdummy, &adummy, &tkedummy, &jprf1, &inttype, &inum, EV_TEMP,
1620 &IEV_TAB_TEMP, &NbLamH);
1621
1622 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ++) {
1623 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ][0];
1624 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ][1];
1625 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ][5];
1626 //
1627 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1628 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1629 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1630 // Lorentz transformation
1631 lorentz_boost(V_CM[0], V_CM[1], V_CM[2], EV_TEMP[IJ][2], EV_TEMP[IJ][3], EV_TEMP[IJ][4],
1632 &VXOUT, &VYOUT, &VZOUT);
1633 lorentz_boost(vx1ev_imf, vy1ev_imf, vz1ev_imf, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1634 &VZ2OUT);
1635 EV_TAB[IJ + IEV_TAB][2] = VX2OUT;
1636 EV_TAB[IJ + IEV_TAB][3] = VY2OUT;
1637 EV_TAB[IJ + IEV_TAB][4] = VZ2OUT;
1638 }
1639 IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1640
1641 // For IMF - fission and IMF emission are not allowed
1642 G4int FF22 = 0;
1643 G4int FIMF22 = 0;
1644 opt->optimfallowed = 0; // IMF is not allowed
1645 fiss->ifis = 0; // fission is not allowed
1646
1647 // Decay of IMF
1648 G4double zffimf, affimf, zdummy1 = 0., adummy1 = 0., tkedummy1 = 0., jprf2, vx2ev_imf,
1649 vy2ev_imf, vz2ev_imf;
1650
1651 evapora(zimf, aimf, &EEIMF, JPRFLIGHT, &zffimf, &affimf, &mtota, &vz2ev_imf, &vx2ev_imf,
1652 &vy2ev_imf, &FF22, &FIMF22, &zdummy1, &adummy1, &tkedummy1, &jprf2, &inttype, &inum,
1653 EV_TEMP, &IEV_TAB_TEMP, &NbLamimf);
1654
1655 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ++) {
1656 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ][0];
1657 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ][1];
1658 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ][5];
1659 //
1660 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1661 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1662 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1663 // Lorentz transformation
1664 lorentz_boost(V_CM[0], V_CM[1], V_CM[2], EV_TEMP[IJ][2], EV_TEMP[IJ][3], EV_TEMP[IJ][4],
1665 &VXOUT, &VYOUT, &VZOUT);
1666 lorentz_boost(VX2_IMF, VY2_IMF, VZ2_IMF, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT, &VZ2OUT);
1667 EV_TAB[IJ + IEV_TAB][2] = VX2OUT;
1668 EV_TAB[IJ + IEV_TAB][3] = VY2OUT;
1669 EV_TAB[IJ + IEV_TAB][4] = VZ2OUT;
1670 }
1671 IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1672 // As IMF is not allowed to emit IMF, adummy1=zdummy1=0
1673
1674 AFPIMF = idnint(affimf);
1675 ZFPIMF = idnint(zffimf);
1676 SFPIMF = NbLamimf;
1677
1678 // vi1_imf, vi2_imf - velocities of imf and partner from TKE;
1679 // vi1ev_imf, vi2_imf - recoil of partner and imf due to evaporation
1680 // Lorentz kinematics - DM 18/5/2010
1681 // VIMF_CM(1) = V_CM(1) + VX2_IMF + VX2EV_IMF
1682 // VIMF_CM(2) = V_CM(2) + VY2_IMF + VY2EV_IMF
1683 // VIMF_CM(3) = V_CM(3) + VZ2_IMF + VZ2EV_IMF
1684 lorentz_boost(VX2_IMF, VY2_IMF, VZ2_IMF, V_CM[0], V_CM[1], V_CM[2], &VXOUT, &VYOUT, &VZOUT);
1685 lorentz_boost(vx2ev_imf, vy2ev_imf, vz2ev_imf, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT, &VZ2OUT);
1686 VIMF_CM[0] = VX2OUT;
1687 VIMF_CM[1] = VY2OUT;
1688 VIMF_CM[2] = VZ2OUT;
1689 // Lorentz kinematics
1690 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF
1691 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF
1692 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF
1693 lorentz_boost(VX1_IMF, VY1_IMF, VZ1_IMF, V_CM[0], V_CM[1], V_CM[2], &VXOUT, &VYOUT, &VZOUT);
1694 lorentz_boost(vx1ev_imf, vy1ev_imf, vz1ev_imf, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT, &VZ2OUT);
1695 VFP1_CM[0] = VX2OUT;
1696 VFP1_CM[1] = VY2OUT;
1697 VFP1_CM[2] = VZ2OUT;
1698
1699 if (FF11 == 0 && FIMF11 == 0) {
1700 // heavy partner deexcites by emission of light particles
1701 AFP1 = idnint(aff);
1702 ZFP1 = idnint(zff);
1703 SFP1 = NbLamH;
1704 ZFP2 = 0;
1705 AFP2 = 0;
1706 SFP2 = 0;
1707 ftype = 2;
1708 AFPIMF = idnint(affimf);
1709 ZFPIMF = idnint(zffimf);
1710 SFPIMF = NbLamimf;
1711 for (G4int I = 0; I < 3; I++)
1712 VFP2_CM[I] = 0.0;
1713 }
1714 else if (FF11 == 1 && FIMF11 == 0) {
1715 // Heavy partner fissions
1716 varntp->kfis = 1;
1717 if (NbLam0 > 0) varntp->kfis = 20;
1718 //
1719 opt->optimfallowed = 0; // IMF is not allowed
1720 fiss->ifis = 0; // fission is not allowed
1721 //
1722 zf = zff;
1723 af = aff;
1724 ee = EEIMFP;
1725 // ftype1=0;
1726 ftype = 21;
1727
1728 G4int IEV_TAB_FIS = 0, imode = 0;
1729
1730 G4double vx1_fission = 0., vy1_fission = 0., vz1_fission = 0.;
1731 G4double vx2_fission = 0., vy2_fission = 0., vz2_fission = 0.;
1732 G4double vx_eva_sc = 0., vy_eva_sc = 0., vz_eva_sc = 0.;
1733
1734 fission(af, zf, ee, jprf1, &vx1_fission, &vy1_fission, &vz1_fission, &vx2_fission,
1735 &vy2_fission, &vz2_fission, &ZFP1, &AFP1, &SFP1, &ZFP2, &AFP2, &SFP2, &imode,
1736 &vx_eva_sc, &vy_eva_sc, &vz_eva_sc, EV_TEMP, &IEV_TAB_FIS, &NbLamH);
1737
1738 for (G4int IJ = 0; IJ < IEV_TAB_FIS; IJ++) {
1739 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ][0];
1740 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ][1];
1741 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ][5];
1742 // Lorentz kinematics
1743 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1744 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1745 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1746 // Lorentz transformation
1747 lorentz_boost(VFP1_CM[0], VFP1_CM[1], VFP1_CM[2], EV_TEMP[IJ][2], EV_TEMP[IJ][3],
1748 EV_TEMP[IJ][4], &VXOUT, &VYOUT, &VZOUT);
1749 EV_TAB[IJ + IEV_TAB][2] = VXOUT;
1750 EV_TAB[IJ + IEV_TAB][3] = VYOUT;
1751 EV_TAB[IJ + IEV_TAB][4] = VZOUT;
1752 }
1753 IEV_TAB = IEV_TAB + IEV_TAB_FIS;
1754
1755 // if(imode==1) ftype1 = 1; // S1 mode
1756 // if(imode==2) ftype1 = 2; // S2 mode
1757
1758 // Lorentz kinematics
1759 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF + VX1_FISSION +
1760 // & VX_EVA_SC ! Velocity of FF1 in x
1761 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF + VY1_FISSION +
1762 // & VY_EVA_SC ! Velocity of FF1 in y
1763 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF + VZ1_FISSION +
1764 // & VZ_EVA_SC ! Velocity of FF1 in x
1765 lorentz_boost(VX1_IMF, VY1_IMF, VZ1_IMF, V_CM[0], V_CM[1], V_CM[2], &VXOUT, &VYOUT, &VZOUT);
1766 lorentz_boost(vx1ev_imf, vy1ev_imf, vz1ev_imf, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1767 &VZ2OUT);
1768 lorentz_boost(vx1_fission, vy1_fission, vz1_fission, VX2OUT, VY2OUT, VZ2OUT, &VXOUT, &VYOUT,
1769 &VZOUT);
1770 lorentz_boost(vx_eva_sc, vy_eva_sc, vz_eva_sc, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1771 &VZ2OUT);
1772 VFP1_CM[0] = VX2OUT;
1773 VFP1_CM[1] = VY2OUT;
1774 VFP1_CM[2] = VZ2OUT;
1775
1776 // Lorentz kinematics
1777 // VFP2_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF + VX2_FISSION +
1778 // & VX_EVA_SC ! Velocity of FF2 in x
1779 // VFP2_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF + VY2_FISSION +
1780 // & VY_EVA_SC ! Velocity of FF2 in y
1781 // VFP2_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF + VZ2_FISSION +
1782 // & VZ_EVA_SC ! Velocity of FF2 in x
1783 lorentz_boost(VX1_IMF, VY1_IMF, VZ1_IMF, V_CM[0], V_CM[1], V_CM[2], &VXOUT, &VYOUT, &VZOUT);
1784 lorentz_boost(vx1ev_imf, vy1ev_imf, vz1ev_imf, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1785 &VZ2OUT);
1786 lorentz_boost(vx2_fission, vy2_fission, vz2_fission, VX2OUT, VY2OUT, VZ2OUT, &VXOUT, &VYOUT,
1787 &VZOUT);
1788 lorentz_boost(vx_eva_sc, vy_eva_sc, vz_eva_sc, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1789 &VZ2OUT);
1790 VFP2_CM[0] = VX2OUT;
1791 VFP2_CM[1] = VY2OUT;
1792 VFP2_CM[2] = VZ2OUT;
1793 }
1794 else if (FF11 == 0 && FIMF11 == 1) {
1795 // Heavy partner emits imf, consequtive imf emission or fission is not
1796 // allowed
1797 opt->optimfallowed = 0; // IMF is not allowed
1798 fiss->ifis = 0; // fission is not allowed
1799 //
1800 zf = zff;
1801 af = aff;
1802 ee = EEIMFP;
1803 aimf = adummy;
1804 zimf = zdummy;
1805 tkeimf = tkedummy;
1806 FF11 = 0;
1807 FIMF11 = 0;
1808 ftype = 22;
1809 // Lambda particles
1810 G4int NbLamH1 = 0;
1811 G4int NbLamimf1 = 0;
1812 G4double pbH1 = (af - zf) / (af - zf + aimf - zimf);
1813 for (G4int i = 0; i < NbLamH; i++) {
1814 if (G4AblaRandom::flat() < pbH1) {
1815 NbLamH1++;
1816 }
1817 else {
1818 NbLamimf1++;
1819 }
1820 }
1821 //
1822 // Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF
1823 EkinR1 = tkeimf * aimf / (af + aimf);
1824 EkinR2 = tkeimf * af / (af + aimf);
1825 V1 = std::sqrt(EkinR1 / af) * 1.3887;
1826 V2 = std::sqrt(EkinR2 / aimf) * 1.3887;
1827 G4double VZ1_IMFS = (2.0 * G4AblaRandom::flat() - 1.0) * V1;
1828 VPERP1 = std::sqrt(V1 * V1 - VZ1_IMFS * VZ1_IMFS);
1829 ALPHA1 = G4AblaRandom::flat() * 2. * 3.142;
1830 G4double VX1_IMFS = VPERP1 * std::sin(ALPHA1);
1831 G4double VY1_IMFS = VPERP1 * std::cos(ALPHA1);
1832 G4double VX2_IMFS = -VX1_IMFS / V1 * V2;
1833 G4double VY2_IMFS = -VY1_IMFS / V1 * V2;
1834 G4double VZ2_IMFS = -VZ1_IMFS / V1 * V2;
1835
1836 EEIMFP = ee * af / (af + aimf);
1837 EEIMF = ee * aimf / (af + aimf);
1838
1839 // Decay of heavy partner
1840 IINERTTOT =
1841 0.40 * 931.490 * 1.160 * 1.160 * (std::pow(aimf, 5.0 / 3.0) + std::pow(af, 5.0 / 3.0))
1842 + 931.490 * 1.160 * 1.160 * aimf * af / (aimf + af)
1843 * (std::pow(aimf, 1. / 3.) + std::pow(af, 1. / 3.))
1844 * (std::pow(aimf, 1. / 3.) + std::pow(af, 1. / 3.));
1845
1846 JPRFHEAVY = jprf1 * 0.4 * 931.49 * 1.16 * 1.16 * std::pow(af, 5.0 / 3.0) / IINERTTOT;
1847 JPRFLIGHT = jprf1 * 0.4 * 931.49 * 1.16 * 1.16 * std::pow(aimf, 5.0 / 3.0) / IINERTTOT;
1848
1849 G4double zffs = 0., affs = 0., vx1ev_imfs = 0., vy1ev_imfs = 0., vz1ev_imfs = 0., jprf3 = 0.;
1850
1851 evapora(zf, af, &EEIMFP, JPRFHEAVY, &zffs, &affs, &mtota, &vz1ev_imfs, &vx1ev_imfs,
1852 &vy1ev_imfs, &FF11, &FIMF11, &zdummy, &adummy, &tkedummy, &jprf3, &inttype, &inum,
1853 EV_TEMP, &IEV_TAB_TEMP, &NbLamH1);
1854
1855 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ++) {
1856 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ][0];
1857 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ][1];
1858 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ][5];
1859 //
1860 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1861 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1862 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1863 // Lorentz transformation
1864 lorentz_boost(VFP1_CM[0], VFP1_CM[1], VFP1_CM[2], EV_TEMP[IJ][2], EV_TEMP[IJ][3],
1865 EV_TEMP[IJ][4], &VXOUT, &VYOUT, &VZOUT);
1866 lorentz_boost(vx1ev_imfs, vy1ev_imfs, vz1ev_imfs, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1867 &VZ2OUT);
1868 EV_TAB[IJ + IEV_TAB][2] = VX2OUT;
1869 EV_TAB[IJ + IEV_TAB][3] = VY2OUT;
1870 EV_TAB[IJ + IEV_TAB][4] = VZ2OUT;
1871 }
1872 IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1873
1874 // For IMF - fission and IMF emission are not allowed
1875 opt->optimfallowed = 0; // IMF is not allowed
1876 fiss->ifis = 0; // fission is not allowed
1877 //
1878 FF22 = 0;
1879 FIMF22 = 0;
1880 // Decay of "second" IMF
1881 G4double zffimfs = 0., affimfs = 0., vx2ev_imfs = 0., vy2ev_imfs = 0., vz2ev_imfs = 0.,
1882 jprf4 = 0.;
1883
1884 evapora(zimf, aimf, &EEIMF, JPRFLIGHT, &zffimfs, &affimfs, &mtota, &vz2ev_imfs, &vx2ev_imfs,
1885 &vy2ev_imfs, &FF22, &FIMF22, &zdummy1, &adummy1, &tkedummy1, &jprf4, &inttype, &inum,
1886 EV_TEMP, &IEV_TAB_TEMP, &NbLamimf1);
1887
1888 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ++) {
1889 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ][0];
1890 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ][1];
1891 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ][5];
1892 //
1893 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1894 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1895 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1896 // Lorentz transformation
1897 lorentz_boost(VFP1_CM[0], VFP1_CM[1], VFP1_CM[2], EV_TEMP[IJ][2], EV_TEMP[IJ][3],
1898 EV_TEMP[IJ][4], &VXOUT, &VYOUT, &VZOUT);
1899 lorentz_boost(vx2ev_imfs, vy2ev_imfs, vz2ev_imfs, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1900 &VZ2OUT);
1901 EV_TAB[IJ + IEV_TAB][2] = VX2OUT;
1902 EV_TAB[IJ + IEV_TAB][3] = VY2OUT;
1903 EV_TAB[IJ + IEV_TAB][4] = VZ2OUT;
1904 }
1905 IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1906
1907 AFP1 = idnint(affs);
1908 ZFP1 = idnint(zffs);
1909 SFP1 = NbLamH1;
1910 ZFP2 = idnint(zffimfs);
1911 AFP2 = idnint(affimfs);
1912 SFP2 = NbLamimf1;
1913
1914 // Velocity of final heavy residue
1915 // Lorentz kinematics
1916 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF
1917 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF
1918 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF
1919 lorentz_boost(VX1_IMF, VY1_IMF, VZ1_IMF, V_CM[0], V_CM[1], V_CM[2], &VXOUT, &VYOUT, &VZOUT);
1920 lorentz_boost(vx1ev_imf, vy1ev_imf, vz1ev_imf, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1921 &VZ2OUT);
1922 lorentz_boost(VX1_IMFS, VY1_IMFS, VZ1_IMFS, VX2OUT, VY2OUT, VZ2OUT, &VXOUT, &VYOUT, &VZOUT);
1923 lorentz_boost(vx1ev_imfs, vy1ev_imfs, vz1ev_imfs, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1924 &VZ2OUT);
1925 VFP1_CM[0] = VX2OUT;
1926 VFP1_CM[1] = VY2OUT;
1927 VFP1_CM[2] = VZ2OUT;
1928
1929 // Velocity of the second IMF
1930 // Lorentz kinematics
1931 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF
1932 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF
1933 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF
1934 lorentz_boost(VX1_IMF, VY1_IMF, VZ1_IMF, V_CM[0], V_CM[1], V_CM[2], &VXOUT, &VYOUT, &VZOUT);
1935 lorentz_boost(vx1ev_imf, vy1ev_imf, vz1ev_imf, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1936 &VZ2OUT);
1937 lorentz_boost(VX2_IMFS, VY2_IMFS, VZ2_IMFS, VX2OUT, VY2OUT, VZ2OUT, &VXOUT, &VYOUT, &VZOUT);
1938 lorentz_boost(vx2ev_imfs, vy2ev_imfs, vz2ev_imfs, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
1939 &VZ2OUT);
1940 VFP2_CM[0] = VX2OUT;
1941 VFP2_CM[1] = VY2OUT;
1942 VFP2_CM[2] = VZ2OUT;
1943 } // second decay
1944 } // if(ftype == 2)
1945
1946 // Only evaporation of light particles
1947 if (ftype != 1 && ftype != 21) {
1948 // ----------- RESOLVE UNSTABLE NUCLEI
1949 IOUNSTABLE = 0;
1950
1951 unstable_nuclei(AFP1, ZFP1, &afpnew, &zfpnew, IOUNSTABLE, VFP1_CM[0], VFP1_CM[1], VFP1_CM[2],
1952 &VP1X, &VP1Y, &VP1Z, EV_TAB_TEMP, &ILOOP);
1953
1954 if (IOUNSTABLE == 1) {
1955 AFP1 = afpnew;
1956 ZFP1 = zfpnew;
1957 VFP1_CM[0] = VP1X;
1958 VFP1_CM[1] = VP1Y;
1959 VFP1_CM[2] = VP1Z;
1960 for (G4int I = 0; I < ILOOP; I++) {
1961 for (G4int IJ = 0; IJ < 5; IJ++)
1962 EV_TAB[I + IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
1963 }
1964 IEV_TAB = IEV_TAB + ILOOP;
1965 }
1966
1967 if (ftype > 1) {
1968 IOUNSTABLE = 0;
1969
1970 unstable_nuclei(AFPIMF, ZFPIMF, &afpnew, &zfpnew, IOUNSTABLE, VIMF_CM[0], VIMF_CM[1],
1971 VIMF_CM[2], &VP1X, &VP1Y, &VP1Z, EV_TAB_TEMP, &ILOOP);
1972
1973 if (IOUNSTABLE == 1) {
1974 AFPIMF = afpnew;
1975 ZFPIMF = zfpnew;
1976 VIMF_CM[0] = VP1X;
1977 VIMF_CM[1] = VP1Y;
1978 VIMF_CM[2] = VP1Z;
1979 for (G4int I = 0; I < ILOOP; I++) {
1980 for (G4int IJ = 0; IJ < 5; IJ++)
1981 EV_TAB[I + IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
1982 }
1983 IEV_TAB = IEV_TAB + ILOOP;
1984 }
1985
1986 if (ftype > 2) {
1987 IOUNSTABLE = 0;
1988
1989 unstable_nuclei(AFP2, ZFP2, &afpnew, &zfpnew, IOUNSTABLE, VFP2_CM[0], VFP2_CM[1],
1990 VFP2_CM[2], &VP1X, &VP1Y, &VP1Z, EV_TAB_TEMP, &ILOOP);
1991
1992 if (IOUNSTABLE == 1) {
1993 AFP2 = afpnew;
1994 ZFP2 = zfpnew;
1995 VFP2_CM[0] = VP1X;
1996 VFP2_CM[1] = VP1Y;
1997 VFP2_CM[2] = VP1Z;
1998 for (G4int I = 0; I < ILOOP; I++) {
1999 for (G4int IJ = 0; IJ < 5; IJ++)
2000 EV_TAB[I + IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
2001 }
2002 IEV_TAB = IEV_TAB + ILOOP;
2003 }
2004 } // ftype>2
2005 } // ftype>1
2006 }
2007
2008 // For the case of fission:
2009 if (ftype == 1 || ftype == 21) {
2010 // ----------- RESOLVE UNSTABLE NUCLEI
2011 IOUNSTABLE = 0;
2012 // ----------- Fragment 1
2013 unstable_nuclei(AFP1, ZFP1, &afpnew, &zfpnew, IOUNSTABLE, VFP1_CM[0], VFP1_CM[1], VFP1_CM[2],
2014 &VP1X, &VP1Y, &VP1Z, EV_TAB_TEMP, &ILOOP);
2015
2016 if (IOUNSTABLE == 1) {
2017 AFP1 = afpnew;
2018 ZFP1 = zfpnew;
2019 VFP1_CM[0] = VP1X;
2020 VFP1_CM[1] = VP1Y;
2021 VFP1_CM[2] = VP1Z;
2022 for (G4int I = 0; I < ILOOP; I++) {
2023 for (G4int IJ = 0; IJ < 5; IJ++)
2024 EV_TAB[I + IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
2025 }
2026 IEV_TAB = IEV_TAB + ILOOP;
2027 }
2028
2029 IOUNSTABLE = 0;
2030 // ----------- Fragment 2
2031 unstable_nuclei(AFP2, ZFP2, &afpnew, &zfpnew, IOUNSTABLE, VFP2_CM[0], VFP2_CM[1], VFP2_CM[2],
2032 &VP1X, &VP1Y, &VP1Z, EV_TAB_TEMP, &ILOOP);
2033
2034 if (IOUNSTABLE == 1) {
2035 AFP2 = afpnew;
2036 ZFP2 = zfpnew;
2037 VFP2_CM[0] = VP1X;
2038 VFP2_CM[1] = VP1Y;
2039 VFP2_CM[2] = VP1Z;
2040 for (G4int I = 0; I < ILOOP; I++) {
2041 for (G4int IJ = 0; IJ < 5; IJ++)
2042 EV_TAB[I + IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
2043 }
2044 IEV_TAB = IEV_TAB + ILOOP;
2045 }
2046
2047 if (ftype == 21) {
2048 IOUNSTABLE = 0;
2049 // ----------- Fragment IMF
2050 unstable_nuclei(AFPIMF, ZFPIMF, &afpnew, &zfpnew, IOUNSTABLE, VIMF_CM[0], VIMF_CM[1],
2051 VIMF_CM[2], &VP1X, &VP1Y, &VP1Z, EV_TAB_TEMP, &ILOOP);
2052
2053 if (IOUNSTABLE == 1) {
2054 AFPIMF = afpnew;
2055 ZFPIMF = zfpnew;
2056 VIMF_CM[0] = VP1X;
2057 VIMF_CM[1] = VP1Y;
2058 VIMF_CM[2] = VP1Z;
2059 for (G4int I = 0; I < ILOOP; I++) {
2060 for (G4int IJ = 0; IJ < 5; IJ++)
2061 EV_TAB[I + IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
2062 }
2063 IEV_TAB = IEV_TAB + ILOOP;
2064 }
2065 } // ftype=21
2066 }
2067
2068 // Cross check
2069 if ((ftype == 1 || ftype == 21) && (AFP2 <= 0 || AFP1 <= 0 || ZFP2 <= 0 || ZFP1 <= 0)) {
2070 std::cout << "ZFP1:" << ZFP1 << std::endl;
2071 std::cout << "AFP1:" << AFP1 << std::endl;
2072 std::cout << "ZFP2:" << ZFP2 << std::endl;
2073 std::cout << "AFP2:" << AFP2 << std::endl;
2074 }
2075
2076 // Put heavy residues in the EV_TAB array
2077 EV_TAB[IEV_TAB][0] = ZFP1;
2078 EV_TAB[IEV_TAB][1] = AFP1;
2079 EV_TAB[IEV_TAB][5] = SFP1;
2080 EV_TAB[IEV_TAB][2] = VFP1_CM[0];
2081 EV_TAB[IEV_TAB][3] = VFP1_CM[1];
2082 EV_TAB[IEV_TAB][4] = VFP1_CM[2];
2083 IEV_TAB = IEV_TAB + 1;
2084
2085 if (AFP2 > 0) {
2086 EV_TAB[IEV_TAB][0] = ZFP2;
2087 EV_TAB[IEV_TAB][1] = AFP2;
2088 EV_TAB[IEV_TAB][5] = SFP2;
2089 EV_TAB[IEV_TAB][2] = VFP2_CM[0];
2090 EV_TAB[IEV_TAB][3] = VFP2_CM[1];
2091 EV_TAB[IEV_TAB][4] = VFP2_CM[2];
2092 IEV_TAB = IEV_TAB + 1;
2093 }
2094
2095 if (AFPIMF > 0) {
2096 EV_TAB[IEV_TAB][0] = ZFPIMF;
2097 EV_TAB[IEV_TAB][1] = AFPIMF;
2098 EV_TAB[IEV_TAB][5] = SFPIMF;
2099 EV_TAB[IEV_TAB][2] = VIMF_CM[0];
2100 EV_TAB[IEV_TAB][3] = VIMF_CM[1];
2101 EV_TAB[IEV_TAB][4] = VIMF_CM[2];
2102 IEV_TAB = IEV_TAB + 1;
2103 }
2104 // Put the array of particles in the root file of INCL
2105 FillData(IMULTBU, IEV_TAB);
2106 return;
2107}
constexpr const G4int indexpart
G4double C(G4double temp)
G4double eflmac(G4int ia, G4int iz, G4int flag, G4int optshp)
Definition G4Abla.cc:5106
void evapora(G4double zprf, G4double aprf, G4double *ee_par, G4double jprf, G4double *zf_par, G4double *af_par, G4double *mtota_par, G4double *vleva_par, G4double *vxeva_par, G4double *vyeva_par, G4int *ff_par, G4int *fimf_par, G4double *fzimf, G4double *faimf, G4double *tkeimf_par, G4double *jprfout, G4int *inttype_par, G4int *inum_par, G4double EV_TEMP[indexpart][6], G4int *iev_tab_temp_par, G4int *nblam0)
Definition G4Abla.cc:2536
G4int IPOWERLIMHAZ(G4double lambda, G4int xmin, G4int xmax)
Definition G4Abla.cc:10439
void isostab_lim(G4int z, G4int *nmin, G4int *nmax)
Definition G4Abla.cc:7647
G4double DSIGN(G4double a, G4double b)
Definition G4Abla.cc:6301
G4int ISIGN(G4int a, G4int b)
Definition G4Abla.cc:6315
void AMOMENT(G4double AABRA, G4double APRF, G4int IMULTIFR, G4double *PX, G4double *PY, G4double *PZ)
Definition G4Abla.cc:10453
void tke_bu(G4double Z, G4double A, G4double ZALL, G4double AAL, G4double *VX, G4double *VY, G4double *VZ)
Definition G4Abla.cc:10372
G4double dint(G4double a)
Definition G4Abla.cc:6383
void fission(G4double AF, G4double ZF, G4double EE, G4double JPRF, G4double *VX1_FISSION, G4double *VY1_FISSION, G4double *VZ1_FISSION, G4double *VX2_FISSION, G4double *VY2_FISSION, G4double *VZ2_FISSION, G4int *ZFP1, G4int *AFP1, G4int *SFP1, G4int *ZFP2, G4int *AFP2, G4int *SFP2, G4int *imode, G4double *VX_EVA_SC, G4double *VY_EVA_SC, G4double *VZ_EVA_SC, G4double EV_TEMP[indexpart][6], G4int *IEV_TAB_FIS, G4int *NbLam0)
Definition G4Abla.cc:10190
G4int max(G4int a, G4int b)
Definition G4Abla.cc:6291
void unstable_nuclei(G4int AFP, G4int ZFP, G4int *AFPNEW, G4int *ZFPNEW, G4int &IOUNSTABLE, G4double VX, G4double VY, G4double VZ, G4double *VP1X, G4double *VP1Y, G4double *VP1Z, G4double BU_TAB_TEMP[indexpart][6], G4int *ILOOP)
Definition G4Abla.cc:9415
void FillData(G4int IMULTBU, G4int IEV_TAB)
Definition G4Abla.cc:6169
void SetParametersG4(G4int z, G4int a)
Definition G4Abla.cc:2275
void lorentz_boost(G4double VXRIN, G4double VYRIN, G4double VZRIN, G4double VXIN, G4double VYIN, G4double VZIN, G4double *VXOUT, G4double *VYOUT, G4double *VZOUT)
Definition G4Abla.cc:10134
G4double flat()
#define V1(a, b, c)
#define V2(a, b, c)

◆ densniv()

void G4Abla::densniv ( G4double a,
G4double z,
G4double ee,
G4double ef,
G4double * dens,
G4double bshell,
G4double bs,
G4double bk,
G4double * temp,
G4int optshp,
G4int optcol,
G4double defbet,
G4double * ecor,
G4double jprf,
G4int ifis,
G4double * qr )

Level density parameters.

Definition at line 4534 of file G4Abla.cc.

4538{
4539 // 1498 C
4540 // 1499 C INPUT:
4541 // 1500 C A,EE,ESOUS,OPTSHP,BS,BK,BSHELL,DEFBET
4542 // 1501 C
4543 // 1502 C LEVEL DENSITY PARAMETERS
4544 // 1503 C COMMON /ALD/ AV,AS,AK,OPTAFAN
4545 // 1504 C AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE
4546 // 1505 C LEVEL DENSITY PARAMETER
4547 // 1506 C OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1
4548 // 1507 C RECOMMENDED IS OPTAFAN = 0
4549 // 1508
4550 // C---------------------------------------------------------------------
4551 // 1509 C OUTPUT: DENS,TEMP
4552 // 1510 C
4553 // 1511 C
4554 // ____________________________________________________________________ 1512
4555 // C / 1513 C / PROCEDURE FOR CALCULATING THE STATE DENSITY OF A
4556 // COMPOUND NUCLEUS 1514 C
4557 // /____________________________________________________________________
4558 // 1515 C
4559 // 1516 INTEGER AFP,IZ,OPTSHP,OPTCOL,J,OPTAFAN
4560 // 1517 REAL*8
4561 // A,EE,ESOUS,DENS,E,Y0,Y1,Y2,Y01,Y11,Y21,PA,BS,BK,TEMP 1518
4562 // C=====INSERTED BY KUDYAEV===============================================
4563 // 1519 COMMON /ALD/ AV,AS,AK,OPTAFAN
4564 // 1520 REAL*8
4565 // ECR,ER,DELTAU,Z,DELTPP,PARA,PARZ,FE,HE,ECOR,ECOR1,Pi6
4566 // 1521 REAL*8
4567 // BSHELL,DELTA0,AV,AK,AS,PONNIV,PONFE,DEFBET,QR,SIG,FP 1522
4568 // C=======================================================================
4569 // 1523 C
4570 // 1524 C
4571 // 1525
4572 // C-----------------------------------------------------------------------
4573 // 1526 C A MASS NUMBER OF THE DAUGHTER NUCLEUS
4574 // 1527 C EE EXCITATION ENERGY OF THE MOTHER NUCLEUS
4575 // 1528 C ESOUS SEPARATION ENERGY PLUS EFFECTIVE COULOMB
4576 // BARRIER
4577 // 1529 C DENS STATE DENSITY OF DAUGHTER NUCLEUS AT
4578 // EE-ESOUS-EC 1530 C BSHELL SHELL CORRECTION 1531 C TEMP
4579 // NUCLEAR TEMPERATURE 1532 C E LOCAL EXCITATION ENERGY OF THE
4580 // DAUGHTER NUCLEUS 1533 C E1 LOCAL HELP VARIABLE
4581 // 1534 C Y0,Y1,Y2,Y01,Y11,Y21
4582 // 1535 C LOCAL HELP VARIABLES
4583 // 1536 C PA LOCAL STATE-DENSITY PARAMETER
4584 // 1537 C EC KINETIC ENERGY OF EMITTED PARTICLE
4585 // WITHOUT 1538 C COULOMB REPULSION 1539 C IDEN
4586 // FAKTOR FOR SUBSTRACTING KINETIC ENERGY IDEN*TEMP 1540 C DELTA0
4587 // PAIRING GAP 12 FOR GROUND STATE 1541 C 14 FOR
4588 // SADDLE POINT 1542 C EITERA HELP VARIABLE FOR
4589 // TEMPERATURE ITERATION 1543
4590 // C-----------------------------------------------------------------------
4591 // 1544 C
4592 // 1545 C
4593 G4double delta0 = 0.0;
4594 G4double deltau = 0.0;
4595 G4double deltpp = 0.0;
4596 G4double e = 0.0;
4597 G4double e0 = 0.0;
4598 G4double ecor1 = 0.0;
4599 G4double ecr = 10.0;
4600 G4double fe = 0.0;
4601 G4double he = 0.0;
4602 G4double pa = 0.0;
4603 G4double para = 0.0;
4604 G4double parz = 0.0;
4605 G4double ponfe = 0.0;
4606 G4double ponniv = 0.0;
4607 G4double fqr = 1.0;
4608 G4double y01 = 0.0;
4609 G4double y11 = 0.0;
4610 G4double y2 = 0.0;
4611 G4double y21 = 0.0;
4612 G4double y1 = 0.0;
4613 G4double y0 = 0.0;
4614 G4double fnorm = 0.0;
4615 G4double fp_per = 0.;
4616 G4double fp_par = 0.;
4617 G4double sig_per = 0.;
4618 G4double sig_par = 0.;
4619 G4double sigma2;
4620 G4double jfact = 1.;
4621 G4double erot = 0.;
4622 G4double fdens = 0.;
4623 G4double fecor = 0.;
4624 G4double BSHELLCT = 0.;
4625 G4double gamma = 0.;
4626 G4double ftemp = 0.0;
4627 G4double tempct = 0.0;
4628 G4double densfm = 0.0;
4629 G4double densct = 0.0;
4630 G4double ein = 0.;
4631 G4double elim;
4632 G4double tfm;
4633 G4double bs = bsin;
4634 G4double bk = bkin;
4635 G4int IPARITE;
4636 G4int IOPTCT = fiss->optct;
4637 //
4638 G4double pi6 = std::pow(3.1415926535, 2) / 6.0;
4639 G4double pi = 3.1415926535;
4640 //
4641 G4int afp = idnint(a);
4642 G4int iz = idnint(z);
4643 G4int in = afp - iz;
4644 //
4645 if (ifis != 1) {
4646 BSHELLCT = ecld->ecgnz[in][iz];
4647 }
4648 else {
4649 BSHELLCT = 0.0;
4650 }
4651 if (afp <= 20) BSHELLCT = 0.0;
4652 //
4653 parite(a, &para);
4654 if (para < 0.0) {
4655 // Odd A
4656 IPARITE = 1;
4657 }
4658 else {
4659 // Even A
4660 parite(z, &parz);
4661 if (parz > 0.0) {
4662 // Even Z, even N
4663 IPARITE = 2;
4664 }
4665 else {
4666 // Odd Z, odd N
4667 IPARITE = 0;
4668 }
4669 }
4670 //
4671 ein = ee - esous;
4672 //
4673 if (ein > 1.e30) {
4674 fdens = 0.0;
4675 ftemp = 0.5;
4676 goto densniv100;
4677 }
4678 //
4679 e = ee - esous;
4680 //
4681 if (e < 0.0 && ifis != 1) { // TUNNELING
4682 fdens = 0.0;
4683 densfm = 0.0;
4684 densct = 0.0;
4685 if (ald->optafan == 1) {
4686 pa = (ald->av) * a + (ald->as) * std::pow(a, (2.e0 / 3.e0))
4687 + (ald->ak) * std::pow(a, (1.e0 / 3.e0));
4688 }
4689 else {
4690 pa = (ald->av) * a + (ald->as) * bsin * std::pow(a, (2.e0 / 3.e0))
4691 + (ald->ak) * bkin * std::pow(a, (1.e0 / 3.e0));
4692 }
4693 gamma = 2.5 * pa * std::pow(a, -4.0 / 3.0);
4694 fecor = 0.0;
4695 goto densniv100;
4696 }
4697 //
4698 if (ifis == 0 && bs != 1.0) {
4699 // - With increasing excitation energy system in getting less and less
4700 // deformed:
4701 G4double ponq = (e - 100.0) / 5.0;
4702 if (ponq > 700.0) ponq = 700.0;
4703 bs = 1.0 / (1.0 + std::exp(-ponq)) + 1.0 / (1.0 + std::exp(ponq)) * bsin;
4704 bk = 1.0 / (1.0 + std::exp(-ponq)) + 1.0 / (1.0 + std::exp(ponq)) * bkin;
4705 }
4706 //
4707 // level density parameter
4708 if (ald->optafan == 1) {
4709 pa = (ald->av) * a + (ald->as) * std::pow(a, (2.e0 / 3.e0))
4710 + (ald->ak) * std::pow(a, (1.e0 / 3.e0));
4711 }
4712 else {
4713 pa = (ald->av) * a + (ald->as) * bs * std::pow(a, (2.e0 / 3.e0))
4714 + (ald->ak) * bk * std::pow(a, (1.e0 / 3.e0));
4715 }
4716 //
4717 gamma = 2.5 * pa * std::pow(a, -4.0 / 3.0);
4718 //
4719 // AK - 2009 - trial, in order to have transition to constant-temperature
4720 // approach Idea - at the phase transition superfluid-normal fluid, TCT =
4721 // TEMP, and this determines critical energy for pairing.
4722 if (a > 0.0) {
4723 ecr = pa * 17.60 / (std::pow(a, 0.699) * std::sqrt(1.0 + gamma * BSHELLCT)) * 17.60
4724 / (std::pow(a, 0.699) * std::sqrt(1.0 + gamma * BSHELLCT));
4725 }
4726
4727 // pairing corrections
4728 if (ifis == 1) {
4729 delta0 = 14;
4730 }
4731 else {
4732 delta0 = 12;
4733 }
4734
4735 // shell corrections
4736 if (optshp > 0) {
4737 deltau = bshell;
4738 if (optshp == 2) {
4739 deltau = 0.0;
4740 }
4741 if (optshp >= 2) {
4742 // pairing energy shift with condensation energy a.r.j. 10.03.97
4743 // deltpp = -0.25e0* (delta0/pow(sqrt(a),2)) * pa /pi6
4744 // + 2.e0*delta0/sqrt(a);
4745 deltpp = -0.25e0 * std::pow((delta0 / std::sqrt(a)), 2) * pa / pi6
4746 + 22.34e0 * std::pow(a, -0.464) - 0.235;
4747 // Odd A
4748 if (IPARITE == 1) {
4749 // e = e - delta0/sqrt(a);
4750 e = e - (0.285 + 11.17 * std::pow(a, -0.464) - 0.390 - 0.00058 * a); //-30./a;//FIXME
4751 }
4752 // Even Z, even N
4753 if (IPARITE == 2) {
4754 e = e - (22.34 * std::pow(a, -0.464) - 0.235); //-30./a;//FIXME
4755 }
4756 // Odd Z, odd N
4757 if (IPARITE == 0) {
4758 if (in == iz) {
4759 // e = e;
4760 }
4761 else {
4762 // e = e-30./a;
4763 }
4764 }
4765 }
4766 else {
4767 deltpp = 0.0;
4768 }
4769 }
4770 else {
4771 deltau = 0.0;
4772 deltpp = 0.0;
4773 }
4774
4775 if (e < 0.0) {
4776 e = 0.0;
4777 ftemp = 0.5;
4778 }
4779
4780 // washing out is made stronger
4781 ponfe = -2.5 * pa * e * std::pow(a, (-4.0 / 3.0));
4782
4783 if (ponfe < -700.0) {
4784 ponfe = -700.0;
4785 }
4786 fe = 1.0 - std::exp(ponfe);
4787 if (e < ecr) {
4788 // priv. comm. k.-h. schmidt
4789 he = 1.0 - std::pow((1.0 - e / ecr), 2);
4790 }
4791 else {
4792 he = 1.0;
4793 }
4794 // Excitation energy corrected for pairing and shell effects
4795 // washing out with excitation energy is included.
4796 fecor = e + deltau * fe + deltpp * he;
4797 if (fecor <= 0.1) {
4798 fecor = 0.1;
4799 }
4800 // iterative procedure according to grossjean and feldmeier
4801 // to avoid the singularity e = 0
4802 if (ee < 5.0) {
4803 y1 = std::sqrt(pa * fecor);
4804 for (G4int j = 0; j < 5; j++) {
4805 y2 = pa * fecor * (1.e0 - std::exp(-y1));
4806 y1 = std::sqrt(y2);
4807 }
4808 y0 = pa / y1;
4809 ftemp = 1.0 / y0;
4810 fdens = std::exp(y0 * fecor)
4811 / (std::pow((std::pow(fecor, 3) * y0), 0.5)
4812 * std::pow((1.0 - 0.5 * y0 * fecor * std::exp(-y1)), 0.5))
4813 * std::exp(y1) * (1.0 - std::exp(-y1)) * 0.1477045;
4814 if (fecor < 1.0) {
4815 ecor1 = 1.0;
4816 y11 = std::sqrt(pa * ecor1);
4817 for (G4int j = 0; j < 7; j++) {
4818 y21 = pa * ecor1 * (1.0 - std::exp(-y11));
4819 y11 = std::sqrt(y21);
4820 }
4821
4822 y01 = pa / y11;
4823 fdens = fdens * std::pow((y01 / y0), 1.5);
4824 ftemp = ftemp * std::pow((y01 / y0), 1.5);
4825 }
4826 }
4827 else {
4828 ponniv = 2.0 * std::sqrt(pa * fecor);
4829 if (ponniv > 700.0) {
4830 ponniv = 700.0;
4831 }
4832 // fermi gas state density
4833 fdens = 0.1477045 * std::exp(ponniv) / (std::pow(pa, 0.25) * std::pow(fecor, 1.25));
4834 ftemp = std::sqrt(fecor / pa);
4835 }
4836 //
4837 densfm = fdens;
4838 tfm = ftemp;
4839 //
4840 if (IOPTCT == 0) goto densniv100;
4841 tempct = 17.60 / (std::pow(a, 0.699) * std::sqrt(1. + gamma * BSHELLCT));
4842 // tempct = 1.0 / ( (0.0570 + 0.00193*BSHELLCT) * pow(a,0.6666667)); // from
4843 // PRC 80 (2009) 054310
4844
4845 // - CONSTANT-TEMPERATURE LEVEL DENSITY PARAMETER (ONLY AT LOW ENERGIES)
4846 if (e < 30.) {
4847 if (a > 0.0) {
4848 if (optshp >= 2) {
4849 // Parametrization of CT model by Ignatyuk; note that E0 is shifted to
4850 // correspond to pairing shift in Fermi-gas model (there, energy is
4851 // shifted taking odd-odd nuclei
4852 // as bassis)
4853 // e-o, o-e
4854 if (IPARITE == 1) {
4855 e0 = 0.285 + 11.17 * std::pow(a, -0.464) - 0.390 - 0.00058 * a;
4856 }
4857 // e-e
4858 if (IPARITE == 2) {
4859 e0 = 22.34 * std::pow(a, -0.464) - 0.235;
4860 }
4861 // o-o
4862 if (IPARITE == 0) {
4863 e0 = 0.0;
4864 }
4865
4866 ponniv = (ein - e0) / tempct;
4867 if (ifis != 1) ponniv = max(0.0, (ein - e0) / tempct);
4868 if (ponniv > 700.0) {
4869 ponniv = 700.0;
4870 }
4871 densct = std::exp(ponniv) / tempct * std::exp(0.079 * BSHELLCT / tempct);
4872
4873 elim = ein;
4874
4875 if (elim >= ecr && densfm <= densct) {
4876 fdens = densfm;
4877 // IREGCT = 0;
4878 }
4879 else {
4880 fdens = densct;
4881 // IREGCT = 1;
4882 // ecor = min(ein-e0,0.10);
4883 }
4884 if (elim >= ecr && tfm >= tempct) {
4885 ftemp = tfm;
4886 }
4887 else {
4888 ftemp = tempct;
4889 }
4890 }
4891 else {
4892 // Case of no pairing considered
4893 // ETEST = PA * TEMPCT**2
4894 ponniv = (ein) / tempct;
4895 if (ponniv > 700.0) {
4896 ponniv = 700.0;
4897 }
4898 densct = std::exp(ponniv) / tempct;
4899
4900 if (ein >= ecr && densfm <= densct) {
4901 fdens = densfm;
4902 ftemp = tfm;
4903 // IREGCT = 0;
4904 }
4905 else {
4906 fdens = densct;
4907 ftemp = tempct;
4908 // ECOR = DMIN1(EIN,0.1D0)
4909 }
4910
4911 if (ein >= ecr && tfm >= tempct) {
4912 ftemp = tfm;
4913 }
4914 else {
4915 ftemp = tempct;
4916 }
4917 }
4918 }
4919 }
4920
4921densniv100:
4922
4923 if (fdens == 0.0) {
4924 if (a > 0.0) {
4925 // Parametrization of CT model by Ignatyuk done for masses > 20
4926 ftemp = 17.60 / (std::pow(a, 0.699) * std::sqrt(1.0 + gamma * BSHELLCT));
4927 // ftemp = 1.0 / ( (0.0570 + 0.00193*BSHELLCT) * pow(a,0.6666667)); //
4928 // from PRC 80 (2009) 054310
4929 }
4930 else {
4931 ftemp = 0.5;
4932 }
4933 }
4934 //
4935 // spin cutoff parameter
4936 /*
4937 C PERPENDICULAR AND PARALLEL MOMENT OF INERTIA
4938 c fnorm = R0*M0/hbar**2 = 1.16fm*931.49MeV/c**2 /(6.582122e-22 MeVs)**2 and is
4939 c in units 1/MeV
4940 */
4941 fnorm = std::pow(1.16, 2) * 931.49 * 1.e-2 / (9.0 * std::pow(6.582122, 2));
4942
4943 if (ifis == 0 || ifis == 2) {
4944 /*
4945 C GROUND STATE:
4946 C FP_PER ~ 1+0.5*alpha2, FP_PAR ~ 1-alpha2 (Hasse & Myers, Geom. relat.
4947 macr. nucl. phys.) C alpha2 = sqrt(5/(4*pi))*beta2
4948 */
4949 fp_per =
4950 0.4 * std::pow(a, 5.0 / 3.0) * fnorm * (1.0 + 0.50 * defbet * std::sqrt(5.0 / (4.0 * pi)));
4951 fp_par = 0.40 * std::pow(a, 5.0 / 3.0) * fnorm * (1.0 - defbet * std::sqrt(5.0 / (4.0 * pi)));
4952 }
4953 else {
4954 if (ifis == 1) {
4955 /*
4956 C SADDLE POINT
4957 C See Hasse&Myer, p. 100
4958 C Perpendicular moment of inertia
4959 */
4960 fp_per = 2.0 / 5.0 * std::pow(a, 5.0 / 3.0) * fnorm
4961 * (1.0 + 7.0 / 6.0 * defbet * (1.0 + 1396.0 / 255.0 * defbet));
4962 // Parallel moment of inertia
4963 fp_par = 2.0 / 5.0 * std::pow(a, 5.0 / 3.0) * fnorm
4964 * (1.0 - 7.0 / 3.0 * defbet * (1.0 - 389.0 / 255.0 * defbet));
4965 }
4966 else {
4967 if (ifis == 20) {
4968 // IMF - two fragments in contact; it is asumed that both are spherical.
4969 // See Hasse&Myers, p.106
4970 // Here, DEFBET = R1/R2, where R1 and R2 are radii of IMF and its
4971 // partner Perpendicular moment of inertia
4972 fp_per = 0.4 * std::pow(a, 5.0 / 3.0) * fnorm * 3.50 * (1.0 + std::pow(defbet, 5.))
4973 / std::pow(1.0 + defbet * defbet * defbet, 5.0 / 3.0);
4974 fp_par = 0.4 * std::pow(a, 5.0 / 3.0) * fnorm * (1.0 + std::pow(defbet, 5.0))
4975 / std::pow(1.0 + defbet * defbet * defbet, 5.0 / 3.0);
4976 }
4977 }
4978 }
4979 if (fp_par < 0.0) fp_par = 0.0;
4980 if (fp_per < 0.0) fp_per = 0.0;
4981 //
4982 sig_per = std::sqrt(fp_per * ftemp);
4983 sig_par = std::sqrt(fp_par * ftemp);
4984 //
4985 sigma2 = sig_per * sig_per + sig_par * sig_par;
4986 jfact = (2. * jprf + 1.) * std::exp(-1. * jprf * (jprf + 1.0) / (2.0 * sigma2))
4987 / (std::sqrt(8.0 * 3.1415) * std::pow(sigma2, 1.5));
4988 erot = jprf * jprf / (2.0 * std::sqrt(fp_par * fp_par + fp_per * fp_per));
4989 //
4990 // collective enhancement
4991 if (optcol == 1) {
4992 qrot(z, a, defbet, sig_per, fecor - erot, &fqr);
4993 }
4994 else {
4995 fqr = 1.0;
4996 }
4997 //
4998 fdens = fdens * fqr * jfact;
4999 //
5000 if (fdens < 1e-300) fdens = 0.0;
5001 //
5002 *dens = fdens;
5003 *ecor = fecor;
5004 *temp = ftemp;
5005 *qr = fqr;
5006}
G4fissionEvent * fe
void qrot(G4double z, G4double a, G4double bet, G4double sig, G4double u, G4double *qr)
Definition G4Abla.cc:5008
const G4double pi

Referenced by direct(), fission_width(), and imf().

◆ dint()

G4double G4Abla::dint ( G4double a)

Definition at line 6383 of file G4Abla.cc.

6384{
6385 G4double value = 0.0;
6386 /*
6387 if(a < 0.0) {
6388 value = double(std::ceil(a));
6389 }
6390 else {
6391 value = double(std::floor(a));
6392 }
6393 */
6394 if (x - std::floor(x) <= std::ceil(x) - x)
6395 value = G4double(std::floor(x));
6396 else
6397 value = G4double(std::ceil(x));
6398
6399 return value;
6400}

Referenced by DeexcitationAblaxx(), direct(), evap_postsaddle(), evapora(), fissionDistri(), and parite().

◆ direct()

void G4Abla::direct ( G4double zprf,
G4double a,
G4double ee,
G4double jprf,
G4double * probp_par,
G4double * probd_par,
G4double * probt_par,
G4double * probn_par,
G4double * probhe_par,
G4double * proba_par,
G4double * probg_par,
G4double * probimf_par,
G4double * probf_par,
G4double * problamb0_par,
G4double * ptotl_par,
G4double * sn_par,
G4double * sbp_par,
G4double * sbd_par,
G4double * sbt_par,
G4double * sbhe_par,
G4double * sba_par,
G4double * slamb0_par,
G4double * ecn_par,
G4double * ecp_par,
G4double * ecd_par,
G4double * ect_par,
G4double * eche_par,
G4double * eca_par,
G4double * ecg_par,
G4double * eclamb0_par,
G4double * bp_par,
G4double * bd_par,
G4double * bt_par,
G4double * bhe_par,
G4double * ba_par,
G4double * sp_par,
G4double * sd_par,
G4double * st_par,
G4double * she_par,
G4double * sa_par,
G4double * ef_par,
G4double * ts1_par,
G4int ,
G4int inum,
G4int itest,
G4int * sortie,
G4double * tcn,
G4double * jprfn_par,
G4double * jprfp_par,
G4double * jprfd_par,
G4double * jprft_par,
G4double * jprfhe_par,
G4double * jprfa_par,
G4double * jprflamb0_par,
G4double * tsum_par,
G4int NbLam0 )

Calculation of particle emission probabilities.

Definition at line 3101 of file G4Abla.cc.

3116{
3117 G4double probp = (*probp_par);
3118 G4double probd = (*probd_par);
3119 G4double probt = (*probt_par);
3120 G4double probn = (*probn_par);
3121 G4double probhe = (*probhe_par);
3122 G4double proba = (*proba_par);
3123 G4double probg = (*probg_par);
3124 G4double probimf = (*probimf_par);
3125 G4double probf = (*probf_par);
3126 G4double problamb0 = (*problamb0_par);
3127 G4double ptotl = (*ptotl_par);
3128 G4double sn = (*sn_par);
3129 G4double sp = (*sp_par);
3130 G4double sd = (*sd_par);
3131 G4double st = (*st_par);
3132 G4double she = (*she_par);
3133 G4double sa = (*sa_par);
3134 G4double slamb0 = 0.0;
3135 G4double sbp = (*sbp_par);
3136 G4double sbd = (*sbd_par);
3137 G4double sbt = (*sbt_par);
3138 G4double sbhe = (*sbhe_par);
3139 G4double sba = (*sba_par);
3140 G4double ecn = (*ecn_par);
3141 G4double ecp = (*ecp_par);
3142 G4double ecd = (*ecd_par);
3143 G4double ect = (*ect_par);
3144 G4double eche = (*eche_par);
3145 G4double eca = (*eca_par);
3146 G4double ecg = (*ecg_par);
3147 G4double eclamb0 = (*eclamb0_par);
3148 G4double bp = (*bp_par);
3149 G4double bd = (*bd_par);
3150 G4double bt = (*bt_par);
3151 G4double bhe = (*bhe_par);
3152 G4double ba = (*ba_par);
3153 G4double tsum = (*tsum_par);
3154
3155 // CALCULATION OF PARTICLE-EMISSION PROBABILITIES & FISSION /
3156 // BASED ON THE SIMPLIFIED FORMULAS FOR THE DECAY WIDTH BY /
3157 // MORETTO, ROCHESTER MEETING TO AVOID COMPUTING TIME /
3158 // INTENSIVE INTEGRATION OF THE LEVEL DENSITIES /
3159 // USES EFFECTIVE COULOMB BARRIERS AND AN AVERAGE KINETIC ENERGY/
3160 // OF THE EVAPORATED PARTICLES /
3161 // COLLECTIVE ENHANCMENT OF THE LEVEL DENSITY IS INCLUDED /
3162 // DYNAMICAL HINDRANCE OF FISSION IS INCLUDED BY A STEP FUNCTION/
3163 // APPROXIMATION. SEE A.R. JUNGHANS DIPLOMA THESIS /
3164 // SHELL AND PAIRING STRUCTURES IN THE LEVEL DENSITY IS INCLUDED/
3165
3166 // INPUT:
3167 // ZPRF,A,EE CHARGE, MASS, EXCITATION ENERGY OF COMPOUND
3168 // NUCLEUS
3169 // JPRF ROOT-MEAN-SQUARED ANGULAR MOMENTUM
3170
3171 // DEFORMATIONS AND G.S. SHELL EFFECTS
3172 // COMMON /ECLD/ ECGNZ,ECFNZ,VGSLD,ALPHA
3173
3174 // ECGNZ - GROUND STATE SHELL CORR. FRLDM FOR A SPHERICAL G.S.
3175 // ECFNZ - SHELL CORRECTION FOR THE SADDLE POINT (NOW: == 0)
3176 // VGSLD - DIFFERENCE BETWEEN DEFORMED G.S. AND LDM VALUE
3177 // ALPHA - ALPHA GROUND STATE DEFORMATION (THIS IS NOT BETA2!)
3178 // BETA2 = SQRT((4PI)/5) * ALPHA
3179
3180 // OPTIONS AND PARAMETERS FOR FISSION CHANNEL
3181 // COMMON /FISS/ AKAP,BET,HOMEGA,KOEFF,IFIS,
3182 // OPTSHP,OPTXFIS,OPTLES,OPTCOL
3183 //
3184 // AKAP - HBAR**2/(2* MN * R_0**2) = 10 MEV, R_0 = 1.4 FM
3185 // BET - REDUCED NUCLEAR FRICTION COEFFICIENT IN (10**21 S**-1)
3186 // HOMEGA - CURVATURE OF THE FISSION BARRIER = 1 MEV
3187 // KOEFF - COEFFICIENT FOR THE LD FISSION BARRIER == 1.0
3188 // IFIS - 0/1 FISSION CHANNEL OFF/ON
3189 // OPTSHP - INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY
3190 // = 0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY
3191 // = 1 SHELL , NO PAIRING
3192 // = 2 PAIRING, NO SHELL
3193 // = 3 SHELL AND PAIRING
3194 // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT SWITCHED ON/OFF
3195 // OPTXFIS- 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV
3196 // FISSILITY PARAMETER.
3197 // OPTLES - CONSTANT TEMPERATURE LEVEL DENSITY FOR A,Z > TH-224
3198 // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT OFF/ON
3199
3200 // LEVEL DENSITY PARAMETERS
3201 // COMMON /ALD/ AV,AS,AK,OPTAFAN
3202 // AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE
3203 // LEVEL DENSITY PARAMETER
3204 // OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1
3205 // RECOMMENDED IS OPTAFAN = 0
3206
3207 // FISSION BARRIERS
3208 // COMMON /FB/ EFA
3209 // EFA - ARRAY OF FISSION BARRIERS
3210
3211 // OUTPUT: PROBN,PROBP,PROBA,PROBF,PTOTL:
3212 // - EMISSION PROBABILITIES FOR N EUTRON, P ROTON, A LPHA
3213 // PARTICLES, F ISSION AND NORMALISATION
3214 // SN,SBP,SBA: SEPARATION ENERGIES N P A
3215 // INCLUDING EFFECTIVE BARRIERS
3216 // ECN,ECP,ECA,BP,BA
3217 // - AVERAGE KINETIC ENERGIES (2*T) AND EFFECTIVE BARRIERS
3218
3219 G4double bk = 0.0;
3220 G4double bksp = 0.0;
3221 G4double bc = 0.0;
3222 G4int afp = 0;
3223 G4double het = 0.0;
3224 G4double at = 0.0;
3225 G4double bs = 0.0;
3226 G4double bssp = 0.0;
3227 G4double bshell = 0.0;
3228 G4double cf = 0.0;
3229 G4double defbet = 0.0;
3230 G4double densa = 0.0;
3231 G4double denshe = 0.0;
3232 G4double densg = 0.0;
3233 G4double densn = 0.0;
3234 G4double densp = 0.0;
3235 G4double densd = 0.0;
3236 G4double denst = 0.0;
3237 G4double denslamb0 = 0.0;
3238 G4double eer = 0.0;
3239 G4double ecor = 0.0;
3240 G4double ef = 0.0;
3241 G4double ft = 0.0;
3242 G4double timf = 0.0;
3243 G4double qr = 0.0;
3244 G4double qrcn = 0.0;
3245 G4double omegap = 0.0;
3246 G4double omegad = 0.0;
3247 G4double omegat = 0.0;
3248 G4double omegahe = 0.0;
3249 G4double omegaa = 0.0;
3250 G4double ga = 0.0;
3251 G4double ghe = 0.0;
3252 G4double gf = 0.0;
3253 G4double gff = 0.0;
3254 G4double gn = 0.0;
3255 G4double gp = 0.0;
3256 G4double gd = 0.0;
3257 G4double gt = 0.0;
3258 G4double gg = 0.0;
3259 G4double glamb0 = 0.0;
3260 G4double gimf = 0.0;
3261 G4double gimf3 = 0.0;
3262 G4double gimf5 = 0.0;
3263 G4double bimf = 0.0;
3264 G4double bsimf = 0.0;
3265 G4double sbimf = 0.0;
3266 G4double densimf = 0.0;
3267 G4double defbetimf = 0.0;
3268 G4double b_imf = 0.0;
3269 G4double a_imf = 0.0;
3270 G4double omegaimf = 0.0;
3271 G4int izimf = 0;
3272 G4double zimf = 0.0;
3273 G4double gsum = 0.0;
3274 G4double gtotal = 0.0;
3275 G4double hbar = 6.582122e-22;
3276 G4double emin = 0.0;
3277 G4int il = 0;
3278 G4int choice_fisspart = 0;
3279 G4double t_lapse = 0.0;
3280 G4int imaxwell = 0;
3281 G4int in = 0;
3282 G4int iz = 0;
3283 G4int ind = 0;
3284 G4int izd = 0;
3285 G4int j = 0;
3286 G4int k = 0;
3287 G4double ma1z = 0.0;
3288 G4double mazz = 0.0;
3289 G4double ma2z = 0.0;
3290 G4double ma1z1 = 0.0;
3291 G4double ma2z1 = 0.0;
3292 G4double ma3z1 = 0.0;
3293 G4double ma3z2 = 0.0;
3294 G4double ma4z2 = 0.0;
3295 G4double maz = 0.0;
3296 G4double nt = 0.0;
3297 G4double pi = 3.1415926535;
3298 G4double pt = 0.0;
3299 G4double dt = 0.0;
3300 G4double tt = 0.0;
3301 G4double lamb0t = 0.0;
3302 G4double gtemp = 0.0;
3303 G4double rdt = 0.0;
3304 G4double rtt = 0.0;
3305 G4double rat = 0.0;
3306 G4double rhet = 0.0;
3307 G4double refmod = 0.0;
3308 G4double rnt = 0.0;
3309 G4double rpt = 0.0;
3310 G4double rlamb0t = 0.0;
3311 G4double sbfis = 1.e40;
3312 G4double segs = 0.0;
3313 G4double selmax = 0.0;
3314 G4double tauc = 0.0;
3315 G4double temp = 0.0;
3316 G4double ts1 = 0.0;
3317 G4double xx = 0.0;
3318 G4double y = 0.0;
3319 G4double k1 = 0.0;
3320 G4double omegasp = 0.0;
3321 G4double homegasp = 0.0;
3322 G4double omegags = 0.0;
3323 G4double homegags = 0.0;
3324 G4double pa = 0.0;
3325 G4double gamma = 0.0;
3326 G4double gfactor = 0.0;
3327 G4double bscn;
3328 G4double bkcn;
3329 G4double bccn;
3330 G4double ftcn = 0.0;
3331 G4double mfcd;
3332 G4double jprfn = jprf;
3333 G4double jprfp = jprf;
3334 G4double jprfd = jprf;
3335 G4double jprft = jprf;
3336 G4double jprfhe = jprf;
3337 G4double jprfa = jprf;
3338 G4double jprflamb0 = jprf;
3339 G4double djprf = 0.0;
3340 G4double dlout = 0.0;
3341 G4double sdlout = 0.0;
3342 G4double iinert = 0.0;
3343 G4double erot = 0.0;
3344 G4double erotn = 0.0;
3345 G4double erotp = 0.0;
3346 G4double erotd = 0.0;
3347 G4double erott = 0.0;
3348 G4double erothe = 0.0;
3349 G4double erota = 0.0;
3350 G4double erotlamb0 = 0.0;
3351 G4double erotcn = 0.0;
3352 // G4double ecorcn=0.0;
3353 G4double imfarg = 0.0;
3354 G4double width_imf = 0.0;
3355 G4int IDjprf = 0;
3356 G4int fimf_allowed = opt->optimfallowed;
3357
3358 if (itest == 1) {
3359 }
3360 // Switch to calculate Maxwellian distribution of kinetic energies
3361 imaxwell = 1;
3362 *sortie = 0;
3363
3364 // just a change of name until the end of this subroutine
3365 eer = ee;
3366 if (inum == 1) {
3367 ilast = 1;
3368 }
3369 // calculation of masses
3370 // refmod = 1 ==> myers,swiatecki model
3371 // refmod = 0 ==> weizsaecker model
3372 refmod = 1; // Default = 1
3373 //
3374 if (refmod == 1) {
3375 mglms(a, zprf, fiss->optshp, &maz);
3376 mglms(a - 1.0, zprf, fiss->optshp, &ma1z);
3377 mglms(a - 2.0, zprf, fiss->optshp, &ma2z);
3378 mglms(a - 1.0, zprf - 1.0, fiss->optshp, &ma1z1);
3379 mglms(a - 2.0, zprf - 1.0, fiss->optshp, &ma2z1);
3380 mglms(a - 3.0, zprf - 1.0, fiss->optshp, &ma3z1);
3381 mglms(a - 3.0, zprf - 2.0, fiss->optshp, &ma3z2);
3382 mglms(a - 4.0, zprf - 2.0, fiss->optshp, &ma4z2);
3383 }
3384 else {
3385 mglw(a, zprf, &maz);
3386 mglw(a - 1.0, zprf, &ma1z);
3387 mglw(a - 1.0, zprf - 1.0, &ma1z1);
3388 mglw(a - 2.0, zprf - 1.0, &ma2z1);
3389 mglw(a - 3.0, zprf - 1.0, &ma3z1);
3390 mglw(a - 3.0, zprf - 2.0, &ma3z2);
3391 mglw(a - 4.0, zprf - 2.0, &ma4z2);
3392 }
3393
3394 if ((a - 1.) == 3.0 && (zprf - 1.0) == 2.0) ma1z1 = -7.7181660;
3395 if ((a - 1.) == 4.0 && (zprf - 1.0) == 2.0) ma1z1 = -28.295992;
3396
3397 // separation energies
3398 sn = ma1z - maz;
3399 sp = ma1z1 - maz;
3400 sd = ma2z1 - maz - 2.2246;
3401 st = ma3z1 - maz - 8.481977;
3402 she = ma3z2 - maz - 7.7181660;
3403 sa = ma4z2 - maz - 28.295992;
3404 //
3405 if (NbLam0 > 1) {
3406 sn = gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 1., zprf, NbLam0);
3407 sp = gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 1., zprf - 1., NbLam0);
3408 sd = gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 2., zprf - 1., NbLam0);
3409 st = gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 3., zprf - 1., NbLam0);
3410 she = gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 3., zprf - 2., NbLam0);
3411 sa = gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 4., zprf - 2., NbLam0);
3412 slamb0 = gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 1., zprf, NbLam0 - 1);
3413 }
3414 if (NbLam0 == 1) {
3415 G4double deltasn = sn - (gethyperbinding(a, zprf, 0) - gethyperbinding(a - 1., zprf, 0));
3416 G4double deltasp = sp - (gethyperbinding(a, zprf, 0) - gethyperbinding(a - 1., zprf - 1, 0));
3417 G4double deltasd = sd - (gethyperbinding(a, zprf, 0) - gethyperbinding(a - 2., zprf - 1, 0));
3418 G4double deltast = st - (gethyperbinding(a, zprf, 0) - gethyperbinding(a - 3., zprf - 1, 0));
3419 G4double deltashe = she - (gethyperbinding(a, zprf, 0) - gethyperbinding(a - 3., zprf - 2, 0));
3420 G4double deltasa = sa - (gethyperbinding(a, zprf, 0) - gethyperbinding(a - 4., zprf - 2, 0));
3421
3422 sn = deltasn + gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 1., zprf, NbLam0);
3423 sp = deltasp + gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 1., zprf - 1., NbLam0);
3424 sd = deltasd + gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 2., zprf - 1., NbLam0);
3425 st = deltast + gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 3., zprf - 1., NbLam0);
3426 she = deltashe + gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 3., zprf - 2., NbLam0);
3427 sa = deltasa + gethyperbinding(a, zprf, NbLam0) - gethyperbinding(a - 4., zprf - 2., NbLam0);
3428 slamb0 = gethyperseparation(a, zprf, NbLam0);
3429 }
3430
3431 // coulomb barriers
3432 // Proton
3433 if (zprf <= 1.0e0 || a <= 1.0e0 || (a - zprf) < 0.0) {
3434 sbp = 1.0e75;
3435 bp = 1.0e75;
3436 }
3437 else {
3438 barrs(idnint(zprf - 1.), idnint(a - 1.), 1, 1, &bp, &omegap);
3439 bp = max(bp, 0.1);
3440 sbp = sp + bp;
3441 }
3442
3443 // Deuteron
3444 if (zprf <= 1.0e0 || a <= 2.0e0 || (a - zprf) < 1.0) {
3445 sbd = 1.0e75;
3446 bd = 1.0e75;
3447 }
3448 else {
3449 barrs(idnint(zprf - 1.), idnint(a - 2.), 1, 2, &bd, &omegad);
3450 bd = max(bd, 0.1);
3451 sbd = sd + bd;
3452 }
3453
3454 // Triton
3455 if (zprf <= 1.0e0 || a <= 3.0e0 || (a - zprf) < 2.0) {
3456 sbt = 1.0e75;
3457 bt = 1.0e75;
3458 }
3459 else {
3460 barrs(idnint(zprf - 1.), idnint(a - 3.), 1, 3, &bt, &omegat);
3461 bt = max(bt, 0.1);
3462 sbt = st + bt;
3463 }
3464
3465 // Alpha
3466 if (a - 4.0 <= 0.0 || zprf <= 2.0 || (a - zprf) < 2.0) {
3467 sba = 1.0e+75;
3468 ba = 1.0e+75;
3469 }
3470 else {
3471 barrs(idnint(zprf - 2.), idnint(a - 4.), 2, 4, &ba, &omegaa);
3472 ba = max(ba, 0.1);
3473 sba = sa + ba;
3474 }
3475
3476 // He3
3477 if (a - 3.0 <= 0.0 || zprf <= 2.0 || (a - zprf) < 1.0) {
3478 sbhe = 1.0e+75;
3479 bhe = 1.0e+75;
3480 }
3481 else {
3482 barrs(idnint(zprf - 2.), idnint(a - 3.), 2, 3, &bhe, &omegahe);
3483 bhe = max(bhe, 0.1);
3484 sbhe = she + bhe;
3485 }
3486
3487 // Dealing with particle-unbound systems
3488 emin = dmin1(sba, sbhe, dmin1(sbt, sbhe, dmin1(sn, sbp, sbd)));
3489
3490 if (emin <= 0.0) {
3491 *sortie = 1;
3492 unbound(sn, sp, sd, st, she, sa, bp, bd, bt, bhe, ba, &probf, &probn, &probp, &probd, &probt,
3493 &probhe, &proba, &probimf, &probg, &ecn, &ecp, &ecd, &ect, &eche, &eca);
3494 goto direct70;
3495 }
3496 //
3497 k = idnint(zprf);
3498 j = idnint(a - zprf);
3499 if (fiss->ifis > 0) {
3500 // now ef is calculated from efa that depends on the subroutine
3501 // barfit which takes into account the modification on the ang. mom.
3502 // note *** shell correction (ecgnz)
3503 il = idnint(jprf);
3504 barfit(k, k + j, il, &sbfis, &segs, &selmax);
3505 ef = sbfis;
3506 //
3507 // TO AVOID NEGATIVE VALUES FOR IMPOSSIBLE NUCLEI
3508 // THE FISSION BARRIER IS SET TO ZERO IF SMALLER THAN ZERO.
3509 //
3510 if (ef < 0.0) ef = 0.0;
3511 fb->efa[j][k] = ef;
3512 //
3513 // Hyper-fission barrier
3514 //
3515 if (NbLam0 > 0) {
3516 ef = ef + 0.51 * (1115. - 938. + sn - slamb0) / std::pow(a, 2. / 3.);
3517 }
3518 //
3519 // Set fission barrier
3520 //
3521 (*ef_par) = ef;
3522 //
3523 // calculation of surface and curvature integrals needed to
3524 // to calculate the level density parameter at the saddle point
3525 xx = fissility((k + j), k, NbLam0, sn, slamb0, fiss->optxfis);
3526 y = 1.00 - xx;
3527 if (y < 0.0) y = 0.0;
3528 if (y > 1.0) y = 1.0;
3529 bssp = bipol(1, y);
3530 bksp = bipol(2, y);
3531 }
3532 else {
3533 ef = 1.0e40;
3534 sbfis = 1.0e40;
3535 bssp = 1.0;
3536 bksp = 1.0;
3537 }
3538 //
3539 // COMPOUND NUCLEUS LEVEL DENSITY
3540 //
3541 // AK 2007 - Now DENSNIV called with correct BS, BK
3542
3543 afp = idnint(a);
3544 iz = idnint(zprf);
3545 in = afp - iz;
3546 bshell = ecld->ecgnz[in][iz] - ecld->vgsld[in][iz];
3547 defbet = ecld->beta2[in][iz];
3548
3549 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std::pow(a, 5.0 / 3.0)
3550 * (1.0 + 0.5 * std::sqrt(5. / (4. * pi)) * defbet);
3551 erot = jprf * jprf * 197.328 * 197.328 / (2. * iinert);
3552 erotcn = erot;
3553
3554 bsbkbc(a, zprf, &bscn, &bkcn, &bccn);
3555
3556 // if(ee > erot+emin){
3557 densniv(a, zprf, ee, 0.0, &densg, bshell, bscn, bkcn, &temp, fiss->optshp, fiss->optcol, defbet,
3558 &ecor, jprf, 0, &qrcn);
3559 ftcn = temp;
3560 /*
3561 //ecorcn = ecor;
3562 }else{
3563 // If EE < EROT, only gamma emission can take place
3564 probf = 0.0;
3565 probp = 0.0;
3566 probd = 0.0;
3567 probt = 0.0;
3568 probn = 0.0;
3569 probhe = 0.0;
3570 proba = 0.0;
3571 probg = 1.0;
3572 probimf = 0.0;
3573 //c JLRS 03/2017 - Added this calculation
3574 //C According to A. Ignatyuk, GG :
3575 //C Here BS=BK=1, as this was assumed in the parameterization
3576 pa = (ald->av)*a + (ald->as)*std::pow(a,2./3.) +
3577 (ald->ak)*std::pow(a,1./3.); gamma = 2.5 * pa * std::pow(a,-4./3.); gfactor
3578 = 1.+gamma*ecld->ecgnz[in][iz]; if(gfactor<=0.){ gfactor = 0.0;
3579 }
3580 //
3581 gtemp = 17.60/(std::pow(a,0.699) * std::sqrt(gfactor));
3582 ecg = 4.0 * gtemp;
3583 //
3584 goto direct70;
3585 }
3586 */
3587
3588 // ---------------------------------------------------------------
3589 // LEVEL DENSITIES AND TEMPERATURES OF THE FINAL STATES
3590 // ---------------------------------------------------------------
3591 //
3592 // MVR - in case of charged particle emission temperature
3593 // comes from random kinetic energy from a Maxwelliam distribution
3594 // if option imaxwell = 1 (otherwise E=2T)
3595 //
3596 // AK - LEVEL DENSITY AND TEMPERATURE AT THE SADDLE POINT -> now calculated
3597 // in the subroutine FISSION_WIDTH
3598 //
3599 //
3600 // LEVEL DENSITY AND TEMPERATURE IN THE NEUTRON DAUGHTER
3601 //
3602 // KHS, AK 2007 - Reduction of angular momentum due to orbital angular
3603 // momentum of emitted fragment JLRS Nov-2016 - Added these caculations in
3604 // abla++
3605
3606 if (in >= 2) {
3607 ind = idnint(a) - idnint(zprf) - 1;
3608 izd = idnint(zprf);
3609 if (jprf > 0.10) {
3610 lorb(a, a - 1., jprf, ee - sn, &dlout, &sdlout);
3611 djprf = gausshaz(1, dlout, sdlout);
3612 if (IDjprf == 1) djprf = 0.0;
3613 jprfn = jprf + djprf;
3614 jprfn = dint(std::abs(jprfn)); // The nucleus just turns the other way around
3615 }
3616 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
3617 defbet = ecld->beta2[ind][izd];
3618
3619 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std::pow(a - 1., 5.0 / 3.0)
3620 * (1.0 + 0.5 * std::sqrt(5. / (4. * pi)) * defbet);
3621 erotn = jprfn * jprfn * 197.328 * 197.328 / (2. * iinert);
3622 bsbkbc(a - 1., zprf, &bs, &bk, &bc);
3623
3624 // level density and temperature in the neutron daughter
3625 densniv(a - 1.0, zprf, ee, sn, &densn, bshell, bs, bk, &temp, fiss->optshp, fiss->optcol,
3626 defbet, &ecor, jprfn, 0, &qr);
3627 nt = temp;
3628 ecn = 0.0;
3629 if (densn > 0.) {
3630 G4int IS = 0;
3631 if (imaxwell == 1) {
3632 rnt = nt;
3633 dir1234:
3634 ecn = fvmaxhaz_neut(rnt);
3635 IS++;
3636 if (IS > 100) {
3637 std::cout << "WARNING: FVMAXHAZ_NEUT CALLED MORE THAN 100 TIMES" << std::endl;
3638 goto exi1000;
3639 }
3640 if (ecn > (ee - sn)) {
3641 if ((ee - sn) < rnt)
3642 ecn = ee - sn;
3643 else
3644 goto dir1234;
3645 }
3646 if (ecn <= 0.0) goto dir1234;
3647 }
3648 else {
3649 ecn = 2.0 * nt;
3650 }
3651 }
3652 }
3653 else {
3654 densn = 0.0;
3655 ecn = 0.0;
3656 nt = 0.0;
3657 }
3658exi1000:
3659
3660 // LEVEL DENSITY AND TEMPERATURE IN THE PROTON DAUGHTER
3661 //
3662 // Reduction of angular momentum due to orbital angular momentum of emitted
3663 // fragment
3664 if (iz >= 2) {
3665 ind = idnint(a) - idnint(zprf);
3666 izd = idnint(zprf) - 1;
3667 if (jprf > 0.10) {
3668 lorb(a, a - 1., jprf, ee - sbp, &dlout, &sdlout);
3669 djprf = gausshaz(1, dlout, sdlout);
3670 if (IDjprf == 1) djprf = 0.0;
3671 jprfp = jprf + djprf;
3672 jprfp = dint(std::abs(jprfp)); // The nucleus just turns the other way around
3673 }
3674 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
3675 defbet = ecld->beta2[ind][izd];
3676
3677 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std::pow(a - 1., 5.0 / 3.0)
3678 * (1.0 + 0.5 * std::sqrt(5. / (4. * pi)) * defbet);
3679 erotp = jprfp * jprfp * 197.328 * 197.328 / (2. * iinert);
3680
3681 bsbkbc(a - 1., zprf - 1., &bs, &bk, &bc);
3682
3683 // level density and temperature in the proton daughter
3684 densniv(a - 1.0, zprf - 1.0, ee, sbp, &densp, bshell, bs, bk, &temp, fiss->optshp, fiss->optcol,
3685 defbet, &ecor, jprfp, 0, &qr);
3686 pt = temp;
3687 ecp = 0.;
3688 if (densp > 0.) {
3689 G4int IS = 0;
3690 if (imaxwell == 1) {
3691 rpt = pt;
3692 dir1235:
3693 ecp = fvmaxhaz(rpt);
3694 IS++;
3695 if (IS > 100) {
3696 std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl;
3697 goto exi1001;
3698 }
3699 if (ecp > (ee - sbp)) {
3700 if ((ee - sbp) < rpt)
3701 ecp = ee - sbp;
3702 else
3703 goto dir1235;
3704 }
3705 if (ecp <= 0.0) goto dir1235;
3706 ecp = ecp + bp;
3707 }
3708 else {
3709 ecp = 2.0 * pt + bp;
3710 }
3711 }
3712 }
3713 else {
3714 densp = 0.0;
3715 ecp = 0.0;
3716 pt = 0.0;
3717 }
3718exi1001:
3719
3720 // FINAL LEVEL DENSITY AND TEMPERATURE AFTER DEUTERON EMISSION
3721 //
3722 // Reduction of angular momentum due to orbital angular momentum of emitted
3723 // fragment
3724 if ((in >= 2) && (iz >= 2)) {
3725 ind = idnint(a) - idnint(zprf) - 1;
3726 izd = idnint(zprf) - 1;
3727 if (jprf > 0.10) {
3728 lorb(a, a - 2., jprf, ee - sbd, &dlout, &sdlout);
3729 djprf = gausshaz(1, dlout, sdlout);
3730 if (IDjprf == 1) djprf = 0.0;
3731 jprfd = jprf + djprf;
3732 jprfd = dint(std::abs(jprfd)); // The nucleus just turns the other way around
3733 }
3734 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
3735 defbet = ecld->beta2[ind][izd];
3736
3737 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std::pow(a - 2., 5.0 / 3.0)
3738 * (1.0 + 0.5 * std::sqrt(5. / (4. * pi)) * defbet);
3739 erotd = jprfd * jprfd * 197.328 * 197.328 / (2. * iinert);
3740
3741 bsbkbc(a - 2., zprf - 1., &bs, &bk, &bc);
3742
3743 // level density and temperature in the deuteron daughter
3744 densniv(a - 2.0, zprf - 1.0e0, ee, sbd, &densd, bshell, bs, bk, &temp, fiss->optshp,
3745 fiss->optcol, defbet, &ecor, jprfd, 0, &qr);
3746
3747 dt = temp;
3748 ecd = 0.0;
3749 if (densd > 0.) {
3750 G4int IS = 0;
3751 if (imaxwell == 1) {
3752 rdt = dt;
3753 dir1236:
3754 ecd = fvmaxhaz(rdt);
3755 IS++;
3756 if (IS > 100) {
3757 std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl;
3758 goto exi1002;
3759 }
3760 if (ecd > (ee - sbd)) {
3761 if ((ee - sbd) < rdt)
3762 ecd = ee - sbd;
3763 else
3764 goto dir1236;
3765 }
3766 if (ecd <= 0.0) goto dir1236;
3767 ecd = ecd + bd;
3768 }
3769 else {
3770 ecd = 2.0 * dt + bd;
3771 }
3772 }
3773 }
3774 else {
3775 densd = 0.0;
3776 ecd = 0.0;
3777 dt = 0.0;
3778 }
3779exi1002:
3780
3781 // FINAL LEVEL DENSITY AND TEMPERATURE AFTER TRITON EMISSION
3782 //
3783 // Reduction of angular momentum due to orbital angular momentum of emitted
3784 // fragment
3785 if ((in >= 3) && (iz >= 2)) {
3786 ind = idnint(a) - idnint(zprf) - 2;
3787 izd = idnint(zprf) - 1;
3788 if (jprf > 0.10) {
3789 lorb(a, a - 3., jprf, ee - sbt, &dlout, &sdlout);
3790 djprf = gausshaz(1, dlout, sdlout);
3791 if (IDjprf == 1) djprf = 0.0;
3792 jprft = jprf + djprf;
3793 jprft = dint(std::abs(jprft)); // The nucleus just turns the other way around
3794 }
3795 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
3796 defbet = ecld->beta2[ind][izd];
3797
3798 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std::pow(a - 3., 5.0 / 3.0)
3799 * (1.0 + 0.5 * std::sqrt(5. / (4. * pi)) * defbet);
3800 erott = jprft * jprft * 197.328 * 197.328 / (2. * iinert);
3801
3802 bsbkbc(a - 3., zprf - 1., &bs, &bk, &bc);
3803
3804 // level density and temperature in the triton daughter
3805 densniv(a - 3.0, zprf - 1.0, ee, sbt, &denst, bshell, bs, bk, &temp, fiss->optshp, fiss->optcol,
3806 defbet, &ecor, jprft, 0, &qr);
3807
3808 tt = temp;
3809 ect = 0.;
3810 if (denst > 0.) {
3811 G4int IS = 0;
3812 if (imaxwell == 1) {
3813 rtt = tt;
3814 dir1237:
3815 ect = fvmaxhaz(rtt);
3816 IS++;
3817 if (IS > 100) {
3818 std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl;
3819 goto exi1003;
3820 }
3821 if (ect > (ee - sbt)) {
3822 if ((ee - sbt) < rtt)
3823 ect = ee - sbt;
3824 else
3825 goto dir1237;
3826 }
3827 if (ect <= 0.0) goto dir1237;
3828 ect = ect + bt;
3829 }
3830 else {
3831 ect = 2.0 * tt + bt;
3832 }
3833 }
3834 }
3835 else {
3836 denst = 0.0;
3837 ect = 0.0;
3838 tt = 0.0;
3839 }
3840exi1003:
3841
3842 // LEVEL DENSITY AND TEMPERATURE IN THE ALPHA DAUGHTER
3843 //
3844 // Reduction of angular momentum due to orbital angular momentum of emitted
3845 // fragment
3846 if ((in >= 3) && (iz >= 3)) {
3847 ind = idnint(a) - idnint(zprf) - 2;
3848 izd = idnint(zprf) - 2;
3849 if (jprf > 0.10) {
3850 lorb(a, a - 4., jprf, ee - sba, &dlout, &sdlout);
3851 djprf = gausshaz(1, dlout, sdlout);
3852 if (IDjprf == 1) djprf = 0.0;
3853 jprfa = jprf + djprf;
3854 jprfa = dint(std::abs(jprfa)); // The nucleus just turns the other way around
3855 }
3856 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
3857 defbet = ecld->beta2[ind][izd];
3858
3859 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std::pow(a - 4., 5.0 / 3.0)
3860 * (1.0 + 0.5 * std::sqrt(5. / (4. * pi)) * defbet);
3861 erota = jprfa * jprfa * 197.328 * 197.328 / (2. * iinert);
3862
3863 bsbkbc(a - 4., zprf - 2., &bs, &bk, &bc);
3864
3865 // level density and temperature in the alpha daughter
3866 densniv(a - 4.0, zprf - 2.0, ee, sba, &densa, bshell, bs, bk, &temp, fiss->optshp, fiss->optcol,
3867 defbet, &ecor, jprfa, 0, &qr);
3868
3869 at = temp;
3870 eca = 0.0;
3871 if (densa > 0.) {
3872 G4int IS = 0;
3873 if (imaxwell == 1) {
3874 rat = at;
3875 dir1238:
3876 eca = fvmaxhaz(rat);
3877 IS++;
3878 if (IS > 100) {
3879 std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl;
3880 goto exi1004;
3881 }
3882 if (eca > (ee - sba)) {
3883 if ((ee - sba) < rat)
3884 eca = ee - sba;
3885 else
3886 goto dir1238;
3887 }
3888 if (eca <= 0.0) goto dir1238;
3889 eca = eca + ba;
3890 }
3891 else {
3892 eca = 2.0 * at + ba;
3893 }
3894 }
3895 }
3896 else {
3897 densa = 0.0;
3898 eca = 0.0;
3899 at = 0.0;
3900 }
3901exi1004:
3902
3903 // FINAL LEVEL DENSITY AND TEMPERATURE AFTER 3HE EMISSION
3904 //
3905 // Reduction of angular momentum due to orbital angular momentum of emitted
3906 // fragment
3907 if ((in >= 2) && (iz >= 3)) {
3908 ind = idnint(a) - idnint(zprf) - 1;
3909 izd = idnint(zprf) - 2;
3910 if (jprf > 0.10) {
3911 lorb(a, a - 3., jprf, ee - sbhe, &dlout, &sdlout);
3912 djprf = gausshaz(1, dlout, sdlout);
3913 if (IDjprf == 1) djprf = 0.0;
3914 jprfhe = jprf + djprf;
3915 jprfhe = dint(std::abs(jprfhe)); // The nucleus just turns the other way around
3916 }
3917 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
3918 defbet = ecld->beta2[ind][izd];
3919
3920 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std::pow(a - 3., 5.0 / 3.0)
3921 * (1.0 + 0.5 * std::sqrt(5. / (4. * pi)) * defbet);
3922 erothe = jprfhe * jprfhe * 197.328 * 197.328 / (2. * iinert);
3923
3924 bsbkbc(a - 3., zprf - 2., &bs, &bk, &bc);
3925
3926 // level density and temperature in the he3 daughter
3927 densniv(a - 3.0, zprf - 2.0, ee, sbhe, &denshe, bshell, bs, bk, &temp, fiss->optshp,
3928 fiss->optcol, defbet, &ecor, jprfhe, 0, &qr);
3929
3930 het = temp;
3931 eche = 0.0;
3932 if (denshe > 0.) {
3933 G4int IS = 0;
3934 if (imaxwell == 1) {
3935 rhet = het;
3936 dir1239:
3937 eche = fvmaxhaz(rhet);
3938 IS++;
3939 if (IS > 100) {
3940 std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl;
3941 goto exi1005;
3942 }
3943 if (eche > (ee - sbhe)) {
3944 if ((ee - sbhe) < rhet)
3945 eche = ee - sbhe;
3946 else
3947 goto dir1239;
3948 }
3949 if (eche <= 0.0) goto dir1239;
3950 eche = eche + bhe;
3951 }
3952 else {
3953 eche = 2.0 * het + bhe;
3954 }
3955 }
3956 }
3957 else {
3958 denshe = 0.0;
3959 eche = 0.0;
3960 het = 0.0;
3961 }
3962exi1005:
3963
3964 // LEVEL DENSITY AND TEMPERATURE IN THE LAMBDA0 DAUGHTER
3965 //
3966 // - Reduction of angular momentum due to orbital angular momentum of emitted
3967 // fragment JLRS Jun-2017 - Added these caculations in abla++
3968
3969 if (in >= 2 && NbLam0 > 0) {
3970 ind = idnint(a) - idnint(zprf) - 1;
3971 izd = idnint(zprf);
3972 if (jprf > 0.10) {
3973 lorb(a, a - 1., jprf, ee - slamb0, &dlout, &sdlout);
3974 djprf = gausshaz(1, dlout, sdlout);
3975 if (IDjprf == 1) djprf = 0.0;
3976 jprflamb0 = jprf + djprf;
3977 jprflamb0 = dint(std::abs(jprflamb0)); // The nucleus just turns the other way around
3978 }
3979 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
3980 defbet = ecld->beta2[ind][izd];
3981
3982 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std::pow(a - 1., 5.0 / 3.0)
3983 * (1.0 + 0.5 * std::sqrt(5. / (4. * pi)) * defbet);
3984 erotlamb0 = jprflamb0 * jprflamb0 * 197.328 * 197.328 / (2. * iinert);
3985 bsbkbc(a - 1., zprf, &bs, &bk, &bc);
3986
3987 // level density and temperature in the neutron daughter
3988 densniv(a - 1.0, zprf, ee, slamb0, &denslamb0, bshell, bs, bk, &temp, fiss->optshp,
3989 fiss->optcol, defbet, &ecor, jprflamb0, 0, &qr);
3990 lamb0t = temp;
3991 eclamb0 = 0.0;
3992 if (denslamb0 > 0.) {
3993 G4int IS = 0;
3994 if (imaxwell == 1) {
3995 rlamb0t = lamb0t;
3996 dir1240:
3997 eclamb0 = fvmaxhaz_neut(rlamb0t);
3998 IS++;
3999 if (IS > 100) {
4000 std::cout << "WARNING: FVMAXHAZ_NEUT CALLED MORE THAN 100 TIMES" << std::endl;
4001 goto exi1006;
4002 }
4003 if (eclamb0 > (ee - slamb0)) {
4004 if ((ee - slamb0) < rlamb0t)
4005 eclamb0 = ee - slamb0;
4006 else
4007 goto dir1240;
4008 }
4009 if (eclamb0 <= 0.0) goto dir1240;
4010 }
4011 else {
4012 eclamb0 = 2.0 * lamb0t;
4013 }
4014 }
4015 }
4016 else {
4017 denslamb0 = 0.0;
4018 eclamb0 = 0.0;
4019 lamb0t = 0.0;
4020 }
4021exi1006:
4022
4023 // Decay widths for particles
4024 if (densg > 0.) {
4025 //
4026 // CALCULATION OF THE PARTIAL DECAY WIDTH
4027 // USED FOR BOTH THE TIME SCALE AND THE EVAPORATION DECAY WIDTH
4028 //
4029 // AKAP = HBAR**2/(2* MN * R_0**2) = 10 MEV *** input param ***
4030 //
4031 // AK, KHS 2005 - Energy-dependen inverse cross sections included, influence
4032 // of
4033 // Coulomb barrier for LCP, tunnelling for LCP
4034 // JLRS 2017 - Implementation in abla++
4035
4036 if (densn <= 0.0) {
4037 gn = 0.0;
4038 }
4039 else {
4040 gn = width(a, zprf, 1.0, 0.0, nt, 0.0, sn, ee - erotn) * densn / densg;
4041 }
4042 if (densp <= 0.0) {
4043 gp = 0.0;
4044 }
4045 else {
4046 gp =
4047 width(a, zprf, 1.0, 1.0, pt, bp, sbp, ee - erotp) * densp / densg * pen(a, 1.0, omegap, pt);
4048 }
4049 if (densd <= 0.0) {
4050 gd = 0.0;
4051 }
4052 else {
4053 gd =
4054 width(a, zprf, 2.0, 1.0, dt, bd, sbd, ee - erotd) * densd / densg * pen(a, 2.0, omegad, dt);
4055 }
4056 if (denst <= 0.0) {
4057 gt = 0.0;
4058 }
4059 else {
4060 gt =
4061 width(a, zprf, 3.0, 1.0, tt, bt, sbt, ee - erott) * denst / densg * pen(a, 3.0, omegat, tt);
4062 }
4063 if (denshe <= 0.0) {
4064 ghe = 0.0;
4065 }
4066 else {
4067 ghe = width(a, zprf, 3.0, 2.0, het, bhe, sbhe, ee - erothe) * denshe / densg
4068 * pen(a, 3.0, omegahe, het);
4069 }
4070 if (densa <= 0.0) {
4071 ga = 0.0;
4072 }
4073 else {
4074 ga =
4075 width(a, zprf, 4.0, 2.0, at, ba, sba, ee - erota) * densa / densg * pen(a, 4.0, omegaa, at);
4076 }
4077 if (denslamb0 <= 0.0) {
4078 glamb0 = 0.0;
4079 }
4080 else {
4081 glamb0 = width(a, zprf, 1.0, -2.0, lamb0t, 0.0, slamb0, ee - erotlamb0) * denslamb0 / densg;
4082 }
4083
4084 // **************************
4085 // * Treatment of IMFs *
4086 // * KHS, AK, MVR 2005-2006 *
4087 // **************************
4088
4089 G4int izcn = 0, incn = 0, inmin = 0, inmax = 0, inmi = 0, inma = 0;
4090 G4double aimf, mares, maimf;
4091
4092 if (fimf_allowed == 0 || zprf <= 5.0 || a <= 7.0) {
4093 gimf = 0.0;
4094 }
4095 else {
4096 // Estimate the total decay width for IMFs (Z >= 3)
4097 // By using the logarithmic slope between GIMF3 and GIMF5
4098
4099 mglms(a, zprf, opt->optshpimf, &mazz);
4100
4101 gimf3 = 0.0;
4102 zimf = 3.0;
4103 izimf = 3;
4104 // *** Find the limits that both IMF and partner are bound :
4105 izcn = idnint(zprf); // Z of CN
4106 incn = idnint(a) - izcn; // N of CN
4107
4108 isostab_lim(izimf, &inmin,
4109 &inmax); // Bound isotopes for IZIMF from INMIN to INIMFMA
4110 isostab_lim(izcn - izimf, &inmi,
4111 &inma); // Daughter nucleus after IMF emission,
4112 // limits of bound isotopes
4113 inmin = max(inmin, incn - inma); // Both IMF and daughter must be bound
4114 inmax = min(inmax, incn - inmi); // "
4115
4116 inmax = max(inmax, inmin); // In order to keep the variables below
4117
4118 for (G4int iaimf = izimf + inmin; iaimf <= izimf + inmax; iaimf++) {
4119 aimf = G4double(iaimf);
4120 if (aimf >= a || zimf >= zprf) {
4121 width_imf = 0.0;
4122 }
4123 else {
4124 // Q-values
4125 mglms(a - aimf, zprf - zimf, opt->optshpimf, &mares);
4126 mglms(aimf, zimf, opt->optshpimf, &maimf);
4127 // Bass barrier
4128 barrs(idnint(zprf - zimf), idnint(a - aimf), izimf, idnint(aimf), &bimf, &omegaimf);
4129 sbimf = maimf + mares - mazz + bimf + getdeltabinding(a, NbLam0);
4130 // Rotation energy
4131 defbetimf = ecld->beta2[idnint(aimf - zimf)][idnint(zimf)]
4132 + ecld->beta2[idnint(a - aimf - zprf + zimf)][idnint(zprf - zimf)];
4133
4134 iinert = 0.40 * 931.490 * 1.160 * 1.160 * std::pow(a, 5.0 / 3.0)
4135 * (std::pow(aimf, 5.0 / 3.0) + std::pow(a - aimf, 5.0 / 3.0))
4136 + 931.490 * 1.160 * 1.160 * aimf * (a - aimf) / a
4137 * (std::pow(aimf, 1.0 / 3.0) + std::pow(a - aimf, 1.0 / 3.0))
4138 * (std::pow(aimf, 1.0 / 3.0) + std::pow(a - aimf, 1.0 / 3.0));
4139
4140 erot = jprf * jprf * 197.328 * 197.328 / (2.0 * iinert);
4141
4142 // Width
4143 if (densg == 0.0 || ee < (sbimf + erot)) {
4144 width_imf = 0.0;
4145 }
4146 else {
4147 // To take into account that at the barrier the system is deformed:
4148 // BSIMF = ((A-AIMF)**(2.D0/3.D0) +
4149 // AIMF**(2.D0/3.D0))/A**(2.D0/3.D0)
4150 bsimf = bscn;
4151 densniv(a, zprf, ee, sbimf, &densimf, 0.0, bsimf, 1.0, &timf, 0, 0, defbetimf, &ecor,
4152 jprf, 2, &qr);
4153
4154 imfarg = (sbimf + erotcn - erot) / timf;
4155 if (imfarg > 200.0) imfarg = 200.0;
4156
4157 // For IMF - The available phase space is given by the level
4158 // densities in CN at the barrier; applaying MOrretto ->
4159 // G=WIDTH*ro_CN(E-SBIMF)/ro_CN(E). Constant temperature
4160 // approximation: ro(E+dE)/ro(E)=exp(dE/T) Ratio DENSIMF/DENSCN is
4161 // included to take into account that at the barrier system is
4162 // deformed. If (above) BSIMF = 1 no deformation is considered and
4163 // this ratio is equal to 1.
4164 width_imf = 0.0;
4165 //
4166 width_imf = width(a, zprf, aimf, zimf, timf, bimf, sbimf, ee - erot) * std::exp(-imfarg)
4167 * qr / qrcn;
4168 } // if densg
4169 } // if aimf
4170 gimf3 = gimf3 + width_imf;
4171 } // for IAIMF
4172
4173 // zimf = 5
4174 gimf5 = 0.0;
4175 zimf = 5.0;
4176 izimf = 5;
4177 // *** Find the limits that both IMF and partner are bound :
4178 izcn = idnint(zprf); // Z of CN
4179 incn = idnint(a) - izcn; // N of CN
4180
4181 isostab_lim(izimf, &inmin,
4182 &inmax); // Bound isotopes for IZIMF from INMIN to INIMFMA
4183 isostab_lim(izcn - izimf, &inmi,
4184 &inma); // Daughter nucleus after IMF emission,
4185 // limits of bound isotopes
4186 inmin = max(inmin, incn - inma); // Both IMF and daughter must be bound
4187 inmax = min(inmax, incn - inmi); // "
4188
4189 inmax = max(inmax, inmin); // In order to keep the variables below
4190
4191 for (G4int iaimf = izimf + inmin; iaimf <= izimf + inmax; iaimf++) {
4192 aimf = G4double(iaimf);
4193 if (aimf >= a || zimf >= zprf) {
4194 width_imf = 0.0;
4195 }
4196 else {
4197 // Q-values
4198 mglms(a - aimf, zprf - zimf, opt->optshpimf, &mares);
4199 mglms(aimf, zimf, opt->optshpimf, &maimf);
4200 // Bass barrier
4201 barrs(idnint(zprf - zimf), idnint(a - aimf), izimf, idnint(aimf), &bimf, &omegaimf);
4202 sbimf = maimf + mares - mazz + bimf + getdeltabinding(a, NbLam0);
4203 // Rotation energy
4204 defbetimf = ecld->beta2[idnint(aimf - zimf)][idnint(zimf)]
4205 + ecld->beta2[idnint(a - aimf - zprf + zimf)][idnint(zprf - zimf)];
4206
4207 iinert = 0.40 * 931.490 * 1.160 * 1.160 * std::pow(a, 5.0 / 3.0)
4208 * (std::pow(aimf, 5.0 / 3.0) + std::pow(a - aimf, 5.0 / 3.0))
4209 + 931.490 * 1.160 * 1.160 * aimf * (a - aimf) / a
4210 * (std::pow(aimf, 1.0 / 3.0) + std::pow(a - aimf, 1.0 / 3.0))
4211 * (std::pow(aimf, 1.0 / 3.0) + std::pow(a - aimf, 1.0 / 3.0));
4212
4213 erot = jprf * jprf * 197.328 * 197.328 / (2.0 * iinert);
4214 //
4215 // Width
4216 if (densg == 0.0 || ee < (sbimf + erot)) {
4217 width_imf = 0.0;
4218 }
4219 else {
4220 // To take into account that at the barrier the system is deformed:
4221 // BSIMF = ((A-AIMF)**(2.D0/3.D0) +
4222 // AIMF**(2.D0/3.D0))/A**(2.D0/3.D0)
4223 bsimf = bscn;
4224 densniv(a, zprf, ee, sbimf, &densimf, 0.0, bsimf, 1.0, &timf, 0, 0, defbetimf, &ecor,
4225 jprf, 2, &qr);
4226 //
4227 imfarg = (sbimf + erotcn - erot) / timf;
4228 if (imfarg > 200.0) imfarg = 200.0;
4229 //
4230 // For IMF - The available phase space is given by the level
4231 // densities in CN at the barrier; applaying MOrretto ->
4232 // G=WIDTH*ro_CN(E-SBIMF)/ro_CN(E). Constant temperature
4233 // approximation: ro(E+dE)/ro(E)=exp(dE/T) Ratio DENSIMF/DENSCN is
4234 // included to take into account that at the barrier system is
4235 // deformed. If (above) BSIMF = 1 no deformation is considered and
4236 // this ratio is equal to 1.
4237 width_imf = 0.0;
4238 width_imf = width(a, zprf, aimf, zimf, timf, bimf, sbimf, ee - erot) * std::exp(-imfarg)
4239 * qr / qrcn; //*densimf/densg;
4240 } // if densg
4241 } // if aimf
4242 gimf5 = gimf5 + width_imf;
4243 } // for IAIMF
4244 // It is assumed that GIMFi = A_IMF*ZIMF**B_IMF; to get the total GIMF one
4245 // integrates Int(A_IMF*ZIMF**B_IMF)(3->ZPRF)
4246
4247 if (gimf3 <= 0.0 || gimf5 <= 0.0) {
4248 gimf = 0.0;
4249 b_imf = -100.0;
4250 a_imf = 0.0;
4251 }
4252 else {
4253 //
4254 b_imf = (std::log10(gimf3) - std::log10(gimf5)) / (std::log10(3.0) - std::log10(5.0));
4255 //
4256 if (b_imf >= -1.01) b_imf = -1.01;
4257 if (b_imf <= -100.0) {
4258 b_imf = -100.0;
4259 a_imf = 0.0;
4260 gimf = 0.0;
4261 goto direct2007;
4262 }
4263 //
4264 a_imf = gimf3 / std::pow(3.0, b_imf);
4265 gimf = a_imf * (std::pow(zprf, b_imf + 1.0) - std::pow(3.0, b_imf + 1.0)) / (b_imf + 1.0);
4266 }
4267
4268 direct2007:
4269 if (gimf < 1.e-10) gimf = 0.0;
4270 } // if fimf_allowed
4271 //
4272 // c JLRS 2016 - Added this calculation
4273 // C AK 2004 - Gamma width
4274 // C According to A. Ignatyuk, GG :
4275 // C Here BS=BK=1, as this was assumed in the parameterization
4276 pa = (ald->av) * a + (ald->as) * std::pow(a, 2. / 3.) + (ald->ak) * std::pow(a, 1. / 3.);
4277 gamma = 2.5 * pa * std::pow(a, -4. / 3.);
4278 gfactor = 1. + gamma * ecld->ecgnz[in][iz];
4279 if (gfactor <= 0.) {
4280 gfactor = 0.0;
4281 }
4282 //
4283 gtemp = 17.60 / (std::pow(a, 0.699) * std::sqrt(gfactor));
4284 //
4285 // C If one switches gammas off, one should also switch off tunneling
4286 // through the fission barrier.
4287 gg = 0.624e-9 * std::pow(a, 1.6) * std::pow(gtemp, 5.);
4288 // gammaemission==1
4289 // C For fission fragments, GG is ~ 2 times larger than for
4290 // c "oridnary" nuclei (A. Ignatyuk, private communication).
4291 if (gammaemission == 1) {
4292 gg = 2.0 * gg;
4293 }
4294 ecg = 4.0 * gtemp;
4295 //
4296 //
4297 gsum = ga + ghe + gd + gt + gp + gn + gimf + gg + glamb0;
4298
4299 // std::cout << gn << " " << gd << " " << gp << std::endl;
4300
4301 if (gsum > 0.0) {
4302 ts1 = hbar / gsum;
4303 }
4304 else {
4305 ts1 = 1.0e99;
4306 goto direct69;
4307 }
4308 //
4309 // Case of nuclei below Businaro-Gallone mass asymmetry point
4310 if (fiss->ifis == 0 || (zprf * zprf / a <= 22.74 && zprf < 60.)) {
4311 goto direct69;
4312 }
4313 //
4314 // Calculation of the fission decay width
4315 // Deformation is calculated using the fissility
4316 //
4317 defbet = y;
4318 fission_width(zprf, a, ee, bssp, bksp, ef, y, &gf, &temp, jprf, 0, 1, fiss->optcol,
4319 fiss->optshp, densg);
4320 ft = temp;
4321 //
4322 // Case of very heavy nuclei that have no fission barrier
4323 // For them fission is the only decay channel available
4324 if (ef <= 0.0) {
4325 probf = 1.0;
4326 probp = 0.0;
4327 probd = 0.0;
4328 probt = 0.0;
4329 probn = 0.0;
4330 probhe = 0.0;
4331 proba = 0.0;
4332 probg = 0.0;
4333 probimf = 0.0;
4334 problamb0 = 0.0;
4335 goto direct70;
4336 }
4337
4338 if (fiss->bet <= 0.) {
4339 gtotal = ga + ghe + gp + gd + gt + gn + gg + gimf + gf + glamb0;
4340 if (gtotal <= 0.0) {
4341 probf = 0.0;
4342 probp = 0.0;
4343 probd = 0.0;
4344 probt = 0.0;
4345 probn = 0.0;
4346 probhe = 0.0;
4347 proba = 0.0;
4348 probg = 0.0;
4349 probimf = 0.0;
4350 problamb0 = 0.0;
4351 goto direct70;
4352 }
4353 else {
4354 probf = gf / gtotal;
4355 probn = gn / gtotal;
4356 probp = gp / gtotal;
4357 probd = gd / gtotal;
4358 probt = gt / gtotal;
4359 probhe = ghe / gtotal;
4360 proba = ga / gtotal;
4361 probg = gg / gtotal;
4362 probimf = gimf / gtotal;
4363 problamb0 = glamb0 / gtotal;
4364 goto direct70;
4365 }
4366 }
4367 }
4368 else {
4369 goto direct69;
4370 }
4371 //
4372 if (inum > ilast) { // new event means reset the time scale
4373 tsum = 0.;
4374 }
4375 //
4376 // kramers factor for the dynamical hindrances of fission
4377 fomega_sp(a, y, &mfcd, &omegasp, &homegasp);
4378 cf = cram((NbLam0 > 0 ? fiss->bethyp : fiss->bet), homegasp);
4379 //
4380 // We calculate the transient time
4381 fomega_gs(a, zprf, &k1, &omegags, &homegags);
4382 tauc = tau((NbLam0 > 0 ? fiss->bethyp : fiss->bet), homegags, ef, ft);
4383 gf = gf * cf;
4384 //
4385 /*
4386 c The subroutine part_fiss calculates the fission width GFF that corresponds
4387 to the time c dependence of the probability distribution obtained by solving
4388 the FOKKER-PLANCK eq c using a nucleus potential that is approximated by a
4389 parabola. It also gives the c decay time for this step T_LAPSE that includes
4390 all particle decay channels and the c fission channel. And it decides whether
4391 the nucleus decays by particle evaporation c CHOICE_FISSPART = 1 or fission
4392 CHOICE_FISSPART = 2
4393 */
4394 //
4395 part_fiss((NbLam0 > 0 ? fiss->bethyp : fiss->bet), gsum, gf, y, tauc, ts1, tsum, &choice_fisspart,
4396 zprf, a, ft, &t_lapse, &gff);
4397 gf = gff;
4398 //
4399 // We accumulate in TSUM the mean decay for this step including all particle
4400 // decay channels and fission
4401 tsum = tsum + t_lapse;
4402
4403 // If fission occurs
4404 if (choice_fisspart == 2) {
4405 probf = 1.0;
4406 probp = 0.0;
4407 probd = 0.0;
4408 probt = 0.0;
4409 probn = 0.0;
4410 probhe = 0.0;
4411 proba = 0.0;
4412 probg = 0.0;
4413 probimf = 0.0;
4414 problamb0 = 0.0;
4415 goto direct70;
4416 }
4417 else {
4418 // If particle evaporation occurs
4419 // The probabilities for the different decays are calculated taking into
4420 // account the fission width GFF that corresponds to this step
4421
4422 gtotal = ga + ghe + gp + gd + gt + gn + gimf + gg + glamb0;
4423 if (gtotal <= 0.0) {
4424 probf = 0.0;
4425 probp = 0.0;
4426 probd = 0.0;
4427 probt = 0.0;
4428 probn = 0.0;
4429 probhe = 0.0;
4430 proba = 0.0;
4431 probg = 0.0;
4432 probimf = 0.0;
4433 problamb0 = 0.0;
4434 goto direct70;
4435 }
4436 else {
4437 probf = 0.0;
4438 probn = gn / gtotal;
4439 probp = gp / gtotal;
4440 probd = gd / gtotal;
4441 probt = gt / gtotal;
4442 probhe = ghe / gtotal;
4443 proba = ga / gtotal;
4444 probg = gg / gtotal;
4445 probimf = gimf / gtotal;
4446 problamb0 = glamb0 / gtotal;
4447 goto direct70;
4448 }
4449 }
4450 //
4451direct69:
4452 gtotal = ga + ghe + gp + gd + gt + gn + gg + gimf + glamb0;
4453 if (gtotal <= 0.0) {
4454 probf = 0.0;
4455 probp = 0.0;
4456 probd = 0.0;
4457 probt = 0.0;
4458 probn = 0.0;
4459 probhe = 0.0;
4460 proba = 0.0;
4461 probg = 0.0;
4462 probimf = 0.0;
4463 problamb0 = 0.0;
4464 }
4465 else {
4466 probf = 0.0;
4467 probn = gn / gtotal;
4468 probp = gp / gtotal;
4469 probd = gd / gtotal;
4470 probt = gt / gtotal;
4471 probhe = ghe / gtotal;
4472 proba = ga / gtotal;
4473 probg = gg / gtotal;
4474 probimf = gimf / gtotal;
4475 problamb0 = glamb0 / gtotal;
4476 }
4477
4478direct70:
4479 ptotl = probp + probd + probt + probn + probhe + proba + probg + probimf + probf + problamb0;
4480 //
4481 ee = eer;
4482 ilast = inum;
4483
4484 // Return values:
4485 (*probp_par) = probp;
4486 (*probd_par) = probd;
4487 (*probt_par) = probt;
4488 (*probn_par) = probn;
4489 (*probhe_par) = probhe;
4490 (*proba_par) = proba;
4491 (*probg_par) = probg;
4492 (*probimf_par) = probimf;
4493 (*problamb0_par) = problamb0;
4494 (*probf_par) = probf;
4495 (*ptotl_par) = ptotl;
4496 (*sn_par) = sn;
4497 (*sp_par) = sp;
4498 (*sd_par) = sd;
4499 (*st_par) = st;
4500 (*she_par) = she;
4501 (*sa_par) = sa;
4502 (*slamb0_par) = slamb0;
4503 (*sbp_par) = sbp;
4504 (*sbd_par) = sbd;
4505 (*sbt_par) = sbt;
4506 (*sbhe_par) = sbhe;
4507 (*sba_par) = sba;
4508 (*ecn_par) = ecn;
4509 (*ecp_par) = ecp;
4510 (*ecd_par) = ecd;
4511 (*ect_par) = ect;
4512 (*eche_par) = eche;
4513 (*eca_par) = eca;
4514 (*ecg_par) = ecg;
4515 (*eclamb0_par) = eclamb0;
4516 (*bp_par) = bp;
4517 (*bd_par) = bd;
4518 (*bt_par) = bt;
4519 (*bhe_par) = bhe;
4520 (*ba_par) = ba;
4521 (*tcn) = ftcn;
4522 (*ts1_par) = ts1;
4523 (*jprfn_par) = jprfn;
4524 (*jprfp_par) = jprfp;
4525 (*jprfd_par) = jprfd;
4526 (*jprft_par) = jprft;
4527 (*jprfhe_par) = jprfhe;
4528 (*jprfa_par) = jprfa;
4529 (*jprflamb0_par) = jprflamb0;
4530 (*tsum_par) = tsum;
4531 return;
4532}
void part_fiss(G4double BET, G4double GP, G4double GF, G4double Y, G4double TAUF, G4double TS1, G4double TSUM, G4int *CHOICE, G4double ZF, G4double AF, G4double FT, G4double *T_LAPSE, G4double *GF_LOC)
Definition G4Abla.cc:6833
G4double fvmaxhaz_neut(G4double x)
Definition G4Abla.cc:7290
G4double tau(G4double bet, G4double homega, G4double ef, G4double t)
Definition G4Abla.cc:5325
void barrs(G4int Z1, G4int A1, G4int Z2, G4int A2, G4double *sBARR, G4double *sOMEGA)
Definition G4Abla.cc:5474
G4double fvmaxhaz(G4double T)
Definition G4Abla.cc:6700
G4double gethyperseparation(G4double A, G4double Z, G4int ny)
Definition G4Abla.cc:8015
void fomega_gs(G4double AF, G4double ZF, G4double *K1, G4double *sOMEGA, G4double *sHOMEGA)
Definition G4Abla.cc:5452
void mglw(G4double a, G4double z, G4double *el)
Definition G4Abla.cc:2397
G4double dmin1(G4double a, G4double b, G4double c)
Definition G4Abla.cc:6421
G4double fissility(G4int a, G4int z, G4int ny, G4double sn, G4double slam, G4int optxfis)
Definition G4Abla.cc:2479
void unbound(G4double SN, G4double SP, G4double SD, G4double ST, G4double SHE, G4double SA, G4double BP, G4double BD, G4double BT, G4double BHE, G4double BA, G4double *PROBF, G4double *PROBN, G4double *PROBP, G4double *PROBD, G4double *PROBT, G4double *PROBHE, G4double *PROBA, G4double *PROBIMF, G4double *PROBG, G4double *ECN, G4double *ECP, G4double *ECD, G4double *ECT, G4double *ECHE, G4double *ECA)
Definition G4Abla.cc:8105
G4double cram(G4double bet, G4double homega)
Definition G4Abla.cc:5354
void mglms(G4double a, G4double z, G4int refopt4, G4double *el)
Definition G4Abla.cc:2424
void barfit(G4int iz, G4int ia, G4int il, G4double *sbfis, G4double *segs, G4double *selmax)
Definition G4Abla.cc:5517
void fission_width(G4double ZPRF, G4double A, G4double EE, G4double BS, G4double BK, G4double EF, G4double Y, G4double *GF, G4double *TEMP, G4double JPR, G4int IEROT, G4int FF_ALLOWED, G4int OPTCOL, G4int OPTSHP, G4double DENSG)
Definition G4Abla.cc:7130
G4int min(G4int a, G4int b)
Definition G4Abla.cc:6271
G4double width(G4double AMOTHER, G4double ZMOTHER, G4double APART, G4double ZPART, G4double TEMP, G4double B1, G4double SB1, G4double EXC)
Definition G4Abla.cc:6440
G4double gethyperbinding(G4double A, G4double Z, G4int ny)
Definition G4Abla.cc:8084
G4double pen(G4double A, G4double ap, G4double omega, G4double T)
Definition G4Abla.cc:6648
G4double bipol(G4int iflag, G4double y)
Definition G4Abla.cc:5371
void densniv(G4double a, G4double z, G4double ee, G4double ef, G4double *dens, G4double bshell, G4double bs, G4double bk, G4double *temp, G4int optshp, G4int optcol, G4double defbet, G4double *ecor, G4double jprf, G4int ifis, G4double *qr)
Definition G4Abla.cc:4534
void fomega_sp(G4double AF, G4double Y, G4double *MFCD, G4double *sOMEGA, G4double *sHOMEGA)
Definition G4Abla.cc:5426
G4double getdeltabinding(G4double a, G4int nblamb)
Definition G4Abla.cc:8009
void bsbkbc(G4double A, G4double Z, G4double *BS, G4double *BK, G4double *BC)
Definition G4Abla.cc:6675
void lorb(G4double AMOTHER, G4double ADAUGHTER, G4double LMOTHER, G4double EEFINAL, G4double *LORBITAL, G4double *SIGMA_LORBITAL)
Definition G4Abla.cc:7246

Referenced by evap_postsaddle(), and evapora().

◆ dmin1()

G4double G4Abla::dmin1 ( G4double a,
G4double b,
G4double c )

Definition at line 6421 of file G4Abla.cc.

6422{
6423 if (a < b && a < c) {
6424 return a;
6425 }
6426 if (b < a && b < c) {
6427 return b;
6428 }
6429 if (c < a && c < b) {
6430 return c;
6431 }
6432 return a;
6433}

Referenced by direct(), evap_postsaddle(), evapora(), and unbound().

◆ dmod()

G4double G4Abla::dmod ( G4double a,
G4double b )

◆ DSIGN()

G4double G4Abla::DSIGN ( G4double a,
G4double b )

Definition at line 6301 of file G4Abla.cc.

6302{
6303 // A function that assigns the sign of the second argument to the
6304 // absolute value of the first
6305
6306 if (b >= 0) {
6307 return std::abs(a);
6308 }
6309 else {
6310 return -1.0 * std::abs(a);
6311 }
6312 return 0;
6313}

Referenced by DeexcitationAblaxx().

◆ ecoul()

double G4Abla::ecoul ( G4double z1,
G4double n1,
G4double beta1,
G4double z2,
G4double n2,
G4double beta2,
G4double d )

Definition at line 9227 of file G4Abla.cc.

9229{
9230 // Coulomb potential between two nuclei
9231 // surfaces are in a distance of d
9232 // in a tip to tip configuration
9233
9234 // approximate formulation
9235 // On input: Z1 nuclear charge of first nucleus
9236 // N1 number of neutrons in first nucleus
9237 // beta1 deformation of first nucleus
9238 // Z2 nuclear charge of second nucleus
9239 // N2 number of neutrons in second nucleus
9240 // beta2 deformation of second nucleus
9241 // d distance of surfaces of the nuclei
9242
9243 // G4double Z1,N1,beta1,Z2,N2,beta2,d,ecoul;
9244 G4double fecoul = 0;
9245 G4double dtot = 0;
9246 const G4double r0 = 1.16;
9247
9248 dtot = r0
9249 * (std::pow((z1 + n1), 1.0 / 3.0) * (1.0 + 0.6666667 * beta1)
9250 + std::pow((z2 + n2), 1.0 / 3.0) * (1.0 + 0.6666667 * beta2))
9251 + d;
9252 fecoul = z1 * z2 * 1.44 / dtot;
9253
9254 return fecoul;
9255}

Referenced by fissionDistri().

◆ eflmac()

G4double G4Abla::eflmac ( G4int ia,
G4int iz,
G4int flag,
G4int optshp )

This function will calculate the liquid-drop nuclear mass for spheri configuration according to the preprint NUCLEAR GROUND-STATE MASSES and DEFORMATIONS by P. Mo"ller et al. from August 16, 1993 p. All constants are taken from this publication for consistency.

Definition at line 5106 of file G4Abla.cc.

5107{
5108 // CHANGED TO CALCULATE TOTAL BINDING ENERGY INSTEAD OF MASS EXCESS.
5109 // SWITCH FOR PAIRING INCLUDED AS WELL.
5110 // BINDING = EFLMAC(IA,IZ,0,OPTSHP)
5111 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EEX/FRLDM.C
5112 // A.J. 15.07.96
5113
5114 // this function will calculate the liquid-drop nuclear mass for spheri
5115 // configuration according to the preprint NUCLEAR GROUND-STATE
5116 // MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p.
5117 // All constants are taken from this publication for consistency.
5118
5119 // Parameters:
5120 // a: nuclear mass number
5121 // z: nuclear charge
5122 // flag: 0 - return mass excess
5123 // otherwise - return pairing (= -1/2 dpn + 1/2 (Dp + Dn))
5124
5125 G4double eflmacResult = 0.0;
5126
5127 if (ia == 0) return eflmacResult;
5128
5129 G4int in = 0;
5130 G4double z = 0.0, n = 0.0, a = 0.0, av = 0.0, as = 0.0;
5131 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 = 0.0, b3 = 0.0;
5132 G4double ff = 0.0, ca = 0.0, w = 0.0, efl = 0.0;
5133 G4double r0 = 0.0, kf = 0.0, ks = 0.0;
5134 G4double kv = 0.0, rp = 0.0, ay = 0.0, aden = 0.0, x0 = 0.0, y0 = 0.0;
5135 G4double esq = 0.0, ael = 0.0, i = 0.0, e0 = 0.0;
5136 G4double pi = 3.141592653589793238e0;
5137
5138 // fundamental constants
5139 // electronic charge squared
5140 esq = 1.4399764;
5141
5142 // constants from considerations other than nucl. masses
5143 // electronic binding
5144 ael = 1.433e-5;
5145
5146 // proton rms radius
5147 rp = 0.8;
5148
5149 // nuclear radius constant
5150 r0 = 1.16;
5151
5152 // range of yukawa-plus-expon. potential
5153 ay = 0.68;
5154
5155 // range of yukawa function used to generate
5156 // nuclear charge distribution
5157 aden = 0.70;
5158
5159 // wigner constant
5160 w = 30.0;
5161
5162 // adjusted parameters
5163 // volume energy
5164 av = 16.00126;
5165
5166 // volume asymmetry
5167 kv = 1.92240;
5168
5169 // surface energy
5170 as = 21.18466;
5171
5172 // surface asymmetry
5173 ks = 2.345;
5174 // a^0 constant
5175 a0 = 2.615;
5176
5177 // charge asymmetry
5178 ca = 0.10289;
5179
5180 z = G4double(iz);
5181 a = G4double(ia);
5182 in = ia - iz;
5183 n = G4double(in);
5184
5185 if (flag == 1) {
5186 goto eflmac311;
5187 }
5188
5189 if (iz < 13 && in < 3) {
5190 if (masses->mexpiop[in][iz] == 1) {
5191 return masses->bind[in][iz];
5192 }
5193 }
5194
5195eflmac311:
5196
5197 c1 = 3.0 / 5.0 * esq / r0;
5198 c4 = 5.0 / 4.0 * std::pow((3.0 / (2.0 * pi)), (2.0 / 3.0)) * c1;
5199 kf = std::pow((9.0 * pi * z / (4.0 * a)), (1.0 / 3.0)) / r0;
5200
5201 ff = -1.0 / 8.0 * rp * rp * esq / std::pow(r0, 3)
5202 * (145.0 / 48.0 - 327.0 / 2880.0 * std::pow(kf, 2) * std::pow(rp, 2)
5203 + 1527.0 / 1209600.0 * std::pow(kf, 4) * std::pow(rp, 4));
5204 i = (n - z) / a;
5205
5206 x0 = r0 * std::pow(a, (1.0 / 3.0)) / ay;
5207 y0 = r0 * std::pow(a, (1.0 / 3.0)) / aden;
5208
5209 b1 = 1.0 - 3.0 / (std::pow(x0, 2))
5210 + (1.0 + x0) * (2.0 + 3.0 / x0 + 3.0 / std::pow(x0, 2)) * std::exp(-2.0 * x0);
5211
5212 b3 = 1.0
5213 - 5.0 / std::pow(y0, 2)
5214 * (1.0 - 15.0 / (8.0 * y0) + 21.0 / (8.0 * std::pow(y0, 3))
5215 - 3.0 / 4.0
5216 * (1.0 + 9.0 / (2.0 * y0) + 7.0 / std::pow(y0, 2) + 7.0 / (2.0 * std::pow(y0, 3)))
5217 * std::exp(-2.0 * y0));
5218
5219 // now calculation of total binding energy a.j. 16.7.96
5220
5221 efl = -1.0 * av * (1.0 - kv * i * i) * a + as * (1.0 - ks * i * i) * b1 * std::pow(a, (2.0 / 3.0))
5222 + a0 + c1 * z * z * b3 / std::pow(a, (1.0 / 3.0))
5223 - c4 * std::pow(z, (4.0 / 3.0)) / std::pow(a, (1.e0 / 3.e0)) + ff * std::pow(z, 2) / a
5224 - ca * (n - z) - ael * std::pow(z, (2.39e0));
5225
5226 efl = efl + w * std::abs(i);
5227
5228 // pairing is made optional
5229 if (optshp >= 2) {
5230 // average pairing
5231 if (in == iz && (mod(in, 2) == 1) && (mod(iz, 2) == 1) && in > 0.) {
5232 efl = efl + w / a;
5233 }
5234
5235 // AK 2008 - Parametrization of CT model by Ignatyuk;
5236 // The following part has been introduced in order to have correspondance
5237 // between pairing in masses and level densities;
5238 // AK 2010 note that E0 is shifted to correspond to pairing shift in
5239 // Fermi-gas model (there, energy is shifted taking odd-odd nuclei
5240 // as bassis)
5241
5242 G4double para = 0.;
5243 parite(a, &para);
5244
5245 if (para < 0.0) {
5246 // e-o, o-e
5247 e0 = 0.285 + 11.17 * std::pow(a, -0.464) - 0.390 - 0.00058 * (a);
5248 }
5249 else {
5250 G4double parz = 0.;
5251 parite(z, &parz);
5252 if (parz > 0.0) {
5253 // e-e
5254 e0 = 22.34 * std::pow(a, -0.464) - 0.235;
5255 }
5256 else {
5257 // o-o
5258 e0 = 0.0;
5259 }
5260 }
5261 efl = efl - e0;
5262 // end if for pairing term
5263 }
5264
5265 eflmacResult = efl;
5266
5267 return eflmacResult;
5268}
const G4double a0

Referenced by DeexcitationAblaxx(), FillData(), initEvapora(), and mglms().

◆ eflmac_profi()

G4double G4Abla::eflmac_profi ( G4double a,
G4double z )

Definition at line 9301 of file G4Abla.cc.

9302{
9303 // CHANGED TO CALCULATE TOTAL BINDING ENERGY INSTEAD OF MASS EXCESS.
9304 // SWITCH FOR PAIRING INCLUDED AS WELL.
9305 // BINDING = EFLMAC(IA,IZ,0,OPTSHP)
9306 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EEX/FRLDM.C
9307 // A.J. 15.07.96
9308
9309 // this function will calculate the liquid-drop nuclear mass for spheri
9310 // configuration according to the preprint NUCLEAR GROUND-STATE
9311 // MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p.
9312 // All constants are taken from this publication for consistency.
9313
9314 // Parameters:
9315 // a: nuclear mass number
9316 // z: nuclear charge
9317
9318 G4double eflmacResult = 0.0;
9319
9320 G4int in = 0;
9321 G4double z = 0.0, n = 0.0, a = 0.0, av = 0.0, as = 0.0;
9322 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 = 0.0, b3 = 0.0;
9323 G4double ff = 0.0, ca = 0.0, w = 0.0, efl = 0.0;
9324 G4double r0 = 0.0, kf = 0.0, ks = 0.0;
9325 G4double kv = 0.0, rp = 0.0, ay = 0.0, aden = 0.0, x0 = 0.0, y0 = 0.0;
9326 G4double esq = 0.0, ael = 0.0, i = 0.0;
9327 G4double pi = 3.141592653589793238e0;
9328
9329 // fundamental constants
9330 // electronic charge squared
9331 esq = 1.4399764;
9332
9333 // constants from considerations other than nucl. masses
9334 // electronic binding
9335 ael = 1.433e-5;
9336
9337 // proton rms radius
9338 rp = 0.8;
9339
9340 // nuclear radius constant
9341 r0 = 1.16;
9342
9343 // range of yukawa-plus-expon. potential
9344 ay = 0.68;
9345
9346 // range of yukawa function used to generate
9347 // nuclear charge distribution
9348 aden = 0.70;
9349
9350 // wigner constant
9351 w = 30.0;
9352
9353 // adjusted parameters
9354 // volume energy
9355 av = 16.00126;
9356
9357 // volume asymmetry
9358 kv = 1.92240;
9359
9360 // surface energy
9361 as = 21.18466;
9362
9363 // surface asymmetry
9364 ks = 2.345;
9365 // a^0 constant
9366 a0 = 2.615;
9367
9368 // charge asymmetry
9369 ca = 0.10289;
9370
9371 z = G4double(iz);
9372 a = G4double(ia);
9373 in = ia - iz;
9374 n = G4double(in);
9375
9376 c1 = 3.0 / 5.0 * esq / r0;
9377 c4 = 5.0 / 4.0 * std::pow((3.0 / (2.0 * pi)), (2.0 / 3.0)) * c1;
9378 kf = std::pow((9.0 * pi * z / (4.0 * a)), (1.0 / 3.0)) / r0;
9379
9380 ff = -1.0 / 8.0 * rp * rp * esq / std::pow(r0, 3)
9381 * (145.0 / 48.0 - 327.0 / 2880.0 * std::pow(kf, 2) * std::pow(rp, 2)
9382 + 1527.0 / 1209600.0 * std::pow(kf, 4) * std::pow(rp, 4));
9383
9384 i = (n - z) / a;
9385
9386 x0 = r0 * std::pow(a, (1.0 / 3.0)) / ay;
9387 y0 = r0 * std::pow(a, (1.0 / 3.0)) / aden;
9388
9389 b1 = 1.0 - 3.0 / (std::pow(x0, 2))
9390 + (1.0 + x0) * (2.0 + 3.0 / x0 + 3.0 / std::pow(x0, 2)) * std::exp(-2.0 * x0);
9391
9392 b3 = 1.0
9393 - 5.0 / std::pow(y0, 2)
9394 * (1.0 - 15.0 / (8.0 * y0) + 21.0 / (8.0 * std::pow(y0, 3))
9395 - 3.0 / 4.0
9396 * (1.0 + 9.0 / (2.0 * y0) + 7.0 / std::pow(y0, 2) + 7.0 / (2.0 * std::pow(y0, 3)))
9397 * std::exp(-2.0 * y0));
9398
9399 // now calculation of total binding energy
9400
9401 efl = -1.0 * av * (1.0 - kv * i * i) * a + as * (1.0 - ks * i * i) * b1 * std::pow(a, (2.0 / 3.0))
9402 + a0 + c1 * z * z * b3 / std::pow(a, (1.0 / 3.0))
9403 - c4 * std::pow(z, (4.0 / 3.0)) / std::pow(a, (1.e0 / 3.e0)) + ff * std::pow(z, 2) / a
9404 - ca * (n - z) - ael * std::pow(z, (2.39e0));
9405
9406 efl = efl + w * utilabs(i);
9407
9408 eflmacResult = efl;
9409
9410 return eflmacResult;
9411}
G4double utilabs(G4double a)
Definition G4Abla.cc:6435

Referenced by frldm().

◆ erf()

G4double G4Abla::erf ( G4double x)

Special functions used for the emission of particles.

Definition at line 5906 of file G4Abla.cc.

5907{
5908 G4double ferf;
5909
5910 if (x < 0.) {
5911 ferf = -gammp(0.5, x * x);
5912 }
5913 else {
5914 ferf = gammp(0.5, x * x);
5915 ;
5916 }
5917 return ferf;
5918}
G4double gammp(G4double a, G4double x)
Definition G4Abla.cc:5920

Referenced by width().

◆ evap_postsaddle()

void G4Abla::evap_postsaddle ( G4double A,
G4double Z,
G4double E_scission_pre,
G4double * E_scission_post,
G4double * A_scission,
G4double * Z_scission,
G4double & vx_eva,
G4double & vy_eva,
G4double & vz_eva,
G4int * NbLam0_par )

Calculation of particle emission between the saddle and scission point.

Definition at line 7688 of file G4Abla.cc.

7691{
7692 // AK 2006 - Now in case of fission deexcitation between saddle and scission
7693 // is explicitly calculated. Langevin calculations made by P.
7694 // Nadtochy used to parametrise saddle-to-scission time
7695
7696 G4double af, zf, ee;
7697 G4double epsiln = 0.0, probp = 0.0, probd = 0.0, probt = 0.0, probn = 0.0, probhe = 0.0,
7698 proba = 0.0, probg = 0.0, probimf = 0.0, problamb0 = 0.0, ptotl = 0.0, tcn = 0.0;
7699 G4double sn = 0.0, sbp = 0.0, sbd = 0.0, sbt = 0.0, sbhe = 0.0, sba = 0.0, x = 0.0, amoins = 0.0,
7700 zmoins = 0.0, sp = 0.0, sd = 0.0, st = 0.0, she = 0.0, sa = 0.0, slamb0 = 0.0;
7701 G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, ect = 0.0, eche = 0.0, eca = 0.0, ecg = 0.0,
7702 eclamb0 = 0.0, bp = 0.0, bd = 0.0, bt = 0.0, bhe = 0.0, ba = 0.0;
7703
7704 G4double xcv = 0., ycv = 0., zcv = 0., VXOUT = 0., VYOUT = 0., VZOUT = 0.;
7705
7706 G4double jprfn = 0.0, jprfp = 0.0, jprfd = 0.0, jprft = 0.0, jprfhe = 0.0, jprfa = 0.0,
7707 jprflamb0 = 0.0;
7708 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = 0.0;
7709 G4double rnd = 0.0;
7710
7711 G4int itest = 0, sortie = 0;
7712 G4double probf = 0.0;
7713
7714 G4double ef = 0.0;
7715 G4double pc = 0.0;
7716
7717 G4double time, tauf, tau0, a0, a1, emin, ts1, tsum = 0.;
7718 G4int inttype = 0, inum = 0, gammadecay = 0, flamb0decay = 0;
7719 G4double pleva = 0.0;
7720 G4double pxeva = 0.0;
7721 G4double pyeva = 0.0;
7722 G4double pteva = 0.0;
7723 G4double etot = 0.0;
7724 G4int NbLam0 = (*NbLam0_par);
7725
7726 const G4double c = 29.9792458;
7727 const G4double mu = 931.494;
7728 const G4double mu2 = 931.494 * 931.494;
7729
7730 vx_eva = 0.;
7731 vy_eva = 0.;
7732 vz_eva = 0.;
7733 IEV_TAB_SSC = 0;
7734
7735 af = dint(A);
7736 zf = dint(Z);
7737 ee = EXC;
7738
7739 fiss->ifis = 0;
7740 opt->optimfallowed = 0;
7741 gammaemission = 0;
7742 // Initialsation
7743 time = 0.0;
7744
7745 // in sec
7746 tau0 = 1.0e-21;
7747 a0 = 0.66482503 - 3.4678935 * std::exp(-0.0104002 * ee);
7748 a1 = 5.6846e-04 + 0.00574515 * std::exp(-0.01114307 * ee);
7749 tauf = (a0 + a1 * zf * zf / std::pow(af, 0.3333333)) * tau0;
7750 //
7751post10:
7752 direct(zf, af, ee, 0., &probp, &probd, &probt, &probn, &probhe, &proba, &probg, &probimf, &probf,
7753 &problamb0, &ptotl, &sn, &sbp, &sbd, &sbt, &sbhe, &sba, &slamb0, &ecn, &ecp, &ecd, &ect,
7754 &eche, &eca, &ecg, &eclamb0, &bp, &bd, &bt, &bhe, &ba, &sp, &sd, &st, &she, &sa, &ef, &ts1,
7755 inttype, inum, itest, &sortie, &tcn, &jprfn, &jprfp, &jprfd, &jprft, &jprfhe, &jprfa,
7756 &jprflamb0, &tsum,
7757 NbLam0); //:::FIXME::: Call
7758 //
7759 // HERE THE FINAL STEPS OF THE EVAPORATION ARE CALCULATED
7760 //
7761 if (ptotl <= 0.) goto post100;
7762
7763 emin = dmin1(sba, sbhe, dmin1(sbt, sbhe, dmin1(sn, sbp, sbd)));
7764
7765 if (emin > 1e30) std::cout << "ERROR AT THE EXIT OF EVAPORA,E>1.D30,AF" << std::endl;
7766
7767 if (sortie == 1) {
7768 if (probn != 0.0) {
7769 amoins = 1.0;
7770 zmoins = 0.0;
7771 epsiln = sn + ecn;
7772 pc = std::sqrt(std::pow((1.0 + ecn / 9.3956e2), 2.) - 1.0) * 9.3956e2;
7773 gammadecay = 0;
7774 flamb0decay = 0;
7775 }
7776 else if (probp != 0.0) {
7777 amoins = 1.0;
7778 zmoins = 1.0;
7779 epsiln = sp + ecp;
7780 pc = std::sqrt(std::pow((1.0 + ecp / 9.3827e2), 2.) - 1.0) * 9.3827e2;
7781 gammadecay = 0;
7782 flamb0decay = 0;
7783 }
7784 else if (probd != 0.0) {
7785 amoins = 2.0;
7786 zmoins = 1.0;
7787 epsiln = sd + ecd;
7788 pc = std::sqrt(std::pow((1.0 + ecd / 1.875358e3), 2) - 1.0) * 1.875358e3;
7789 gammadecay = 0;
7790 flamb0decay = 0;
7791 }
7792 else if (probt != 0.0) {
7793 amoins = 3.0;
7794 zmoins = 1.0;
7795 epsiln = st + ect;
7796 pc = std::sqrt(std::pow((1.0 + ect / 2.80828e3), 2) - 1.0) * 2.80828e3;
7797 gammadecay = 0;
7798 flamb0decay = 0;
7799 }
7800 else if (probhe != 0.0) {
7801 amoins = 3.0;
7802 zmoins = 2.0;
7803 epsiln = she + eche;
7804 pc = std::sqrt(std::pow((1.0 + eche / 2.80826e3), 2) - 1.0) * 2.80826e3;
7805 gammadecay = 0;
7806 flamb0decay = 0;
7807 }
7808 else {
7809 if (proba != 0.0) {
7810 amoins = 4.0;
7811 zmoins = 2.0;
7812 epsiln = sa + eca;
7813 pc = std::sqrt(std::pow((1.0 + eca / 3.72834e3), 2) - 1.0) * 3.72834e3;
7814 gammadecay = 0;
7815 flamb0decay = 0;
7816 }
7817 }
7818 goto post99;
7819 }
7820
7821 // IRNDM = IRNDM+1;
7822 //
7823 // HERE THE NORMAL EVAPORATION CASCADE STARTS
7824 // RANDOM NUMBER FOR THE EVAPORATION
7825
7826 // random number for the evaporation
7827 x = G4AblaRandom::flat() * ptotl;
7828
7829 itest = 0;
7830 if (x < proba) {
7831 // alpha evaporation
7832 amoins = 4.0;
7833 zmoins = 2.0;
7834 epsiln = sa + eca;
7835 pc = std::sqrt(std::pow((1.0 + eca / 3.72834e3), 2) - 1.0) * 3.72834e3;
7836 gammadecay = 0;
7837 flamb0decay = 0;
7838 }
7839 else if (x < proba + probhe) {
7840 // He3 evaporation
7841 amoins = 3.0;
7842 zmoins = 2.0;
7843 epsiln = she + eche;
7844 pc = std::sqrt(std::pow((1.0 + eche / 2.80826e3), 2) - 1.0) * 2.80826e3;
7845 gammadecay = 0;
7846 flamb0decay = 0;
7847 }
7848 else if (x < proba + probhe + probt) {
7849 // triton evaporation
7850 amoins = 3.0;
7851 zmoins = 1.0;
7852 epsiln = st + ect;
7853 pc = std::sqrt(std::pow((1.0 + ect / 2.80828e3), 2) - 1.0) * 2.80828e3;
7854 gammadecay = 0;
7855 flamb0decay = 0;
7856 }
7857 else if (x < proba + probhe + probt + probd) {
7858 // deuteron evaporation
7859 amoins = 2.0;
7860 zmoins = 1.0;
7861 epsiln = sd + ecd;
7862 pc = std::sqrt(std::pow((1.0 + ecd / 1.875358e3), 2) - 1.0) * 1.875358e3;
7863 gammadecay = 0;
7864 flamb0decay = 0;
7865 }
7866 else if (x < proba + probhe + probt + probd + probp) {
7867 // proton evaporation
7868 amoins = 1.0;
7869 zmoins = 1.0;
7870 epsiln = sp + ecp;
7871 pc = std::sqrt(std::pow((1.0 + ecp / 9.3827e2), 2) - 1.0) * 9.3827e2;
7872 gammadecay = 0;
7873 flamb0decay = 0;
7874 }
7875 else if (x < proba + probhe + probt + probd + probp + probn) {
7876 // neutron evaporation
7877 amoins = 1.0;
7878 zmoins = 0.0;
7879 epsiln = sn + ecn;
7880 pc = std::sqrt(std::pow((1.0 + ecn / 9.3956e2), 2.) - 1.0) * 9.3956e2;
7881 gammadecay = 0;
7882 flamb0decay = 0;
7883 }
7884 else if (x < proba + probhe + probt + probd + probp + probn + problamb0) {
7885 // lambda0 evaporation
7886 amoins = 1.0;
7887 zmoins = 0.0;
7888 epsiln = slamb0 + eclamb0;
7889 pc = std::sqrt(std::pow((1.0 + (eclamb0) / 11.1568e2), 2.) - 1.0) * 11.1568e2;
7890 opt->nblan0 = opt->nblan0 - 1;
7891 NbLam0 = NbLam0 - 1;
7892 gammadecay = 0;
7893 flamb0decay = 1;
7894 }
7895 else if (x < proba + probhe + probt + probd + probp + probn + problamb0 + probg) {
7896 // gamma evaporation
7897 amoins = 0.0;
7898 zmoins = 0.0;
7899 epsiln = ecg;
7900 pc = ecg;
7901 gammadecay = 1;
7902 flamb0decay = 0;
7903 if (probp == 0.0 && probn == 0.0 && probd == 0.0 && probt == 0.0 && proba == 0.0
7904 && probhe == 0.0 && problamb0 == 0.0 && probimf == 0.0 && probf == 0.0)
7905 {
7906 // ee = ee-epsiln;
7907 // if(ee<=0.01) ee = 0.010;
7908 goto post100;
7909 }
7910 }
7911
7912 // CALCULATION OF THE DAUGHTER NUCLEUS
7913 //
7914post99:
7915
7916 if (gammadecay == 1 && ee <= 0.01 + epsiln) {
7917 epsiln = ee - 0.01;
7918 time = tauf + 1.;
7919 }
7920
7921 af = af - amoins;
7922 zf = zf - zmoins;
7923 ee = ee - epsiln;
7924
7925 if (ee <= 0.01) ee = 0.010;
7926
7927 if (af < 2.5) goto post100;
7928
7929 time = time + ts1;
7930
7931 // Determination of x,y,z components of momentum from known emission momentum
7932 if (flamb0decay == 1) {
7933 EV_TAB_SSC[IEV_TAB_SSC][0] = 0.;
7934 EV_TAB_SSC[IEV_TAB_SSC][1] = -2.;
7935 EV_TAB_SSC[IEV_TAB_SSC][5] = 1.;
7936 }
7937 else {
7938 EV_TAB_SSC[IEV_TAB_SSC][0] = zmoins;
7939 EV_TAB_SSC[IEV_TAB_SSC][1] = amoins;
7940 EV_TAB_SSC[IEV_TAB_SSC][5] = 0.;
7941 }
7942
7943 rnd = G4AblaRandom::flat();
7944 ctet1 = 2.0 * rnd - 1.0; // z component: uniform probability between -1 and 1
7945 stet1 = std::sqrt(1.0 - std::pow(ctet1, 2)); // component perpendicular to z
7946 rnd = G4AblaRandom::flat();
7947 phi1 = rnd * 2.0 * 3.141592654; // angle in x-y plane: uniform probability between 0 and 2*pi
7948 xcv = stet1 * std::cos(phi1); // x component
7949 ycv = stet1 * std::sin(phi1); // y component
7950 zcv = ctet1; // z component
7951 // In the CM system
7952 if (gammadecay == 0) {
7953 // Light particle
7954 G4double ETOT_LP = std::sqrt(pc * pc + amoins * amoins * mu2);
7955 if (flamb0decay == 1) ETOT_LP = std::sqrt(pc * pc + 1115.683 * 1115.683);
7956 EV_TAB_SSC[IEV_TAB_SSC][2] = c * pc * xcv / ETOT_LP;
7957 EV_TAB_SSC[IEV_TAB_SSC][3] = c * pc * ycv / ETOT_LP;
7958 EV_TAB_SSC[IEV_TAB_SSC][4] = c * pc * zcv / ETOT_LP;
7959 }
7960 else {
7961 // gamma ray
7962 EV_TAB_SSC[IEV_TAB_SSC][2] = pc * xcv;
7963 EV_TAB_SSC[IEV_TAB_SSC][3] = pc * ycv;
7964 EV_TAB_SSC[IEV_TAB_SSC][4] = pc * zcv;
7965 }
7966 lorentz_boost(vx_eva, vy_eva, vz_eva, EV_TAB_SSC[IEV_TAB_SSC][2], EV_TAB_SSC[IEV_TAB_SSC][3],
7967 EV_TAB_SSC[IEV_TAB_SSC][4], &VXOUT, &VYOUT, &VZOUT);
7968 EV_TAB_SSC[IEV_TAB_SSC][2] = VXOUT;
7969 EV_TAB_SSC[IEV_TAB_SSC][3] = VYOUT;
7970 EV_TAB_SSC[IEV_TAB_SSC][4] = VZOUT;
7971
7972 // Heavy residue
7973 if (gammadecay == 0) {
7974 G4double v2 = std::pow(EV_TAB_SSC[IEV_TAB_SSC][2], 2.)
7975 + std::pow(EV_TAB_SSC[IEV_TAB_SSC][3], 2.)
7976 + std::pow(EV_TAB_SSC[IEV_TAB_SSC][4], 2.);
7977 G4double gamma = 1.0 / std::sqrt(1.0 - v2 / (c * c));
7978 G4double etot_lp = amoins * mu * gamma;
7979 pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SSC][2] * etot_lp / c;
7980 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SSC][3] * etot_lp / c;
7981 pleva = pleva - EV_TAB_SSC[IEV_TAB_SSC][4] * etot_lp / c;
7982 }
7983 else {
7984 // in case of gammas, EV_TEMP contains momentum components and not velocity
7985 pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SSC][2];
7986 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SSC][3];
7987 pleva = pleva - EV_TAB_SSC[IEV_TAB_SSC][4];
7988 }
7989 pteva = std::sqrt(pxeva * pxeva + pyeva * pyeva);
7990 // To be checked:
7991 etot = std::sqrt(pleva * pleva + pteva * pteva + af * af * mu2);
7992 vx_eva = c * pxeva / etot; // recoil velocity components of residue due to evaporation
7993 vy_eva = c * pyeva / etot;
7994 vz_eva = c * pleva / etot;
7995
7996 IEV_TAB_SSC = IEV_TAB_SSC + 1;
7997
7998 if (time < tauf) goto post10;
7999 //
8000post100:
8001 //
8002 *A_scission = af;
8003 *Z_scission = zf;
8004 *E_scission_post = ee;
8005 *NbLam0_par = NbLam0;
8006 return;
8007}
void direct(G4double zprf, G4double a, G4double ee, G4double jprf, G4double *probp_par, G4double *probd_par, G4double *probt_par, G4double *probn_par, G4double *probhe_par, G4double *proba_par, G4double *probg_par, G4double *probimf_par, G4double *probf_par, G4double *problamb0_par, G4double *ptotl_par, G4double *sn_par, G4double *sbp_par, G4double *sbd_par, G4double *sbt_par, G4double *sbhe_par, G4double *sba_par, G4double *slamb0_par, G4double *ecn_par, G4double *ecp_par, G4double *ecd_par, G4double *ect_par, G4double *eche_par, G4double *eca_par, G4double *ecg_par, G4double *eclamb0_par, G4double *bp_par, G4double *bd_par, G4double *bt_par, G4double *bhe_par, G4double *ba_par, G4double *sp_par, G4double *sd_par, G4double *st_par, G4double *she_par, G4double *sa_par, G4double *ef_par, G4double *ts1_par, G4int, G4int inum, G4int itest, G4int *sortie, G4double *tcn, G4double *jprfn_par, G4double *jprfp_par, G4double *jprfd_par, G4double *jprft_par, G4double *jprfhe_par, G4double *jprfa_par, G4double *jprflamb0_par, G4double *tsum_par, G4int NbLam0)
Definition G4Abla.cc:3101

Referenced by fissionDistri().

◆ evapora()

void G4Abla::evapora ( G4double zprf,
G4double aprf,
G4double * ee_par,
G4double jprf,
G4double * zf_par,
G4double * af_par,
G4double * mtota_par,
G4double * vleva_par,
G4double * vxeva_par,
G4double * vyeva_par,
G4int * ff_par,
G4int * fimf_par,
G4double * fzimf,
G4double * faimf,
G4double * tkeimf_par,
G4double * jprfout,
G4int * inttype_par,
G4int * inum_par,
G4double EV_TEMP[indexpart][6],
G4int * iev_tab_temp_par,
G4int * nblam0 )

Main evaporation routine.

Definition at line 2536 of file G4Abla.cc.

2542{
2543 G4double zf = zprf;
2544 G4double af = aprf;
2545 G4double ee = (*ee_par);
2546 G4double jprf = dint(jprf_par);
2547 G4double mtota = (*mtota_par);
2548 G4double vleva = 0.;
2549 G4double vxeva = 0.;
2550 G4double vyeva = 0.;
2551 G4int ff = (*ff_par);
2552 G4int fimf = (*fimf_par);
2553 G4double tkeimf = (*tkeimf_par);
2554 G4int inttype = (*inttype_par);
2555 G4int inum = (*inum_par);
2556 G4int NbLam0 = (*NbLam0_par);
2557
2558 // 533 C
2559 // 534 C INPUT:
2560 // 535 C
2561 // 536 C ZPRF, APRF, EE(EE IS MODIFIED!), JPRF
2562 // 537 C
2563 // 538 C PROJECTILE AND TARGET PARAMETERS + CROSS SECTIONS
2564 // 539 C COMMON /ABRAMAIN/
2565 // AP,ZP,AT,ZT,EAP,BETA,BMAXNUC,CRTOT,CRNUC, 540 C R_0,R_P,R_T,
2566 // IMAX,IRNDM,PI, 541 C BFPRO,SNPRO,SPPRO,SHELL
2567 // 542 C
2568 // 543 C AP,ZP,AT,ZT - PROJECTILE AND TARGET MASSES
2569 // 544 C EAP,BETA - BEAM ENERGY PER NUCLEON, V/C
2570 // 545 C BMAXNUC - MAX. IMPACT PARAMETER FOR NUCL. REAC.
2571 // 546 C CRTOT,CRNUC - TOTAL AND NUCLEAR REACTION CROSS SECTION
2572 // 547 C R_0,R_P,R_T, - RADIUS PARAMETER, PROJECTILE+ TARGET RADII
2573 // 548 C IMAX,IRNDM,PI - MAXIMUM NUMBER OF EVENTS, DUMMY, 3.141...
2574 // 549 C BFPRO - FISSION BARRIER OF THE PROJECTILE
2575 // 550 C SNPRO - NEUTRON SEPARATION ENERGY OF THE
2576 // PROJECTILE 551 C SPPRO - PROTON " " " " "
2577 // 552 C SHELL - GROUND STATE SHELL CORRECTION
2578 // 553 C
2579 // 554
2580 // C---------------------------------------------------------------------
2581 // 555 C FISSION BARRIERS
2582 // 556 C COMMON /FB/ EFA
2583 // 557 C EFA - ARRAY OF FISSION BARRIERS
2584 // 558
2585 // C---------------------------------------------------------------------
2586 // 559 C OUTPUT:
2587 // 560 C ZF, AF, MTOTA, PLEVA, PTEVA, FF, INTTYPE, INUM
2588 // 561 C
2589 // 562 C ZF,AF - CHARGE AND MASS OF FINAL FRAGMENT AFTER
2590 // EVAPORATION 563 C MTOTA _ NUMBER OF EVAPORATED ALPHAS 564 C
2591 // PLEVA,PXEVA,PYEVA - MOMENTUM RECOIL BY EVAPORATION 565 C INTTYPE -
2592 // TYPE OF REACTION 0/1 NUCLEAR OR ELECTROMAGNETIC 566 C FF - 0/1
2593 // NO FISSION / FISSION EVENT 567 C INUM - EVENTNUMBER 568 C
2594 // ____________________________________________________________________ 569
2595 // C / 570 C / CALCUL DE LA MASSE ET CHARGE FINALES D'UNE CHAINE
2596 // D'EVAPORATION 571 C /
2597 // 572 C / PROCEDURE FOR CALCULATING THE FINAL MASS AND CHARGE VALUES
2598 // OF A
2599 // 573 C / SPECIFIC EVAPORATION CHAIN, STARTING POINT DEFINED BY
2600 // (APRF, ZPRF, 574 C / EE) 575 C / On ajoute les 3
2601 // composantes de l'impulsion (PXEVA,PYEVA,PLEVA)
2602 // 576 C / (actuellement PTEVA n'est pas correct; mauvaise
2603 // norme...) 577 C
2604 // /____________________________________________________________________
2605 // 578 C
2606 // 612 C
2607 // 613
2608 // C-----------------------------------------------------------------------
2609 // 614 C IRNDM DUMMY ARGUMENT FOR RANDOM-NUMBER
2610 // FUNCTION 615 C SORTIE LOCAL HELP VARIABLE TO END THE
2611 // EVAPORATION CHAIN 616 C ZF NUCLEAR CHARGE OF THE
2612 // FRAGMENT 617 C ZPRF NUCLEAR CHARGE OF THE
2613 // PREFRAGMENT 618 C AF MASS NUMBER OF THE FRAGMENT 619
2614 // C APRF MASS NUMBER OF THE PREFRAGMENT
2615 // 620 C EPSILN ENERGY BURNED IN EACH EVAPORATION STEP
2616 // 621 C MALPHA LOCAL MASS CONTRIBUTION TO MTOTA IN EACH
2617 // EVAPORATION 622 C STEP 623 C EE
2618 // EXCITATION ENERGY (VARIABLE) 624 C PROBP PROTON
2619 // EMISSION PROBABILITY 625 C PROBN NEUTRON EMISSION
2620 // PROBABILITY 626 C PROBA ALPHA-PARTICLE EMISSION
2621 // PROBABILITY 627 C PTOTL TOTAL EMISSION PROBABILITY 628
2622 // C E LOWEST PARTICLE-THRESHOLD ENERGY 629 C SN
2623 // NEUTRON SEPARATION ENERGY 630 C SBP PROTON
2624 // SEPARATION ENERGY PLUS EFFECTIVE COULOMB 631 C BARRIER 632 C SBA
2625 // ALPHA-PARTICLE SEPARATION ENERGY PLUS EFFECTIVE 633 C COULOMB
2626 // BARRIER 634 C BP EFFECTIVE PROTON COULOMB BARRIER
2627 // 635 C BA EFFECTIVE ALPHA COULOMB BARRIER
2628 // 636 C MTOTA TOTAL MASS OF THE EVAPORATED ALPHA
2629 // PARTICLES 637 C X UNIFORM RANDOM NUMBER FOR
2630 // NUCLEAR CHARGE
2631 // 638 C AMOINS LOCAL MASS NUMBER OF EVAPORATED PARTICLE
2632 // 639 C ZMOINS LOCAL NUCLEAR CHARGE OF EVAPORATED PARTICLE
2633 // 640 C ECP KINETIC ENERGY OF PROTON WITHOUT COULOMB
2634 // 641 C REPULSION
2635 // 642 C ECN KINETIC ENERGY OF NEUTRON
2636 // 643 C ECA KINETIC ENERGY OF ALPHA PARTICLE WITHOUT
2637 // COULOMB 644 C REPULSION 645 C PLEVA
2638 // TRANSVERSAL RECOIL MOMENTUM OF EVAPORATION 646 C PTEVA LONGITUDINAL
2639 // RECOIL MOMENTUM OF EVAPORATION 647 C FF FISSION
2640 // FLAG 648 C INTTYPE INTERACTION TYPE FLAG
2641 // 649 C RNDX RECOIL MOMENTUM IN X-DIRECTION IN A
2642 // SINGLE STEP 650 C RNDY RECOIL MOMENTUM IN Y-DIRECTION
2643 // IN A SINGLE STEP 651 C RNDZ RECOIL MOMENTUM IN
2644 // Z-DIRECTION IN A SINGLE STEP
2645 // 652 C RNDN NORMALIZATION OF RECOIL MOMENTUM FOR
2646 // EACH STEP 653
2647 // C-----------------------------------------------------------------------
2648 // 654 C
2649 //
2650 G4double epsiln = 0.0, probp = 0.0, probd = 0.0, probt = 0.0, probn = 0.0, probhe = 0.0,
2651 proba = 0.0, probg = 0.0, probimf = 0.0, problamb0 = 0.0, ptotl = 0.0, e = 0.0,
2652 tcn = 0.0;
2653 G4double sn = 0.0, sbp = 0.0, sbd = 0.0, sbt = 0.0, sbhe = 0.0, sba = 0.0, x = 0.0, amoins = 0.0,
2654 zmoins = 0.0, sp = 0.0, sd = 0.0, st = 0.0, she = 0.0, sa = 0.0, slamb0 = 0.0;
2655 G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, ect = 0.0, eche = 0.0, eca = 0.0, ecg = 0.0,
2656 eclamb0 = 0.0, bp = 0.0, bd = 0.0, bt = 0.0, bhe = 0.0, ba = 0.0;
2657 G4double zimf = 0.0, aimf = 0.0, bimf = 0.0, sbimf = 0.0, timf = 0.0;
2658 G4int itest = 0, sortie = 0;
2659 G4double probf = 0.0;
2660 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = 0.0;
2661 G4double rnd = 0.0;
2662 G4double ef = 0.0;
2663 G4double ts1 = 0.0;
2664 G4int fgamma = 0, gammadecay = 0, flamb0decay = 0;
2665 G4double pc = 0.0, malpha = 0.0;
2666 G4double jprfn = 0.0, jprfp = 0.0, jprfd = 0.0, jprft = 0.0, jprfhe = 0.0, jprfa = 0.0,
2667 jprflamb0 = 0.0;
2668 G4double tsum = 0.0;
2669 G4int twon;
2670
2671 const G4double c = 29.9792458;
2672 const G4double mu = 931.494;
2673 const G4double mu2 = 931.494 * 931.494;
2674
2675 G4double pleva = 0.0;
2676 G4double pxeva = 0.0;
2677 G4double pyeva = 0.0;
2678 G4int IEV_TAB_TEMP = 0;
2679
2680 for (G4int I1 = 0; I1 < indexpart; I1++)
2681 for (G4int I2 = 0; I2 < 6; I2++)
2682 EV_TEMP[I1][I2] = 0.0;
2683 //
2684 ff = 0;
2685 itest = 0;
2686 //
2687evapora10:
2688 //
2689 // calculation of the probabilities for the different decay channels
2690 // plus separation energies and kinetic energies of the particles
2691 //
2692 if (ee < 0. || zf < 3.) goto evapora100;
2693 direct(zf, af, ee, jprf, &probp, &probd, &probt, &probn, &probhe, &proba, &probg, &probimf,
2694 &probf, &problamb0, &ptotl, &sn, &sbp, &sbd, &sbt, &sbhe, &sba, &slamb0, &ecn, &ecp, &ecd,
2695 &ect, &eche, &eca, &ecg, &eclamb0, &bp, &bd, &bt, &bhe, &ba, &sp, &sd, &st, &she, &sa, &ef,
2696 &ts1, inttype, inum, itest, &sortie, &tcn, &jprfn, &jprfp, &jprfd, &jprft, &jprfhe, &jprfa,
2697 &jprflamb0, &tsum, NbLam0);
2698 //
2699 // HERE THE FINAL STEPS OF THE EVAPORATION ARE CALCULATED
2700 //
2701 if (ptotl == 0.0) goto evapora100;
2702
2703 e = dmin1(sba, sbhe, dmin1(sbt, sbhe, dmin1(sn, sbp, sbd)));
2704
2705 if (e > 1e30)
2706 std::cout << "ERROR AT THE EXIT OF EVAPORA,E>1.D30,AF=" << af << " ZF=" << zf << std::endl;
2707
2708 if (sortie == 1) {
2709 if (probn != 0.0) {
2710 amoins = 1.0;
2711 zmoins = 0.0;
2712 epsiln = sn + ecn;
2713 pc = std::sqrt(std::pow((1.0 + (ecn) / 9.3956e2), 2.) - 1.0) * 9.3956e2;
2714 malpha = 0.0;
2715 fgamma = 0;
2716 fimf = 0;
2717 flamb0decay = 0;
2718 gammadecay = 0;
2719 }
2720 else if (probp != 0.0) {
2721 amoins = 1.0;
2722 zmoins = 1.0;
2723 epsiln = sp + ecp;
2724 pc = std::sqrt(std::pow((1.0 + ecp / 9.3827e2), 2.) - 1.0) * 9.3827e2;
2725 malpha = 0.0;
2726 fgamma = 0;
2727 fimf = 0;
2728 flamb0decay = 0;
2729 gammadecay = 0;
2730 }
2731 else if (probd != 0.0) {
2732 amoins = 2.0;
2733 zmoins = 1.0;
2734 epsiln = sd + ecd;
2735 pc = std::sqrt(std::pow((1.0 + ecd / 1.875358e3), 2) - 1.0) * 1.875358e3;
2736 malpha = 0.0;
2737 fgamma = 0;
2738 fimf = 0;
2739 flamb0decay = 0;
2740 gammadecay = 0;
2741 }
2742 else if (probt != 0.0) {
2743 amoins = 3.0;
2744 zmoins = 1.0;
2745 epsiln = st + ect;
2746 pc = std::sqrt(std::pow((1.0 + ect / 2.80828e3), 2) - 1.0) * 2.80828e3;
2747 malpha = 0.0;
2748 fgamma = 0;
2749 fimf = 0;
2750 flamb0decay = 0;
2751 gammadecay = 0;
2752 }
2753 else if (probhe != 0.0) {
2754 amoins = 3.0;
2755 zmoins = 2.0;
2756 epsiln = she + eche;
2757 pc = std::sqrt(std::pow((1.0 + eche / 2.80826e3), 2) - 1.0) * 2.80826e3;
2758 malpha = 0.0;
2759 fgamma = 0;
2760 fimf = 0;
2761 flamb0decay = 0;
2762 gammadecay = 0;
2763 }
2764 else {
2765 if (proba != 0.0) {
2766 amoins = 4.0;
2767 zmoins = 2.0;
2768 epsiln = sa + eca;
2769 pc = std::sqrt(std::pow((1.0 + eca / 3.72834e3), 2) - 1.0) * 3.72834e3;
2770 malpha = 4.0;
2771 fgamma = 0;
2772 fimf = 0;
2773 flamb0decay = 0;
2774 gammadecay = 0;
2775 }
2776 }
2777 goto direct99;
2778 }
2779
2780 // here the normal evaporation cascade starts
2781
2782 // random number for the evaporation
2783 x = G4AblaRandom::flat() * ptotl;
2784
2785 itest = 0;
2786 if (x < proba) {
2787 // alpha evaporation
2788 amoins = 4.0;
2789 zmoins = 2.0;
2790 epsiln = sa + eca;
2791 pc = std::sqrt(std::pow((1.0 + eca / 3.72834e3), 2) - 1.0) * 3.72834e3;
2792 malpha = 4.0;
2793 fgamma = 0;
2794 fimf = 0;
2795 ff = 0;
2796 flamb0decay = 0;
2797 gammadecay = 0;
2798 jprf = jprfa;
2799 }
2800 else if (x < proba + probhe) {
2801 // He3 evaporation
2802 amoins = 3.0;
2803 zmoins = 2.0;
2804 epsiln = she + eche;
2805 pc = std::sqrt(std::pow((1.0 + eche / 2.80826e3), 2) - 1.0) * 2.80826e3;
2806 malpha = 0.0;
2807 fgamma = 0;
2808 fimf = 0;
2809 ff = 0;
2810 flamb0decay = 0;
2811 gammadecay = 0;
2812 jprf = jprfhe;
2813 }
2814 else if (x < proba + probhe + probt) {
2815 // triton evaporation
2816 amoins = 3.0;
2817 zmoins = 1.0;
2818 epsiln = st + ect;
2819 pc = std::sqrt(std::pow((1.0 + ect / 2.80828e3), 2) - 1.0) * 2.80828e3;
2820 malpha = 0.0;
2821 fgamma = 0;
2822 fimf = 0;
2823 ff = 0;
2824 flamb0decay = 0;
2825 gammadecay = 0;
2826 jprf = jprft;
2827 }
2828 else if (x < proba + probhe + probt + probd) {
2829 // deuteron evaporation
2830 amoins = 2.0;
2831 zmoins = 1.0;
2832 epsiln = sd + ecd;
2833 pc = std::sqrt(std::pow((1.0 + ecd / 1.875358e3), 2) - 1.0) * 1.875358e3;
2834 malpha = 0.0;
2835 fgamma = 0;
2836 fimf = 0;
2837 ff = 0;
2838 flamb0decay = 0;
2839 gammadecay = 0;
2840 jprf = jprfd;
2841 }
2842 else if (x < proba + probhe + probt + probd + probp) {
2843 // proton evaporation
2844 amoins = 1.0;
2845 zmoins = 1.0;
2846 epsiln = sp + ecp;
2847 pc = std::sqrt(std::pow((1.0 + ecp / 9.3827e2), 2) - 1.0) * 9.3827e2;
2848 malpha = 0.0;
2849 fgamma = 0;
2850 fimf = 0;
2851 ff = 0;
2852 flamb0decay = 0;
2853 gammadecay = 0;
2854 jprf = jprfp;
2855 }
2856 else if (x < proba + probhe + probt + probd + probp + probn) {
2857 // neutron evaporation
2858 amoins = 1.0;
2859 zmoins = 0.0;
2860 epsiln = sn + ecn;
2861 pc = std::sqrt(std::pow((1.0 + (ecn) / 9.3956e2), 2.) - 1.0) * 9.3956e2;
2862 malpha = 0.0;
2863 fgamma = 0;
2864 fimf = 0;
2865 ff = 0;
2866 flamb0decay = 0;
2867 gammadecay = 0;
2868 jprf = jprfn;
2869 }
2870 else if (x < proba + probhe + probt + probd + probp + probn + problamb0) {
2871 // lambda0 evaporation
2872 amoins = 1.0;
2873 zmoins = 0.0;
2874 epsiln = slamb0 + eclamb0;
2875 pc = std::sqrt(std::pow((1.0 + (eclamb0) / 11.1568e2), 2.) - 1.0) * 11.1568e2;
2876 malpha = 0.0;
2877 fgamma = 0;
2878 fimf = 0;
2879 ff = 0;
2880 flamb0decay = 1;
2881 opt->nblan0 = opt->nblan0 - 1;
2882 NbLam0 = NbLam0 - 1;
2883 gammadecay = 0;
2884 jprf = jprflamb0;
2885 }
2886 else if (x < proba + probhe + probt + probd + probp + probn + problamb0 + probg) {
2887 // gamma evaporation
2888 amoins = 0.0;
2889 zmoins = 0.0;
2890 epsiln = ecg;
2891 pc = ecg;
2892 malpha = 0.0;
2893 flamb0decay = 0;
2894 gammadecay = 1;
2895 // Next IF command is to shorten the calculations when gamma-emission is the
2896 // only possible channel
2897 if (probp == 0.0 && probn == 0.0 && probd == 0.0 && probt == 0.0 && proba == 0.0
2898 && probhe == 0.0 && problamb0 == 0.0 && probimf == 0.0 && probf == 0.0)
2899 fgamma = 1;
2900 fimf = 0;
2901 ff = 0;
2902 }
2903 else if (x < proba + probhe + probt + probd + probp + probn + problamb0 + probg + probimf) {
2904 // imf evaporation
2905 // AIMF and ZIMF obtained from complete procedure (integration over all
2906 // possible Gamma(IMF) and then randomly picked
2907
2908 G4int iloop = 0;
2909 dir1973:
2910 imf(af, zf, tcn, ee, &zimf, &aimf, &bimf, &sbimf, &timf, jprf);
2911 iloop++;
2912 if (iloop > 100) std::cout << "Problem in EVAPORA: IMF called > 100 times" << std::endl;
2913 if (zimf >= (zf - 2.0)) goto dir1973;
2914 if (zimf > zf / 2.0) {
2915 zimf = zf - zimf;
2916 aimf = af - aimf;
2917 }
2918 // These cases should in principle never happen
2919 if (zimf == 0.0 || aimf == 0.0 || sbimf > ee)
2920 std::cout << "warning: Look in EVAPORA CALL IMF" << std::endl;
2921
2922 // I sample the total kinetic energy consumed by the system of two nuclei
2923 // from the distribution determined with the temperature at saddle point
2924 // TKEIMF is the kinetic energy in the centre of mass of IMF and its partner
2925
2926 G4int ii = 0;
2927 dir1235:
2928 tkeimf = fmaxhaz(timf);
2929 ii++;
2930 if (ii > 100) {
2931 tkeimf = min(2.0 * timf, ee - sbimf);
2932 goto dir1000;
2933 }
2934 if (tkeimf <= 0.0) goto dir1235;
2935 if (tkeimf > (ee - sbimf) && timf > 0.5) goto dir1235;
2936 dir1000:
2937 tkeimf = tkeimf + bimf;
2938
2939 amoins = aimf;
2940 zmoins = zimf;
2941 epsiln = (sbimf - bimf) + tkeimf;
2942 pc = 0.0;
2943 malpha = 0.0;
2944 fgamma = 0;
2945 fimf = 1;
2946 ff = 0;
2947 flamb0decay = 0;
2948 gammadecay = 0;
2949 }
2950 else {
2951 // fission
2952 // in case of fission-events the fragment nucleus is the mother nucleus
2953 // before fission occurs with excitation energy above the fis.- barrier.
2954 // fission fragment mass distribution is calulated in subroutine fisdis
2955
2956 amoins = 0.0;
2957 zmoins = 0.0;
2958 epsiln = ef;
2959 //
2960 malpha = 0.0;
2961 pc = 0.0;
2962 ff = 1;
2963 fimf = 0;
2964 fgamma = 0;
2965 flamb0decay = 0;
2966 gammadecay = 0;
2967 }
2968 //
2969direct99:
2970 if (ee <= 0.01) ee = 0.01;
2971 // Davide Mancusi (DM) - 2010
2972 if (gammadecay == 1 && ee < (epsiln + 0.010)) {
2973 epsiln = ee - 0.010;
2974 // fgamma = 1;
2975 }
2976
2977 if (epsiln < 0.0) {
2978 std::cout << "***WARNING epsilon<0***" << std::endl;
2979 // epsiln=0.;
2980 // PRINT*,IDECAYMODE,IDNINT(AF),IDNINT(ZF),EE,EPSILN
2981 }
2982 // calculation of the daughter nucleus
2983 af = af - amoins;
2984 zf = zf - zmoins;
2985 ee = ee - epsiln;
2986 if (ee <= 0.01) ee = 0.01;
2987 mtota = mtota + malpha;
2988
2989 // if(amoins==2 && zmoins==0)std::cout << ee << std::endl;
2990
2991secondneutron:
2992 if (amoins == 2 && zmoins == 0) {
2993 twon = 1;
2994 amoins = 1;
2995 }
2996 else {
2997 twon = 0;
2998 }
2999
3000 // Determination of x,y,z components of momentum from known emission momentum
3001 // PC
3002 if (ff == 0 && fimf == 0) {
3003 //
3004 if (flamb0decay == 1) {
3005 EV_TEMP[IEV_TAB_TEMP][0] = 0.;
3006 EV_TEMP[IEV_TAB_TEMP][1] = -2;
3007 EV_TEMP[IEV_TAB_TEMP][5] = 1.;
3008 }
3009 else {
3010 EV_TEMP[IEV_TAB_TEMP][0] = zmoins;
3011 EV_TEMP[IEV_TAB_TEMP][1] = amoins;
3012 EV_TEMP[IEV_TAB_TEMP][5] = 0.;
3013 }
3014 rnd = G4AblaRandom::flat();
3015 ctet1 = 2.0 * rnd - 1.0; // z component: uniform probability between -1 and 1
3016 stet1 = std::sqrt(1.0 - std::pow(ctet1, 2)); // component perpendicular to z
3017 rnd = G4AblaRandom::flat();
3018 phi1 = rnd * 2.0 * 3.141592654; // angle in x-y plane: uniform probability
3019 // between 0 and 2*pi
3020 G4double xcv = stet1 * std::cos(phi1); // x component
3021 G4double ycv = stet1 * std::sin(phi1); // y component
3022 G4double zcv = ctet1; // z component
3023 // In the CM system
3024 if (gammadecay == 0) {
3025 // Light particle
3026 G4double ETOT_LP = std::sqrt(pc * pc + amoins * amoins * mu2);
3027 if (flamb0decay == 1) ETOT_LP = std::sqrt(pc * pc + 1115.683 * 1115.683);
3028 EV_TEMP[IEV_TAB_TEMP][2] = c * pc * xcv / ETOT_LP;
3029 EV_TEMP[IEV_TAB_TEMP][3] = c * pc * ycv / ETOT_LP;
3030 EV_TEMP[IEV_TAB_TEMP][4] = c * pc * zcv / ETOT_LP;
3031 }
3032 else {
3033 // gamma ray
3034 EV_TEMP[IEV_TAB_TEMP][2] = pc * xcv;
3035 EV_TEMP[IEV_TAB_TEMP][3] = pc * ycv;
3036 EV_TEMP[IEV_TAB_TEMP][4] = pc * zcv;
3037 }
3038 G4double VXOUT = 0., VYOUT = 0., VZOUT = 0.;
3039 lorentz_boost(vxeva, vyeva, vleva, EV_TEMP[IEV_TAB_TEMP][2], EV_TEMP[IEV_TAB_TEMP][3],
3040 EV_TEMP[IEV_TAB_TEMP][4], &VXOUT, &VYOUT, &VZOUT);
3041 EV_TEMP[IEV_TAB_TEMP][2] = VXOUT;
3042 EV_TEMP[IEV_TAB_TEMP][3] = VYOUT;
3043 EV_TEMP[IEV_TAB_TEMP][4] = VZOUT;
3044 // Heavy residue
3045 if (gammadecay == 0) {
3046 G4double v2 = std::pow(EV_TEMP[IEV_TAB_TEMP][2], 2.) + std::pow(EV_TEMP[IEV_TAB_TEMP][3], 2.)
3047 + std::pow(EV_TEMP[IEV_TAB_TEMP][4], 2.);
3048 G4double gamma = 1.0 / std::sqrt(1.0 - v2 / (c * c));
3049 G4double etot_lp = amoins * mu * gamma;
3050 pxeva = pxeva - EV_TEMP[IEV_TAB_TEMP][2] * etot_lp / c;
3051 pyeva = pyeva - EV_TEMP[IEV_TAB_TEMP][3] * etot_lp / c;
3052 pleva = pleva - EV_TEMP[IEV_TAB_TEMP][4] * etot_lp / c;
3053 }
3054 else {
3055 // in case of gammas, EV_TEMP contains momentum components and not
3056 // velocity
3057 pxeva = pxeva - EV_TEMP[IEV_TAB_TEMP][2];
3058 pyeva = pyeva - EV_TEMP[IEV_TAB_TEMP][3];
3059 pleva = pleva - EV_TEMP[IEV_TAB_TEMP][4];
3060 }
3061 G4double pteva = std::sqrt(pxeva * pxeva + pyeva * pyeva);
3062 // To be checked:
3063 G4double etot = std::sqrt(pleva * pleva + pteva * pteva + af * af * mu2);
3064 vxeva = c * pxeva / etot; // recoil velocity components of residue due to evaporation
3065 vyeva = c * pyeva / etot;
3066 vleva = c * pleva / etot;
3067 IEV_TAB_TEMP = IEV_TAB_TEMP + 1;
3068 }
3069
3070 if (twon == 1) {
3071 goto secondneutron;
3072 }
3073
3074 // condition for end of evaporation
3075 if (zf < 3. || (ff == 1) || (fgamma == 1) || (fimf == 1)) {
3076 goto evapora100;
3077 }
3078 goto evapora10;
3079
3080evapora100:
3081 (*zf_par) = zf;
3082 (*af_par) = af;
3083 (*ee_par) = ee;
3084 (*faimf) = aimf;
3085 (*fzimf) = zimf;
3086 (*jprfout) = jprf;
3087 (*tkeimf_par) = tkeimf;
3088 (*mtota_par) = mtota;
3089 (*vleva_par) = vleva;
3090 (*vxeva_par) = vxeva;
3091 (*vyeva_par) = vyeva;
3092 (*ff_par) = ff;
3093 (*fimf_par) = fimf;
3094 (*inttype_par) = inttype;
3095 (*iev_tab_temp_par) = IEV_TAB_TEMP;
3096 (*inum_par) = inum;
3097 (*NbLam0_par) = NbLam0;
3098 return;
3099}
void imf(G4double ACN, G4double ZCN, G4double TEMP, G4double EE, G4double *ZIMF, G4double *AIMF, G4double *BIMF, G4double *SBIMF, G4double *TIMF, G4double JPRF)
Definition G4Abla.cc:7295
G4double fmaxhaz(G4double T)
Definition G4Abla.cc:6030

Referenced by DeexcitationAblaxx(), and fission().

◆ even_odd()

void G4Abla::even_odd ( G4double r_origin,
G4double r_even_odd,
G4int & i_out )

Calculation of even-odd effects in fission.

Definition at line 9139 of file G4Abla.cc.

9140{
9141 // Procedure to calculate I_OUT from R_IN in a way that
9142 // on the average a flat distribution in R_IN results in a
9143 // fluctuating distribution in I_OUT with an even-odd effect as
9144 // given by R_EVEN_ODD
9145
9146 // /* ------------------------------------------------------------ */
9147 // /* EXAMPLES : */
9148 // /* ------------------------------------------------------------ */
9149 // /* If R_EVEN_ODD = 0 : */
9150 // /* CEIL(R_IN) ---- */
9151 // /* */
9152 // /* R_IN -> */
9153 // /* (somewhere in between CEIL(R_IN) and FLOOR(R_IN)) */ */
9154 // /* */
9155 // /* FLOOR(R_IN) ---- --> I_OUT */
9156 // /* ------------------------------------------------------------ */
9157 // /* If R_EVEN_ODD > 0 : */
9158 // /* The interval for the above treatment is */
9159 // /* larger for FLOOR(R_IN) = even and */
9160 // /* smaller for FLOOR(R_IN) = odd */
9161 // /* For R_EVEN_ODD < 0 : just opposite treatment */
9162 // /* ------------------------------------------------------------ */
9163
9164 // /* ------------------------------------------------------------ */
9165 // /* On input: R_ORIGIN nuclear charge (real number) */
9166 // /* R_EVEN_ODD requested even-odd effect */
9167 // /* Intermediate quantity: R_IN = R_ORIGIN + 0.5 */
9168 // /* On output: I_OUT nuclear charge (integer) */
9169 // /* ------------------------------------------------------------ */
9170
9171 // G4double R_ORIGIN,R_IN,R_EVEN_ODD,R_REST,R_HELP;
9172 G4double r_in = 0.0, r_rest = 0.0, r_help = 0.0;
9173 G4double r_floor = 0.0;
9174 G4double r_middle = 0.0;
9175 // G4int I_OUT,N_FLOOR;
9176 G4int n_floor = 0;
9177
9178 r_in = r_origin + 0.5;
9179 r_floor = (G4double)((G4int)(r_in));
9180 if (r_even_odd < 0.001) {
9181 i_out = (G4int)(r_floor);
9182 }
9183 else {
9184 r_rest = r_in - r_floor;
9185 r_middle = r_floor + 0.5;
9186 n_floor = (G4int)(r_floor);
9187 if (n_floor % 2 == 0) {
9188 // even before modif.
9189 r_help = r_middle + (r_rest - 0.5) * (1.0 - r_even_odd);
9190 }
9191 else {
9192 // odd before modification
9193 r_help = r_middle + (r_rest - 0.5) * (1.0 + r_even_odd);
9194 }
9195 i_out = (G4int)(r_help);
9196 }
9197}

Referenced by fissionDistri().

◆ f()

G4double G4Abla::f ( G4double E)

FONCTION INTEGRALE DE FD(E)

Definition at line 6024 of file G4Abla.cc.

6025{
6026 // FONCTION INTEGRALE DE FD(E)
6027 return (1.0 - (E + 1.0) * std::exp(-E));
6028}

Referenced by fmaxhaz_old().

◆ fd()

G4double G4Abla::fd ( G4double E)

DISTRIBUTION DE MAXWELL

Definition at line 6017 of file G4Abla.cc.

6018{
6019 // DISTRIBUTION DE MAXWELL
6020
6021 return (E * std::exp(-E));
6022}

Referenced by fmaxhaz_old().

◆ FillData()

void G4Abla::FillData ( G4int IMULTBU,
G4int IEV_TAB )

Fill the data array for INCL

Definition at line 6169 of file G4Abla.cc.

6170{
6171 const G4double c = 29.9792458;
6172 const G4double fmp = 938.27231, fmn = 939.56563, fml = 1115.683;
6173
6174 varntp->ntrack = IMULTBU + IEV_TAB;
6175
6176 for (G4int i = 0; i < IMULTBU; i++) {
6177 G4int iz = nint(BU_TAB[i][7]);
6178 G4int ia = nint(BU_TAB[i][8]);
6179 G4int is = nint(BU_TAB[i][11]);
6180
6181 Ainit = Ainit + ia;
6182 Zinit = Zinit + iz;
6183 Sinit = Sinit - is;
6184
6185 varntp->zvv.push_back(iz);
6186 varntp->avv.push_back(ia);
6187 varntp->svv.push_back(-1 * is);
6188 varntp->itypcasc.push_back(0);
6189
6190 G4double v2 =
6191 BU_TAB[i][4] * BU_TAB[i][4] + BU_TAB[i][5] * BU_TAB[i][5] + BU_TAB[i][6] * BU_TAB[i][6];
6192 G4double gamma = std::sqrt(1.0 - v2 / (c * c));
6193 G4double avvmass = iz * fmp + (ia - iz - is) * fmn + is * fml + eflmac(ia, iz, 0, 3);
6194 G4double etot = avvmass / gamma;
6195 varntp->pxlab.push_back(etot * BU_TAB[i][4] / c);
6196 varntp->pylab.push_back(etot * BU_TAB[i][5] / c);
6197 varntp->pzlab.push_back(etot * BU_TAB[i][6] / c);
6198 varntp->enerj.push_back(etot - avvmass);
6199 }
6200
6201 for (G4int i = 0; i < IEV_TAB; i++) {
6202 G4int iz = nint(EV_TAB[i][0]);
6203 G4int ia = nint(EV_TAB[i][1]);
6204 G4int is = EV_TAB[i][5];
6205
6206 varntp->itypcasc.push_back(0);
6207
6208 if (ia > 0) { // normal particles
6209 varntp->zvv.push_back(iz);
6210 varntp->avv.push_back(ia);
6211 varntp->svv.push_back(-1 * is);
6212 Ainit = Ainit + ia;
6213 Zinit = Zinit + iz;
6214 Sinit = Sinit - is;
6215 G4double v2 =
6216 EV_TAB[i][2] * EV_TAB[i][2] + EV_TAB[i][3] * EV_TAB[i][3] + EV_TAB[i][4] * EV_TAB[i][4];
6217 G4double gamma = std::sqrt(1.0 - v2 / (c * c));
6218 G4double avvmass = iz * fmp + (ia - iz - is) * fmn + is * fml + eflmac(ia, iz, 0, 3);
6219 G4double etot = avvmass / gamma;
6220 varntp->pxlab.push_back(etot * EV_TAB[i][2] / c);
6221 varntp->pylab.push_back(etot * EV_TAB[i][3] / c);
6222 varntp->pzlab.push_back(etot * EV_TAB[i][4] / c);
6223 varntp->enerj.push_back(etot - avvmass);
6224 }
6225 else if (ia == -2) { // lambda0
6226 varntp->zvv.push_back(0);
6227 varntp->avv.push_back(1);
6228 varntp->svv.push_back(-1);
6229 Ainit = Ainit + 1;
6230 Sinit = Sinit - 1;
6231 G4double v2 =
6232 EV_TAB[i][2] * EV_TAB[i][2] + EV_TAB[i][3] * EV_TAB[i][3] + EV_TAB[i][4] * EV_TAB[i][4];
6233 G4double gamma = std::sqrt(1.0 - v2 / (c * c));
6234 G4double avvmass = fml;
6235 G4double etot = avvmass / gamma;
6236 varntp->pxlab.push_back(etot * EV_TAB[i][2] / c);
6237 varntp->pylab.push_back(etot * EV_TAB[i][3] / c);
6238 varntp->pzlab.push_back(etot * EV_TAB[i][4] / c);
6239 varntp->enerj.push_back(etot - avvmass);
6240 }
6241 else { // photons
6242 varntp->zvv.push_back(iz);
6243 varntp->avv.push_back(ia);
6244 varntp->svv.push_back(0);
6245 Ainit = Ainit + ia;
6246 Zinit = Zinit + iz;
6247 Sinit = Sinit - is;
6248 varntp->pxlab.push_back(EV_TAB[i][2]);
6249 varntp->pylab.push_back(EV_TAB[i][3]);
6250 varntp->pzlab.push_back(EV_TAB[i][4]);
6251 varntp->enerj.push_back(std::sqrt(EV_TAB[i][2] * EV_TAB[i][2] + EV_TAB[i][3] * EV_TAB[i][3]
6252 + EV_TAB[i][4] * EV_TAB[i][4]));
6253 }
6254 }
6255 //
6256 return;
6257}
G4int nint(G4double number)
Definition G4Abla.cc:6329

Referenced by DeexcitationAblaxx().

◆ fissility()

G4double G4Abla::fissility ( G4int a,
G4int z,
G4int ny,
G4double sn,
G4double slam,
G4int optxfis )

Calculation of fissility parameter

Definition at line 2479 of file G4Abla.cc.

2480{
2481 // CALCULATION OF FISSILITY PARAMETER
2482 //
2483 // INPUT: A,Z INTEGER MASS & CHARGE OF NUCLEUS
2484 // OPTXFIS = 0 : MYERS, SWIATECKI
2485 // 1 : DAHLINGER
2486 // 2 : ANDREYEV
2487
2488 G4double aa = 0.0, zz = 0.0, i = 0.0, z2a, C_S, R, W, G, G1, G2, A_CC;
2489 G4double fissilityResult = 0.0;
2490
2491 aa = G4double(a);
2492 zz = G4double(z);
2493 i = G4double(a - 2 * z) / aa;
2494 z2a = zz * zz / aa - ny * (1115. - 939. + sn - slam) / (0.7053 * std::pow(a, 2. / 3.));
2495
2496 // myers & swiatecki droplet modell
2497 if (optxfis == 0) { // then
2498 fissilityResult = std::pow(zz, 2) / aa / 50.8830e0 / (1.0e0 - 1.7826e0 * std::pow(i, 2));
2499 }
2500
2501 if (optxfis == 1) {
2502 // dahlinger fit:
2503 fissilityResult =
2504 std::pow(zz, 2) / aa
2505 * std::pow((49.22e0 * (1.e0 - 0.3803e0 * std::pow(i, 2) - 20.489e0 * std::pow(i, 4))), (-1));
2506 }
2507
2508 if (optxfis == 2) {
2509 // dubna fit:
2510 fissilityResult = std::pow(zz, 2) / aa / (48.e0 * (1.e0 - 17.22e0 * std::pow(i, 4)));
2511 }
2512
2513 if (optxfis == 3) {
2514 // Fissiilty is calculated according to FRLDM, see Sierk, PRC 1984.
2515 C_S = 21.13 * (1.0 - 2.3 * i * i);
2516 R = 1.16 * std::pow(aa, 1.0 / 3.0);
2517 W = 0.704 / R;
2518 G1 = 1.0 - 15.0 / 8.0 * W + 21.0 / 8.0 * W * W * W;
2519 G2 = 1.0 + 9.0 / 2.0 * W + 7.0 * W * W + 7.0 / 2.0 * W * W * W;
2520 G = 1.0 - 5.0 * W * W * (G1 - 3.0 / 4.0 * G2 * std::exp(-2.0 / W));
2521 A_CC = 3.0 / 5.0 * 1.44 * G / 1.16;
2522 fissilityResult = z2a * A_CC / (2.0 * C_S);
2523 }
2524
2525 if (fissilityResult > 1.0) {
2526 fissilityResult = 1.0;
2527 }
2528
2529 if (fissilityResult < 0.0) {
2530 fissilityResult = 0.0;
2531 }
2532
2533 return fissilityResult;
2534}
#define W
Definition crc32.c:85

Referenced by direct().

◆ fission()

void G4Abla::fission ( G4double AF,
G4double ZF,
G4double EE,
G4double JPRF,
G4double * VX1_FISSION,
G4double * VY1_FISSION,
G4double * VZ1_FISSION,
G4double * VX2_FISSION,
G4double * VY2_FISSION,
G4double * VZ2_FISSION,
G4int * ZFP1,
G4int * AFP1,
G4int * SFP1,
G4int * ZFP2,
G4int * AFP2,
G4int * SFP2,
G4int * imode,
G4double * VX_EVA_SC,
G4double * VY_EVA_SC,
G4double * VZ_EVA_SC,
G4double EV_TEMP[indexpart][6],
G4int * IEV_TAB_FIS,
G4int * NbLam0 )

Calculation of fission and the particle emission probabilities after fission.

Definition at line 10190 of file G4Abla.cc.

10197{
10198 ///
10199 G4double EFF1 = 0., EFF2 = 0., VFF1 = 0., VFF2 = 0., AF1 = 0., ZF1 = 0., AF2 = 0., ZF2 = 0.,
10200 AFF1 = 0., ZFF1 = 0., AFF2 = 0., ZFF2 = 0., vz1_eva = 0., vx1_eva = 0., vy1_eva = 0.,
10201 vz2_eva = 0., vx2_eva = 0., vy2_eva = 0., vx_eva_sc = 0., vy_eva_sc = 0., vz_eva_sc = 0.,
10202 VXOUT = 0., VYOUT = 0., VZOUT = 0., VX2OUT = 0., VY2OUT = 0., VZ2OUT = 0.;
10203 G4int IEV_TAB_FIS = 0, IEV_TAB_TEMP = 0;
10204 G4double EV_TEMP1[indexpart][6], EV_TEMP2[indexpart][6], mtota = 0.;
10205 G4int inttype = 0, inum = 0;
10206 IEV_TAB_SSC = 0;
10207 (*imode_par) = 0;
10208 G4int NbLam0 = (*NbLam0_par);
10209
10210 for (G4int I1 = 0; I1 < indexpart; I1++)
10211 for (G4int I2 = 0; I2 < 6; I2++) {
10212 EV_TEMP[I1][I2] = 0.0;
10213 EV_TEMP1[I1][I2] = 0.0;
10214 EV_TEMP2[I1][I2] = 0.0;
10215 }
10216
10217 G4double et =
10218 EE - JPRF * JPRF * 197. * 197. / (2. * 0.4 * 931. * std::pow(AF, 5.0 / 3.0) * 1.16 * 1.16);
10219
10220 fissionDistri(AF, ZF, et, AF1, ZF1, EFF1, VFF1, AF2, ZF2, EFF2, VFF2, vx_eva_sc, vy_eva_sc,
10221 vz_eva_sc, &NbLam0);
10222
10223 // Lambda particles
10224 G4int NbLam1 = 0;
10225 G4int NbLam2 = 0;
10226 G4double pbH = (AF1 - ZF1) / (AF1 - ZF1 + AF2 - ZF2);
10227 for (G4int i = 0; i < NbLam0; i++) {
10228 if (G4AblaRandom::flat() < pbH) {
10229 NbLam1++;
10230 }
10231 else {
10232 NbLam2++;
10233 }
10234 }
10235 // Copy of the evaporated particles from saddle to scission
10236 for (G4int IJ = 0; IJ < IEV_TAB_SSC; IJ++) {
10237 EV_TEMP[IJ][0] = EV_TAB_SSC[IJ][0];
10238 EV_TEMP[IJ][1] = EV_TAB_SSC[IJ][1];
10239 EV_TEMP[IJ][2] = EV_TAB_SSC[IJ][2];
10240 EV_TEMP[IJ][3] = EV_TAB_SSC[IJ][3];
10241 EV_TEMP[IJ][4] = EV_TAB_SSC[IJ][4];
10242 EV_TEMP[IJ][5] = EV_TAB_SSC[IJ][5];
10243 }
10244 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_SSC;
10245
10246 // Velocities
10247 G4double VZ1_FISSION = (2.0 * G4AblaRandom::flat() - 1.0) * VFF1;
10248 G4double VPERP1 = std::sqrt(VFF1 * VFF1 - VZ1_FISSION * VZ1_FISSION);
10249 G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142;
10250 G4double VX1_FISSION = VPERP1 * std::sin(ALPHA1);
10251 G4double VY1_FISSION = VPERP1 * std::cos(ALPHA1);
10252 G4double VX2_FISSION = -VX1_FISSION / VFF1 * VFF2;
10253 G4double VY2_FISSION = -VY1_FISSION / VFF1 * VFF2;
10254 G4double VZ2_FISSION = -VZ1_FISSION / VFF1 * VFF2;
10255 //
10256 // Fission fragment 1
10257 if ((ZF1 <= 0.0) || (AF1 <= 0.0) || (AF1 < ZF1)) {
10258 std::cout << "F1 unphysical: " << ZF << " " << AF << " " << EE << " " << ZF1 << " " << AF1
10259 << std::endl;
10260 }
10261 else {
10262 // fission and IMF emission are not allowed
10263 opt->optimfallowed = 0; // IMF is not allowed
10264 fiss->ifis = 0; // fission is not allowed
10265 gammaemission = 1;
10266 G4int FF11 = 0, FIMF11 = 0;
10267 G4double ZIMFF1 = 0., AIMFF1 = 0., TKEIMF1 = 0., JPRFOUT = 0.;
10268 //
10269 evapora(ZF1, AF1, &EFF1, 0., &ZFF1, &AFF1, &mtota, &vz1_eva, &vx1_eva, &vy1_eva, &FF11, &FIMF11,
10270 &ZIMFF1, &AIMFF1, &TKEIMF1, &JPRFOUT, &inttype, &inum, EV_TEMP1, &IEV_TAB_TEMP,
10271 &NbLam1);
10272
10273 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ++) {
10274 EV_TEMP[IJ + IEV_TAB_FIS][0] = EV_TEMP1[IJ][0];
10275 EV_TEMP[IJ + IEV_TAB_FIS][1] = EV_TEMP1[IJ][1];
10276 // Lorentz kinematics
10277 // EV_TEMP(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
10278 // EV_TEMP(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
10279 // EV_TEMP(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
10280 // Lorentz transformation
10281 lorentz_boost(VX1_FISSION, VY1_FISSION, VZ1_FISSION, EV_TEMP1[IJ][2], EV_TEMP1[IJ][3],
10282 EV_TEMP1[IJ][4], &VXOUT, &VYOUT, &VZOUT);
10283 lorentz_boost(vx_eva_sc, vy_eva_sc, vz_eva_sc, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
10284 &VZ2OUT);
10285 EV_TEMP[IJ + IEV_TAB_FIS][2] = VX2OUT;
10286 EV_TEMP[IJ + IEV_TAB_FIS][3] = VY2OUT;
10287 EV_TEMP[IJ + IEV_TAB_FIS][4] = VZ2OUT;
10288 //
10289 }
10290 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_TEMP;
10291 }
10292 //
10293 // Fission fragment 2
10294 if ((ZF2 <= 0.0) || (AF2 <= 0.0) || (AF2 < ZF2)) {
10295 std::cout << "F2 unphysical: " << ZF << " " << AF << " " << EE << " " << ZF2 << " " << AF2
10296 << std::endl;
10297 }
10298 else {
10299 // fission and IMF emission are not allowed
10300 opt->optimfallowed = 0; // IMF is not allowed
10301 fiss->ifis = 0; // fission is not allowed
10302 gammaemission = 1;
10303 G4int FF22 = 0, FIMF22 = 0;
10304 G4double ZIMFF2 = 0., AIMFF2 = 0., TKEIMF2 = 0., JPRFOUT = 0.;
10305 //
10306 evapora(ZF2, AF2, &EFF2, 0., &ZFF2, &AFF2, &mtota, &vz2_eva, &vx2_eva, &vy2_eva, &FF22, &FIMF22,
10307 &ZIMFF2, &AIMFF2, &TKEIMF2, &JPRFOUT, &inttype, &inum, EV_TEMP2, &IEV_TAB_TEMP,
10308 &NbLam2);
10309
10310 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ++) {
10311 EV_TEMP[IJ + IEV_TAB_FIS][0] = EV_TEMP2[IJ][0];
10312 EV_TEMP[IJ + IEV_TAB_FIS][1] = EV_TEMP2[IJ][1];
10313 // Lorentz kinematics
10314 // EV_TEMP(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
10315 // EV_TEMP(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
10316 // EV_TEMP(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
10317 // Lorentz transformation
10318 lorentz_boost(VX2_FISSION, VY2_FISSION, VZ2_FISSION, EV_TEMP2[IJ][2], EV_TEMP2[IJ][3],
10319 EV_TEMP2[IJ][4], &VXOUT, &VYOUT, &VZOUT);
10320 lorentz_boost(vx_eva_sc, vy_eva_sc, vz_eva_sc, VXOUT, VYOUT, VZOUT, &VX2OUT, &VY2OUT,
10321 &VZ2OUT);
10322 EV_TEMP[IJ + IEV_TAB_FIS][2] = VX2OUT;
10323 EV_TEMP[IJ + IEV_TAB_FIS][3] = VY2OUT;
10324 EV_TEMP[IJ + IEV_TAB_FIS][4] = VZ2OUT;
10325 //
10326 }
10327 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_TEMP;
10328 }
10329 //
10330 // Lorentz kinematics
10331 // vx1_fission = vx1_fission + vx1_eva
10332 // vy1_fission = vy1_fission + vy1_eva
10333 // vz1_fission = vz1_fission + vz1_eva
10334 // vx2_fission = vx2_fission + vx2_eva
10335 // vy2_fission = vy2_fission + vy2_eva
10336 // vz2_fission = vz2_fission + vz2_eva
10337 // The v_eva_sc contribution is considered in the calling subroutine
10338 // Lorentz transformations
10339 lorentz_boost(vx1_eva, vy1_eva, vz1_eva, VX1_FISSION, VY1_FISSION, VZ1_FISSION, &VXOUT, &VYOUT,
10340 &VZOUT);
10341 VX1_FISSION = VXOUT;
10342 VY1_FISSION = VYOUT;
10343 VZ1_FISSION = VZOUT;
10344 lorentz_boost(vx2_eva, vy2_eva, vz2_eva, VX2_FISSION, VY2_FISSION, VZ2_FISSION, &VXOUT, &VYOUT,
10345 &VZOUT);
10346 VX2_FISSION = VXOUT;
10347 VY2_FISSION = VYOUT;
10348 VZ2_FISSION = VZOUT;
10349 //
10350 (*ZFP1) = idnint(ZFF1);
10351 (*AFP1) = idnint(AFF1);
10352 (*SFP1) = NbLam1;
10353 (*VX1_FISSION_par) = VX1_FISSION;
10354 (*VY1_FISSION_par) = VY1_FISSION;
10355 (*VZ1_FISSION_par) = VZ1_FISSION;
10356 (*VX_EVA_SC_par) = vx_eva_sc;
10357 (*VY_EVA_SC_par) = vy_eva_sc;
10358 (*VZ_EVA_SC_par) = vz_eva_sc;
10359 (*ZFP2) = idnint(ZFF2);
10360 (*AFP2) = idnint(AFF2);
10361 (*SFP2) = NbLam2;
10362 (*VX2_FISSION_par) = VX2_FISSION;
10363 (*VY2_FISSION_par) = VY2_FISSION;
10364 (*VZ2_FISSION_par) = VZ2_FISSION;
10365 (*IEV_TAB_FIS_par) = IEV_TAB_FIS;
10366 (*NbLam0_par) = NbLam1 + NbLam2;
10367 if (NbLam0 > (NbLam1 + NbLam2)) varntp->kfis = 25;
10368 return;
10369}
void fissionDistri(G4double &a, G4double &z, G4double &e, G4double &a1, G4double &z1, G4double &e1, G4double &v1, G4double &a2, G4double &z2, G4double &e2, G4double &v2, G4double &vx_eva_sc, G4double &vy_eva_sc, G4double &vz_eva_sc, G4int *NbLam0_par)
Definition G4Abla.cc:8230

Referenced by DeexcitationAblaxx().

◆ fission_width()

void G4Abla::fission_width ( G4double ZPRF,
G4double A,
G4double EE,
G4double BS,
G4double BK,
G4double EF,
G4double Y,
G4double * GF,
G4double * TEMP,
G4double JPR,
G4int IEROT,
G4int FF_ALLOWED,
G4int OPTCOL,
G4int OPTSHP,
G4double DENSG )

Calculation of fission width at the saddle point according to B&W.

Definition at line 7130 of file G4Abla.cc.

7134{
7135 //
7136 G4double FNORM, MASS_ASYM_SADD_B, FP_PER, FP_PAR, SIG_PER_SP, SIG_PAR_SP;
7137 G4double Z2OVERA, ftemp, fgf, DENSF, ECOR, EROT, qr;
7138 G4double DCR, UCR, ENH_FACTA, ENH_FACTB, ENH_FACT, PONFE;
7139 G4double PI = 3.14159;
7140
7141 DCR = fiss->dcr;
7142 UCR = fiss->ucr;
7143 Z2OVERA = ZPRF * ZPRF / A;
7144
7145 // Nuclei below Businaro-Gallone point do not go through fission
7146 if ((ZPRF <= 55.0) || (FF_ALLOWED == 0)) {
7147 (*GF) = 0.0;
7148 (*TEMP) = 0.5;
7149 return;
7150 }
7151
7152 // Level density above SP
7153 // Saddle-point deformation is defbet as above. But, FP_PER and FP_PAR
7154 // are calculated for fission in DENSNIV acc to Myers and Hasse, and their
7155 // parametrization is done as function of y
7156 densniv(A, ZPRF, EE, EF, &DENSF, 0.0, BS, BK, &ftemp, OPTSHP, 0, Y, &ECOR, JPR, 1, &qr);
7157
7158 if (OPTCOL == 0) {
7159 fgf = DENSF / DENSG / PI / 2.0 * ftemp;
7160 (*TEMP) = ftemp;
7161 (*GF) = fgf;
7162 return;
7163 }
7164
7165 // FP = 2/5*M0*R0**2/HBAR**2 * A**(5/3) * (1 + DEFBET/3)
7166 // FP is used to calculate the spin-cutoff parameter SIG=FP*TEMP/hbar**2;
7167 // hbar**2 is, therefore, included in FP in order to avoid problems with large
7168 // exponents The factor fnorm inlcudes then R0, M0 and hbar**2 - fnorm =
7169 // R0*M0/hbar**2 = 1.2fm*931.49MeV/c**2 /(6.582122e-22 MeVs)**2 and is in
7170 // units 1/MeV
7171 FNORM = 1.2 * 1.2 * 931.49 * 1.e-2 / (9.0 * 6.582122 * 6.582122);
7172 // FP_PER ~ 1+7*y/6, FP_PAR ~ 1-7*y/3 (Hasse & Myers, Geom. relat. macr. nucl.
7173 // phys.) Perpendicular moment of inertia
7174 FP_PER =
7175 2.0 / 5.0 * std::pow(A, 5.0 / 3.0) * FNORM * (1. + 7.0 / 6.0 * Y * (1.0 + 1396.0 / 255. * Y));
7176
7177 // AK - Jan 2011 - following line is needed, as for these nuclei it seems that
7178 // FP_PER calculated according to above formula has too large values, leading
7179 // to too large ENH_FACT
7180 if (Z2OVERA <= 30.0) FP_PER = 6.50;
7181
7182 // Parallel moment of inertia
7183 FP_PAR =
7184 2.0 / 5.0 * std::pow(A, 5.0 / 3.0) * FNORM * (1.0 - 7.0 / 3.0 * Y * (1.0 - 389.0 / 255.0 * Y));
7185 if (FP_PAR < 0.0) FP_PAR = 0.0;
7186
7187 EROT = JPR * JPR / (2.0 * std::sqrt(FP_PAR * FP_PAR + FP_PER * FP_PER));
7188 if (IEROT == 1) EROT = 0.0;
7189
7190 // Perpendicular spin cut-off parameter
7191 SIG_PER_SP = std::sqrt(FP_PER * ftemp);
7192
7193 if (SIG_PER_SP < 1.0) SIG_PER_SP = 1.0;
7194
7195 // Parallel spin cut-off parameter
7196 SIG_PAR_SP = std::sqrt(FP_PAR * ftemp);
7197 ENH_FACT = 1.0;
7198 //
7199 if (A > 223.0) {
7200 MASS_ASYM_SADD_B = 2.0;
7201 }
7202 else {
7203 MASS_ASYM_SADD_B = 1.0;
7204 }
7205
7206 // actinides with low barriers
7207 if (Z2OVERA > 35. && Z2OVERA <= (110. * 110. / 298.0)) {
7208 // Barrier A is axial asymmetric
7209 ENH_FACTA = std::sqrt(8.0 * PI) * SIG_PER_SP * SIG_PER_SP * SIG_PAR_SP;
7210 // Barrier B is axial symmetric
7211 ENH_FACTB = MASS_ASYM_SADD_B * SIG_PER_SP * SIG_PER_SP;
7212 // Total enhancement
7213 ENH_FACT = ENH_FACTA * ENH_FACTB / (ENH_FACTA + ENH_FACTB);
7214 }
7215 else {
7216 // nuclei with high fission barriers (only barrier B plays a role, axial
7217 // symmetric)
7218 if (Z2OVERA <= 35.) {
7219 ENH_FACT = MASS_ASYM_SADD_B * SIG_PER_SP * SIG_PER_SP;
7220 }
7221 else {
7222 // super-heavy nuclei (only barrier A plays a role, axial asymmetric)
7223 ENH_FACT = std::sqrt(8.0 * PI) * SIG_PER_SP * SIG_PER_SP * SIG_PAR_SP;
7224 }
7225 }
7226
7227 // Fading-out with excitation energy above the saddle point:
7228 PONFE = (ECOR - UCR - EROT) / DCR;
7229 if (PONFE > 700.) PONFE = 700.0;
7230 // Fading-out according to Junghans:
7231 ENH_FACT = 1.0 / (1.0 + std::exp(PONFE)) * ENH_FACT + 1.0;
7232
7233 if (ENH_FACT < 1.0) ENH_FACT = 1.0;
7234 fgf = DENSF / DENSG / PI / 2.0 * ftemp * ENH_FACT;
7235
7236 // Tunneling
7237 if (EE < EF) {
7238 fgf = tunnelling(A, ZPRF, Y, EE, EF, ftemp, DENSG, DENSF, ENH_FACT);
7239 }
7240 //
7241 (*GF) = fgf;
7242 (*TEMP) = ftemp;
7243 return;
7244}
G4double Y(G4double density)
G4double tunnelling(G4double A, G4double ZPRF, G4double Y, G4double EE, G4double EF, G4double TEMP, G4double DENSG, G4double DENSF, G4double ENH_FACT)
Definition G4Abla.cc:7045

Referenced by direct().

◆ fissionDistri()

void G4Abla::fissionDistri ( G4double & a,
G4double & z,
G4double & e,
G4double & a1,
G4double & z1,
G4double & e1,
G4double & v1,
G4double & a2,
G4double & z2,
G4double & e2,
G4double & v2,
G4double & vx_eva_sc,
G4double & vy_eva_sc,
G4double & vz_eva_sc,
G4int * NbLam0_par )

Calculation of the fission distribution.

Definition at line 8230 of file G4Abla.cc.

8234{
8235 /*
8236 Last update:
8237
8238 21/01/17 - J.L.R.S. - Implementation of this fission model in C++
8239
8240
8241 Authors: K.-H. Schmidt, A. Kelic, M. V. Ricciardi,J. Benlliure, and
8242 J.L.Rodriguez-Sanchez(1995 - 2017)
8243
8244 On input: A, Z, E (mass, atomic number and exc. energy of compound nucleus
8245 before fission)
8246 On output: Ai, Zi, Ei (mass, atomic number and (absolute) exc. energy of
8247 fragment 1 and 2 after fission)
8248
8249 */
8250 /* This program calculates isotopic distributions of fission fragments */
8251 /* with a semiempirical model */
8252 /* The width and eventually a shift in N/Z (polarization) follows the */
8253 /* following rules: */
8254 /* */
8255 /* The line N/Z following UCD has an angle of atan(Zcn/Ncn) */
8256 /* to the horizontal axis on a chart of nuclides. */
8257 /* (For 238U the angle is 32.2 deg.) */
8258 /* */
8259 /* The following relations hold: (from Armbruster)
8260 c
8261 c sigma(N) (A=const) = sigma(Z) (A=const)
8262 c sigma(A) (N=const) = sigma(Z) (N=const)
8263 c sigma(A) (Z=const) = sigma(N) (Z=const)
8264 c
8265 c From this we get:
8266 c sigma(Z) (N=const) * N = sigma(N) (Z=const) * Z
8267 c sigma(A) (Z=const) = sigma(Z) (A=const) * A/Z
8268 c sigma(N) (Z=const) = sigma(Z) (A=const) * A/Z
8269 c Z*sigma(N) (Z=const) = N*sigma(Z) (N=const) = A*sigma(Z) (A=const) */
8270 //
8271
8272 /* Model parameters:
8273 C These parameters have been adjusted to the compound nucleus 238U.
8274 c For the fission of another compound nucleus, it might be
8275 c necessary to slightly adjust some parameter values.
8276 c The most important ones are
8277 C Delta_U1_shell_max and
8278 c Delta_u2_shell.
8279 */
8280 G4double Nheavy1_in; // 'position of shell for Standard 1'
8281 Nheavy1_in = 83.0;
8282
8283 G4double Zheavy1_in; // 'position of shell for Standard 1'
8284 Zheavy1_in = 50.0;
8285
8286 G4double Nheavy2; // 'position of heavy peak valley 2'
8287 Nheavy2 = 89.0;
8288
8289 G4double Delta_U1_shell_max; // 'Shell effect for valley 1'
8290 Delta_U1_shell_max = -2.45;
8291
8292 G4double U1NZ_SLOPE; // Reduction of shell effect with distance to 132Sn
8293 U1NZ_SLOPE = 0.2;
8294
8295 G4double Delta_U2_shell; // 'Shell effect for valley 2'
8296 Delta_U2_shell = -2.45;
8297
8298 G4double X_s2s; // 'Ratio (C_sad/C_scis) of curvature of potential'
8299 X_s2s = 0.8;
8300
8301 G4double hbom1, hbom2, hbom3; // 'Curvature of potential at saddle'
8302 hbom1 = 0.2; // hbom1 is hbar * omega1 / (2 pi) !!!
8303 hbom2 = 0.2; // hbom2 is hbar * omega2 / (2 pi) !!!
8304 hbom3 = 0.2; // hbom3 is hbar * omega3 / (2 pi) !!!
8305
8306 G4double Fwidth_asymm1, Fwidth_asymm2, Fwidth_symm;
8307 // 'Factors for widths of distr. valley 1 and 2'
8308 Fwidth_asymm1 = 0.65;
8309 Fwidth_asymm2 = 0.65;
8310 Fwidth_symm = 1.16;
8311
8312 G4double xLevdens; // 'Parameter x: a = A/x'
8313 xLevdens = 10.75;
8314 // The value of 1/0.093 = 10.75 is consistent with the
8315 // systematics of the mass widths of Ref. (RuI97).
8316
8317 G4double FGAMMA; // 'Factor to gamma'
8318 FGAMMA = 1.; // Theoretical expectation, not adjusted to data.
8319 // Additional factor to attenuation coefficient of shell effects
8320 // with increasing excitation energy
8321
8322 G4double FGAMMA1; // 'Factor to gamma_heavy1'
8323 FGAMMA1 = 2.;
8324 // Adjusted to reduce the weight of Standard 1 with increasing
8325 // excitation energies, as required by experimental data.
8326
8327 G4double FREDSHELL;
8328 FREDSHELL = 0.;
8329 // Adjusted to the reduced attenuation of shells in the superfluid region.
8330 // If FGAMMA is modified,
8331 // FGAMMA * FREADSHELL should remain constant (0.65) to keep
8332 // the attenuation of the shell effects below the critical
8333 // pairing energy ECRIT unchanged, which has been carefully
8334 // adjusted to the mass yields of Vives and Zoeller in this
8335 // energy range. A high value of FGAMMA leads ot a stronger
8336 // attenuation of shell effects above the superfluid region.
8337
8338 G4double Ecrit;
8339 Ecrit = 5.;
8340 // The value of ECRIT determines the transition from a weak
8341 // decrease of the shell effect below ECRIT to a stronger
8342 // decrease above the superfluid range.
8343 const G4double d = 2.0; // 'Surface distance of scission configuration'
8344 // d = 2.0;
8345 // Charge polarisation from Wagemanns p. 397:
8346 G4double cpol1; // Charge polarisation standard I
8347 cpol1 = 0.35; // calculated internally with shells
8348 G4double cpol2; // Charge polarisation standard II
8349 cpol2 = 0.; // calculated internally from LDM
8350 G4double Friction_factor;
8351 Friction_factor = 1.0;
8352 G4double Nheavy1; // position of valley St 1 in Z and N
8353 G4double Delta_U1, Delta_U2; // used shell effects
8354 G4double cN_asymm1_shell, cN_asymm2_shell;
8355 G4double gamma, gamma_heavy1, gamma_heavy2; // fading of shells
8356 G4double E_saddle_scission; // friction from saddle to scission
8357 G4double Ysymm = 0.; // Yield of symmetric mode
8358 G4double Yasymm1 = 0.; // Yield of asymmetric mode 1
8359 G4double Yasymm2 = 0.; // Yield of asymmetric mode 2
8360 G4double Nheavy1_eff; // Effective position of valley 1
8361 G4double Nheavy2_eff; // Effective position of valley 2
8362 G4double eexc1_saddle; // Excitation energy above saddle 1
8363 G4double eexc2_saddle; // Excitation energy above saddle 2
8364 G4double EEXC_MAX; // Excitation energy above lowest saddle
8365 G4double r_e_o; // Even-odd effect in Z
8366 G4double cN_symm; // Curvature of symmetric valley
8367 G4double CZ; // Curvature of Z distribution for fixed A
8368 G4double Nheavy2_NZ; // Position of Shell 2, combined N and Z
8369 G4double N;
8370 G4double Aheavy1, Aheavy2;
8371 G4double Sasymm1 = 0., Sasymm2 = 0., Ssymm = 0., Ysum = 0., Yasymm = 0.;
8372 G4double Ssymm_mode1, Ssymm_mode2;
8373 G4double wNasymm1_saddle, wNasymm2_saddle, wNsymm_saddle;
8374 G4double wNasymm2_scission, wNsymm_scission;
8375 G4double wNasymm1, wNasymm2, wNsymm;
8376 G4int imode;
8377 G4double rmode;
8378 G4double ZA1width;
8379 G4double N1r, N2r, A1r, N1, N2;
8380 G4double Zsymm, Nsymm;
8381 G4double N1mean, N1width;
8382 G4double dUeff;
8383 /* effective shell effect at lowest barrier */
8384 G4double Eld;
8385 /* Excitation energy with respect to ld barrier */
8386 G4double re1, re2, re3;
8387 G4double eps1, eps2;
8388 G4double Z1UCD, Z2UCD;
8389 G4double beta = 0., beta1 = 0., beta2 = 0.;
8390 // double betacomplement;
8391 G4double DN1_POL;
8392 /* shift of most probable neutron number for given Z,
8393 according to polarization */
8394 G4int i_help;
8395 G4double A_levdens;
8396 /* level-density parameter */
8397 // double A_levdens_light1,A_levdens_light2;
8398 G4double A_levdens_heavy1, A_levdens_heavy2;
8399
8400 G4double R0 = 1.16;
8401
8402 G4double epsilon_1_saddle, epsilon0_1_saddle;
8403 G4double epsilon_2_saddle, epsilon0_2_saddle, epsilon_symm_saddle;
8404 G4double epsilon_1_scission; //,epsilon0_1_scission;
8405 G4double epsilon_2_scission; //,epsilon0_2_scission;
8406 G4double epsilon_symm_scission;
8407 /* modified energy */
8408 G4double E_eff1_saddle, E_eff2_saddle;
8409 G4double Epot0_mode1_saddle, Epot0_mode2_saddle, Epot0_symm_saddle;
8410 G4double Epot_mode1_saddle, Epot_mode2_saddle, Epot_symm_saddle;
8411 G4double E_defo, E_defo1, E_defo2, E_scission_pre = 0., E_scission_post;
8412 G4double E_asym;
8413 G4double E1exc = 0., E2exc = 0.;
8414 G4double E1exc_sigma, E2exc_sigma;
8415 G4double TKER;
8416 G4double EkinR1, EkinR2;
8417 G4double MassCurv_scis, MassCurv_sadd;
8418 G4double cN_symm_sadd;
8419 G4double Nheavy1_shell, Nheavy2_shell;
8420 G4double wNasymm1_scission;
8421 G4double Aheavy1_eff, Aheavy2_eff;
8422 G4double Z1rr, Z1r;
8423 G4double E_HELP;
8424 G4double Z_scission, N_scission, A_scission;
8425 G4double Z2_over_A_eff;
8426 G4double beta1gs = 0., beta2gs = 0., betags = 0.;
8427 G4double sigZmin; // 'Minimum neutron width for constant Z'
8428 G4double DSN132, Delta_U1_shell, E_eff0_saddle; //,e_scission;
8429 G4int NbLam0 = (*NbLam0_par);
8430 //
8431 sigZmin = 0.5;
8432 N = A - Z; /* neutron number of the fissioning nucleus */
8433 //
8434 cN_asymm1_shell = 0.700 * N / Z;
8435 cN_asymm2_shell = 0.040 * N / Z;
8436
8437 //*********************************************************************
8438
8439 DSN132 = Nheavy1_in - N / Z * Zheavy1_in;
8440 Aheavy1 = Nheavy1_in + Zheavy1_in + 0.340 * DSN132;
8441 /* Neutron number of valley Standard 1 */
8442 /* It is assumed that the 82-neutron shell effect is stronger than
8443c the 50-proton shell effect. Therefore, the deviation in N/Z of
8444c the fissioning nucleus from the N/Z of 132Sn will
8445c change the position of the combined shell in mass. For neutron-
8446c deficient fissioning nuclei, the mass will increase and vice
8447c versa. */
8448
8449 Delta_U1_shell = Delta_U1_shell_max + U1NZ_SLOPE * std::abs(DSN132);
8450 Delta_U1_shell = min(0., Delta_U1_shell);
8451 /* Empirical reduction of shell effect with distance in N/Z of CN to 132Sn */
8452 /* Fits (239U,n)f and 226Th e.-m.-induced fission */
8453
8454 Nheavy1 = N / A * Aheavy1; /* UCD */
8455 Aheavy2 = Nheavy2 * A / N;
8456
8457 Zsymm = Z / 2.0; /* proton number in symmetric fission (centre) */
8458 Nsymm = N / 2.0;
8459 A_levdens = A / xLevdens;
8460 gamma = A_levdens / (0.40 * std::pow(A, 1.3333)) * FGAMMA;
8461 A_levdens_heavy1 = Aheavy1 / xLevdens;
8462 gamma_heavy1 = A_levdens_heavy1 / (0.40 * std::pow(Aheavy1, 1.3333)) * FGAMMA * FGAMMA1;
8463 A_levdens_heavy2 = Aheavy2 / xLevdens;
8464 gamma_heavy2 = A_levdens_heavy2 / (0.40 * std::pow(Aheavy2, 1.3333)) * FGAMMA;
8465
8466 // Energy dissipated from saddle to scission
8467 // F. Rejmund et al., Nucl. Phys. A 678 (2000) 215, fig. 4 b */
8468 E_saddle_scission = (-24. + 0.02227 * Z * Z / std::pow(A, 0.33333)) * Friction_factor;
8469 E_saddle_scission = max(0.0, E_saddle_scission);
8470
8471 // Fit to experimental result on curvature of potential at saddle
8472 // Parametrization of T. Enqvist according to Mulgin et al. 1998
8473 // MassCurv taken at scission. */
8474
8475 Z2_over_A_eff = Z * Z / A;
8476
8477 if (Z2_over_A_eff < 34.0)
8478 MassCurv_scis = std::pow(10., -1.093364 + 0.082933 * Z2_over_A_eff
8479 - 0.0002602 * Z2_over_A_eff * Z2_over_A_eff);
8480 else
8481 MassCurv_scis = std::pow(10., 3.053536 - 0.056477 * Z2_over_A_eff
8482 + 0.0002454 * Z2_over_A_eff * Z2_over_A_eff);
8483
8484 // to do:
8485 // fix the X with the channel intensities of 226Th (KHS at SEYSSINS,1998)
8486 // replace then (all) cN_symm by cN_symm_saddle (at least for Yields)
8487 MassCurv_sadd = X_s2s * MassCurv_scis;
8488
8489 cN_symm = 8.0 / std::pow(N, 2.) * MassCurv_scis;
8490 cN_symm_sadd = 8.0 / std::pow(N, 2.) * MassCurv_sadd;
8491
8492 Nheavy1_shell = Nheavy1;
8493
8494 if (E < 100.0)
8495 Nheavy1_eff =
8496 (cN_symm_sadd * Nsymm
8497 + cN_asymm1_shell * Uwash(E / A * Aheavy1, Ecrit, FREDSHELL, gamma_heavy1) * Nheavy1_shell)
8498 / (cN_symm_sadd + cN_asymm1_shell * Uwash(E / A * Aheavy1, Ecrit, FREDSHELL, gamma_heavy1));
8499 else
8500 Nheavy1_eff =
8501 (cN_symm_sadd * Nsymm + cN_asymm1_shell * Nheavy1_shell) / (cN_symm_sadd + cN_asymm1_shell);
8502
8503 /* Position of Standard II defined by neutron shell */
8504 Nheavy2_NZ = Nheavy2;
8505 Nheavy2_shell = Nheavy2_NZ;
8506 if (E < 100.)
8507 Nheavy2_eff =
8508 (cN_symm_sadd * Nsymm
8509 + cN_asymm2_shell * Uwash(E / A * Aheavy2, Ecrit, FREDSHELL, gamma_heavy2) * Nheavy2_shell)
8510 / (cN_symm_sadd + cN_asymm2_shell * Uwash(E / A * Aheavy2, Ecrit, FREDSHELL, gamma_heavy2));
8511 else
8512 Nheavy2_eff =
8513 (cN_symm_sadd * Nsymm + cN_asymm2_shell * Nheavy2_shell) / (cN_symm_sadd + cN_asymm2_shell);
8514
8515 Delta_U1 = Delta_U1_shell
8516 + (Nheavy1_shell - Nheavy1_eff) * (Nheavy1_shell - Nheavy1_eff)
8517 * cN_asymm1_shell; /* shell effect in valley of mode 1 */
8518 Delta_U1 = min(Delta_U1, 0.0);
8519 Delta_U2 = Delta_U2_shell
8520 + (Nheavy2_shell - Nheavy2_eff) * (Nheavy2_shell - Nheavy2_eff)
8521 * cN_asymm2_shell; /* shell effect in valley of mode 2 */
8522 Delta_U2 = min(Delta_U2, 0.0);
8523
8524 // liquid drop energies at the centres of the different shell effects
8525 // with respect to liquid drop at symmetry
8526 Epot0_mode1_saddle = (Nheavy1_eff - Nsymm) * (Nheavy1_eff - Nsymm) * cN_symm_sadd;
8527 Epot0_mode2_saddle = (Nheavy2_eff - Nsymm) * (Nheavy2_eff - Nsymm) * cN_symm_sadd;
8528 Epot0_symm_saddle = 0.0;
8529
8530 // energies including shell effects at the centres of the different
8531 // shell effects with respect to liquid drop at symmetry */
8532 Epot_mode1_saddle = Epot0_mode1_saddle + Delta_U1;
8533 Epot_mode2_saddle = Epot0_mode2_saddle + Delta_U2;
8534 Epot_symm_saddle = Epot0_symm_saddle;
8535
8536 // minimum of potential with respect to ld potential at symmetry
8537 dUeff = min(Epot_mode1_saddle, Epot_mode2_saddle);
8538 dUeff = min(dUeff, Epot_symm_saddle);
8539 dUeff = dUeff - Epot_symm_saddle;
8540
8541 Eld = E + dUeff;
8542 // E = energy above lowest effective barrier
8543 // Eld = energy above liquid-drop barrier
8544 // Due to this treatment the energy E on input means the excitation
8545 // energy above the lowest saddle. */
8546
8547 // excitation energies at saddle modes 1 and 2 without shell effect */
8548 epsilon0_1_saddle = Eld - Epot0_mode1_saddle;
8549 epsilon0_2_saddle = Eld - Epot0_mode2_saddle;
8550
8551 // excitation energies at saddle modes 1 and 2 with shell effect */
8552 epsilon_1_saddle = Eld - Epot_mode1_saddle;
8553 epsilon_2_saddle = Eld - Epot_mode2_saddle;
8554
8555 epsilon_symm_saddle = Eld - Epot_symm_saddle;
8556 // epsilon_symm_saddle = Eld - dUeff;
8557
8558 eexc1_saddle = epsilon_1_saddle;
8559 eexc2_saddle = epsilon_2_saddle;
8560
8561 // EEXC_MAX is energy above the lowest saddle */
8562 EEXC_MAX = max(eexc1_saddle, eexc2_saddle);
8563 EEXC_MAX = max(EEXC_MAX, Eld);
8564
8565 // excitation energy at scission */
8566 epsilon_1_scission = Eld + E_saddle_scission - Epot_mode1_saddle;
8567 epsilon_2_scission = Eld + E_saddle_scission - Epot_mode2_saddle;
8568
8569 // excitation energy of symmetric fragment at scission */
8570 epsilon_symm_scission = Eld + E_saddle_scission - Epot_symm_saddle;
8571
8572 // calculate widhts at the saddle
8573 E_eff1_saddle =
8574 epsilon0_1_saddle
8575 - Delta_U1 * Uwash(epsilon_1_saddle / A * Aheavy1, Ecrit, FREDSHELL, gamma_heavy1);
8576
8577 if (E_eff1_saddle < A_levdens * hbom1 * hbom1) E_eff1_saddle = A_levdens * hbom1 * hbom1;
8578
8579 wNasymm1_saddle = std::sqrt(
8580 0.50 * std::sqrt(1.0 / A_levdens * E_eff1_saddle)
8581 / (cN_asymm1_shell * Uwash(epsilon_1_saddle / A * Aheavy1, Ecrit, FREDSHELL, gamma_heavy1)
8582 + cN_symm_sadd));
8583
8584 E_eff2_saddle =
8585 epsilon0_2_saddle
8586 - Delta_U2 * Uwash(epsilon_2_saddle / A * Aheavy2, Ecrit, FREDSHELL, gamma_heavy2);
8587
8588 if (E_eff2_saddle < A_levdens * hbom2 * hbom2) E_eff2_saddle = A_levdens * hbom2 * hbom2;
8589
8590 wNasymm2_saddle = std::sqrt(
8591 0.50 * std::sqrt(1.0 / A_levdens * E_eff2_saddle)
8592 / (cN_asymm2_shell * Uwash(epsilon_2_saddle / A * Aheavy2, Ecrit, FREDSHELL, gamma_heavy2)
8593 + cN_symm_sadd));
8594
8595 E_eff0_saddle = epsilon_symm_saddle;
8596 if (E_eff0_saddle < A_levdens * hbom3 * hbom3) E_eff0_saddle = A_levdens * hbom3 * hbom3;
8597
8598 wNsymm_saddle = std::sqrt(0.50 * std::sqrt(1.0 / A_levdens * E_eff0_saddle) / cN_symm_sadd);
8599
8600 if (epsilon_symm_scission > 0.0) {
8601 E_HELP = max(E_saddle_scission, epsilon_symm_scission);
8602 wNsymm_scission = std::sqrt(0.50 * std::sqrt(1.0 / A_levdens * (E_HELP)) / cN_symm);
8603 }
8604 else {
8605 wNsymm_scission = std::sqrt(0.50 * std::sqrt(1.0 / A_levdens * E_saddle_scission) / cN_symm);
8606 }
8607
8608 // Calculate widhts at the scission point:
8609 // fits of ref. Beizin 1991 (Plots by Sergei Zhdanov)
8610
8611 if (E_saddle_scission == 0.0) {
8612 wNasymm1_scission = wNasymm1_saddle;
8613 wNasymm2_scission = wNasymm2_saddle;
8614 }
8615 else {
8616 if (Nheavy1_eff > 75.0) {
8617 wNasymm1_scission = std::sqrt(21.0) * N / A;
8618 wNasymm2_scission = max(12.8 - 1.0 * (92.0 - Nheavy2_eff), 1.0) * N / A;
8619 }
8620 else {
8621 wNasymm1_scission = wNasymm1_saddle;
8622 wNasymm2_scission = wNasymm2_saddle;
8623 }
8624 }
8625
8626 wNasymm1_scission = max(wNasymm1_scission, wNasymm1_saddle);
8627 wNasymm2_scission = max(wNasymm2_scission, wNasymm2_saddle);
8628
8629 wNasymm1 = wNasymm1_scission * Fwidth_asymm1;
8630 wNasymm2 = wNasymm2_scission * Fwidth_asymm2;
8631 wNsymm = wNsymm_scission * Fwidth_symm;
8632
8633 // mass and charge of fragments using UCD, needed for level densities
8634 Aheavy1_eff = Nheavy1_eff * A / N;
8635 Aheavy2_eff = Nheavy2_eff * A / N;
8636
8637 A_levdens_heavy1 = Aheavy1_eff / xLevdens;
8638 A_levdens_heavy2 = Aheavy2_eff / xLevdens;
8639 gamma_heavy1 = A_levdens_heavy1 / (0.40 * std::pow(Aheavy1_eff, 1.3333)) * FGAMMA * FGAMMA1;
8640 gamma_heavy2 = A_levdens_heavy2 / (0.40 * std::pow(Aheavy2_eff, 1.3333)) * FGAMMA;
8641
8642 if (epsilon_symm_saddle < A_levdens * hbom3 * hbom3)
8643 Ssymm = 2.0 * std::sqrt(A_levdens * A_levdens * hbom3 * hbom3)
8644 + (epsilon_symm_saddle - A_levdens * hbom3 * hbom3) / hbom3;
8645 else
8646 Ssymm = 2.0 * std::sqrt(A_levdens * epsilon_symm_saddle);
8647
8648 Ysymm = 1.0;
8649
8650 if (epsilon0_1_saddle < A_levdens * hbom1 * hbom1)
8651 Ssymm_mode1 = 2.0 * std::sqrt(A_levdens * A_levdens * hbom1 * hbom1)
8652 + (epsilon0_1_saddle - A_levdens * hbom1 * hbom1) / hbom1;
8653 else
8654 Ssymm_mode1 = 2.0 * std::sqrt(A_levdens * epsilon0_1_saddle);
8655
8656 if (epsilon0_2_saddle < A_levdens * hbom2 * hbom2)
8657 Ssymm_mode2 = 2.0 * std::sqrt(A_levdens * A_levdens * hbom2 * hbom2)
8658 + (epsilon0_2_saddle - A_levdens * hbom2 * hbom2) / hbom2;
8659 else
8660 Ssymm_mode2 = 2.0 * std::sqrt(A_levdens * epsilon0_2_saddle);
8661
8662 if (epsilon0_1_saddle
8663 - Delta_U1 * Uwash(epsilon_1_saddle / A * Aheavy1, Ecrit, FREDSHELL, gamma_heavy1)
8664 < A_levdens * hbom1 * hbom1)
8665 Sasymm1 = 2.0 * std::sqrt(A_levdens * A_levdens * hbom1 * hbom1)
8666 + (epsilon0_1_saddle
8667 - Delta_U1 * Uwash(epsilon_1_saddle / A * Aheavy1, Ecrit, FREDSHELL, gamma_heavy1)
8668 - A_levdens * hbom1 * hbom1)
8669 / hbom1;
8670 else
8671 Sasymm1 =
8672 2.0
8673 * std::sqrt(
8674 A_levdens
8675 * (epsilon0_1_saddle
8676 - Delta_U1 * Uwash(epsilon_1_saddle / A * Aheavy1, Ecrit, FREDSHELL, gamma_heavy1)));
8677
8678 if (epsilon0_2_saddle
8679 - Delta_U2 * Uwash(epsilon_2_saddle / A * Aheavy2, Ecrit, FREDSHELL, gamma_heavy2)
8680 < A_levdens * hbom2 * hbom2)
8681 Sasymm2 = 2.0 * std::sqrt(A_levdens * A_levdens * hbom2 * hbom2)
8682 + (epsilon0_1_saddle
8683 - Delta_U1 * Uwash(epsilon_2_saddle / A * Aheavy2, Ecrit, FREDSHELL, gamma_heavy2)
8684 - A_levdens * hbom2 * hbom2)
8685 / hbom2;
8686 else
8687 Sasymm2 =
8688 2.0
8689 * std::sqrt(
8690 A_levdens
8691 * (epsilon0_2_saddle
8692 - Delta_U2 * Uwash(epsilon_2_saddle / A * Aheavy2, Ecrit, FREDSHELL, gamma_heavy2)));
8693
8694 Yasymm1 = (std::exp(Sasymm1 - Ssymm) - std::exp(Ssymm_mode1 - Ssymm)) * wNasymm1_saddle
8695 / wNsymm_saddle * 2.0;
8696
8697 Yasymm2 = (std::exp(Sasymm2 - Ssymm) - std::exp(Ssymm_mode2 - Ssymm)) * wNasymm2_saddle
8698 / wNsymm_saddle * 2.0;
8699
8700 Ysum = Ysymm + Yasymm1 + Yasymm2; /* normalize */
8701
8702 if (Ysum > 0.00) {
8703 Ysymm = Ysymm / Ysum;
8704 Yasymm1 = Yasymm1 / Ysum;
8705 Yasymm2 = Yasymm2 / Ysum;
8706 Yasymm = Yasymm1 + Yasymm2;
8707 }
8708 else {
8709 Ysymm = 0.0;
8710 Yasymm1 = 0.0;
8711 Yasymm2 = 0.0;
8712 // search minimum threshold and attribute all events to this mode */
8713 if ((epsilon_symm_saddle < epsilon_1_saddle) && (epsilon_symm_saddle < epsilon_2_saddle))
8714 Ysymm = 1.0;
8715 else if (epsilon_1_saddle < epsilon_2_saddle)
8716 Yasymm1 = 1.0;
8717 else
8718 Yasymm2 = 1.0;
8719 }
8720 // even-odd effect
8721 // Parametrization from Rejmund et al.
8722 if (mod(Z, 2.0) == 0)
8723 r_e_o = std::pow(10.0, -0.0170 * (E_saddle_scission + Eld) * (E_saddle_scission + Eld));
8724 else
8725 r_e_o = 0.0;
8726
8727 /* -------------------------------------------------------
8728 c selecting the fission mode using the yields at scission
8729 c -------------------------------------------------------
8730 c random decision: symmetric or asymmetric
8731 c IMODE = 1 means asymmetric fission, mode 1
8732 c IMODE = 2 means asymmetric fission, mode 2
8733 c IMODE = 3 means symmetric fission
8734 c testcase: 238U, E*= 6 MeV : 6467 8781 4752 (20000)
8735 c 127798 176480 95722 (400000)
8736 c 319919 440322 239759 (1000000)
8737 c E*=12 MeV : 153407 293063 553530 (1000000) */
8738
8739fiss321: // rmode = DBLE(HAZ(k))
8740 rmode = G4AblaRandom::flat();
8741 if (rmode < Yasymm1)
8742 imode = 1;
8743 else if ((rmode > Yasymm1) && (rmode < Yasymm))
8744 imode = 2;
8745 else
8746 imode = 3;
8747
8748 // determine parameters of the neutron distribution of each mode
8749 // at scission
8750
8751 if (imode == 1) {
8752 N1mean = Nheavy1_eff;
8753 N1width = wNasymm1;
8754 }
8755 else {
8756 if (imode == 2) {
8757 N1mean = Nheavy2_eff;
8758 N1width = wNasymm2;
8759 }
8760 else {
8761 // if( imode == 3 ) then
8762 N1mean = Nsymm;
8763 N1width = wNsymm;
8764 }
8765 }
8766
8767 // N2mean needed by CZ below
8768 // N2mean = N - N1mean;
8769
8770 // fission mode found, then the determination of the
8771 // neutron numbers N1 and N2 at scission by randon decision
8772 N1r = 1.0;
8773 N2r = 1.0;
8774 while (N1r < 5.0 || N2r < 5.0) {
8775 // N1r = DBLE(GaussHaz(k,sngl(N1mean), sngl(N1width) ))
8776 // N1r = N1mean+G4AblaRandom::gaus(N1width);//
8777 N1r = gausshaz(0, N1mean, N1width);
8778 N2r = N - N1r;
8779 }
8780
8781 // --------------------------------------------------
8782 // first approximation of fission fragments using UCD at saddle
8783 // --------------------------------------------------
8784 Z1UCD = Z / N * N1r;
8785 Z2UCD = Z / N * N2r;
8786 A1r = A / N * N1r;
8787 //
8788 // --------------------------
8789 // deformations: starting ...
8790 // -------------------------- */
8791 if (imode == 1) {
8792 // --- N = 82 */
8793 E_scission_pre = max(epsilon_1_scission, 1.0);
8794 // ! Eexc at scission, neutron evaporation from saddle to scission not
8795 // considered */
8796 if (N1mean > N * 0.50) {
8797 beta1 = 0.0; /* 1. fragment is spherical */
8798 beta2 = 0.55; /* 2. fragment is deformed 0.5*/
8799 }
8800 else {
8801 beta1 = 0.55; /* 1. fragment is deformed 0.5*/
8802 beta2 = 0.00; /* 2. fragment is spherical */
8803 }
8804 }
8805 if (imode == 2) {
8806 // --- N appr. 86 */
8807 E_scission_pre = max(epsilon_2_scission, 1.0);
8808 if (N1mean > N * 0.50) {
8809 beta1 = (N1r - 92.0) * 0.030 + 0.60;
8810
8811 beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)];
8812 beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)];
8813
8814 beta1 = max(beta1, beta1gs);
8815 beta2 = 1.0 - beta1;
8816 beta2 = max(beta2, beta2gs);
8817 }
8818 else {
8819 beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)];
8820 beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)];
8821
8822 beta2 = (N2r - 92.0) * 0.030 + 0.60;
8823 beta2 = max(beta2, beta2gs);
8824 beta1 = 1.0 - beta2;
8825 beta1 = max(beta1, beta1gs);
8826 }
8827 }
8828 beta = 0.0;
8829 if (imode == 3) {
8830 // if( imode >0 ){
8831 // --- Symmetric fission channel
8832 // the fit function for beta is the deformation for optimum energy
8833 // at the scission point, d = 2
8834 // beta : deformation of symmetric fragments
8835 // beta1 : deformation of first fragment
8836 // beta2 : deformation of second fragment
8837 betags = ecld->beta2[idint(Nsymm)][idint(Zsymm)];
8838 beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)];
8839 beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)];
8840 beta = max(0.177963 + 0.0153241 * Zsymm - 1.62037e-4 * Zsymm * Zsymm, betags);
8841 beta1 = max(0.177963 + 0.0153241 * Z1UCD - 1.62037e-4 * Z1UCD * Z1UCD, beta1gs);
8842 beta2 = max(0.177963 + 0.0153241 * Z2UCD - 1.62037e-4 * Z2UCD * Z2UCD, beta2gs);
8843
8844 E_asym = frldm(Z1UCD, N1r, beta1) + frldm(Z2UCD, N2r, beta2)
8845 + ecoul(Z1UCD, N1r, beta1, Z2UCD, N2r, beta2, 2.0) - 2.0 * frldm(Zsymm, Nsymm, beta)
8846 - ecoul(Zsymm, Nsymm, beta, Zsymm, Nsymm, beta, 2.0);
8847 E_scission_pre = max(epsilon_symm_scission - E_asym, 1.);
8848 }
8849 // -----------------------
8850 // ... end of deformations
8851 // -----------------------
8852
8853 // ------------------------------------------
8854 // evaporation from saddle to scission ...
8855 // ------------------------------------------
8856 if (E_scission_pre > 5. && NbLam0 < 1) {
8857 evap_postsaddle(A, Z, E_scission_pre, &E_scission_post, &A_scission, &Z_scission, vx_eva_sc,
8858 vy_eva_sc, vz_eva_sc, &NbLam0);
8859 N_scission = A_scission - Z_scission;
8860 }
8861 else {
8862 A_scission = A;
8863 Z_scission = Z;
8864 E_scission_post = E_scission_pre;
8865 N_scission = A_scission - Z_scission;
8866 }
8867 // ---------------------------------------------------
8868 // second approximation of fission fragments using UCD
8869 // --------------------------------------------------- */
8870 //
8871 N1r = N1r * N_scission / N;
8872 N2r = N2r * N_scission / N;
8873 Z1UCD = Z1UCD * Z_scission / Z;
8874 Z2UCD = Z2UCD * Z_scission / Z;
8875 A1r = Z1UCD + N1r;
8876
8877 // ---------------------------------------------------------
8878 // determination of the charge and mass of the fragments ...
8879 // ---------------------------------------------------------
8880
8881 // - CZ is the curvature of charge distribution for fixed mass,
8882 // common to all modes, gives the width of the charge distribution.
8883 // The physics picture behind is that the division of the
8884 // fissioning nucleus in N and Z is slow when mass transport from
8885 // one nascent fragment to the other is concerned but fast when the
8886 // N/Z degree of freedom is concernded. In addition, the potential
8887 // minima in direction of mass transport are broad compared to the
8888 // potential minimum in N/Z direction.
8889 // The minima in direction of mass transport are calculated
8890 // by the liquid-drop (LD) potential (for superlong mode),
8891 // by LD + N=82 shell (for standard 1 mode) and
8892 // by LD + N=86 shell (for standard 2 mode).
8893 // Since the variation of N/Z is fast, it can quickly adjust to
8894 // the potential and is thus determined close to scission.
8895 // Thus, we calculate the mean N/Z and its width for fixed mass
8896 // at scission.
8897 // For the SL mode, the mean N/Z is calculated by the
8898 // minimum of the potential at scission as a function of N/Z for
8899 // fixed mass.
8900 // For the S1 and S2 modes, this correlation is imposed by the
8901 // empirical charge polarisation.
8902 // For the SL mode, the fluctuation in this width is calculated
8903 // from the curvature of the potential at scission as a function
8904 // of N/Z. This value is also used for the widths of S1 and S2.
8905
8906 // Polarisation assumed for standard I and standard II:
8907 // Z - Zucd = cpol (for A = const);
8908 // from this we get (see remarks above)
8909 // Z - Zucd = Acn/Ncn * cpol (for N = const) */
8910 //
8911 CZ = (frldm(Z1UCD - 1.0, N1r + 1.0, beta1) + frldm(Z2UCD + 1.0, N2r - 1.0, beta2)
8912 + frldm(Z1UCD + 1.0, N1r - 1.0, beta1) + frldm(Z2UCD - 1.0, N2r + 1.0, beta2)
8913 + ecoul(Z1UCD - 1.0, N1r + 1.0, beta1, Z2UCD + 1.0, N2r - 1.0, beta2, 2.0)
8914 + ecoul(Z1UCD + 1.0, N1r - 1.0, beta1, Z2UCD - 1.0, N2r + 1.0, beta2, 2.0)
8915 - 2.0 * ecoul(Z1UCD, N1r, beta1, Z2UCD, N2r, beta2, 2.0) - 2.0 * frldm(Z1UCD, N1r, beta1)
8916 - 2.0 * frldm(Z2UCD, N2r, beta2))
8917 * 0.50;
8918 //
8919 if (1.0 / A_levdens * E_scission_post < 0.0)
8920 std::cout << "DSQRT 1 < 0" << A_levdens << " " << E_scission_post << std::endl;
8921
8922 if (0.50 * std::sqrt(1.0 / A_levdens * E_scission_post) / CZ < 0.0) {
8923 std::cout << "DSQRT 2 < 0 " << CZ << std::endl;
8924 std::cout << "This event was not considered" << std::endl;
8925 goto fiss321;
8926 }
8927
8928 ZA1width = std::sqrt(0.5 * std::sqrt(1.0 / A_levdens * E_scission_post) / CZ);
8929
8930 // Minimum width in N/Z imposed.
8931 // Value of minimum width taken from 235U(nth,f) data
8932 // sigma_Z(A=const) = 0.4 to 0.5 (from Lang paper Nucl Phys. A345 (1980)
8933 // 34) sigma_N(Z=const) = 0.45 * A/Z (= 1.16 for 238U)
8934 // therefore: SIGZMIN = 1.16
8935 // Physics; variation in N/Z for fixed A assumed.
8936 // Thermal energy at scission is reduced by
8937 // pre-scission neutron evaporation"
8938
8939 ZA1width = max(ZA1width, sigZmin);
8940
8941 if (imode == 1 && cpol1 != 0.0) {
8942 // --- asymmetric fission, mode 1 */
8943 G4int IS = 0;
8944 fiss2801:
8945 Z1rr = Z1UCD - cpol1 * A_scission / N_scission;
8946 // Z1r = DBLE(GaussHaz(k,sngl(Z1rr), sngl(ZA1width) ));
8947 // Z1r = Z1rr+G4AblaRandom::gaus(ZA1width);//
8948 Z1r = gausshaz(0, Z1rr, ZA1width);
8949 IS = IS + 1;
8950 if (IS > 100) {
8951 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN "
8952 "CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED"
8953 << std::endl;
8954 Z1r = Z1rr;
8955 }
8956 if ((utilabs(Z1rr - Z1r) > 3.0 * ZA1width) || Z1r < 1.0) goto fiss2801;
8957 N1r = A1r - Z1r;
8958 }
8959 else {
8960 if (imode == 2 && cpol2 != 0.0) {
8961 // --- asymmetric fission, mode 2 */
8962 G4int IS = 0;
8963 fiss2802:
8964 Z1rr = Z1UCD - cpol2 * A_scission / N_scission;
8965 // Z1r = Z1rr+G4AblaRandom::gaus(ZA1width);//
8966 Z1r = gausshaz(0, Z1rr, ZA1width);
8967 IS = IS + 1;
8968 if (IS > 100) {
8969 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN "
8970 "CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED"
8971 << std::endl;
8972 Z1r = Z1rr;
8973 }
8974 if ((utilabs(Z1rr - Z1r) > 3.0 * ZA1width) || Z1r < 1.0) goto fiss2802;
8975 N1r = A1r - Z1r;
8976 }
8977 else {
8978 // Otherwise do; /* Imode = 3 in any case; imode = 1 and 2 for CPOL =
8979 // 0 */
8980 // and symmetric case */
8981 // We treat a simultaneous split in Z and N to determine
8982 // polarisation */
8983
8984 re1 = frldm(Z1UCD - 1.0, N1r + 1.0, beta1) + frldm(Z2UCD + 1.0, N2r - 1.0, beta2)
8985 + ecoul(Z1UCD - 1.0, N1r + 1.0, beta1, Z2UCD + 1.0, N2r - 1.0, beta2, d); /* d = 2 fm */
8986 re2 = frldm(Z1UCD, N1r, beta1) + frldm(Z2UCD, N2r, beta2)
8987 + ecoul(Z1UCD, N1r, beta1, Z2UCD, N2r, beta2, d); /* d = 2 fm */
8988 re3 = frldm(Z1UCD + 1.0, N1r - 1.0, beta1) + frldm(Z2UCD - 1.0, N2r + 1.0, beta2)
8989 + ecoul(Z1UCD + 1.0, N1r - 1.0, beta1, Z2UCD - 1.0, N2r + 1.0, beta2, d); /* d = 2 fm */
8990 eps2 = (re1 - 2.0 * re2 + re3) / 2.0;
8991 eps1 = (re3 - re1) / 2.0;
8992 DN1_POL = -eps1 / (2.0 * eps2);
8993 //
8994 Z1rr = Z1UCD + DN1_POL;
8995
8996 // Polarization of Standard 1 from shell effects around 132Sn
8997 if (imode == 1) {
8998 if (Z1rr > 50.0) {
8999 DN1_POL = DN1_POL - 0.6 * Uwash(E_scission_post, Ecrit, FREDSHELL, gamma);
9000 Z1rr = Z1UCD + DN1_POL;
9001 if (Z1rr < 50.) Z1rr = 50.0;
9002 }
9003 else {
9004 DN1_POL = DN1_POL + 0.60 * Uwash(E_scission_post, Ecrit, FREDSHELL, gamma);
9005 Z1rr = Z1UCD + DN1_POL;
9006 if (Z1rr > 50.0) Z1rr = 50.0;
9007 }
9008 }
9009
9010 G4int IS = 0;
9011 fiss2803:
9012 // Z1r = Z1rr+G4AblaRandom::gaus(ZA1width);
9013 Z1r = gausshaz(0, Z1rr, ZA1width);
9014 IS = IS + 1;
9015 if (IS > 100) {
9016 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN "
9017 "CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED"
9018 << std::endl;
9019 Z1r = Z1rr;
9020 }
9021
9022 if ((utilabs(Z1rr - Z1r) > 3.0 * ZA1width) || (Z1r < 1.0)) goto fiss2803;
9023 N1r = A1r - Z1r;
9024 }
9025 }
9026
9027 // ------------------------------------------
9028 // Integer proton number with even-odd effect
9029 // ------------------------------------------
9030 even_odd(Z1r, r_e_o, i_help);
9031
9032 z1 = G4double(i_help);
9033 z2 = dint(Z_scission) - z1;
9034 N1 = dint(N1r);
9035 N2 = dint(N_scission) - N1;
9036 a1 = z1 + N1;
9037 a2 = z2 + N2;
9038
9039 if ((z1 < 0) || (z2 < 0) || (a1 < 0) || (a2 < 0)) {
9040 std::cout << " -------------------------------" << std::endl;
9041 std::cout << " Z, A, N : " << Z << " " << A << " " << N << std::endl;
9042 std::cout << z1 << " " << z2 << " " << a1 << " " << a2 << std::endl;
9043 std::cout << E_scission_post << " " << A_levdens << " " << CZ << std::endl;
9044
9045 std::cout << " -------------------------------" << std::endl;
9046 }
9047
9048 // -----------------------
9049 // excitation energies ...
9050 // -----------------------
9051 //
9052 if (imode == 1) {
9053 // ---- N = 82
9054 if (N1mean > N * 0.50) {
9055 // (a) 1. fragment is spherical and 2. fragment is deformed */
9056 E_defo = 0.0;
9057 beta2gs = ecld->beta2[idint(N2)][idint(z2)];
9058 if (beta2 < beta2gs) beta2 = beta2gs;
9059 E1exc = E_scission_pre * a1 / A + E_defo;
9060 E_defo = frldm(z2, N2, beta2) - frldm(z2, N2, beta2gs);
9061 E2exc = E_scission_pre * a2 / A + E_defo;
9062 }
9063 else {
9064 // (b) 1. fragment is deformed and 2. fragment is spherical */
9065 beta1gs = ecld->beta2[idint(N1)][idint(z1)];
9066 if (beta1 < beta1gs) beta1 = beta1gs;
9067 E_defo = frldm(z1, N1, beta1) - frldm(z1, N1, beta1gs);
9068 E1exc = E_scission_pre * a1 / A + E_defo;
9069 E_defo = 0.0;
9070 E2exc = E_scission_pre * a2 / A + E_defo;
9071 }
9072 }
9073
9074 if (imode == 2) {
9075 // --- N appr. 86 */
9076 if (N1mean > N * 0.5) {
9077 /* 2. fragment is spherical */
9078 beta1gs = ecld->beta2[idint(N1)][idint(z1)];
9079 if (beta1 < beta1gs) beta1 = beta1gs;
9080 E_defo = frldm(z1, N1, beta1) - frldm(z1, N1, beta1gs);
9081 E1exc = E_scission_pre * a1 / A + E_defo;
9082 beta2gs = ecld->beta2[idint(N2)][idint(z2)];
9083 if (beta2 < beta2gs) beta2 = beta2gs;
9084 E_defo = frldm(z2, N2, beta2) - frldm(z2, N2, beta2gs);
9085 E2exc = E_scission_pre * a2 / A + E_defo;
9086 }
9087 else {
9088 /* 1. fragment is spherical */
9089 beta2gs = ecld->beta2[idint(N2)][idint(z2)];
9090 if (beta2 < beta2gs) beta2 = beta2gs;
9091 E_defo = frldm(z2, N2, beta2) - frldm(z2, N2, beta2gs);
9092 E2exc = E_scission_pre * a2 / A + E_defo;
9093 beta1gs = ecld->beta2[idint(N1)][idint(z1)];
9094 if (beta1 < beta1gs) beta1 = beta1gs;
9095 E_defo = frldm(z1, N1, beta1) - frldm(z1, N1, beta1gs);
9096 E1exc = E_scission_pre * a1 / A + E_defo;
9097 }
9098 }
9099
9100 if (imode == 3) {
9101 // --- Symmetric fission channel
9102 beta1gs = ecld->beta2[idint(N1)][idint(z1)];
9103 if (beta1 < beta1gs) beta1 = beta1gs;
9104 beta2gs = ecld->beta2[idint(N2)][idint(z2)];
9105 if (beta2 < beta2gs) beta2 = beta2gs;
9106 E_defo1 = frldm(z1, N1, beta1) - frldm(z1, N1, beta1gs);
9107 E_defo2 = frldm(z2, N2, beta2) - frldm(z2, N2, beta2gs);
9108 E1exc = E_scission_pre * a1 / A + E_defo1;
9109 E2exc = E_scission_pre * a2 / A + E_defo2;
9110 }
9111
9112 // pre-neutron-emission total kinetic energy */
9113 TKER = (z1 * z2 * 1.440)
9114 / (R0 * std::pow(a1, 0.333330) * (1.0 + 2.0 / 3.0 * beta1)
9115 + R0 * std::pow(a2, 0.333330) * (1.0 + 2.0 / 3.0 * beta2) + 2.0);
9116 // Pre-neutron-emission kinetic energies of the fragments */
9117 EkinR1 = TKER * a2 / A;
9118 EkinR2 = TKER * a1 / A;
9119 v1 = std::sqrt(EkinR1 / a1) * 1.3887;
9120 v2 = std::sqrt(EkinR2 / a2) * 1.3887;
9121
9122 // Extracted from Lang et al. Nucl. Phys. A 345 (1980) 34 */
9123 E1exc_sigma = 5.50;
9124 E2exc_sigma = 5.50;
9125
9126fis987:
9127 // e1 = E1exc+G4AblaRandom::gaus(E1exc_sigma);//
9128 e1 = gausshaz(0, E1exc, E1exc_sigma);
9129 if (e1 < 0.) goto fis987;
9130fis988:
9131 // e2 = E2exc+G4AblaRandom::gaus(E2exc_sigma);//
9132 e2 = gausshaz(0, E2exc, E2exc_sigma);
9133 if (e2 < 0.) goto fis988;
9134
9135 (*NbLam0_par) = NbLam0;
9136 return;
9137}
void even_odd(G4double r_origin, G4double r_even_odd, G4int &i_out)
Definition G4Abla.cc:9139
void evap_postsaddle(G4double A, G4double Z, G4double E_scission_pre, G4double *E_scission_post, G4double *A_scission, G4double *Z_scission, G4double &vx_eva, G4double &vy_eva, G4double &vz_eva, G4int *NbLam0_par)
Definition G4Abla.cc:7688
G4double Uwash(G4double E, G4double Ecrit, G4double Freduction, G4double gamma)
Definition G4Abla.cc:9257
G4double ecoul(G4double z1, G4double n1, G4double beta1, G4double z2, G4double n2, G4double beta2, G4double d)
Definition G4Abla.cc:9227
G4double frldm(G4double z, G4double n, G4double beta)
Definition G4Abla.cc:9272
#define N
Definition crc32.c:57

Referenced by fission().

◆ fmaxhaz()

G4double G4Abla::fmaxhaz ( G4double T)

tirage aleatoire dans une maxwellienne

Definition at line 6030 of file G4Abla.cc.

6031{
6032 return (-x * std::log(G4AblaRandom::flat()) - x * std::log(G4AblaRandom::flat())
6033 - x * std::log(G4AblaRandom::flat()));
6034}

Referenced by evapora().

◆ fmaxhaz_old()

G4double G4Abla::fmaxhaz_old ( G4double T)

tirage aleatoire dans une maxwellienne

Definition at line 6036 of file G4Abla.cc.

6037{
6038 // tirage aleatoire dans une maxwellienne
6039 // t : temperature
6040 //
6041 // declaration des variables
6042 //
6043
6044 const G4int pSize = 101;
6045 G4double p[pSize];
6046
6047 // ial generateur pour le cascade (et les iy pour eviter les correlations)
6048 G4int i = 0;
6049 G4int itest = 0;
6050 // programme principal
6051
6052 // calcul des p(i) par approximation de newton
6053 p[pSize - 1] = 8.0;
6054 G4double x = 0.1;
6055 G4double x1 = 0.0;
6056 G4double y = 0.0;
6057
6058 if (itest == 1) {
6059 goto fmaxhaz120;
6060 }
6061
6062 for (i = 1; i <= 99; i++) {
6063 fmaxhaz20:
6064 x1 = x - (f(x) - G4double(i) / 100.0) / fd(x);
6065 x = x1;
6066 if (std::fabs(f(x) - G4double(i) / 100.0) < 1e-5) {
6067 goto fmaxhaz100;
6068 }
6069 goto fmaxhaz20;
6070 fmaxhaz100:
6071 p[i] = x;
6072 } // end do
6073
6074 // itest = 1;
6075 itest = 0;
6076 // tirage aleatoire et calcul du x correspondant
6077 // par regression lineaire
6078fmaxhaz120:
6079 y = G4AblaRandom::flat();
6080 i = nint(y * 100);
6081
6082 // 2590 c ici on evite froidement les depassements de tableaux....(a.b.
6083 // 3/9/99)
6084 if (i == 0) {
6085 goto fmaxhaz120;
6086 }
6087
6088 if (i == 1) {
6089 x = p[i] * y * 100;
6090 }
6091 else {
6092 x = (p[i] - p[i - 1]) * (y * 100 - i) + p[i];
6093 }
6094
6095 return (x * T);
6096}
G4double f(G4double E)
Definition G4Abla.cc:6024
G4double fd(G4double E)
Definition G4Abla.cc:6017

◆ fomega_gs()

void G4Abla::fomega_gs ( G4double AF,
G4double ZF,
G4double * K1,
G4double * sOMEGA,
G4double * sHOMEGA )

Calculation of omega at ground state.

Definition at line 5452 of file G4Abla.cc.

5453{
5454 /*
5455 c Y 1 - Fissility
5456 c OMEGA Frequency at the ground state, in units 1.e-21 s
5457 */
5458 G4double OMEGA, HOMEGA, MR02, MINERT, C, fk1;
5459 //
5460 MR02 = std::pow(AF, 5.0 / 3.0) * 1.0340 * 0.01 * 1.175 * 1.175;
5461 MINERT = 3. * MR02 / 10.0;
5462 C = 17.9439 * (1. - 1.7826 * std::pow((AF - 2.0 * ZF) / AF, 2));
5463 fk1 = 0.4 * C * std::pow(AF, 2.0 / 3.0) - 0.1464 * std::pow(ZF, 2) / std::pow(AF, 1. / 3.);
5464 OMEGA = std::sqrt(fk1 / MINERT);
5465 HOMEGA = 6.58122 * OMEGA / 10.0;
5466 //
5467 (*K1) = fk1;
5468 (*sOMEGA) = OMEGA;
5469 (*sHOMEGA) = HOMEGA;
5470 //
5471 return;
5472}

Referenced by direct(), func_trans(), and part_fiss().

◆ fomega_sp()

void G4Abla::fomega_sp ( G4double AF,
G4double Y,
G4double * MFCD,
G4double * sOMEGA,
G4double * sHOMEGA )

Calculation of omega at saddle point.

Definition at line 5426 of file G4Abla.cc.

5427{
5428 /*
5429 c Y 1 - Fissility
5430 c OMEGA Frequency at the ground state, in units 1.e-21 s
5431 */
5432 G4double OMEGA, HOMEGA, ES0, MR02;
5433
5434 ES0 = 20.760 * std::pow(AF, 2.0 / 3.0);
5435 // In units 1.e-42 MeVs**2; r0 = 1.175e-15 m,
5436 // u=931.49MeV/c**2=103.4MeV*s**2/m**2 divided by 1.e-4 to go from 1.e-46
5437 // to 1.e-42
5438 MR02 = std::pow(AF, 5.0 / 3.0) * 1.0340 * 0.010 * 1.175 * 1.175;
5439 // Determination of the inertia of the fission collective degree of freedom
5440 (*MFCD) = MR02 * 3.0 / 10.0 * (1.0 + 3.0 * Y);
5441 // Omega at saddle
5442 OMEGA = std::sqrt(ES0 / MR02) * std::sqrt(8.0 / 3.0 * Y * (1.0 + 304.0 * Y / 255.0));
5443 //
5444 HOMEGA = 6.58122 * OMEGA / 10.0;
5445 //
5446 (*sOMEGA) = OMEGA;
5447 (*sHOMEGA) = HOMEGA;
5448 //
5449 return;
5450}

Referenced by direct(), func_trans(), and tunnelling().

◆ frldm()

G4double G4Abla::frldm ( G4double z,
G4double n,
G4double beta )

Definition at line 9272 of file G4Abla.cc.

9273{
9274 // Liquid-drop mass, Myers & Swiatecki, Lysekil, 1967
9275 // pure liquid drop, without pairing and shell effects
9276 //
9277 // On input: Z nuclear charge of nucleus
9278 // N number of neutrons in nucleus
9279 // beta deformation of nucleus
9280 // On output: binding energy of nucleus
9281 // The idea is to use FRLDM model for beta=0 and using Lysekil
9282 // model to get the deformation energy
9283
9284 G4double a;
9285 a = n + z;
9286 return eflmac_profi(a, z) + umass(z, n, beta) - umass(z, n, 0.0);
9287}
G4double umass(G4double z, G4double n, G4double beta)
Definition G4Abla.cc:9199
G4double eflmac_profi(G4double a, G4double z)
Definition G4Abla.cc:9301

Referenced by fissionDistri().

◆ func_trans()

G4double G4Abla::func_trans ( G4double TIME,
G4double ZF,
G4double AF,
G4double BET,
G4double Y,
G4double FT,
G4double T_0 )

Definition at line 6713 of file G4Abla.cc.

6715{
6716 /*
6717 c This function determines the fission width as a function o time
6718 c according to the analytical solution of the FPE for the probability
6719 distribution c at the barrier when the nucleus potential is aproximated by a
6720 parabolic c potential. It is taken from S. Chandrasekhar, Rev. Mod. Phys. 15
6721 (1943) 1
6722 c
6723 c***********************INPUT PARAMETERS*********************************
6724 c Time Time at which we evaluate the fission width
6725 c ZF Z of nucleus
6726 C AF A of nucleus
6727 c BET Reduced dissipation coefficient
6728 c FT Nuclear temperature
6729 C**************************************************************************
6730 C********************************OUTPUT***********************************
6731 C Fission decay width at the corresponding time of the decay cascade
6732 C*************************************************************************
6733 c****************************OTHER VARIABLES******************************
6734 C SIGMA_SQR Square of the width of the prob. distribution
6735 C XB Deformation of the nucleus at the saddle point
6736 c NORM Normalization factor of the probability distribution
6737 c W Probability distribution at the saddle deformation XB
6738 c W_INFIN Probability distr. at XB at infinite time
6739 c MFCD Mass of the fission collective degree of freedom
6740 C*************************************************************************
6741 */
6742 G4double PI = 3.14159;
6743 G4double DEFO_INIT, OMEGA, HOMEGA, OMEGA_GS, HOMEGA_GS, K1, MFCD;
6744 G4double BET1, XACT, SIGMA_SQR, W_EXP, XB, NORM, SIGMA_SQR_INF, W_INFIN, W;
6745 G4double FUNC_TRANS, LOG_SLOPE_INF, LOG_SLOPE_ABS;
6746 //
6747 // Influence of initial deformation
6748 // Initial alpha2 deformation (GS)
6749 DEFO_INIT = std::sqrt(5.0 / (4.0 * PI)) * ecld->beta2[fiss->at - fiss->zt][fiss->zt];
6750 //
6751 fomega_sp(AF, Y, &MFCD, &OMEGA, &HOMEGA);
6752 fomega_gs(AF, ZF, &K1, &OMEGA_GS, &HOMEGA_GS);
6753 //
6754 // Determination of the square of the width of the probability distribution
6755 // For the overdamped regime BET**2 > 4*OMEGA**2
6756 if ((bet * bet) > 4.0 * OMEGA_GS * OMEGA_GS) {
6757 BET1 = std::sqrt(bet * bet - 4.0 * OMEGA_GS * OMEGA_GS);
6758 //
6759 // REMEMBER THAT HOMEGA IS ACTUALLY HBAR*HOMEGA1=1MeV
6760 // SO THAT HOMEGA1 = HOMEGA/HBAR
6761 //
6762 SIGMA_SQR =
6763 (FT / K1)
6764 * (1.0
6765 - ((2.0 * bet * bet / (BET1 * BET1)
6766 * (0.5
6767 * (std::exp(0.50 * (BET1 - bet) * 1.e21 * TIME)
6768 - std::exp(0.5 * (-BET1 - bet) * 1.e21 * TIME)))
6769 * (0.5
6770 * (std::exp(0.50 * (BET1 - bet) * 1.e21 * TIME)
6771 - std::exp(0.5 * (-BET1 - bet) * 1.e21 * TIME))))
6772 + (bet / BET1 * 0.50
6773 * (std::exp((BET1 - bet) * 1.e21 * TIME) - std::exp((-BET1 - bet) * 1.e21 * TIME)))
6774 + 1. * std::exp(-bet * 1.e21 * TIME)));
6775 //
6776 // Evolution of the mean x-value (KHS March 2006)
6777 XACT = DEFO_INIT * std::exp(-0.5 * (bet - BET1) * 1.e21 * (TIME - T_0));
6778 //
6779 }
6780 else {
6781 // For the underdamped regime BET**2 < 4*HOMEGA**2 BET1 becomes a complex
6782 // number and the expression with sinh and cosh can be transformed in one
6783 // with sin and cos
6784 BET1 = std::sqrt(4.0 * OMEGA_GS * OMEGA_GS - bet * bet);
6785 SIGMA_SQR = FT / K1
6786 * (1.
6787 - std::exp(-1.0 * bet * 1.e21 * TIME)
6788 * (bet * bet / (BET1 * BET1) * (1. - std::cos(BET1 * 1.e21 * TIME))
6789 + bet / BET1 * std::sin(BET1 * 1.e21 * TIME) + 1.0));
6790 XACT = DEFO_INIT * std::cos(0.5 * BET1 * 1.e21 * (TIME - T_0))
6791 * std::exp(-bet * 1.e21 * (TIME - T_0));
6792 }
6793
6794 // Determination of the deformation at the saddle point according to
6795 // "Geometrical relationships of Macroscopic Nucl. Phys." from Hass and Myers
6796 // page 100 This corresponds to alpha2 deformation.
6797 XB = 7. / 3. * Y - 938. / 765. * Y * Y + 9.499768 * Y * Y * Y - 8.050944 * Y * Y * Y * Y;
6798 //
6799 // Determination of the probability distribution at the saddle deformation
6800 //
6801 if (SIGMA_SQR > 0.0) {
6802 NORM = 1. / std::sqrt(2. * PI * SIGMA_SQR);
6803 //
6804 W_EXP = -1. * (XB - XACT) * (XB - XACT) / (2.0 * SIGMA_SQR);
6805 if (W_EXP < (-708.0)) W_EXP = -708.0;
6806 W = NORM * std::exp(W_EXP) * FT / (K1 * SIGMA_SQR);
6807 }
6808 else {
6809 W = 0.0;
6810 }
6811 //
6812 // Determination of the fission decay width, we assume we are in the
6813 // overdamped regime
6814 //
6815 SIGMA_SQR_INF = FT / K1;
6816 W_EXP = -XB * XB / (2.0 * SIGMA_SQR_INF);
6817 if (W_EXP < (-708.0)) W_EXP = -708.0;
6818 W_INFIN = std::exp(W_EXP) / std::sqrt(2.0 * PI * SIGMA_SQR_INF);
6819 FUNC_TRANS = W / W_INFIN;
6820 //
6821 // Correction for the variation of the mean velocity at the fission barrier
6822 // (see B. Jurado et al, Nucl. Phys. A747, p. 14)
6823 //
6824 LOG_SLOPE_INF = cram(bet, HOMEGA) * bet * MFCD * OMEGA / FT;
6825 LOG_SLOPE_ABS =
6826 (XB - XACT) / SIGMA_SQR - XB / SIGMA_SQR_INF + cram(bet, HOMEGA) * bet * MFCD * OMEGA / FT;
6827 //
6828 FUNC_TRANS = FUNC_TRANS * LOG_SLOPE_ABS / LOG_SLOPE_INF;
6829 //
6830 return FUNC_TRANS;
6831}
@ TIME
Definition inflate.h:23

Referenced by part_fiss().

◆ fvmaxhaz()

G4double G4Abla::fvmaxhaz ( G4double T)

Definition at line 6700 of file G4Abla.cc.

6701{
6702 // Random generator according to a distribution similar to a
6703 // Maxwell distribution with quantum-mech. x-section for charged particles
6704 // according to KHS
6705 // Y = X**(1.5E0) / (B+X) * EXP(-X/T) (approximation:)
6706
6707 return (3.0 * T
6708 * std::pow(-1. * std::log(G4AblaRandom::flat()) * std::log(G4AblaRandom::flat())
6709 * std::log(G4AblaRandom::flat()),
6710 0.333333));
6711}

Referenced by direct().

◆ fvmaxhaz_neut()

G4double G4Abla::fvmaxhaz_neut ( G4double x)

Definition at line 7290 of file G4Abla.cc.

7291{
7292 return (2.0 * x * std::sqrt(std::log(G4AblaRandom::flat()) * std::log(G4AblaRandom::flat())));
7293}

Referenced by direct().

◆ gammln()

G4double G4Abla::gammln ( G4double xx)

LOGARITHM OF THE GAMM FUNCTION

Definition at line 5997 of file G4Abla.cc.

5998{
5999 G4double fgammln, x, ser, tmp, y;
6000 G4double cof[6] = {76.18009172947146, -86.50532032941677, 24.01409824083091,
6001 -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5};
6002 G4double stp = 2.5066282746310005;
6003
6004 x = xx;
6005 y = x;
6006 tmp = x + 5.5;
6007 tmp = (x + 0.5) * std::log(tmp) - tmp;
6008 ser = 1.000000000190015;
6009 for (G4int j = 0; j < 6; j++) {
6010 y = y + 1.;
6011 ser = ser + cof[j] / y;
6012 }
6013
6014 return fgammln = tmp + std::log(stp * ser / x);
6015}

Referenced by gcf(), and gser().

◆ gammp()

G4double G4Abla::gammp ( G4double a,
G4double x )

Definition at line 5920 of file G4Abla.cc.

5921{
5922 G4double fgammp;
5923 G4double gammcf, gamser, gln = 0.;
5924
5925 if (x < 0.0 || a <= 0.0) std::cout << "G4Abla::gammp = bad arguments in gammp" << std::endl;
5926 if (x < a + 1.) {
5927 gser(&gamser, a, x, gln);
5928 fgammp = gamser;
5929 }
5930 else {
5931 gcf(&gammcf, a, x, gln);
5932 fgammp = 1. - gammcf;
5933 }
5934 return fgammp;
5935}
void gser(G4double *gamser, G4double a, G4double x, G4double gln)
Definition G4Abla.cc:5969
void gcf(G4double *gammcf, G4double a, G4double x, G4double gln)
Definition G4Abla.cc:5937

Referenced by erf().

◆ gausshaz()

G4double G4Abla::gausshaz ( G4int k,
G4double xmoy,
G4double sig )

Definition at line 10561 of file G4Abla.cc.

10562{
10563 // Gaussian random numbers:
10564
10565 // 1005 C*** TIRAGE ALEATOIRE DANS UNE GAUSSIENNE DE LARGEUR SIG ET
10566 // MOYENNE XMOY
10567 static G4ThreadLocal G4int iset = 0;
10568 static G4ThreadLocal G4double v1, v2, r, fac, gset, fgausshaz;
10569
10570 if (iset == 0) { // then
10571 do {
10572 v1 = 2.0 * haz(k) - 1.0;
10573 v2 = 2.0 * haz(k) - 1.0;
10574 r = std::pow(v1, 2) + std::pow(v2, 2);
10575 } while (r >= 1);
10576
10577 fac = std::sqrt(-2. * std::log(r) / r);
10578 gset = v1 * fac;
10579 fgausshaz = v2 * fac * sig + xmoy;
10580 iset = 1;
10581 }
10582 else {
10583 fgausshaz = gset * sig + xmoy;
10584 iset = 0;
10585 }
10586 return fgausshaz;
10587}
G4double haz(G4int k)
Definition G4Abla.cc:10403
#define G4ThreadLocal
Definition tls.hh:77

Referenced by AMOMENT(), DeexcitationAblaxx(), direct(), and fissionDistri().

◆ gcf()

void G4Abla::gcf ( G4double * gammcf,
G4double a,
G4double x,
G4double gln )

Definition at line 5937 of file G4Abla.cc.

5938{
5939 G4double fgammcf, del;
5940 G4double eps = 3e-7;
5941 G4double fpmin = 1e-30;
5942 G4int itmax = 100;
5943 G4double an, b, c, d, h;
5944
5945 gln = gammln(a);
5946 b = x + 1. - a;
5947 c = 1. / fpmin;
5948 d = 1. / b;
5949 h = d;
5950 for (G4int i = 1; i <= itmax; i++) {
5951 an = -i * (i - a);
5952 b = b + 2.;
5953 d = an * d + b;
5954 if (std::fabs(d) < fpmin) d = fpmin;
5955 c = b + an / c;
5956 if (std::fabs(c) < fpmin) c = fpmin;
5957 d = 1.0 / d;
5958 del = d * c;
5959 h = h * del;
5960 if (std::fabs(del - 1.) < eps) goto dir1;
5961 }
5962 std::cout << "a too large, ITMAX too small in gcf" << std::endl;
5963dir1:
5964 fgammcf = std::exp(-x + a * std::log(x) - gln) * h;
5965 (*gammcf) = fgammcf;
5966 return;
5967}
G4double gammln(G4double xx)
Definition G4Abla.cc:5997

Referenced by gammp().

◆ getdeltabinding()

G4double G4Abla::getdeltabinding ( G4double a,
G4int nblamb )

Separation energies of for other particles for hypernuclei

Definition at line 8009 of file G4Abla.cc.

8010{
8011 if (A < 1.) return (1. * H) / A * (10.68 * A - 21.27 * std::pow(A, 2. / 3.)) * 10.;
8012 return (1. * H) / A * (10.68 * A - 21.27 * std::pow(A, 2. / 3.));
8013}

Referenced by direct().

◆ gethyperbinding()

G4double G4Abla::gethyperbinding ( G4double A,
G4double Z,
G4int ny )

Definition at line 8084 of file G4Abla.cc.

8085{
8086 //
8087 // Bethe-Weizsacker mass formula
8088 // Journal of Physics G, Nucl Part Phys 32,363 (2006)
8089 //
8090 if (A < 2 || Z < 2) return 0.;
8091 G4double N = A - Z - 1. * ny;
8092 G4double be = 0., my = 1115.683, av = 15.77, as = 18.34, ac = 0.71, asym = 23.21, k = 17.,
8093 c = 30., D = 0.;
8094 if (mod(N, 2) == 1 && mod(Z, 2) == 1) D = -12. / std::sqrt(A);
8095 if (mod(N, 2) == 0 && mod(Z, 2) == 0) D = 12. / std::sqrt(A);
8096 //
8097 G4double deltanew = (1. - std::exp(-1. * A / c)) * D;
8098 //
8099 be = av * A - as * std::pow(A, 2. / 3.) - ac * Z * (Z - 1.) / std::pow(A, 1. / 3.)
8100 - asym * (N - Z) * (N - Z) / ((1. + std::exp(-1. * A / k)) * A) + deltanew
8101 + ny * (0.0335 * my - 26.7 - 48.7 / std::pow(A, 2.0 / 3.0));
8102 return be;
8103}
G4double D(G4double temp)

Referenced by direct(), and gethyperseparation().

◆ gethyperseparation()

G4double G4Abla::gethyperseparation ( G4double A,
G4double Z,
G4int ny )

Separation energies of lambda

Definition at line 8015 of file G4Abla.cc.

8016{
8017 if (A < 1.) return 1.e38;
8018 // For light nuclei we take experimental values
8019 // Journal of Physics G, Nucl Part Phys 32,363 (2006)
8020 if (ny == 1) {
8021 if (Z == 1 && A == 4)
8022 return 2.04;
8023 else if (Z == 2 && A == 4)
8024 return 2.39;
8025 else if (Z == 2 && A == 5)
8026 return 3.12;
8027 else if (Z == 2 && A == 6)
8028 return 4.18;
8029 else if (Z == 2 && A == 7)
8030 return 5.23;
8031 else if (Z == 2 && A == 8)
8032 return 7.16;
8033 else if (Z == 3 && A == 6)
8034 return 4.50;
8035 else if (Z == 3 && A == 7)
8036 return 5.58;
8037 else if (Z == 3 && A == 8)
8038 return 6.80;
8039 else if (Z == 3 && A == 9)
8040 return 8.50;
8041 else if (Z == 4 && A == 7)
8042 return 5.16;
8043 else if (Z == 4 && A == 8)
8044 return 6.84;
8045 else if (Z == 4 && A == 9)
8046 return 6.71;
8047 else if (Z == 4 && A == 10)
8048 return 9.11;
8049 else if (Z == 5 && A == 9)
8050 return 8.29;
8051 else if (Z == 5 && A == 10)
8052 return 9.01;
8053 else if (Z == 5 && A == 11)
8054 return 10.29;
8055 else if (Z == 5 && A == 12)
8056 return 11.43;
8057 else if (Z == 6 && A == 12)
8058 return 10.95;
8059 else if (Z == 6 && A == 13)
8060 return 11.81;
8061 else if (Z == 6 && A == 14)
8062 return 12.50;
8063 else if (Z == 7 && A == 14)
8064 return 12.17;
8065 else if (Z == 7 && A == 15)
8066 return 13.59;
8067 else if (Z == 8 && A == 16)
8068 return 12.50;
8069 else if (Z == 8 && A == 17)
8070 return 13.59;
8071 else if (Z == 14 && A == 28)
8072 return 16.0;
8073 else if (Z == 39 && A == 89)
8074 return 22.1;
8075 else if (Z == 57 && A == 139)
8076 return 23.8;
8077 else if (Z == 82 && A == 208)
8078 return 26.5;
8079 } // ny==1
8080 // For other nuclei we take Bethe-Weizsacker mass formula
8081 return gethyperbinding(A, Z, ny) - gethyperbinding(A - 1., Z, ny - 1);
8082}

Referenced by direct().

◆ gser()

void G4Abla::gser ( G4double * gamser,
G4double a,
G4double x,
G4double gln )

Definition at line 5969 of file G4Abla.cc.

5970{
5971 G4double fgamser, ap, sum, del;
5972 G4double eps = 3e-7;
5973 G4int itmax = 100;
5974
5975 gln = gammln(a);
5976 if (x <= 0.) {
5977 if (x < 0.) std::cout << "G4Abla::gser = x < 0 in gser" << std::endl;
5978 (*gamser) = 0.0;
5979 return;
5980 }
5981 ap = a;
5982 sum = 1. / a;
5983 del = sum;
5984 for (G4int n = 0; n < itmax; n++) {
5985 ap = ap + 1.;
5986 del = del * x / ap;
5987 sum = sum + del;
5988 if (std::fabs(del) < std::fabs(sum) * eps) goto dir1;
5989 }
5990 std::cout << "a too large, ITMAX too small in gser" << std::endl;
5991dir1:
5992 fgamser = sum * std::exp(-x + a * std::log(x) - gln);
5993 (*gamser) = fgamser;
5994 return;
5995}

Referenced by gammp().

◆ guet()

void G4Abla::guet ( G4double * x_par,
G4double * z_par,
G4double * find_par )

Definition at line 6098 of file G4Abla.cc.

6099{
6100 // TABLE DE MASSES ET FORMULE DE MASSE TIRE DU PAPIER DE BRACK-GUET
6101 // Gives the theoritical value for mass excess...
6102 // Revisee pour x, z flottants 25/4/2002
6103
6104 // real*8 x,z
6105 // dimension q(0:50,0:70)
6106 G4double x = (*x_par);
6107 G4double z = (*z_par);
6108 G4double find = (*find_par);
6109
6110 const G4int qrows = 50;
6111 const G4int qcols = 70;
6112 G4double q[qrows][qcols];
6113 for (G4int init_i = 0; init_i < qrows; init_i++) {
6114 for (G4int init_j = 0; init_j < qcols; init_j++) {
6115 q[init_i][init_j] = 0.0;
6116 }
6117 }
6118
6119 G4int ix = G4int(std::floor(x + 0.5));
6120 G4int iz = G4int(std::floor(z + 0.5));
6121 G4double zz = iz;
6122 G4double xx = ix;
6123 find = 0.0;
6124 G4double avol = 15.776;
6125 G4double asur = -17.22;
6126 G4double ac = -10.24;
6127 G4double azer = 8.0;
6128 G4double xjj = -30.03;
6129 G4double qq = -35.4;
6130 G4double c1 = -0.737;
6131 G4double c2 = 1.28;
6132
6133 if (ix <= 7) {
6134 q[0][1] = 939.50;
6135 q[1][1] = 938.21;
6136 q[1][2] = 1876.1;
6137 q[1][3] = 2809.39;
6138 q[2][4] = 3728.34;
6139 q[2][3] = 2809.4;
6140 q[2][5] = 4668.8;
6141 q[2][6] = 5606.5;
6142 q[3][5] = 4669.1;
6143 q[3][6] = 5602.9;
6144 q[3][7] = 6535.27;
6145 q[4][6] = 5607.3;
6146 q[4][7] = 6536.1;
6147 q[5][7] = 6548.3;
6148 find = q[iz][ix];
6149 }
6150 else {
6151 G4double xneu = xx - zz;
6152 G4double si = (xneu - zz) / xx;
6153 G4double x13 = std::pow(xx, .333);
6154 G4double ee1 = c1 * zz * zz / x13;
6155 G4double ee2 = c2 * zz * zz / xx;
6156 G4double aux = 1. + (9. * xjj / 4. / qq / x13);
6157 G4double ee3 = xjj * xx * si * si / aux;
6158 G4double ee4 = avol * xx + asur * (std::pow(xx, .666)) + ac * x13 + azer;
6159 G4double tota = ee1 + ee2 + ee3 + ee4;
6160 find = 939.55 * xneu + 938.77 * zz - tota;
6161 }
6162
6163 (*x_par) = x;
6164 (*z_par) = z;
6165 (*find_par) = find;
6166}

◆ haz()

G4double G4Abla::haz ( G4int k)

Definition at line 10403 of file G4Abla.cc.

10404{
10405 // const G4int pSize = 110;
10406 // static G4ThreadLocal G4double p[pSize];
10407 static G4ThreadLocal G4int ix = 0;
10408 static G4ThreadLocal G4double x = 0.0, y = 0.0;
10409 // k =< -1 on initialise
10410 // k = -1 c'est reproductible
10411 // k < -1 || k > -1 ce n'est pas reproductible
10412 /*
10413 // Zero is invalid random seed. Set proper value from our random seed
10414 collection: if(ix == 0) {
10415 // ix = hazard->ial;
10416 }
10417 */
10418 if (k <= -1) { // then
10419 if (k == -1) { // then
10420 ix = 0;
10421 }
10422 else {
10423 x = 0.0;
10424 y = secnds(G4int(x));
10425 ix = G4int(y * 100 + 43543000);
10426 if (mod(ix, 2) == 0) {
10427 ix = ix + 1;
10428 }
10429 }
10430 }
10431
10432 return G4AblaRandom::flat();
10433}
G4int secnds(G4int x)
Definition G4Abla.cc:6357

Referenced by gausshaz(), imf(), and tke_bu().

◆ idint()

G4int G4Abla::idint ( G4double a)

Definition at line 6402 of file G4Abla.cc.

6403{
6404 G4int value = 0;
6405 if (x - std::floor(x) <= std::ceil(x) - x)
6406 value = G4int(std::floor(x));
6407 else
6408 value = G4int(std::ceil(x));
6409
6410 return value;
6411}

Referenced by bipol(), and fissionDistri().

◆ idnint()

G4int G4Abla::idnint ( G4double value)

Definition at line 6413 of file G4Abla.cc.

6414{
6415 if (x - std::floor(x) <= std::ceil(x) - x)
6416 return G4int(std::floor(x));
6417 else
6418 return G4int(std::ceil(x));
6419}

Referenced by bsbkbc(), DeexcitationAblaxx(), densniv(), direct(), fission(), imf(), lorb(), mglms(), parite(), qrot(), tunnelling(), unstable_tke(), and width().

◆ imf()

void G4Abla::imf ( G4double ACN,
G4double ZCN,
G4double TEMP,
G4double EE,
G4double * ZIMF,
G4double * AIMF,
G4double * BIMF,
G4double * SBIMF,
G4double * TIMF,
G4double JPRF )

Calculation of imfs.

Definition at line 7295 of file G4Abla.cc.

7297{
7298 // input variables (compound nucleus) Acn, Zcn, Temp, EE
7299 // output variable (IMF) Zimf,Aimf,Bimf,Sbimf,IRNDM
7300 //
7301 // SBIMF = separation energy + coulomb barrier
7302 //
7303 // SDW(Z) is the sum over all isotopes for a given Z of the decay widths
7304 // DW(Z,A) is the decay width of a certain nuclide
7305 //
7306 // Last update:
7307 // 28/10/13 - JLRS - from abrablav4 (AK)
7308 // 13/11/16 - JLRS - Included this function in Abla++
7309
7310 G4int IZIMFMAX = 0;
7311 G4int iz = 0, in = 0, IZIMF = 0, INMI = 0, INMA = 0, IZCN = 0, INCN = 0, INIMFMI = 0, INIMFMA = 0,
7312 ILIMMAX = 0, INNMAX = 0, INMIN = 0, IAIMF = 0, IZSTOP = 3, IZMEM = 0, IA = 0, INMINMEM = 0,
7313 INMAXMEM = 0, IIA = 0;
7314 G4double BS = 0, BK = 0, BC = 0, BSHELL = 0, DEFBET = 0, DEFBETIMF = 0, EROT = 0, MAIMF = 0,
7315 MAZ = 0, MARES = 0, AIMF_1, OMEGAP = 0, fBIMF = 0.0, BSIMF = 0, A1PAR = 0, A2PAR = 0,
7316 SUM_A, EEDAUG;
7317 G4double DENSCN = 0, TEMPCN = 0, ECOR = 0, IINERT = 0, EROTCN = 0, WIDTH_IMF = 0.0, WIDTH1 = 0,
7318 IMFARG = 0, QR = 0, QRCN = 0, DENSIMF = 0, fTIMF = 0, fZIMF = 0, fAIMF = 0.0, NIMF = 0,
7319 fSBIMF = 0;
7320 G4double PI = 3.141592653589793238;
7321 G4double ZIMF_1 = 0.0;
7322 G4double SDWprevious = 0, SUMDW_TOT = 0, SUM_Z = 0, X = 0, SUMDW_N_TOT = 0, XX = 0;
7323 G4double SDW[98];
7324 G4double DW[98][251];
7325 G4double BBIMF[98][251];
7326 G4double SSBIMF[98][251];
7327 G4int OPTSHPIMF = opt->optshpimf;
7328
7329 // Initialization
7330 for (G4int ia = 0; ia < 98; ia++)
7331 for (G4int ib = 0; ib < 251; ib++) {
7332 BBIMF[ia][ib] = 0.0;
7333 SSBIMF[ia][ib] = 0.0;
7334 }
7335
7336 // take the half of the CN and transform it in integer (floor it)
7337 IZIMFMAX = idnint(ZCN / 2.0);
7338
7339 if (IZIMFMAX < 3) {
7340 std::cout << "CHARGE_IMF line 46" << std::endl;
7341 std::cout << "Problem: IZIMFMAX < 3 " << std::endl;
7342 std::cout << "ZCN,IZIMFMAX," << ZCN << "," << IZIMFMAX << std::endl;
7343 }
7344
7345 iz = idnint(ZCN);
7346 in = idnint(ACN) - iz;
7347 BSHELL = ecld->ecgnz[in][iz] - ecld->vgsld[in][iz];
7348 DEFBET = ecld->beta2[in][iz];
7349
7350 bsbkbc(ACN, ZCN, &BS, &BK, &BC);
7351
7352 densniv(ACN, ZCN, EE, 0.0, &DENSCN, BSHELL, BS, BK, &TEMPCN, 0, 0, DEFBET, &ECOR, JPRF, 0, &QRCN);
7353
7354 IINERT = 0.4 * 931.49 * 1.16 * 1.16 * std::pow(ACN, 5.0 / 3.0)
7355 * (1.0 + 0.5 * std::sqrt(5. / (4. * PI)) * DEFBET);
7356 EROTCN = JPRF * JPRF * 197.328 * 197.328 / (2. * IINERT);
7357 //
7358 for (IZIMF = 3; IZIMF <= IZIMFMAX; IZIMF++) {
7359 SDW[IZIMF] = 0.0;
7360 ZIMF_1 = 1.0 * IZIMF;
7361
7362 // *** Find the limits that both IMF and partner are bound :
7363
7364 isostab_lim(IZIMF, &INIMFMI,
7365 &INIMFMA); // Bound isotopes for IZIMF from INMIN to INIMFMA
7366 // Idea - very proton-rich nuclei can live long enough to evaporate IMF
7367 // before decaying:
7368 INIMFMI = max(1, INIMFMI - 2);
7369
7370 IZCN = idnint(ZCN); // Z of CN
7371 INCN = idnint(ACN) - IZCN; // N of CN
7372
7373 isostab_lim(IZCN - IZIMF, &INMI,
7374 &INMA); // Daughter nucleus after IMF emission,
7375 // limits of bound isotopes
7376 INMI = max(1, INMI - 2);
7377 INMIN = max(INIMFMI, INCN - INMA); // Both IMF and daughter must be bound
7378 INNMAX = min(INIMFMA, INCN - INMI); // "
7379
7380 ILIMMAX = max(INNMAX, INMIN); // In order to keep the variables below
7381 // ***
7382
7383 for (G4int INIMF = INMIN; INIMF <= ILIMMAX; INIMF++) { // Range of possible IMF isotopes
7384 IAIMF = IZIMF + INIMF;
7385 DW[IZIMF][IAIMF] = 0.0;
7386 AIMF_1 = 1.0 * (IAIMF);
7387
7388 // Q-values
7389 mglms(ACN - AIMF_1, ZCN - ZIMF_1, OPTSHPIMF, &MARES);
7390 mglms(AIMF_1, ZIMF_1, OPTSHPIMF, &MAIMF);
7391 mglms(ACN, ZCN, OPTSHPIMF, &MAZ);
7392
7393 // Barrier
7394 if (ACN <= AIMF_1) {
7395 SSBIMF[IZIMF][IAIMF] = 1.e37;
7396 }
7397 else {
7398 barrs(idnint(ZCN - ZIMF_1), idnint(ACN - AIMF_1), idnint(ZIMF_1), idnint(AIMF_1), &fBIMF,
7399 &OMEGAP);
7400 SSBIMF[IZIMF][IAIMF] = MAIMF + MARES - MAZ + fBIMF;
7401 BBIMF[IZIMF][IAIMF] = fBIMF;
7402 }
7403
7404 // ***** Width *********************
7405 DEFBETIMF = ecld->beta2[idnint(AIMF_1 - ZIMF_1)][idnint(ZIMF_1)]
7406 + ecld->beta2[idnint(ACN - AIMF_1 - ZCN + ZIMF_1)][idnint(ZCN - ZIMF_1)];
7407
7408 IINERT = 0.40 * 931.490 * 1.160 * 1.160 * std::pow(ACN, 5.0 / 3.0)
7409 * (std::pow(AIMF_1, 5.0 / 3.0) + std::pow(ACN - AIMF_1, 5.0 / 3.0))
7410 + 931.490 * 1.160 * 1.160 * AIMF_1 * (ACN - AIMF_1) / ACN
7411 * (std::pow(AIMF_1, 1.0 / 3.0) + std::pow(ACN - AIMF_1, 1.0 / 3.0))
7412 * (std::pow(AIMF_1, 1.0 / 3.0) + std::pow(ACN - AIMF_1, 1.0 / 3.0));
7413
7414 EROT = JPRF * JPRF * 197.328 * 197.328 / (2.0 * IINERT);
7415
7416 // IF(IEROT.EQ.1) EROT = 0.D0
7417 if (EE < (SSBIMF[IZIMF][IAIMF] + EROT) || DENSCN <= 0.0) {
7418 WIDTH_IMF = 0.0;
7419 // PRINT*,IDNINT(ACN),IDNINT(ZCN),IZIMF,IAIMF
7420 }
7421 else {
7422 // here the temperature at "saddle point" is used
7423 // Increase of the level densitiy at the barrier due to deformation; see
7424 // comment in ABLA
7425 // BSIMF = ((ACN-AIMF_1)**(2.D0/3.D0) + AIMF_1**(2.D0/3.D0))/
7426 // & ACN**(2.D0/3.D0)
7427 BSIMF = BS;
7428 densniv(ACN, ZCN, EE, SSBIMF[IZIMF][IAIMF], &DENSIMF, 0.0, BSIMF, 1.0, &fTIMF, 0, 0,
7429 DEFBETIMF, &ECOR, JPRF, 2, &QR);
7430 IMFARG = (SSBIMF[IZIMF][IAIMF] + EROTCN - EROT) / fTIMF;
7431 if (IMFARG > 200.0) IMFARG = 200.0;
7432
7433 WIDTH1 = width(ACN, ZCN, AIMF_1, ZIMF_1, fTIMF, fBIMF, SSBIMF[IZIMF][IAIMF], EE - EROT);
7434
7435 WIDTH_IMF = WIDTH1 * std::exp(-IMFARG) * QR / QRCN;
7436
7437 if (WIDTH_IMF <= 0.0) {
7438 std::cout << "GAMMA_IMF=0 -> LOOK IN GAMMA_IMF CALCULATIONS!" << std::endl;
7439 std::cout << "ACN,ZCN,AIMF,ZIMF:" << idnint(ACN) << "," << idnint(ZCN) << ","
7440 << idnint(AIMF_1) << "," << idnint(ZIMF_1) << std::endl;
7441 std::cout << "SSBIMF,TIMF :" << SSBIMF[IZIMF][IAIMF] << "," << fTIMF << std::endl;
7442 std::cout << "DEXP(-IMFARG) = " << std::exp(-IMFARG) << std::endl;
7443 std::cout << "WIDTH1 =" << WIDTH1 << std::endl;
7444 }
7445 } // if ee
7446
7447 SDW[IZIMF] = SDW[IZIMF] + WIDTH_IMF;
7448
7449 DW[IZIMF][IAIMF] = WIDTH_IMF;
7450
7451 } // for INIMF
7452 } // for IZIMF
7453 // End loop to calculate the decay widths ************************
7454 // ***************************************************************
7455
7456 // Loop to calculate where the gamma of IMF has the minimum ******
7457 SDWprevious = 1.e20;
7458 IZSTOP = 0;
7459
7460 for (G4int III_ZIMF = 3; III_ZIMF <= IZIMFMAX; III_ZIMF++) {
7461 if (SDW[III_ZIMF] == 0.0) {
7462 IZSTOP = III_ZIMF - 1;
7463 goto imfs30;
7464 }
7465
7466 if (SDW[III_ZIMF] > SDWprevious) {
7467 IZSTOP = III_ZIMF - 1;
7468 goto imfs30;
7469 }
7470 else {
7471 SDWprevious = SDW[III_ZIMF];
7472 }
7473
7474 } // for III_ZIMF
7475
7476imfs30:
7477
7478 if (IZSTOP <= 6) {
7479 IZSTOP = IZIMFMAX;
7480 goto imfs15;
7481 }
7482
7483 A1PAR =
7484 std::log10(SDW[IZSTOP] / SDW[IZSTOP - 2]) / std::log10((1.0 * IZSTOP) / (1.0 * IZSTOP - 2.0));
7485 A2PAR = std::log10(SDW[IZSTOP]) - A1PAR * std::log10(1.0 * (IZSTOP));
7486 if (A2PAR > 0.) A2PAR = -1. * A2PAR;
7487 if (A1PAR > 0.) A1PAR = -1. * A1PAR;
7488
7489 // End loop to calculate where gamma of IMF has the minimum
7490
7491 for (G4int II_ZIMF = IZSTOP; II_ZIMF <= IZIMFMAX; II_ZIMF++) {
7492 SDW[II_ZIMF] = std::pow(10.0, A2PAR) * std::pow(1.0 * II_ZIMF, A1PAR); // Power-low
7493 if (SDW[II_ZIMF] < 0.0) SDW[II_ZIMF] = 0.0;
7494 }
7495
7496imfs15:
7497
7498 // Sum of all decay widths (for normalisation)
7499 SUMDW_TOT = 0.0;
7500 for (G4int I_ZIMF = 3; I_ZIMF <= IZIMFMAX; I_ZIMF++) {
7501 SUMDW_TOT = SUMDW_TOT + SDW[I_ZIMF];
7502 }
7503 if (SUMDW_TOT <= 0.0) {
7504 std::cout << "*********************" << std::endl;
7505 std::cout << "IMF function" << std::endl;
7506 std::cout << "SUM of decay widths = " << SUMDW_TOT << " IZIMFMAX = " << IZIMFMAX << std::endl;
7507 std::cout << "IZSTOP = " << IZSTOP << std::endl;
7508 }
7509
7510 // End of Sum of all decay widths (for normalisation)
7511
7512 // Loop to sample the nuclide that is emitted ********************
7513 // ------- sample Z -----------
7514imfs10:
7515 X = haz(1) * SUMDW_TOT;
7516
7517 // IF(X.EQ.0.D0) PRINT*,'WARNING: X=0',XRNDM,SUMDW_TOT
7518 SUM_Z = 0.0;
7519 fZIMF = 0.0;
7520 IZMEM = 0;
7521
7522 for (G4int IZ = 3; IZ <= IZIMFMAX; IZ++) {
7523 SUM_Z = SUM_Z + SDW[IZ];
7524 if (X < SUM_Z) {
7525 fZIMF = 1.0 * IZ;
7526 IZMEM = IZ;
7527 goto imfs20;
7528 }
7529 } // for IZ
7530
7531imfs20:
7532
7533 // ------- sample N -----------
7534
7535 isostab_lim(IZMEM, &INMINMEM, &INMAXMEM);
7536 INMINMEM = max(1, INMINMEM - 2);
7537
7538 isostab_lim(IZCN - IZMEM, &INMI,
7539 &INMA); // Daughter nucleus after IMF emission,
7540 INMI = max(1, INMI - 2);
7541 // limits of bound isotopes
7542
7543 INMINMEM = max(INMINMEM, INCN - INMA); // Both IMF and daughter must be bound
7544 INMAXMEM = min(INMAXMEM, INCN - INMI); // "
7545
7546 INMAXMEM = max(INMINMEM, INMAXMEM);
7547
7548 IA = 0;
7549 SUMDW_N_TOT = 0.0;
7550 for (G4int IIINIMF = INMINMEM; IIINIMF <= INMAXMEM; IIINIMF++) {
7551 IA = IZMEM + IIINIMF;
7552 if (IZMEM >= 3 && IZMEM <= 95 && IA >= 4 && IA <= 250) {
7553 SUMDW_N_TOT = SUMDW_N_TOT + DW[IZMEM][IA];
7554 }
7555 else {
7556 std::cout << "CHARGE IMF OUT OF RANGE" << IZMEM << ", " << IA << ", " << idnint(ACN) << ", "
7557 << idnint(ZCN) << ", " << TEMP << std::endl;
7558 }
7559 }
7560
7561 XX = haz(1) * SUMDW_N_TOT;
7562 IIA = 0;
7563 SUM_A = 0.0;
7564 for (G4int IINIMF = INMINMEM; IINIMF <= INMAXMEM; IINIMF++) {
7565 IIA = IZMEM + IINIMF;
7566 // SUM_A = SUM_A + DW[IZ][IIA]; //FIXME
7567 SUM_A = SUM_A + DW[IZMEM][IIA];
7568 if (XX < SUM_A) {
7569 fAIMF = G4double(IIA);
7570 goto imfs25;
7571 }
7572 }
7573
7574imfs25:
7575 // CHECK POINT 1
7576 NIMF = fAIMF - fZIMF;
7577
7578 if ((ACN - ZCN - NIMF) <= 0.0 || (ZCN - fZIMF) <= 0.0) {
7579 std::cout << "IMF Partner unstable:" << std::endl;
7580 std::cout << "System: Acn,Zcn,NCN:" << std::endl;
7581 std::cout << idnint(ACN) << ", " << idnint(ZCN) << ", " << idnint(ACN - ZCN) << std::endl;
7582 std::cout << "IMF: A,Z,N:" << std::endl;
7583 std::cout << idnint(fAIMF) << ", " << idnint(fZIMF) << ", " << idnint(fAIMF - fZIMF)
7584 << std::endl;
7585 std::cout << "Partner: A,Z,N:" << std::endl;
7586 std::cout << idnint(ACN - fAIMF) << ", " << idnint(ZCN - fZIMF) << ", "
7587 << idnint(ACN - ZCN - NIMF) << std::endl;
7588 std::cout << "----nmin,nmax" << INMINMEM << ", " << INMAXMEM << std::endl;
7589 std::cout << "----- warning: Zimf=" << fZIMF << " Aimf=" << fAIMF << std::endl;
7590 std::cout << "----- look in subroutine IMF" << std::endl;
7591 std::cout << "ACN,ZCN,ZIMF,AIMF,temp,EE,JPRF::" << ACN << ", " << ZCN << ", " << fZIMF << ", "
7592 << fAIMF << ", " << TEMP << ", " << EE << ", " << JPRF << std::endl;
7593 std::cout << "-IZSTOP,IZIMFMAX:" << IZSTOP << ", " << IZIMFMAX << std::endl;
7594 std::cout << "----X,SUM_Z,SUMDW_TOT:" << X << ", " << SUM_Z << ", " << SUMDW_TOT << std::endl;
7595 // for(int III_ZIMF=3;III_ZIMF<=IZIMFMAX;III_ZIMF++)
7596 // std::cout << "-**Z,SDW:" << III_ZIMF << ", " << SDW[III_ZIMF] <<
7597 // std::endl;
7598
7599 goto imfs10;
7600 }
7601 if (fZIMF >= ZCN || fAIMF >= ACN || fZIMF <= 2 || fAIMF <= 3) {
7602 std::cout << "----nmin,nmax" << INMINMEM << ", " << INMAXMEM << std::endl;
7603 std::cout << "----- warning: Zimf=" << fZIMF << " Aimf=" << fAIMF << std::endl;
7604 std::cout << "----- look in subroutine IMF" << std::endl;
7605 std::cout << "ACN,ZCN,ZIMF,AIMF,temp,EE,JPRF:" << ACN << ", " << ZCN << ", " << fZIMF << ", "
7606 << fAIMF << ", " << TEMP << ", " << EE << ", " << JPRF << std::endl;
7607 std::cout << "-IZSTOP,IZIMFMAX:" << IZSTOP << ", " << IZIMFMAX << std::endl;
7608 std::cout << "----X,SUM_Z,SUMDW_TOT:" << X << ", " << SUM_Z << ", " << SUMDW_TOT << std::endl;
7609 for (int III_ZIMF = 3; III_ZIMF <= IZIMFMAX; III_ZIMF++)
7610 std::cout << "-**Z,SDW:" << III_ZIMF << ", " << SDW[III_ZIMF] << std::endl;
7611
7612 fZIMF = 3.0; // provisorisch AK
7613 fAIMF = 4.0;
7614 }
7615
7616 // Characteristics of selected IMF (AIMF, ZIMF, BIMF, SBIMF, TIMF)
7617 fSBIMF = SSBIMF[idnint(fZIMF)][idnint(fAIMF)];
7618 fBIMF = BBIMF[idnint(fZIMF)][idnint(fAIMF)];
7619
7620 if ((ZCN - fZIMF) <= 0.0) std::cout << "CHARGE_IMF ZIMF > ZCN" << std::endl;
7621 if ((ACN - fAIMF) <= 0.0) std::cout << "CHARGE_IMF AIMF > ACN" << std::endl;
7622
7623 BSHELL = ecld->ecgnz[idnint(ACN - ZCN - NIMF)][idnint(ZCN - fZIMF)]
7624 - ecld->vgsld[idnint(ACN - ZCN - NIMF)][idnint(ZCN - fZIMF)];
7625
7626 DEFBET = ecld->beta2[idnint(ACN - ZCN - NIMF)][idnint(ZCN - fZIMF)];
7627 EEDAUG = (EE - fSBIMF) * (ACN - fAIMF) / ACN;
7628 bsbkbc(ACN - fAIMF, ZCN - fZIMF, &BS, &BK, &BC);
7629 densniv(ACN - fAIMF, ZCN - fZIMF, EEDAUG, 0.0, &DENSIMF, BSHELL, BS, BK, &fTIMF, 0, 0, DEFBET,
7630 &ECOR, 0.0, 0, &QR);
7631
7632 if (fSBIMF > EE) {
7633 std::cout << "----- warning: EE=" << EE << ","
7634 << " S+Bimf=" << fSBIMF << std::endl;
7635 std::cout << "----- look in subroutine IMF" << std::endl;
7636 std::cout << "IMF will be resampled" << std::endl;
7637 goto imfs10;
7638 }
7639 (*ZIMF) = fZIMF;
7640 (*AIMF) = fAIMF;
7641 (*SBIMF) = fSBIMF;
7642 (*BIMF) = fBIMF;
7643 (*TIMF) = fTIMF;
7644 return;
7645}

Referenced by evapora().

◆ initEvapora()

void G4Abla::initEvapora ( )

Initialize ABLA evaporation code.

Definition at line 2110 of file G4Abla.cc.

2111{
2112 // 40 C BFPRO,SNPRO,SPPRO,SHELL
2113 // 41 C
2114 // 42 C AP,ZP,AT,ZT - PROJECTILE AND TARGET MASSES
2115 // 43 C EAP,BETA - BEAM ENERGY PER NUCLEON, V/C
2116 // 44 C BMAXNUC - MAX. IMPACT PARAMETER FOR NUCL. REAC.
2117 // 45 C CRTOT,CRNUC - TOTAL AND NUCLEAR REACTION CROSS SECTION
2118 // 46 C R_0,R_P,R_T, - RADIUS PARAMETER, PROJECTILE+ TARGET RADII
2119 // 47 C IMAX,IRNDM,PI - MAXIMUM NUMBER OF EVENTS, DUMMY, 3.141...
2120 // 48 C BFPRO - FISSION BARRIER OF THE PROJECTILE
2121 // 49 C SNPRO - NEUTRON SEPARATION ENERGY OF THE
2122 // PROJECTILE 50 C SPPRO - PROTON " " " " "
2123 // 51 C SHELL - GROUND STATE SHELL CORRECTION
2124 // 52
2125 // C---------------------------------------------------------------------
2126 // 53 C
2127 // 54 C ENERGIES WIDTHS AND CROSS SECTIONS FOR EM EXCITATION
2128 // 55 C COMMON /EMDPAR/ EGDR,EGQR,FWHMGDR,FWHMGQR,CREMDE1,CREMDE2,
2129 // 56 C AE1,BE1,CE1,AE2,BE2,CE2,SR1,SR2,XR
2130 // 57 C
2131 // 58 C EGDR,EGQR - MEAN ENERGY OF GDR AND GQR
2132 // 59 C FWHMGDR,FWHMGQR - FWHM OF GDR, GQR
2133 // 60 C CREMDE1,CREMDE2 - EM CROSS SECTION FOR E1 AND E2
2134 // 61 C AE1,BE1,CE1 - ARRAYS TO CALCULATE
2135 // 62 C AE2,BE2,CE2 - THE EXCITATION ENERGY AFTER E.M. EXC.
2136 // 63 C SR1,SR2,XR - WITH MONTE CARLO
2137 // 64
2138 // C---------------------------------------------------------------------
2139 // 65 C
2140 // 66 C DEFORMATIONS AND G.S. SHELL EFFECTS
2141 // 67 C COMMON /ECLD/ ECGNZ,ECFNZ,VGSLD,ALPHA
2142 // 68 C
2143 // 69 C ECGNZ - GROUND STATE SHELL CORR. FRLDM FOR A SPHERICAL
2144 // G.S.
2145 // 70 C ECFNZ - SHELL CORRECTION FOR THE SADDLE POINT (NOW: == 0)
2146 // 71 C VGSLD - DIFFERENCE BETWEEN DEFORMED G.S. AND LDM VALUE
2147 // 72 C ALPHA - ALPHA GROUND STATE DEFORMATION (THIS IS NOT
2148 // BETA2!) 73 C BETA2 = SQRT(5/(4PI)) * ALPHA 74
2149 // C---------------------------------------------------------------------
2150 // 75 C
2151 // 76 C ARRAYS FOR EXCITATION ENERGY BY STATISTICAL HOLE ENERY
2152 // MODEL 77 C COMMON /EENUC/ SHE, XHE 78 C 79 C SHE,
2153 // XHE - ARRAYS TO CALCULATE THE EXC. ENERGY AFTER 80 C ABRASION BY
2154 // THE STATISTICAL HOLE ENERGY MODEL 81
2155 // C---------------------------------------------------------------------
2156 // 82 C
2157 // 83 C G.S. SHELL EFFECT
2158 // 84 C COMMON /EC2SUB/ ECNZ
2159 // 85 C
2160 // 86 C ECNZ G.S. SHELL EFFECT FOR THE MASSES (IDENTICAL TO ECGNZ)
2161 // 87
2162 // C---------------------------------------------------------------------
2163 //
2164
2165 G4double MN = 939.5653301;
2166 G4double MP = 938.7829835;
2167
2168 auto dataInterface = std::make_unique<G4AblaDataFile>();
2169 if (dataInterface->readData() == true) {
2170 if (verboseLevel > 0) {
2171 // G4cout <<"G4Abla: Datafiles read successfully." << G4endl;
2172 }
2173 }
2174 else {
2175 // G4Exception("ERROR: Failed to read datafiles.");
2176 }
2177
2178 for (G4int z = 0; z < 99; z++) { // do 30 z = 0,98,1
2179 for (G4int n = 0; n < 154; n++) { // do 31 n = 0,153,1
2180 ecld->ecfnz[n][z] = 0.e0;
2181 ec2sub->ecnz[n][z] = dataInterface->getEcnz(n, z);
2182 ecld->ecgnz[n][z] = dataInterface->getEcnz(n, z);
2183 ecld->alpha[n][z] = dataInterface->getAlpha(n, z);
2184 ecld->vgsld[n][z] = dataInterface->getVgsld(n, z);
2185 ecld->rms[n][z] = dataInterface->getRms(n, z);
2186 }
2187 }
2188
2189 for (G4int iz = 0; iz < zcolsbeta; iz++)
2190 for (G4int in = 0; in < nrowsbeta; in++) {
2191 ecld->beta2[in][iz] = dataInterface->getBeta2(in, iz);
2192 ecld->beta4[in][iz] = dataInterface->getBeta4(in, iz);
2193 }
2194
2195 G4double mfrldm[lprows][lpcols];
2196 // For 2 < Z < 12 we take "experimental" shell corrections instead of
2197 // calculated Read FRLDM tables
2198 for (G4int i = 1; i < lpcols; i++) {
2199 for (G4int j = 1; j < lprows; j++) {
2200 if (dataInterface->getMexpID(j, i) == 1) {
2201 masses->mexpiop[j][i] = 1;
2202 }
2203 else {
2204 masses->mexpiop[j][i] = 0;
2205 }
2206 // LD masses (even-odd effect is later considered according to Ignatyuk)
2207 if (i == 0 && j == 0)
2208 mfrldm[j][i] = 0.;
2209 else
2210 mfrldm[j][i] = MP * i + MN * j + eflmac(i + j, i, 1, 0);
2211 }
2212 }
2213
2214 for (G4int i = 0; i < lpcols; i++)
2215 for (G4int j = 0; j < lprows; j++)
2216 masses->massexp[j][i] = dataInterface->getMexp(j, i);
2217
2218 G4double e0 = 0.;
2219 for (G4int i = 1; i < lpcols; i++) {
2220 for (G4int j = 1; j < lprows; j++) {
2221 masses->bind[j][i] = 0.;
2222 if (masses->mexpiop[j][i] == 1) {
2223 if (j < 30) {
2224 ec2sub->ecnz[j][i] = 0.0;
2225 ecld->ecgnz[j][i] = ec2sub->ecnz[j][i];
2226 masses->bind[j][i] = dataInterface->getMexp(j, i) - MP * i - MN * j;
2227 ecld->vgsld[j][i] = 0.;
2228
2229 e0 = 0.;
2230 }
2231 else {
2232 // For these nuclei, we take "experimental" ground-state shell
2233 // corrections
2234 //
2235 // Parametrization of CT model by Ignatyuk; note that E0 is shifted to
2236 // correspond to pairing shift in Fermi-gas model (there, energy is
2237 // shifted taking odd-odd nuclei as bassis)
2238 G4double para = 0.;
2239 parite(j + i, &para);
2240 if (para < 0.0) {
2241 // e-o, o-e
2242 e0 = 0.285 + 11.17 * std::pow(j + i, -0.464) - 0.390 - 0.00058 * (j + i);
2243 }
2244 else {
2245 G4double parz = 0.;
2246 parite(i, &parz);
2247 if (parz > 0.0) {
2248 // e-e
2249 e0 = 22.34 * std::pow(j + i, -0.464) - 0.235;
2250 }
2251 else {
2252 // o-o
2253 //
2254 //
2255 e0 = 0.0;
2256 }
2257 }
2258 //
2259 if ((j == i) && mod(j, 2) == 1 && mod(i, 2) == 1) {
2260 e0 = e0 - 30.0 * (1.0 / G4double(j + i));
2261 }
2262
2263 G4double delta_tot = ec2sub->ecnz[j][i] - ecld->vgsld[j][i];
2264 ec2sub->ecnz[j][i] = dataInterface->getMexp(j, i) - (mfrldm[j][i] - e0);
2265
2266 ecld->vgsld[j][i] = max(0.0, ec2sub->ecnz[j][i] - delta_tot);
2267 ecld->ecgnz[j][i] = ec2sub->ecnz[j][i];
2268
2269 } // if j
2270 } // if mexpiop
2271 }
2272 }
2273}
constexpr const G4int nrowsbeta
constexpr const G4int lprows
constexpr const G4int zcolsbeta
constexpr const G4int lpcols

◆ IPOWERLIMHAZ()

G4int G4Abla::IPOWERLIMHAZ ( G4double lambda,
G4int xmin,
G4int xmax )

Random generator according to the powerfunction y = x**(lambda) in the range from xmin to xmax

Definition at line 10439 of file G4Abla.cc.

10440{
10441 G4double y, l_plus, rxmin, rxmax;
10442 l_plus = lambda + 1.;
10443 rxmin = G4double(xmin) - 0.5;
10444 rxmax = G4double(xmax) + 0.5;
10445 // y=(HAZ(k)*(rxmax**l_plus-rxmin**l_plus)+
10446 // rxmin**l_plus)**(1.E0/l_plus)
10447 y = std::pow(G4AblaRandom::flat() * (std::pow(rxmax, l_plus) - std::pow(rxmin, l_plus))
10448 + std::pow(rxmin, l_plus),
10449 1.0 / l_plus);
10450 return nint(y);
10451}

Referenced by DeexcitationAblaxx().

◆ ISIGN()

G4int G4Abla::ISIGN ( G4int a,
G4int b )

Definition at line 6315 of file G4Abla.cc.

6316{
6317 // A function that assigns the sign of the second argument to the
6318 // absolute value of the first
6319
6320 if (b >= 0) {
6321 return std::abs(a);
6322 }
6323 else {
6324 return -1 * std::abs(a);
6325 }
6326 return 0;
6327}

Referenced by DeexcitationAblaxx().

◆ isostab_lim()

void G4Abla::isostab_lim ( G4int z,
G4int * nmin,
G4int * nmax )

Limits of existing nuclei

Definition at line 7647 of file G4Abla.cc.

7648{
7649 G4int VISOSTAB[191][2] = {
7650 {0, 7}, {1, 8}, {1, 9}, {2, 12}, {2, 14}, {2, 16}, {3, 18}, {4, 22},
7651 {6, 22}, {6, 28}, {7, 28}, {7, 30}, {8, 28}, {8, 36}, {10, 38}, {10, 40},
7652 {11, 38}, {10, 42}, {13, 50}, {14, 50}, {15, 52}, {16, 52}, {17, 54}, {18, 54},
7653 {19, 60}, {19, 62}, {21, 64}, {20, 66}, {23, 66}, {24, 70}, {25, 70}, {26, 74},
7654 {27, 78}, {29, 82}, {33, 82}, {31, 82}, {35, 82}, {34, 84}, {40, 84}, {36, 86},
7655 {40, 92}, {38, 96}, {42, 102}, {42, 102}, {44, 102}, {42, 106}, {47, 112}, {44, 114},
7656 {49, 116}, {46, 118}, {52, 120}, {52, 124}, {55, 126}, {54, 126}, {57, 126}, {57, 126},
7657 {60, 126}, {58, 130}, {62, 132}, {60, 140}, {67, 138}, {64, 142}, {67, 144}, {68, 146},
7658 {70, 148}, {70, 152}, {73, 152}, {72, 154}, {75, 156}, {77, 162}, {79, 164}, {78, 164},
7659 {82, 166}, {80, 166}, {85, 168}, {83, 176}, {87, 178}, {88, 178}, {91, 182}, {90, 184},
7660 {96, 184}, {95, 184}, {99, 184}, {98, 184}, {105, 194}, {102, 194}, {108, 196}, {106, 198},
7661 {115, 204}, {110, 206}, {119, 210}, {114, 210}, {124, 210}, {117, 212}, {130, 212}};
7662
7663 if (z < 0) {
7664 *nmin = 0;
7665 *nmax = 0;
7666 }
7667 else {
7668 if (z == 0) {
7669 *nmin = 1;
7670 *nmax = 1;
7671 // AK (Dez2010) - Just to avoid numerical problems
7672 }
7673 else {
7674 if (z > 95) {
7675 *nmin = 130;
7676 *nmax = 200;
7677 }
7678 else {
7679 *nmin = VISOSTAB[z - 1][0];
7680 *nmax = VISOSTAB[z - 1][1];
7681 }
7682 }
7683 }
7684
7685 return;
7686}

Referenced by DeexcitationAblaxx(), direct(), imf(), and unstable_nuclei().

◆ lorb()

void G4Abla::lorb ( G4double AMOTHER,
G4double ADAUGHTER,
G4double LMOTHER,
G4double EEFINAL,
G4double * LORBITAL,
G4double * SIGMA_LORBITAL )

Calculation of mean value of orbital angular momentum.

Definition at line 7246 of file G4Abla.cc.

7248{
7249 G4double AFRAGMENT, S4FINAL, ALEVDENS;
7250 G4double THETA_MOTHER, THETA_ORBITAL;
7251
7252 /*
7253 C Values on input:
7254 C AMOTHER mass of mother nucleus
7255 C ADAUGHTER mass of daughter fragment
7256 C LMOTHER angular momentum of mother (may be real)
7257 C EEFINAL excitation energy after emission
7258 C (sum of daughter and fragment)
7259 C
7260 C Values on output:
7261 C LORBITAL mean value of orbital angular momentum
7262 C (assumed to be fully aligned with LMOTHER)
7263 C SIGMA_LORBITAL standard deviation of the orbital angular momentum
7264 */
7265 if (EEFINAL <= 0.01) EEFINAL = 0.01;
7266 AFRAGMENT = AMOTHER - ADAUGHTER;
7267 ALEVDENS = 0.073 * AMOTHER + 0.095 * std::pow(AMOTHER, 2.0 / 3.0);
7268 S4FINAL = ALEVDENS * EEFINAL;
7269 if (S4FINAL <= 0.0 || S4FINAL > 100000.) {
7270 std::cout << "S4FINAL:" << S4FINAL << ALEVDENS << EEFINAL << idnint(AMOTHER)
7271 << idnint(AFRAGMENT) << std::endl;
7272 }
7273 THETA_MOTHER = 0.0111 * std::pow(AMOTHER, 1.66667);
7274 THETA_ORBITAL = 0.0323 / std::pow(AMOTHER, 2.)
7275 * std::pow(std::pow(AFRAGMENT, 0.33333) + std::pow(ADAUGHTER, 0.33333), 2.)
7276 * AFRAGMENT * ADAUGHTER * (AFRAGMENT + ADAUGHTER);
7277
7278 *LORBITAL =
7279 -1. * THETA_ORBITAL * (LMOTHER / THETA_MOTHER + std::sqrt(S4FINAL) / (ALEVDENS * LMOTHER));
7280
7281 *SIGMA_LORBITAL = std::sqrt(std::sqrt(S4FINAL) * THETA_ORBITAL / ALEVDENS);
7282
7283 return;
7284}

Referenced by direct().

◆ lorentz_boost()

void G4Abla::lorentz_boost ( G4double VXRIN,
G4double VYRIN,
G4double VZRIN,
G4double VXIN,
G4double VYIN,
G4double VZIN,
G4double * VXOUT,
G4double * VYOUT,
G4double * VZOUT )

Calculation of lorentz's boost

Definition at line 10134 of file G4Abla.cc.

10137{
10138 //
10139 // Calculate velocities of a given fragment from frame 1 into frame 2.
10140 // Frame 1 is moving with velocity v=(vxr,vyr,vzr) relative to frame 2.
10141 // Velocity of the fragment in frame 1 -> vxin,vyin,vzin
10142 // Velocity of the fragment in frame 2 -> vxout,vyout,vzout
10143 //
10144 G4double VXR, VYR, VZR;
10145 G4double GAMMA, VR, C, CC, DENO, VXNOM, VYNOM, VZNOM;
10146 //
10147 C = 29.9792458; // cm/ns
10148 CC = C * C;
10149 //
10150 // VXR,VYR,VZR are velocities of frame 1 relative to frame 2; to go from 1 to
10151 // 2 we need to multiply them by -1
10152 VXR = -1.0 * VXRIN;
10153 VYR = -1.0 * VYRIN;
10154 VZR = -1.0 * VZRIN;
10155 //
10156 VR = std::sqrt(VXR * VXR + VYR * VYR + VZR * VZR);
10157 if (VR < 1e-9) {
10158 *VXOUT = VXIN;
10159 *VYOUT = VYIN;
10160 *VZOUT = VZIN;
10161 return;
10162 }
10163 GAMMA = 1.0 / std::sqrt(1.0 - VR * VR / CC);
10164 DENO = 1.0 - VXR * VXIN / CC - VYR * VYIN / CC - VZR * VZIN / CC;
10165
10166 // X component
10167 VXNOM = -GAMMA * VXR + (1.0 + (GAMMA - 1.0) * VXR * VXR / (VR * VR)) * VXIN
10168 + (GAMMA - 1.0) * VXR * VYR / (VR * VR) * VYIN
10169 + (GAMMA - 1.0) * VXR * VZR / (VR * VR) * VZIN;
10170
10171 *VXOUT = VXNOM / (GAMMA * DENO);
10172
10173 // Y component
10174 VYNOM = -GAMMA * VYR + (1.0 + (GAMMA - 1.0) * VYR * VYR / (VR * VR)) * VYIN
10175 + (GAMMA - 1.0) * VXR * VYR / (VR * VR) * VXIN
10176 + (GAMMA - 1.0) * VYR * VZR / (VR * VR) * VZIN;
10177
10178 *VYOUT = VYNOM / (GAMMA * DENO);
10179
10180 // Z component
10181 VZNOM = -GAMMA * VZR + (1.0 + (GAMMA - 1.0) * VZR * VZR / (VR * VR)) * VZIN
10182 + (GAMMA - 1.0) * VXR * VZR / (VR * VR) * VXIN
10183 + (GAMMA - 1.0) * VYR * VZR / (VR * VR) * VYIN;
10184
10185 *VZOUT = VZNOM / (GAMMA * DENO);
10186
10187 return;
10188}

Referenced by DeexcitationAblaxx(), evap_postsaddle(), evapora(), fission(), and unstable_tke().

◆ lpoly()

void G4Abla::lpoly ( G4double x,
G4int n,
G4double pl[] )

This subroutine calculates the ordinary legendre polynomials of order 0 to n-1 of argument x and stores them in the vector pl. They are calculated by recursion relation from the first two polynomials. Written by A.J.Sierk LANL t-9 February, 1984

Definition at line 5088 of file G4Abla.cc.

5089{
5090 // THIS SUBROUTINE CALCULATES THE ORDINARY LEGENDRE POLYNOMIALS OF
5091 // ORDER 0 TO N-1 OF ARGUMENT X AND STORES THEM IN THE VECTOR PL.
5092 // THEY ARE CALCULATED BY RECURSION RELATION FROM THE FIRST TWO
5093 // POLYNOMIALS.
5094 // WRITTEN BY A.J.SIERK LANL T-9 FEBRUARY, 1984
5095 // NOTE: PL AND X MUST BE DOUBLE PRECISION ON 32-BIT COMPUTERS!
5096
5097 pl[0] = 1.0;
5098 pl[1] = x;
5099
5100 for (G4int i = 2; i < n; i++) {
5101 pl[i] = ((2 * G4double(i + 1) - 3.0) * x * pl[i - 1] - (G4double(i + 1) - 2.0) * pl[i - 2])
5102 / (G4double(i + 1) - 1.0);
5103 }
5104}

Referenced by barfit().

◆ max() [1/2]

G4double G4Abla::max ( G4double a,
G4double b )

Definition at line 6281 of file G4Abla.cc.

6282{
6283 if (a > b) {
6284 return a;
6285 }
6286 else {
6287 return b;
6288 }
6289}

◆ max() [2/2]

G4int G4Abla::max ( G4int a,
G4int b )

Definition at line 6291 of file G4Abla.cc.

6292{
6293 if (a > b) {
6294 return a;
6295 }
6296 else {
6297 return b;
6298 }
6299}

Referenced by DeexcitationAblaxx(), densniv(), direct(), fissionDistri(), imf(), and initEvapora().

◆ mglms()

void G4Abla::mglms ( G4double a,
G4double z,
G4int refopt4,
G4double * el )

Mglms

Definition at line 2424 of file G4Abla.cc.

2425{
2426 // USING FUNCTION EFLMAC(IA,IZ,0)
2427 //
2428 // REFOPT4 = 0 : WITHOUT MICROSCOPIC CORRECTIONS
2429 // REFOPT4 = 1 : WITH SHELL CORRECTION
2430 // REFOPT4 = 2 : WITH PAIRING CORRECTION
2431 // REFOPT4 = 3 : WITH SHELL- AND PAIRING CORRECTION
2432
2433 // 1839
2434 // C-----------------------------------------------------------------------
2435 // 1840 C A1 LOCAL MASS NUMBER (INTEGER VARIABLE OF A)
2436 // 1841 C Z1 LOCAL NUCLEAR CHARGE (INTEGER VARIABLE OF Z)
2437 // 1842 C REFOPT4 OPTION, SPECIFYING THE MASS FORMULA (SEE
2438 // ABOVE) 1843 C A MASS NUMBER 1844 C Z
2439 // NUCLEAR CHARGE 1845 C DEL PAIRING CORRECTION 1846
2440 // C EL BINDING ENERGY 1847 C ECNZ( , ) TABLE OF
2441 // SHELL CORRECTIONS 1848
2442 // C-----------------------------------------------------------------------
2443 // 1849 C
2444 G4int a1 = idnint(a);
2445 G4int z1 = idnint(z);
2446 G4int n1 = a1 - z1;
2447
2448 if ((a1 <= 0) || (z1 <= 0) || ((a1 - z1) <= 0)) { // then
2449 // modif pour recuperer une masse p et n correcte:
2450 (*el) = 1.e38;
2451 return;
2452 // goto mglms50;
2453 }
2454 else {
2455 // binding energy incl. pairing contr. is calculated from
2456 // function eflmac
2457 (*el) = eflmac(a1, z1, 0, refopt4);
2458
2459 if (refopt4 > 0) {
2460 if (refopt4 != 2) {
2461 (*el) = (*el) + ec2sub->ecnz[a1 - z1][z1];
2462 }
2463 }
2464
2465 if (z1 >= 90) {
2466 if (n1 <= 145) {
2467 (*el) = (*el) + (12.552 - 0.1436 * z1);
2468 }
2469 else {
2470 if (n1 > 145 && n1 <= 152) {
2471 (*el) = (*el) + ((152.4 - 1.77 * z1) + (-0.972 + 0.0113 * z1) * n1);
2472 }
2473 }
2474 }
2475 }
2476 return;
2477}

Referenced by direct(), imf(), and unstable_tke().

◆ mglw()

void G4Abla::mglw ( G4double a,
G4double z,
G4double * el )

Model de la goutte liquide de c. f. weizsacker. usually an obsolete option

Definition at line 2397 of file G4Abla.cc.

2398{
2399 // MODEL DE LA GOUTTE LIQUIDE DE C. F. WEIZSACKER.
2400 // USUALLY AN OBSOLETE OPTION
2401
2402 G4double xv = 0.0, xs = 0.0, xc = 0.0, xa = 0.0;
2403
2404 if ((a <= 0.01) || (z < 0.01)) {
2405 (*el) = 1.0e38;
2406 }
2407 else {
2408 xv = -15.56 * a;
2409 xs = 17.23 * std::pow(a, (2.0 / 3.0));
2410
2411 if (a > 1.0) {
2412 xc = 0.7 * z * (z - 1.0) * std::pow((a - 1.0), (-1.e0 / 3.e0));
2413 }
2414 else {
2415 xc = 0.0;
2416 }
2417 }
2418
2419 xa = 23.6 * (std::pow((a - 2.0 * z), 2) / a);
2420 (*el) = xv + xs + xc + xa;
2421 return;
2422}

Referenced by direct().

◆ min() [1/2]

G4double G4Abla::min ( G4double a,
G4double b )

Definition at line 6261 of file G4Abla.cc.

6262{
6263 if (a < b) {
6264 return a;
6265 }
6266 else {
6267 return b;
6268 }
6269}

◆ min() [2/2]

G4int G4Abla::min ( G4int a,
G4int b )

Definition at line 6271 of file G4Abla.cc.

6272{
6273 if (a < b) {
6274 return a;
6275 }
6276 else {
6277 return b;
6278 }
6279}

Referenced by direct(), evapora(), fissionDistri(), and imf().

◆ mod()

G4int G4Abla::mod ( G4int a,
G4int b )

Definition at line 6373 of file G4Abla.cc.

6374{
6375 if (b != 0) {
6376 return a % b;
6377 }
6378 else {
6379 return 0;
6380 }
6381}

Referenced by barfit(), eflmac(), fissionDistri(), gethyperbinding(), haz(), initEvapora(), tunnelling(), and width().

◆ nint()

G4int G4Abla::nint ( G4double number)

Definition at line 6329 of file G4Abla.cc.

6330{
6331 G4double intpart = 0.0;
6332 G4double fractpart = 0.0;
6333 fractpart = std::modf(number, &intpart);
6334 if (number == 0) {
6335 return 0;
6336 }
6337 if (number > 0) {
6338 if (fractpart < 0.5) {
6339 return G4int(std::floor(number));
6340 }
6341 else {
6342 return G4int(std::ceil(number));
6343 }
6344 }
6345 if (number < 0) {
6346 if (fractpart < -0.5) {
6347 return G4int(std::floor(number));
6348 }
6349 else {
6350 return G4int(std::ceil(number));
6351 }
6352 }
6353
6354 return G4int(std::floor(number));
6355}

Referenced by FillData(), fmaxhaz_old(), and IPOWERLIMHAZ().

◆ operator=()

G4Abla & G4Abla::operator= ( G4Abla const & other)

Dummy assignment operator.

◆ parite()

void G4Abla::parite ( G4double n,
G4double * par )

PROCEDURE FOR CALCULATING THE PARITY OF THE NUMBER N. RETURNS -1 IF N IS ODD AND +1 IF N IS EVEN

Definition at line 5300 of file G4Abla.cc.

5301{
5302 // CALCUL DE LA PARITE DU NOMBRE N
5303 //
5304 // PROCEDURE FOR CALCULATING THE PARITY OF THE NUMBER N.
5305 // RETURNS -1 IF N IS ODD AND +1 IF N IS EVEN
5306
5307 G4double n1 = 0.0, n2 = 0.0, n3 = 0.0;
5308
5309 // N NUMBER TO BE TESTED
5310 // N1,N2 HELP VARIABLES
5311 // PAR HELP VARIABLE FOR PARITY OF N
5312
5313 n3 = G4double(idnint(n));
5314 n1 = n3 / 2.0;
5315 n2 = n1 - dint(n1);
5316
5317 if (n2 > 0.0) {
5318 (*par) = -1.0;
5319 }
5320 else {
5321 (*par) = 1.0;
5322 }
5323}

Referenced by appariem(), densniv(), eflmac(), and initEvapora().

◆ part_fiss()

void G4Abla::part_fiss ( G4double BET,
G4double GP,
G4double GF,
G4double Y,
G4double TAUF,
G4double TS1,
G4double TSUM,
G4int * CHOICE,
G4double ZF,
G4double AF,
G4double FT,
G4double * T_LAPSE,
G4double * GF_LOC )

Calculation of the fission probability modified by transient time effects.

Definition at line 6833 of file G4Abla.cc.

6836{
6837 /*
6838 C THIS SUBROUTINE IS AIMED TO CHOOSE BETWEEN PARTICLE EMISSION
6839 C AND FISSION
6840 C WE USE MONTE-CARLO METHODS AND SAMPLE TIME BETWEEN T=0 AND T=1.5*TAUF
6841 c TO SIMULATE THE TRANSIENT TIME WITH 30 STEPS (0.05*TAUF EACH)
6842 C FOR t>1.5*TAUF , GF=CONSTANT=ASYMPTOTICAL VALUE (INCLUDING KRAMERS
6843 FACTOR)
6844 c------------------------------------------------------------------------
6845 c Modifications introduced by BEATRIZ JURADO 18/10/01:
6846 c 1. Now this subrutine is included in the rutine direct
6847 c 2. TSUM does not include the current particle decay time
6848 C 3. T_LAPSE is the time until decay, taken as an output variable
6849 C 4. GF_LOC is also taken as an output variable
6850 C 5. BET (Diss. Coeff.) and HOMEGA (Frequency at the ground state
6851 c are included as input variables because they are needed for FUNC_TRANS
6852 C-----------------------------------------------------------------------
6853 C ON INPUT:
6854 C GP Partial particle decay width
6855 C GF Asymptotic value of Gamma-f, including Kramers
6856 factor C AF Mass number of nucleus C TAUF
6857 Transient time C TS1 Partial particle decay time for the
6858 next step C TSUM Total sum of partial particle decay
6859 times, including C the next expected one, which
6860 is in competition C with fission now C ZF
6861 Z of nucleus C AF A of nucleus
6862 C-----------------------------------------------------------------------
6863 C ON OUTPUT:
6864 C CHOICE Key for decay mode: 0 = no decay (only internal)
6865 C 1 = evaporation
6866 C 2 = fission
6867 C-----------------------------------------------------------------------
6868 C VARIABLES:
6869 C GP Partial particle decay width
6870 C GF Asymptotic value of Gamma-f, including Kramers
6871 factor C TAUF Transient time C TS1 Partial particle
6872 decay time C TSUM Total sum of partial particle decay
6873 times C CHOICE Key for decay mode C ZF Z of nucleus
6874 C AF A of nucleus
6875 C FT Used for Fermi function in FUNC_TRANS
6876 C STEP_LENGTH Step in time to sample different decays
6877 C BEGIN_TIME Total sum of partial particle decay times,
6878 excluding C the next expected one, which is in
6879 competition C with fission now C LOC_TIME_BEGIN
6880 Begin of time interval considered in one step C LOC_TIME_END End
6881 of time interval considered in one step C GF_LOC In-grow
6882 function for fission width, c normalized to
6883 asymptotic value C TS2 Effective partial fission decay
6884 time in one time step C HBAR hbar C T_LAPSE
6885 Effective decay time in one time step C REAC_PROB Reaction
6886 probability in one time step C X Help variable for
6887 random generator
6888 C------------------------------------------------------------------------
6889 */
6890 G4double K1, OMEGA, HOMEGA, t_0, STEP_LENGTH, LOC_TIME_BEGIN,
6891 LOC_TIME_END = 0., BEGIN_TIME = 0., FISS_PROB, X, TS2, LAMBDA, REAC_PROB;
6892 G4double HBAR = 6.582122e-22;
6893 G4int fchoice = 0;
6894 G4double fGF_LOC = 0., fT_LAPSE = 0.;
6895 //
6896 if (GF <= 0.0) {
6897 *CHOICE = 1;
6898 *T_LAPSE = TS1;
6899 *GF_LOC = 0.0;
6900 goto direct107;
6901 }
6902 //
6903 fomega_gs(AF, ZF, &K1, &OMEGA, &HOMEGA);
6904 //
6905 // ****************************************************************
6906 // Calculation of the shift in time due to the initial conditions
6907 //
6908 // Overdamped regime
6909 if (BET * BET > 4.0 * OMEGA * OMEGA) {
6910 // REMEMBER THAT HOMEGA IS ACTUALLY HBAR*HOMEGA1=1MeV
6911 // SO THAT HOMEGA1 = HOMEGA/HBAR
6912 // Additional factor 1/16 proposed by KHS on 14/7/2010. Takes into
6913 // account the fact that the curvature of the potential is ~16 times
6914 // larger than what predicted by the liquid drop model, because of
6915 // shell effects.
6916 t_0 = BET * 1.e21 * HBAR * HBAR / (4. * HOMEGA * FT) / 16.;
6917 }
6918 else {
6919 // Underdamped regime
6920 if (((2. * FT - HOMEGA / 16.) > 0.000001) && BET > 0.0) {
6921 // Additional factor 1/16 proposed by KHS on 14/7/2010. Takes into
6922 // account the fact that the curvature of the potential is ~16 times
6923 // larger than what predicted by the liquid drop model, because of
6924 // shell effects.
6925 t_0 = (std::log(2. * FT / (2. * FT - HOMEGA / 16.))) / (BET * 1.e21);
6926 }
6927 else {
6928 // Neglect fission transients if the time shift t_0 is too
6929 // large. Suppresses large, spurious fission cross section at very
6930 // low excitation energy in p+Ta.
6931 //
6932 fchoice = 0;
6933 goto direct106;
6934 }
6935 }
6936 // ********************************************************************+
6937 fchoice = 0;
6938 STEP_LENGTH = 1.5 * TAUF / 50.;
6939 //
6940 // AT FIRST WE CACULATE THE REAL CURRENT TIME
6941 // TSUM includes only the time elapsed in the previous steps
6942 //
6943 BEGIN_TIME = TSUM + t_0;
6944 //
6945 if (BEGIN_TIME < 0.0) std::cout << "CURRENT TIME < 0" << BEGIN_TIME << std::endl;
6946 //
6947 if (BEGIN_TIME < 1.50 * TAUF) {
6948 LOC_TIME_BEGIN = BEGIN_TIME;
6949 //
6950 while ((LOC_TIME_BEGIN < 1.5 * TAUF) && fchoice == 0) {
6951 LOC_TIME_END = LOC_TIME_BEGIN + STEP_LENGTH;
6952 //
6953 // NOW WE ESTIMATE THE MEAN VALUE OF THE FISSION WIDTH WITHIN THE SMALL
6954 // INTERVAL
6955 fGF_LOC = (func_trans(LOC_TIME_BEGIN, ZF, AF, BET, Y, FT, t_0)
6956 + func_trans(LOC_TIME_END, ZF, AF, BET, Y, FT, t_0))
6957 / 2.0;
6958 //
6959 fGF_LOC = fGF_LOC * GF;
6960
6961 // TS2 IS THE MEAN DECAY TIME OF THE FISSION CHANNEL
6962 if (fGF_LOC > 0.0) {
6963 TS2 = HBAR / fGF_LOC;
6964 }
6965 else {
6966 TS2 = 0.0;
6967 }
6968 //
6969 if (TS2 > 0.0) {
6970 LAMBDA = 1.0 / TS1 + 1.0 / TS2;
6971 }
6972 else {
6973 LAMBDA = 1.0 / TS1;
6974 }
6975 //
6976 // This is the probability to survive the decay at this step
6977 REAC_PROB = std::exp(-1.0 * STEP_LENGTH * LAMBDA);
6978 // I GENERATE A RANDOM NUMBER
6979 X = G4AblaRandom::flat();
6980 if (X > REAC_PROB) {
6981 // THEN THE EVAPORATION OR FISSION HAS OCCURED
6982 FISS_PROB = fGF_LOC / (fGF_LOC + GP);
6983 X = G4AblaRandom::flat();
6984 // WRITE(6,*)'X=',X
6985 if (X < FISS_PROB) {
6986 // FISSION OCCURED
6987 fchoice = 2;
6988 }
6989 else {
6990 // EVAPORATION OCCURED
6991 fchoice = 1;
6992 }
6993 } // if x
6994 LOC_TIME_BEGIN = LOC_TIME_END;
6995 } // while
6996 // Take the real decay time of this decay step
6997 fT_LAPSE = LOC_TIME_END - BEGIN_TIME;
6998 } // if BEGIN_TIME
6999 //
7000 // NOW, IF NOTHING HAPPENED DURING TRANSIENT TIME
7001direct106:
7002 if (fchoice == 0) {
7003 fGF_LOC = GF;
7004 FISS_PROB = GF / (GF + GP);
7005
7006 // Added for cases where already at the beginning BEGIN_TIME > 1.5d0*TAUF
7007 if (GF > 0.0) {
7008 TS2 = HBAR / GF;
7009 }
7010 else {
7011 TS2 = 0.0;
7012 }
7013
7014 if (TS2 > 0.0) {
7015 LAMBDA = 1. / TS1 + 1. / TS2;
7016 }
7017 else {
7018 LAMBDA = 1. / TS1;
7019 }
7020 //
7021 X = G4AblaRandom::flat();
7022
7023 if (X < FISS_PROB) {
7024 // FISSION OCCURED
7025 fchoice = 2;
7026 }
7027 else {
7028 // EVAPORATION OCCURED
7029 fchoice = 1;
7030 }
7031 //
7032 // TIRAGE ALEATOIRE DANS UNE EXPONENTIELLLE : Y=EXP(-X/T)
7033 // EXPOHAZ=-T*LOG(HAZ(K))
7034 fT_LAPSE = fT_LAPSE - 1.0 / LAMBDA * std::log(G4AblaRandom::flat());
7035 }
7036 //
7037direct107:
7038
7039 (*T_LAPSE) = fT_LAPSE;
7040 (*GF_LOC) = fGF_LOC;
7041 (*CHOICE) = fchoice;
7042 return;
7043}
G4double func_trans(G4double TIME, G4double ZF, G4double AF, G4double BET, G4double Y, G4double FT, G4double T_0)
Definition G4Abla.cc:6713

Referenced by direct().

◆ pen()

G4double G4Abla::pen ( G4double A,
G4double ap,
G4double omega,
G4double T )

Calculation of penetration factors for light charged particles.

Definition at line 6648 of file G4Abla.cc.

6649{
6650 // JLRS: 06/11/2016
6651 // CORRECTIONS FOR BARRIER PENETRATION
6652 // AK, KHS 2005 - Energy-dependen inverse cross sections included, influence
6653 // of
6654 // Coulomb barrier for LCP, tunnelling for LCP
6655
6656 G4double fpen = 0., MU, HO;
6657
6658 // REDUCED MASSES (IN MeV/C**2)
6659 MU = (A - ap) * ap / A;
6660
6661 // ENERGY OF THE INVERSE PARABOLA AT THE POTENTIAL BARRIER (hbar*omega);
6662 // HERE hbar = 197.3287 fm*MeV/c, omega is in c/fm
6663 HO = 197.3287 * omega;
6664
6665 if (T <= 0.0) {
6666 fpen = 0.0;
6667 }
6668 else {
6669 fpen = std::pow(10.0, 4.e-4 * std::pow(T / (HO * HO * std::pow(MU, 0.25)), -4.3 / 2.3026));
6670 }
6671
6672 return fpen;
6673}

Referenced by direct().

◆ qrot()

void G4Abla::qrot ( G4double z,
G4double a,
G4double bet,
G4double sig,
G4double u,
G4double * qr )

Coefficient of collective enhancement including damping Input: z,a,bet,sig,u Output: qr - collective enhancement factor See junghans et al., nucl. phys. a 629 (1998) 635

Parameters
zcharge number
amass number
betbeta deformation
sigperpendicular spin cut-off factor
uEnergy
Returns
Coefficient of collective enhancement

Definition at line 5008 of file G4Abla.cc.

5009{
5010 /*
5011 C QROT INCLUDING DAMPING
5012 C
5013 C INPUT: Z,A,DEFBET,SIG,U
5014 C
5015 C OUTPUT: QR - COLLECTIVE ENHANCEMENT FACTOR
5016 C
5017 C SEE JUNGHANS ET AL., NUCL. PHYS. A 629 (1998) 635
5018 C
5019 C
5020 C FR(U) EXPONENTIAL FUNCTION TO DEFINE DAMPING
5021 C UCR CRITICAL ENERGY FOR DAMPING
5022 C DCR WIDTH OF DAMPING
5023 C DEFBET BETA-DEFORMATION !
5024 C SIG PERPENDICULAR SPIN CUTOFF FACTOR
5025 C U ENERGY
5026 C QR COEFFICIENT OF COLLECTIVE ENHANCEMENT
5027 C A MASS NUMBER
5028 C Z CHARGE NUMBER
5029 C
5030 */
5031 // JLRS: July 2016: new values for the collective parameters
5032 //
5033
5034 G4double ucr = fiss->ucr; // Critical energy for damping.
5035 G4double dcr = fiss->dcr; // Width of damping.
5036 G4double ponq = 0.0, dn = 0.0, n = 0.0, dz = 0.0;
5037 G4int distn, distz, ndist, zdist;
5038 G4int nmn[8] = {2, 8, 14, 20, 28, 50, 82, 126};
5039 G4int nmz[8] = {2, 8, 14, 20, 28, 50, 82, 126};
5040 //
5041 sig = sig * sig;
5042 //
5043 if (std::abs(bet) <= 0.15) {
5044 goto qrot10;
5045 }
5046 else {
5047 goto qrot11;
5048 }
5049 //
5050qrot10:
5051 n = a - z;
5052 distn = 10000000;
5053 distz = 10000000;
5054
5055 for (G4int i = 0; i < 8; i++) {
5056 ndist = std::fabs(idnint(n) - nmn[i]);
5057 if (ndist < distn) distn = ndist;
5058 zdist = std::fabs(idnint(z) - nmz[i]);
5059 if (zdist < distz) distz = zdist;
5060 }
5061
5062 dz = G4float(distz);
5063 dn = G4float(distn);
5064
5065 bet = 0.022 + 0.003 * dn + 0.002 * dz;
5066
5067 sig = 75.0 * std::pow(bet, 2.) * sig;
5068
5069 // NO VIBRATIONAL ENHANCEMENT
5070qrot11:
5071 ponq = (u - ucr) / dcr;
5072
5073 if (ponq > 700.0) {
5074 ponq = 700.0;
5075 }
5076 if (sig < 1.0) {
5077 sig = 1.0;
5078 }
5079 (*qr) = 1.0 / (1.0 + std::exp(ponq)) * (sig - 1.0) + 1.0;
5080
5081 if ((*qr) < 1.0) {
5082 (*qr) = 1.0;
5083 }
5084
5085 return;
5086}
float G4float
Definition G4Types.hh:84

Referenced by densniv().

◆ secnds()

G4int G4Abla::secnds ( G4int x)

Definition at line 6357 of file G4Abla.cc.

6358{
6359 time_t mytime;
6360 tm* mylocaltime;
6361
6362 time(&mytime);
6363 mylocaltime = localtime(&mytime);
6364
6365 if (x == 0) {
6366 return (mylocaltime->tm_hour * 60 * 60 + mylocaltime->tm_min * 60 + mylocaltime->tm_sec);
6367 }
6368 else {
6369 return G4int(mytime - x);
6370 }
6371}

Referenced by haz().

◆ SetParameters()

void G4Abla::SetParameters ( )

Initialize ABLA parameters.

Definition at line 2332 of file G4Abla.cc.

2333{
2334 /*
2335 C IFIS = INTEGER SWITCH FOR FISSION
2336 C OPTSHP = INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY
2337 C =0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY
2338 C =1 SHELL , NO PAIRING CORRECTION
2339 C =2 PAIRING, NO SHELL CORRECTION
2340 C =3 SHELL AND PAIRING CORRECTION IN MASSES AND ENERGY
2341 C OPTCOL =0,1 COLLECTIVE ENHANCEMENT SWITCHED ON 1 OR OFF 0 IN DENSN
2342 C OPTAFAN=0,1 SWITCH FOR AF/AN = 1 IN DENSNIV 0 AF/AN>1 1 AF/AN=1
2343 C BET = REAL REDUCED FRICTION COEFFICIENT / 10**(+21) S**(-1)
2344 C OPTXFIS= INTEGER 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV
2345 C FISSILITY PARAMETER.
2346 C
2347 C NUCLEAR LEVEL DENSITIES:
2348 C AV = REAL KOEFFICIENTS FOR CALCULATION OF A(TILDE)
2349 C AS = REAL LEVEL DENSITY PARAMETER
2350 C AK = REAL
2351 */
2352
2353 // switch-fission.1=on.0=off
2354 fiss->ifis = 1;
2355
2356 // shell+pairing.0-1-2-3
2357 fiss->optshp = 3;
2358 if (fiss->zt < 84 && fiss->zt > 56) fiss->optshp = 1;
2359
2360 // optemd =0,1 0 no emd, 1 incl. emd
2361 opt->optemd = 1;
2362 // read(10,*,iostat=io) dum(10),optcha
2363 opt->optcha = 1;
2364
2365 // shell+pairing.0-1-2-3 for IMFs
2366 opt->optshpimf = 0;
2367 opt->optimfallowed = 1;
2368
2369 // nuclear.viscosity.(beta)
2370 fiss->bet = 4.5;
2371
2372 // collective enhancement switched on 1 or off 0 in densn (qr=val or =1.)
2373 fiss->optcol = 1;
2374 if (fiss->zt <= 56) {
2375 fiss->optcol = 0;
2376 fiss->optshp = 3;
2377 }
2378 // collective enhancement parameters
2379 fiss->ucr = 40.;
2380 fiss->dcr = 10.;
2381
2382 // switch for temperature constant model (CTM)
2383 fiss->optct = 1;
2384
2385 ald->optafan = 0;
2386
2387 ald->av = 0.0730;
2388 ald->as = 0.0950;
2389 ald->ak = 0.0000;
2390
2391 fiss->optxfis = 3;
2392
2393 // Multi-fragmentation
2394 T_freeze_out_in = -6.5;
2395}

◆ SetParametersG4()

void G4Abla::SetParametersG4 ( G4int z,
G4int a )

Definition at line 2275 of file G4Abla.cc.

2276{
2277 // A and Z for the target
2278 fiss->at = a;
2279 fiss->zt = z;
2280
2281 // switch-fission.1=on.0=off
2282 fiss->ifis = 1;
2283
2284 // shell+pairing.0-1-2-3
2285 fiss->optshp = 3;
2286 if (fiss->zt < 84 && fiss->zt > 60) fiss->optshp = 1;
2287
2288 // optemd =0,1 0 no emd, 1 incl. emd
2289 opt->optemd = 1;
2290 // read(10,*,iostat=io) dum(10),optcha
2291 opt->optcha = 1;
2292
2293 // shell+pairing.0-1-2-3 for IMFs
2294 opt->optshpimf = 0;
2295 opt->optimfallowed = 1;
2296
2297 // collective enhancement switched on 1 or off 0 in densn (qr=val or =1.)
2298 fiss->optcol = 1;
2299 if (fiss->zt <= 28) {
2300 fiss->optcol = 0;
2301 fiss->optshp = 0;
2302 opt->optshpimf = 1;
2303 }
2304 else if (fiss->zt <= 58) {
2305 fiss->optcol = 0;
2306 fiss->optshp = 1;
2307 opt->optshpimf = 3;
2308 }
2309 // collective enhancement parameters
2310 fiss->ucr = 40.;
2311 fiss->dcr = 10.;
2312
2313 // switch for temperature constant model (CTM)
2314 fiss->optct = 1;
2315
2316 ald->optafan = 0;
2317
2318 // nuclear.viscosity.(beta)
2319 fiss->bet = 4.5;
2320 fiss->bethyp = 28.0;
2321 fiss->optxfis = 3;
2322
2323 // Level density parameters
2324 ald->av = 0.0730;
2325 ald->as = 0.0950;
2326 ald->ak = 0.0000;
2327
2328 // Multi-fragmentation
2329 T_freeze_out_in = -6.5;
2330}

Referenced by DeexcitationAblaxx().

◆ setVerboseLevel()

void G4Abla::setVerboseLevel ( G4int level)

Set verbosity level.

Definition at line 70 of file G4Abla.cc.

71{
72 verboseLevel = level;
73}

◆ standardRandom()

void G4Abla::standardRandom ( G4double * rndm,
G4long * seed )

Random numbers.

◆ tau()

G4double G4Abla::tau ( G4double bet,
G4double homega,
G4double ef,
G4double t )

RISE TIME IN WHICH THE FISSION WIDTH HAS REACHED 90 PERCENT OF ITS FINAL VALUE

Definition at line 5325 of file G4Abla.cc.

5326{
5327 // INPUT : BET, HOMEGA, EF, T
5328 // OUTPUT: TAU - RISE TIME IN WHICH THE FISSION WIDTH HAS REACHED
5329 // 90 PERCENT OF ITS FINAL VALUE
5330 //
5331 // BETA - NUCLEAR VISCOSITY
5332 // HOMEGA - CURVATURE OF POTENTIAL
5333 // EF - FISSION BARRIER
5334 // T - NUCLEAR TEMPERATURE
5335
5336 G4double tauResult = 0.0;
5337
5338 G4double tlim = 8.e0 * ef;
5339 if (t > tlim) {
5340 t = tlim;
5341 }
5342 //
5343 if (bet / (std::sqrt(2.0) * 10.0 * (homega / 6.582122)) <= 1.0) {
5344 tauResult = std::log(10.0 * ef / t) / (bet * 1.0e21);
5345 }
5346 else {
5347 tauResult =
5348 std::log(10.0 * ef / t) / (2.0 * std::pow((10.0 * homega / 6.582122), 2)) * (bet * 1.0e-21);
5349 } // end if
5350
5351 return tauResult;
5352}

Referenced by direct().

◆ tke_bu()

void G4Abla::tke_bu ( G4double Z,
G4double A,
G4double ZALL,
G4double AAL,
G4double * VX,
G4double * VY,
G4double * VZ )

Calculation of tke for breakup fragments

Definition at line 10372 of file G4Abla.cc.

10374{
10375 G4double V_over_V0, R0, RALL, RHAZ, R, TKE, Ekin, V, VPERP, ALPHA1;
10376
10377 V_over_V0 = 6.0;
10378 R0 = 1.16;
10379
10380 if (Z < 1.0) {
10381 *VX = 0.0;
10382 *VY = 0.0;
10383 *VZ = 0.0;
10384 return;
10385 }
10386
10387 RALL = R0 * std::pow(V_over_V0, 1.0 / 3.0) * std::pow(AAL, 1.0 / 3.0);
10388 RHAZ = G4double(haz(1));
10389 R = std::pow(RHAZ, 1.0 / 3.0) * RALL;
10390 TKE = 1.44 * Z * ZALL * R * R * (1.0 - A / AAL) * (1.0 - A / AAL) / std::pow(RALL, 3.0);
10391
10392 Ekin = TKE * (AAL - A) / AAL;
10393 // print*,'!!!',IDNINT(AAl),IDNINT(A),IDNINT(ZALL),IDNINT(Z)
10394 V = std::sqrt(Ekin / A) * 1.3887;
10395 *VZ = (2.0 * G4double(haz(1)) - 1.0) * V;
10396 VPERP = std::sqrt(V * V - (*VZ) * (*VZ));
10397 ALPHA1 = G4double(haz(1)) * 2.0 * 3.142;
10398 *VX = VPERP * std::sin(ALPHA1);
10399 *VY = VPERP * std::cos(ALPHA1);
10400 return;
10401}

Referenced by DeexcitationAblaxx().

◆ tunnelling()

G4double G4Abla::tunnelling ( G4double A,
G4double ZPRF,
G4double Y,
G4double EE,
G4double EF,
G4double TEMP,
G4double DENSG,
G4double DENSF,
G4double ENH_FACT )

Calculation of tunnelling effect in fission.

Definition at line 7045 of file G4Abla.cc.

7047{
7048 // Subroutine to caluclate fission width with included effects
7049 // of tunnelling through the fission barrier
7050
7051 G4double PI = 3.14159;
7052 G4int IZ, IN;
7053 G4double MFCD, OMEGA, HOMEGA1, HOMEGA2 = 0., GFTUN;
7054 G4double E1, E2, EXP_FACT, CORR_FUNCT, FACT1, FACT2, FACT3;
7055
7056 IZ = idnint(ZPRF);
7057 IN = idnint(A - ZPRF);
7058
7059 // For low energies system "sees" LD barrier
7060 fomega_sp(A, Y, &MFCD, &OMEGA, &HOMEGA1);
7061
7062 if (mod(IN, 2) == 0 && mod(IZ, 2) == 0) { // e-e
7063 // Due to pairing gap, even-even nuclei cannot tunnel for excitation energy
7064 // lower than pairing gap (no levels at which system can be)
7065 EE = EE - 12.0 / std::sqrt(A);
7066 HOMEGA2 = 1.04;
7067 }
7068
7069 if (mod(IN, 2) == 1 && mod(IZ, 2) == 1) { // o-o
7070 HOMEGA2 = 0.65;
7071 }
7072
7073 if (mod(IN, 2) == 1 && mod(IZ, 2) == 0) { // o-e
7074 HOMEGA2 = 0.8;
7075 }
7076
7077 if (mod(IN, 2) == 0 && mod(IZ, 2) == 1) { // e-0
7078 HOMEGA2 = 0.8;
7079 }
7080
7081 E1 = EF + HOMEGA1 / 2.0 / PI * std::log(HOMEGA1 * (2.0 * PI + HOMEGA2) / 4.0 / PI / PI);
7082
7083 E2 = EF + HOMEGA2 / (2.0 * PI) * std::log(1.0 + 2.0 * PI / HOMEGA2);
7084
7085 // AKH May 2013 - Due to approximations in the analytical integration, at
7086 // energies just above barrier Pf was to low, at energies below barrier it was
7087 // somewhat higher. LInes below are supposed to correct for this. Factor 0.20
7088 // in EXP_FACT comes from the slope of the Pf(Eexc) (Gavron's data) around
7089 // fission barrier.
7090 EXP_FACT = (EE - EF) / (HOMEGA2 / (2.0 * PI));
7091 if (EXP_FACT > 700.0) EXP_FACT = 700.0;
7092 CORR_FUNCT = HOMEGA1 * (1.0 - 1.0 / (1.0 + std::exp(EXP_FACT)));
7093 if (mod(IN, 2) == 0 && mod(IZ, 2) == 0) {
7094 CORR_FUNCT = HOMEGA1 * (1.0 - 1.0 / (1.0 + std::exp(EXP_FACT)));
7095 }
7096
7097 FACT1 = HOMEGA1 / (2.0 * PI * TEMP + HOMEGA1);
7098 FACT2 =
7099 (2.0 * PI / (2.0 * PI + HOMEGA2) - HOMEGA1 * (2.0 * PI + HOMEGA2) / 4.0 / PI / PI) / (E2 - E1);
7100 FACT3 = HOMEGA2 / (2.0 * PI * TEMP - HOMEGA2);
7101
7102 if (EE < E1) {
7103 GFTUN = FACT1
7104 * (std::exp(EE / TEMP) * std::exp(2.0 * PI * (EE - EF) / HOMEGA1)
7105 - std::exp(-2.0 * PI * EF / HOMEGA1));
7106 }
7107 else {
7108 if (EE >= E1 && EE < E2) {
7109 GFTUN = std::exp(EE / TEMP) * (0.50 + FACT2 * (EE - EF - TEMP))
7110 - std::exp(E1 / TEMP) * (0.5 + FACT2 * (E1 - EF - TEMP))
7111 + FACT1
7112 * (std::exp(E1 / TEMP) * std::exp(2.0 * PI * (E1 - EF) / HOMEGA1)
7113 - std::exp(-2.0 * PI * EF / HOMEGA1));
7114 }
7115 else {
7116 GFTUN = std::exp(EE / TEMP) * (1.0 + FACT3 * std::exp(-2.0 * PI * (EE - EF) / HOMEGA2))
7117 - std::exp(E2 / TEMP) * (1.0 + FACT3 * std::exp(-2.0 * PI * (E2 - EF) / HOMEGA2))
7118 + std::exp(E2 / TEMP) * (0.5 + FACT2 * (E2 - EF - TEMP))
7119 - std::exp(E1 / TEMP) * (0.5 + FACT2 * (E1 - EF - TEMP))
7120 + FACT1
7121 * (std::exp(E1 / TEMP) * std::exp(2.0 * PI * (E1 - EF) / HOMEGA1)
7122 - std::exp(-2.0 * PI * EF / HOMEGA1));
7123 }
7124 }
7125 GFTUN = GFTUN / std::exp(EE / TEMP) * DENSF * ENH_FACT / DENSG / 2.0 / PI;
7126 GFTUN = GFTUN * CORR_FUNCT;
7127 return GFTUN;
7128}

Referenced by fission_width().

◆ umass()

double G4Abla::umass ( G4double z,
G4double n,
G4double beta )

Functions for the fission model.

Definition at line 9199 of file G4Abla.cc.

9200{
9201 // liquid-drop mass, Myers & Swiatecki, Lysekil, 1967
9202 // pure liquid drop, without pairing and shell effects
9203
9204 // On input: Z nuclear charge of nucleus
9205 // N number of neutrons in nucleus
9206 // beta deformation of nucleus
9207 // On output: binding energy of nucleus
9208
9209 G4double a = 0.0, fumass = 0.0;
9210 G4double alpha = 0.0;
9211 G4double xcom = 0.0, xvs = 0.0, xe = 0.0;
9212 const G4double pi = 3.1416;
9213
9214 a = n + z;
9215 alpha = (std::sqrt(5.0 / (4.0 * pi))) * beta;
9216
9217 xcom = 1.0 - 1.7826 * ((a - 2.0 * z) / a) * ((a - 2.0 * z) / a);
9218 // factor for asymmetry dependence of surface and volume term
9219 xvs = -xcom * (15.4941 * a - 17.9439 * std::pow(a, 2.0 / 3.0) * (1.0 + 0.4 * alpha * alpha));
9220 // sum of volume and surface energy
9221 xe = z * z * (0.7053 / (std::pow(a, 1.0 / 3.0)) * (1.0 - 0.2 * alpha * alpha) - 1.1529 / a);
9222 fumass = xvs + xe;
9223
9224 return fumass;
9225}

Referenced by frldm().

◆ unbound()

void G4Abla::unbound ( G4double SN,
G4double SP,
G4double SD,
G4double ST,
G4double SHE,
G4double SA,
G4double BP,
G4double BD,
G4double BT,
G4double BHE,
G4double BA,
G4double * PROBF,
G4double * PROBN,
G4double * PROBP,
G4double * PROBD,
G4double * PROBT,
G4double * PROBHE,
G4double * PROBA,
G4double * PROBIMF,
G4double * PROBG,
G4double * ECN,
G4double * ECP,
G4double * ECD,
G4double * ECT,
G4double * ECHE,
G4double * ECA )

Calculation of unbound nuclei.

Definition at line 8105 of file G4Abla.cc.

8111{
8112 G4double SBP = SP + BP;
8113 G4double SBD = SD + BD;
8114 G4double SBT = ST + BT;
8115 G4double SBHE = SHE + BHE;
8116 G4double SBA = SA + BA;
8117
8118 G4double e = dmin1(SBP, SBD, SBT);
8119 e = dmin1(SBHE, SN, e);
8120 e = dmin1(SBHE, SBA, e);
8121 //
8122 if (SN == e) {
8123 *ECN = (-1.0) * SN;
8124 *ECP = 0.0;
8125 *ECD = 0.0;
8126 *ECT = 0.0;
8127 *ECHE = 0.0;
8128 *ECA = 0.0;
8129 *PROBN = 1.0;
8130 *PROBP = 0.0;
8131 *PROBD = 0.0;
8132 *PROBT = 0.0;
8133 *PROBHE = 0.0;
8134 *PROBA = 0.0;
8135 *PROBIMF = 0.0;
8136 *PROBF = 0.0;
8137 *PROBG = 0.0;
8138 }
8139 else if (SBP == e) {
8140 *ECN = 0.0;
8141 *ECP = (-1.0) * SP + BP;
8142 *ECD = 0.0;
8143 *ECT = 0.0;
8144 *ECHE = 0.0;
8145 *ECA = 0.0;
8146 *PROBN = 0.0;
8147 *PROBP = 1.0;
8148 *PROBD = 0.0;
8149 *PROBT = 0.0;
8150 *PROBHE = 0.0;
8151 *PROBA = 0.0;
8152 *PROBIMF = 0.0;
8153 *PROBF = 0.0;
8154 *PROBG = 0.0;
8155 }
8156 else if (SBD == e) {
8157 *ECN = 0.0;
8158 *ECD = (-1.0) * SD + BD;
8159 *ECP = 0.0;
8160 *ECT = 0.0;
8161 *ECHE = 0.0;
8162 *ECA = 0.0;
8163 *PROBN = 0.0;
8164 *PROBP = 0.0;
8165 *PROBD = 1.0;
8166 *PROBT = 0.0;
8167 *PROBHE = 0.0;
8168 *PROBA = 0.0;
8169 *PROBIMF = 0.0;
8170 *PROBF = 0.0;
8171 *PROBG = 0.0;
8172 }
8173 else if (SBT == e) {
8174 *ECN = 0.0;
8175 *ECT = (-1.0) * ST + BT;
8176 *ECD = 0.0;
8177 *ECP = 0.0;
8178 *ECHE = 0.0;
8179 *ECA = 0.0;
8180 *PROBN = 0.0;
8181 *PROBP = 0.0;
8182 *PROBD = 0.0;
8183 *PROBT = 1.0;
8184 *PROBHE = 0.0;
8185 *PROBA = 0.0;
8186 *PROBIMF = 0.0;
8187 *PROBF = 0.0;
8188 *PROBG = 0.0;
8189 }
8190 else if (SBHE == e) {
8191 *ECN = 0.0;
8192 *ECHE = (-1.0) * SHE + BHE;
8193 *ECD = 0.0;
8194 *ECT = 0.0;
8195 *ECP = 0.0;
8196 *ECA = 0.0;
8197 *PROBN = 0.0;
8198 *PROBP = 0.0;
8199 *PROBD = 0.0;
8200 *PROBT = 0.0;
8201 *PROBHE = 1.0;
8202 *PROBA = 0.0;
8203 *PROBIMF = 0.0;
8204 *PROBF = 0.0;
8205 *PROBG = 0.0;
8206 }
8207 else {
8208 if (SBA == e) {
8209 *ECN = 0.0;
8210 *ECA = (-1.0) * SA + BA;
8211 *ECD = 0.0;
8212 *ECT = 0.0;
8213 *ECHE = 0.0;
8214 *ECP = 0.0;
8215 *PROBN = 0.0;
8216 *PROBP = 0.0;
8217 *PROBD = 0.0;
8218 *PROBT = 0.0;
8219 *PROBHE = 0.0;
8220 *PROBA = 1.0;
8221 *PROBIMF = 0.0;
8222 *PROBF = 0.0;
8223 *PROBG = 0.0;
8224 }
8225 }
8226
8227 return;
8228}

Referenced by direct().

◆ unstable_nuclei()

void G4Abla::unstable_nuclei ( G4int AFP,
G4int ZFP,
G4int * AFPNEW,
G4int * ZFPNEW,
G4int & IOUNSTABLE,
G4double VX,
G4double VY,
G4double VZ,
G4double * VP1X,
G4double * VP1Y,
G4double * VP1Z,
G4double BU_TAB_TEMP[indexpart][6],
G4int * ILOOP )

Calculation of unstable nuclei

Definition at line 9415 of file G4Abla.cc.

9418{
9419 //
9420 G4int INMIN, INMAX, NDIF = 0, IMEM;
9421 G4int NEVA = 0, PEVA = 0;
9422 G4double VP2X, VP2Y, VP2Z;
9423
9424 *AFPNEW = AFP;
9425 *ZFPNEW = ZFP;
9426 IOUNSTABLE = 0;
9427 *ILOOP = 0;
9428 IMEM = 0;
9429 for (G4int i = 0; i < indexpart; i++) {
9430 BU_TAB_TEMP[i][0] = 0.0;
9431 BU_TAB_TEMP[i][1] = 0.0;
9432 BU_TAB_TEMP[i][2] = 0.0;
9433 BU_TAB_TEMP[i][3] = 0.0;
9434 BU_TAB_TEMP[i][4] = 0.0;
9435 // BU_TAB_TEMP[i][5] = 0.0;
9436 }
9437 *VP1X = 0.0;
9438 *VP1Y = 0.0;
9439 *VP1Z = 0.0;
9440
9441 if (AFP == 0 && ZFP == 0) {
9442 // PRINT*,'UNSTABLE NUCLEI, AFP=0, ZFP=0'
9443 return;
9444 }
9445 if ((AFP == 1 && ZFP == 0) || (AFP == 1 && ZFP == 1) || (AFP == 2 && ZFP == 1)
9446 || (AFP == 3 && ZFP == 1) || (AFP == 3 && ZFP == 2) || (AFP == 4 && ZFP == 2)
9447 || (AFP == 6 && ZFP == 2) || (AFP == 8 && ZFP == 2))
9448 {
9449 *VP1X = VX;
9450 *VP1Y = VY;
9451 *VP1Z = VZ;
9452 return;
9453 }
9454
9455 if ((AFP - ZFP) == 0 && ZFP > 1) {
9456 for (G4int I = 0; I <= AFP - 2; I++) {
9457 unstable_tke(G4double(AFP - I), G4double(AFP - I), G4double(AFP - I - 1),
9458 G4double(AFP - I - 1), VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9459 &VP2Z);
9460 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9461 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9462 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9463 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9464 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9465 *ILOOP = *ILOOP + 1;
9466 VX = *VP1X;
9467 VY = *VP1Y;
9468 VZ = *VP1Z;
9469 }
9470 // PEVA = PEVA + ZFP - 1;
9471 AFP = 1;
9472 ZFP = 1;
9473 IOUNSTABLE = 1;
9474 }
9475 //
9476 //*** Find the limits nucleus is bound :
9477 isostab_lim(ZFP, &INMIN, &INMAX);
9478 NDIF = AFP - ZFP;
9479 if (NDIF < INMIN) {
9480 // Proton unbound
9481 IOUNSTABLE = 1;
9482 for (G4int I = 1; I <= 10; I++) {
9483 isostab_lim(ZFP - I, &INMIN, &INMAX);
9484 if (INMIN <= NDIF) {
9485 IMEM = I;
9486 ZFP = ZFP - I;
9487 AFP = ZFP + NDIF;
9488 PEVA = I;
9489 goto u10;
9490 }
9491 }
9492 //
9493 u10:
9494 for (G4int I = 0; I < IMEM; I++) {
9495 unstable_tke(G4double(NDIF + ZFP + IMEM - I), G4double(ZFP + IMEM - I),
9496 G4double(NDIF + ZFP + IMEM - I - 1), G4double(ZFP + IMEM - I - 1), VX, VY, VZ,
9497 &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9498 BU_TAB_TEMP[I + 1 + *ILOOP][0] = 1.0;
9499 BU_TAB_TEMP[I + 1 + *ILOOP][1] = 1.0;
9500 BU_TAB_TEMP[I + 1 + *ILOOP][2] = VP2X;
9501 BU_TAB_TEMP[I + 1 + *ILOOP][3] = VP2Y;
9502 BU_TAB_TEMP[I + 1 + *ILOOP][4] = VP2Z;
9503 VX = *VP1X;
9504 VY = *VP1Y;
9505 VZ = *VP1Z;
9506 }
9507 *ILOOP = *ILOOP + IMEM;
9508 }
9509 if (NDIF > INMAX) {
9510 // Neutron unbound
9511 NEVA = NDIF - INMAX;
9512 AFP = ZFP + INMAX;
9513 IOUNSTABLE = 1;
9514 for (G4int I = 0; I < NEVA; I++) {
9515 unstable_tke(G4double(ZFP + NDIF - I), G4double(ZFP), G4double(ZFP + NDIF - I - 1),
9516 G4double(ZFP), VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9517
9518 BU_TAB_TEMP[*ILOOP][0] = 0.0;
9519 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9520 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9521 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9522 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9523 *ILOOP = *ILOOP + 1;
9524 VX = *VP1X;
9525 VY = *VP1Y;
9526 VZ = *VP1Z;
9527 }
9528 }
9529
9530 if ((AFP >= 2) && (ZFP == 0)) {
9531 for (G4int I = 0; I <= AFP - 2; I++) {
9532 unstable_tke(G4double(AFP - I), G4double(ZFP), G4double(AFP - I - 1), G4double(ZFP), VX, VY,
9533 VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9534
9535 BU_TAB_TEMP[*ILOOP][0] = 0.0;
9536 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9537 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9538 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9539 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9540 *ILOOP = *ILOOP + 1;
9541 VX = *VP1X;
9542 VY = *VP1Y;
9543 VZ = *VP1Z;
9544 }
9545
9546 // NEVA = NEVA + (AFP - 1);
9547 AFP = 1;
9548 ZFP = 0;
9549 IOUNSTABLE = 1;
9550 }
9551 if (AFP < ZFP) {
9552 std::cout << "WARNING - BU UNSTABLE: AF < ZF" << std::endl;
9553 AFP = 0;
9554 ZFP = 0;
9555 IOUNSTABLE = 1;
9556 }
9557 if ((AFP >= 4) && (ZFP == 1)) {
9558 // Heavy residue is treated as 3H and the rest of mass is emitted as
9559 // neutrons:
9560 for (G4int I = 0; I < AFP - 3; I++) {
9561 unstable_tke(G4double(AFP - I), G4double(ZFP), G4double(AFP - I - 1), G4double(ZFP), VX, VY,
9562 VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9563
9564 BU_TAB_TEMP[*ILOOP][0] = 0.0;
9565 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9566 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9567 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9568 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9569 *ILOOP = *ILOOP + 1;
9570 VX = *VP1X;
9571 VY = *VP1Y;
9572 VZ = *VP1Z;
9573 }
9574
9575 // NEVA = NEVA + (AFP - 3);
9576 AFP = 3;
9577 ZFP = 1;
9578 IOUNSTABLE = 1;
9579 }
9580
9581 if ((AFP == 4) && (ZFP == 3)) {
9582 // 4Li -> 3He + p ->
9583 AFP = 3;
9584 ZFP = 2;
9585 // PEVA = PEVA + 1;
9586 IOUNSTABLE = 1;
9587 unstable_tke(4.0, 3.0, 3.0, 2.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9588
9589 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9590 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9591 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9592 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9593 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9594 *ILOOP = *ILOOP + 1;
9595 }
9596 if ((AFP == 5) && (ZFP == 2)) {
9597 // 5He -> 4He + n ->
9598 AFP = 4;
9599 ZFP = 2;
9600 // NEVA = NEVA + 1;
9601 IOUNSTABLE = 1;
9602 unstable_tke(5.0, 2.0, 4.0, 2.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9603 BU_TAB_TEMP[*ILOOP][0] = 0.0;
9604 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9605 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9606 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9607 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9608 *ILOOP = *ILOOP + 1;
9609 }
9610
9611 if ((AFP == 5) && (ZFP == 3)) {
9612 // 5Li -> 4He + p
9613 AFP = 4;
9614 ZFP = 2;
9615 // PEVA = PEVA + 1;
9616 IOUNSTABLE = 1;
9617 unstable_tke(5.0, 3.0, 4.0, 2.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9618 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9619 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9620 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9621 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9622 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9623 *ILOOP = *ILOOP + 1;
9624 }
9625
9626 if ((AFP == 6) && (ZFP == 4)) {
9627 // 6Be -> 4He + 2p (velocity in two steps: 6Be->5Li->4He)
9628 AFP = 4;
9629 ZFP = 2;
9630 // PEVA = PEVA + 2;
9631 IOUNSTABLE = 1;
9632 // 6Be -> 5Li + p
9633 unstable_tke(6.0, 4.0, 5.0, 3.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9634 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9635 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9636 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9637 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9638 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9639 *ILOOP = *ILOOP + 1;
9640 VX = *VP1X;
9641 VY = *VP1Y;
9642 VZ = *VP1Z;
9643
9644 // 5Li -> 4He + p
9645 unstable_tke(5.0, 3.0, 4.0, 2.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9646 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9647 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9648 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9649 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9650 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9651 *ILOOP = *ILOOP + 1;
9652 }
9653 if ((AFP == 7) && (ZFP == 2)) {
9654 // 7He -> 6He + n
9655 AFP = 6;
9656 ZFP = 2;
9657 // NEVA = NEVA + 1;
9658 IOUNSTABLE = 1;
9659 unstable_tke(7.0, 2.0, 6.0, 2.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9660 BU_TAB_TEMP[*ILOOP][0] = 0.0;
9661 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9662 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9663 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9664 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9665 *ILOOP = *ILOOP + 1;
9666 }
9667
9668 if ((AFP == 7) && (ZFP == 5)) {
9669 // 7B -> 6Be + p -> 4He + 3p
9670 for (int I = 0; I <= AFP - 5; I++) {
9671 unstable_tke(double(AFP - I), double(ZFP - I), double(AFP - I - 1), double(ZFP - I - 1), VX,
9672 VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9673 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9674 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9675 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9676 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9677 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9678 *ILOOP = *ILOOP + 1;
9679 VX = *VP1X;
9680 VY = *VP1Y;
9681 VZ = *VP1Z;
9682 }
9683
9684 AFP = 4;
9685 ZFP = 2;
9686 // PEVA = PEVA + 3;
9687 IOUNSTABLE = 1;
9688 }
9689 if ((AFP == 8) && (ZFP == 4)) {
9690 // 8Be -> 4He + 4He
9691 AFP = 4;
9692 ZFP = 2;
9693 IOUNSTABLE = 1;
9694 unstable_tke(8.0, 4.0, 4.0, 2.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9695 BU_TAB_TEMP[*ILOOP][0] = 2.0;
9696 BU_TAB_TEMP[*ILOOP][1] = 4.0;
9697 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9698 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9699 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9700 *ILOOP = *ILOOP + 1;
9701 }
9702 if ((AFP == 8) && (ZFP == 6)) {
9703 // 8C -> 2p + 6Be
9704 AFP = 6;
9705 ZFP = 4;
9706 // PEVA = PEVA + 2;
9707 IOUNSTABLE = 1;
9708
9709 unstable_tke(8.0, 6.0, 7.0, 5.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9710 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9711 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9712 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9713 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9714 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9715 *ILOOP = *ILOOP + 1;
9716 VX = *VP1X;
9717 VY = *VP1Y;
9718 VZ = *VP1Z;
9719
9720 unstable_tke(7.0, 5.0, 6.0, 4.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9721 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9722 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9723 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9724 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9725 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9726 *ILOOP = *ILOOP + 1;
9727 VX = *VP1X;
9728 VY = *VP1Y;
9729 VZ = *VP1Z;
9730 }
9731
9732 if ((AFP == 9) && (ZFP == 2)) {
9733 // 9He -> 8He + n
9734 AFP = 8;
9735 ZFP = 2;
9736 // NEVA = NEVA + 1;
9737 IOUNSTABLE = 1;
9738
9739 unstable_tke(9.0, 2.0, 8.0, 2.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9740 BU_TAB_TEMP[*ILOOP][0] = 0.0;
9741 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9742 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9743 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9744 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9745 *ILOOP = *ILOOP + 1;
9746 VX = *VP1X;
9747 VY = *VP1Y;
9748 VZ = *VP1Z;
9749 }
9750
9751 if ((AFP == 9) && (ZFP == 5)) {
9752 // 9B -> 4He + 4He + p ->
9753 AFP = 4;
9754 ZFP = 2;
9755 // PEVA = PEVA + 1;
9756 IOUNSTABLE = 1;
9757 unstable_tke(9.0, 5.0, 8.0, 4.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9758 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9759 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9760 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9761 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9762 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9763 *ILOOP = *ILOOP + 1;
9764 VX = *VP1X;
9765 VY = *VP1Y;
9766 VZ = *VP1Z;
9767
9768 unstable_tke(8.0, 4.0, 4.0, 2.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9769 BU_TAB_TEMP[*ILOOP][0] = 2.0;
9770 BU_TAB_TEMP[*ILOOP][1] = 4.0;
9771 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9772 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9773 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9774 *ILOOP = *ILOOP + 1;
9775 VX = *VP1X;
9776 VY = *VP1Y;
9777 VZ = *VP1Z;
9778 }
9779
9780 if ((AFP == 10) && (ZFP == 2)) {
9781 // 10He -> 8He + 2n
9782 AFP = 8;
9783 ZFP = 2;
9784 // NEVA = NEVA + 2;
9785 IOUNSTABLE = 1;
9786 // 10He -> 9He + n
9787 unstable_tke(10.0, 2.0, 9.0, 2.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9788 &VP2Z);
9789 BU_TAB_TEMP[*ILOOP][0] = 0.0;
9790 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9791 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9792 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9793 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9794 *ILOOP = *ILOOP + 1;
9795 VX = *VP1X;
9796 VY = *VP1Y;
9797 VZ = *VP1Z;
9798
9799 // 9He -> 8He + n
9800 unstable_tke(9.0, 2.0, 8.0, 2.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
9801 BU_TAB_TEMP[*ILOOP][0] = 0.0;
9802 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9803 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9804 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9805 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9806 *ILOOP = *ILOOP + 1;
9807 VX = *VP1X;
9808 VY = *VP1Y;
9809 VZ = *VP1Z;
9810 }
9811 if ((AFP == 10) && (ZFP == 3)) {
9812 // 10Li -> 9Li + n ->
9813 AFP = 9;
9814 ZFP = 3;
9815 // NEVA = NEVA + 1;
9816 IOUNSTABLE = 1;
9817 unstable_tke(10.0, 3.0, 9.0, 3.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9818 &VP2Z);
9819 BU_TAB_TEMP[*ILOOP][0] = 0.0;
9820 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9821 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9822 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9823 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9824 *ILOOP = *ILOOP + 1;
9825 VX = *VP1X;
9826 VY = *VP1Y;
9827 VZ = *VP1Z;
9828 }
9829 if ((AFP == 10) && (ZFP == 7)) {
9830 // 10N -> 9C + p ->
9831 AFP = 9;
9832 ZFP = 6;
9833 // PEVA = PEVA + 1;
9834 IOUNSTABLE = 1;
9835 unstable_tke(10.0, 7.0, 9.0, 6.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9836 &VP2Z);
9837 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9838 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9839 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9840 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9841 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9842 *ILOOP = *ILOOP + 1;
9843 VX = *VP1X;
9844 VY = *VP1Y;
9845 VZ = *VP1Z;
9846 }
9847
9848 if ((AFP == 11) && (ZFP == 7)) {
9849 // 11N -> 10C + p ->
9850 AFP = 10;
9851 ZFP = 6;
9852 // PEVA = PEVA + 1;
9853 IOUNSTABLE = 1;
9854 unstable_tke(11.0, 7.0, 10.0, 6.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9855 &VP2Z);
9856 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9857 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9858 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9859 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9860 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9861 *ILOOP = *ILOOP + 1;
9862 VX = *VP1X;
9863 VY = *VP1Y;
9864 VZ = *VP1Z;
9865 }
9866 if ((AFP == 12) && (ZFP == 8)) {
9867 // 12O -> 10C + 2p ->
9868 AFP = 10;
9869 ZFP = 6;
9870 // PEVA = PEVA + 2;
9871 IOUNSTABLE = 1;
9872
9873 unstable_tke(12.0, 8.0, 11.0, 7.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9874 &VP2Z);
9875 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9876 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9877 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9878 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9879 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9880 *ILOOP = *ILOOP + 1;
9881 VX = *VP1X;
9882 VY = *VP1Y;
9883 VZ = *VP1Z;
9884
9885 unstable_tke(11.0, 7.0, 10.0, 6.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9886 &VP2Z);
9887 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9888 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9889 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9890 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9891 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9892 *ILOOP = *ILOOP + 1;
9893 VX = *VP1X;
9894 VY = *VP1Y;
9895 VZ = *VP1Z;
9896 }
9897 if ((AFP == 15) && (ZFP == 9)) {
9898 // 15F -> 14O + p ->
9899 AFP = 14;
9900 ZFP = 8;
9901 // PEVA = PEVA + 1;
9902 IOUNSTABLE = 1;
9903 unstable_tke(15.0, 9.0, 14.0, 8.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9904 &VP2Z);
9905 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9906 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9907 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9908 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9909 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9910 *ILOOP = *ILOOP + 1;
9911 VX = *VP1X;
9912 VY = *VP1Y;
9913 VZ = *VP1Z;
9914 }
9915
9916 if ((AFP == 16) && (ZFP == 9)) {
9917 // 16F -> 15O + p ->
9918 AFP = 15;
9919 ZFP = 8;
9920 // PEVA = PEVA + 1;
9921 IOUNSTABLE = 1;
9922 unstable_tke(16.0, 9.0, 15.0, 8.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9923 &VP2Z);
9924 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9925 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9926 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9927 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9928 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9929 *ILOOP = *ILOOP + 1;
9930 VX = *VP1X;
9931 VY = *VP1Y;
9932 VZ = *VP1Z;
9933 }
9934
9935 if ((AFP == 16) && (ZFP == 10)) {
9936 // 16Ne -> 14O + 2p ->
9937 AFP = 14;
9938 ZFP = 8;
9939 // PEVA = PEVA + 2;
9940 IOUNSTABLE = 1;
9941 unstable_tke(16.0, 10.0, 15.0, 9.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9942 &VP2Z);
9943 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9944 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9945 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9946 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9947 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9948 *ILOOP = *ILOOP + 1;
9949 VX = *VP1X;
9950 VY = *VP1Y;
9951 VZ = *VP1Z;
9952
9953 unstable_tke(15.0, 9.0, 14.0, 8.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9954 &VP2Z);
9955 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9956 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9957 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9958 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9959 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9960 *ILOOP = *ILOOP + 1;
9961 VX = *VP1X;
9962 VY = *VP1Y;
9963 VZ = *VP1Z;
9964 }
9965 if ((AFP == 18) && (ZFP == 11)) {
9966 // 18Na -> 17Ne + p ->
9967 AFP = 17;
9968 ZFP = 10;
9969 // PEVA = PEVA + 1;
9970 IOUNSTABLE = 1;
9971 unstable_tke(18.0, 11.0, 17.0, 10.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9972 &VP2Z);
9973 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9974 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9975 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9976 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9977 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9978 *ILOOP = *ILOOP + 1;
9979 VX = *VP1X;
9980 VY = *VP1Y;
9981 VZ = *VP1Z;
9982 }
9983 if ((AFP == 19) && (ZFP == 11)) {
9984 // 19Na -> 18Ne + p ->
9985 AFP = 18;
9986 ZFP = 10;
9987 // PEVA = PEVA + 1;
9988 IOUNSTABLE = 1;
9989 unstable_tke(19.0, 11.0, 18.0, 10.0, VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
9990 &VP2Z);
9991 BU_TAB_TEMP[*ILOOP][0] = 1.0;
9992 BU_TAB_TEMP[*ILOOP][1] = 1.0;
9993 BU_TAB_TEMP[*ILOOP][2] = VP2X;
9994 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
9995 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
9996 *ILOOP = *ILOOP + 1;
9997 VX = *VP1X;
9998 VY = *VP1Y;
9999 VZ = *VP1Z;
10000 }
10001 if (ZFP >= 4 && (AFP - ZFP) == 1) {
10002 // Heavy residue is treated as 3He
10003 NEVA = AFP - 3;
10004 PEVA = ZFP - 2;
10005
10006 for (G4int I = 0; I < NEVA; I++) {
10007 unstable_tke(G4double(AFP - I), G4double(ZFP), G4double(AFP - I - 1), G4double(ZFP), VX, VY,
10008 VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y, &VP2Z);
10009 BU_TAB_TEMP[*ILOOP][0] = 0.0;
10010 BU_TAB_TEMP[*ILOOP][1] = 1.0;
10011 BU_TAB_TEMP[*ILOOP][2] = VP2X;
10012 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
10013 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
10014 *ILOOP = *ILOOP + 1;
10015 VX = *VP1X;
10016 VY = *VP1Y;
10017 VZ = *VP1Z;
10018 }
10019 for (G4int I = 0; I < PEVA; I++) {
10020 unstable_tke(G4double(AFP - NEVA - I), G4double(ZFP - I), G4double(AFP - NEVA - I - 1),
10021 G4double(ZFP - I - 1), VX, VY, VZ, &(*VP1X), &(*VP1Y), &(*VP1Z), &VP2X, &VP2Y,
10022 &VP2Z);
10023 BU_TAB_TEMP[*ILOOP][0] = 1.0;
10024 BU_TAB_TEMP[*ILOOP][1] = 1.0;
10025 BU_TAB_TEMP[*ILOOP][2] = VP2X;
10026 BU_TAB_TEMP[*ILOOP][3] = VP2Y;
10027 BU_TAB_TEMP[*ILOOP][4] = VP2Z;
10028 *ILOOP = *ILOOP + 1;
10029 VX = *VP1X;
10030 VY = *VP1Y;
10031 VZ = *VP1Z;
10032 }
10033
10034 AFP = 3;
10035 ZFP = 2;
10036 IOUNSTABLE = 1;
10037 }
10038 //
10039 *AFPNEW = AFP;
10040 *ZFPNEW = ZFP;
10041 return;
10042}
void unstable_tke(G4double AIN, G4double ZIN, G4double ANEW, G4double ZNEW, G4double VXIN, G4double VYIN, G4double VZIN, G4double *V1X, G4double *V1Y, G4double *V1Z, G4double *V2X, G4double *V2Y, G4double *V2Z)
Definition G4Abla.cc:10046

Referenced by DeexcitationAblaxx().

◆ unstable_tke()

void G4Abla::unstable_tke ( G4double AIN,
G4double ZIN,
G4double ANEW,
G4double ZNEW,
G4double VXIN,
G4double VYIN,
G4double VZIN,
G4double * V1X,
G4double * V1Y,
G4double * V1Z,
G4double * V2X,
G4double * V2Y,
G4double * V2Z )

Calculation of unstable nuclei tke

Definition at line 10046 of file G4Abla.cc.

10049{
10050 //
10051 G4double EKIN_P1 = 0., ekin_tot = 0.;
10052 G4double PX1, PX2, PY1, PY2, PZ1, PZ2, PTOT;
10053 G4double RNDT, CTET1, STET1, RNDP, PHI1, ETOT_P1, ETOT_P2;
10054 G4double MASS, MASS1, MASS2;
10055 G4double vxout = 0., vyout = 0., vzout = 0.;
10056 G4int iain, izin, ianew, iznew, inin, innew;
10057 //
10058 G4double C = 29.97924580; // cm/ns
10059 G4double AMU = 931.4940; // MeV/C^2
10060 //
10061 iain = idnint(ain);
10062 izin = idnint(zin);
10063 inin = iain - izin;
10064 ianew = idnint(anew);
10065 iznew = idnint(znew);
10066 innew = ianew - iznew;
10067 //
10068 if (ain == 0) return;
10069 //
10070 if (izin > 12) {
10071 mglms(ain, zin, 3, &MASS);
10072 mglms(anew, znew, 3, &MASS1);
10073 mglms(ain - anew, zin - znew, 3, &MASS2);
10074 ekin_tot = MASS - MASS1 - MASS2;
10075 }
10076 else {
10077 // ekin_tot =
10078 // MEXP(ININ,IZIN)-(MEXP(INNEW,IZNEW)+MEXP(ININ-INNEW,IZIN-IZNEW));
10079 ekin_tot = masses->massexp[inin][izin]
10080 - (masses->massexp[innew][iznew] + masses->massexp[inin - innew][izin - iznew]);
10081 if (izin > 12) std::cout << "*** ZIN > 12 ***" << izin << std::endl;
10082 }
10083
10084 if (ekin_tot < 0.00) {
10085 // if( iain.ne.izin .and. izin.ne.0 ){
10086 // print *,"Negative Q-value in UNSTABLE_TKE"
10087 // print *,"ekin_tot=",ekin_tot
10088 // print *,"ain,zin=",ain,zin,MEXP(ININ,IZIN)
10089 // print *,"anew,znew=",anew,znew,MEXP(INNEW,IZNEW)
10090 // print *
10091 // }
10092 ekin_tot = 0.0;
10093 }
10094 //
10095 EKIN_P1 = ekin_tot * (ain - anew) / ain;
10096 ETOT_P1 = EKIN_P1 + anew * AMU;
10097 PTOT =
10098 anew * AMU
10099 * std::sqrt((EKIN_P1 / (anew * AMU) + 1.0) * (EKIN_P1 / (anew * AMU) + 1.0) - 1.0); // MeV/C
10100 //
10101 RNDT = G4AblaRandom::flat();
10102 CTET1 = 2.0 * RNDT - 1.0;
10103 STET1 = std::sqrt(1.0 - CTET1 * CTET1);
10104 RNDP = G4AblaRandom::flat();
10105 PHI1 = RNDP * 2.0 * 3.141592654;
10106 PX1 = PTOT * STET1 * std::cos(PHI1);
10107 PY1 = PTOT * STET1 * std::sin(PHI1);
10108 PZ1 = PTOT * CTET1;
10109 *v1x = C * PX1 / ETOT_P1;
10110 *v1y = C * PY1 / ETOT_P1;
10111 *v1z = C * PZ1 / ETOT_P1;
10112 lorentz_boost(vxin, vyin, vzin, *v1x, *v1y, *v1z, &vxout, &vyout, &vzout);
10113 *v1x = vxout;
10114 *v1y = vyout;
10115 *v1z = vzout;
10116 //
10117 PX2 = -PX1;
10118 PY2 = -PY1;
10119 PZ2 = -PZ1;
10120 ETOT_P2 = (ekin_tot - EKIN_P1) + (ain - anew) * AMU;
10121 *v2x = C * PX2 / ETOT_P2;
10122 *v2y = C * PY2 / ETOT_P2;
10123 *v2z = C * PZ2 / ETOT_P2;
10124 lorentz_boost(vxin, vyin, vzin, *v2x, *v2y, *v2z, &vxout, &vyout, &vzout);
10125 *v2x = vxout;
10126 *v2y = vyout;
10127 *v2z = vzout;
10128 //
10129 return;
10130}

Referenced by unstable_nuclei().

◆ utilabs()

G4double G4Abla::utilabs ( G4double a)

Definition at line 6435 of file G4Abla.cc.

6436{
6437 return std::abs(a);
6438}

Referenced by eflmac_profi(), and fissionDistri().

◆ Uwash()

G4double G4Abla::Uwash ( G4double E,
G4double Ecrit,
G4double Freduction,
G4double gamma )

Definition at line 9257 of file G4Abla.cc.

9258{
9259 // E excitation energy
9260 // Ecrit critical pairing energy
9261 // Freduction reduction factor for shell washing in superfluid region
9262 G4double R_wash, uwash;
9263 if (E < Ecrit)
9264 R_wash = std::exp(-E * Freduction * gamma);
9265 else
9266 R_wash = std::exp(-Ecrit * Freduction * gamma - (E - Ecrit) * gamma);
9267
9268 uwash = R_wash;
9269 return uwash;
9270}

Referenced by fissionDistri().

◆ width()

G4double G4Abla::width ( G4double AMOTHER,
G4double ZMOTHER,
G4double APART,
G4double ZPART,
G4double TEMP,
G4double B1,
G4double SB1,
G4double EXC )

Calculation of decay widths for light particles.

Definition at line 6440 of file G4Abla.cc.

6442{
6443 /*
6444 * Implemented by JLRS for Abla c++: 06/11/2016
6445 *
6446 C Last update:
6447 C 28/10/13 - JLRS - from abrablav4 (AK)
6448 */
6449 G4int IZPART, IAPART, NMOTHER;
6450 G4double B, HBAR, PI, RGEOM, MPART, SB;
6451 G4double BKONST, C, C2, G, APARTNER, MU;
6452 G4double INT1, INT2, INT3, AKONST, EARG, R0, MPARTNER;
6453 G4double AEXP;
6454 G4double ARG;
6455 G4double PAR_A1 = 0., PAR_B1 = 0., FACT = 1.;
6456 G4double fwidth = 0.;
6457 G4int idlamb0 = 0;
6458 PI = 3.141592654;
6459
6460 if (ZPART == -2.) {
6461 ZPART = 0.;
6462 idlamb0 = 1;
6463 }
6464
6465 IZPART = idnint(ZPART);
6466 IAPART = idnint(APART);
6467
6468 B = B1;
6469 SB = SB1;
6470 NMOTHER = idnint(AMOTHER - ZMOTHER);
6471
6472 PAR_A1 = 0.0;
6473 PAR_B1 = 0.0;
6474
6475 if (SB > EXC) {
6476 return fwidth = 0.0;
6477 }
6478 else {
6479 // in MeV*s
6480 HBAR = 6.582122e-22;
6481 // HBAR2 = HBAR * HBAR
6482 // in m/s
6483 C = 2.99792458e8;
6484 C2 = C * C;
6485 APARTNER = AMOTHER - APART;
6486 MPARTNER = APARTNER * 931.49 / C2;
6487
6488 // g=(2s+1)
6489 if (IAPART == 1 && IZPART == 0) {
6490 G = 2.0;
6491 MPART = 939.56 / C2;
6492 if (idlamb0 == 1) MPART = 1115.683 / C2;
6493 }
6494 else {
6495 if (IAPART == 1 && IZPART == 1) {
6496 G = 2.0;
6497 MPART = 938.27 / C2;
6498 }
6499 else {
6500 if (IAPART == 2 && IZPART == 0) {
6501 G = 1.0;
6502 MPART = 2. * 939.56 / C2;
6503 }
6504 else {
6505 if (IAPART == 2 && IZPART == 1) {
6506 G = 3.0;
6507 MPART = 1876.10 / C2;
6508 }
6509 else {
6510 if (IAPART == 3 && IZPART == 1) {
6511 G = 2.0;
6512 MPART = 2809.39 / C2;
6513 }
6514 else {
6515 if (IAPART == 3 && IZPART == 2) {
6516 G = 2.0;
6517 MPART = 2809.37 / C2;
6518 }
6519 else {
6520 if (IAPART == 4 && IZPART == 2) {
6521 G = 1.0;
6522 MPART = 3728.35 / C2;
6523 }
6524 else {
6525 // IMF
6526 G = 1.0;
6527 MPART = APART * 931.49 / C2;
6528 }
6529 }
6530 }
6531 }
6532 }
6533 }
6534 } // end g
6535
6536 // Relative mass in MeV*s^2/m^2
6537 MU = MPARTNER * MPART / (MPARTNER + MPART);
6538 // in m
6539 R0 = 1.16e-15;
6540
6541 RGEOM = R0 * (std::pow(APART, 1.0 / 3.0) + std::pow(AMOTHER - APART, 1.0 / 3.0));
6542
6543 // in m*sqrt(MeV)
6544 AKONST = HBAR * std::sqrt(1.0 / MU);
6545
6546 // in 1/(MeV*m^2)
6547 BKONST = MPART / (PI * PI * HBAR * HBAR);
6548 //
6549 // USING ANALYTICAL APPROXIMATION
6550
6551 INT1 = 2.0 * std::pow(TEMP, 3.) / (2.0 * TEMP + B);
6552
6553 ARG = std::sqrt(B / TEMP);
6554 EARG = (erf(ARG) - 1.0);
6555 if (std::abs(EARG) < 1.e-9) EARG = 0.0;
6556 if (B == 0.0) {
6557 INT2 = 0.5 * std::sqrt(PI) * std::pow(TEMP, 3.0 / 2.0);
6558 }
6559 else {
6560 AEXP = B / TEMP;
6561 if (AEXP > 700.0) AEXP = 700.0;
6562 INT2 = (2.0 * B * B + TEMP * B) / std::sqrt(B)
6563 + std::exp(AEXP) * std::sqrt(PI / (4.0 * TEMP))
6564 * (4.0 * B * B + 4.0 * B * TEMP - TEMP * TEMP) * EARG;
6565 if (INT2 < 0.0) INT2 = 0.0;
6566 // For very low temperatures when EARG=0, INT2 get unreasonably high
6567 // values comming from the first term. Therefore, for these cases INT2 is
6568 // set to 0.
6569 if (EARG == 0.0) INT2 = 0.0;
6570 } // if B
6571
6572 INT3 = 2.0 * TEMP * TEMP * TEMP / (2.0 * TEMP * TEMP + 4.0 * B * TEMP + B * B);
6573
6574 if (IZPART < -1.0 && ZMOTHER < 151.0) {
6575 // IF(IZPART.LT.1)THEN
6576 // For neutrons, the width is given by a mean value between geometrical
6577 // and QM values; Only QM contribution (Rgeom -> Rgeom + Rlamda) seems to
6578 // be too strong for neutrons
6579 fwidth =
6580 PI * BKONST * G
6581 * std::sqrt((RGEOM * RGEOM * INT1 + 2.0 * AKONST * RGEOM * INT2 + AKONST * AKONST * INT3)
6582 * RGEOM * RGEOM * INT1);
6583 }
6584 else {
6585 fwidth = PI * BKONST * G
6586 * (RGEOM * RGEOM * INT1 + 2.0 * AKONST * RGEOM * INT2 + AKONST * AKONST * INT3);
6587 }
6588
6589 // To correct for too high values of analytical width compared to
6590 // numerical solution for energies close to the particle threshold:
6591 if (IZPART < 3.0) {
6592 if (AMOTHER < 155.0) {
6593 PAR_A1 = std::exp(2.302585 * 0.2083 * std::exp(-0.01548472 * AMOTHER)) - 0.05;
6594 PAR_B1 = 0.59939389 + 0.00915657 * AMOTHER;
6595 }
6596 else {
6597 if (AMOTHER > 154.0 && AMOTHER < 195.0) {
6598 PAR_A1 = 1.0086961 - 8.629e-5 * AMOTHER;
6599 PAR_B1 = 1.5329331 + 0.00302074 * AMOTHER;
6600 }
6601 else {
6602 if (AMOTHER > 194.0 && AMOTHER < 208.0) {
6603 PAR_A1 = 9.8356347 - 0.09294663 * AMOTHER + 2.441e-4 * AMOTHER * AMOTHER;
6604 PAR_B1 = 7.7701987 - 0.02897401 * AMOTHER;
6605 }
6606 else {
6607 if (AMOTHER > 207.0 && AMOTHER < 228.0) {
6608 PAR_A1 = 15.107385 - 0.12414415 * AMOTHER + 2.7222e-4 * AMOTHER * AMOTHER;
6609 PAR_B1 = -64.078009 + 0.56813179 * AMOTHER - 0.00121078 * AMOTHER * AMOTHER;
6610 }
6611 else {
6612 if (AMOTHER > 227.0) {
6613 if (mod(NMOTHER, 2) == 0 && NMOTHER > 147.) {
6614 PAR_A1 = 2.0 * (0.9389118 + 6.4559e-5 * AMOTHER);
6615 }
6616 else {
6617 if (mod(NMOTHER, 2) == 1) PAR_A1 = 3.0 * (0.9389118 + 6.4559e-5 * AMOTHER);
6618 }
6619 PAR_B1 = 2.1507177 + 0.00146119 * AMOTHER;
6620 }
6621 }
6622 }
6623 }
6624 }
6625 FACT = std::exp((2.302585 * PAR_A1 * std::exp(-PAR_B1 * (EXC - SB))));
6626 if (FACT < 1.0) FACT = 1.0;
6627 if (IZPART < -1. && ZMOTHER < 151.0) {
6628 // IF(IZPART.LT.1)THEN
6629 fwidth = fwidth / std::sqrt(FACT);
6630 }
6631 else {
6632 fwidth = fwidth / FACT;
6633 }
6634 } // if IZPART<3.0
6635
6636 if (fwidth <= 0.0) {
6637 std::cout << "LOOK IN PARTICLE_WIDTH!" << std::endl;
6638 std::cout << "ACN,APART :" << AMOTHER << APART << std::endl;
6639 std::cout << "EXC,TEMP,B,SB :" << EXC << " " << TEMP << " " << B << " " << SB << std::endl;
6640 std::cout << "INTi, i=1-3 :" << INT1 << " " << INT2 << " " << INT3 << std::endl;
6641 std::cout << " " << std::endl;
6642 }
6643
6644 } // if SB>EXC
6645 return fwidth;
6646}
G4double B(G4double temperature)
G4double fwidth
G4double erf(G4double x)
Definition G4Abla.cc:5906

Referenced by direct(), and imf().


The documentation for this class was generated from the following files: