Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // ABLAXX statistical de-excitation model 26 // ABLAXX statistical de-excitation model 27 // Jose Luis Rodriguez, UDC (translation from << 27 // Jose Luis Rodriguez, GSI (translation from ABLA07 and contact person) 28 // Pekka Kaitaniemi, HIP (initial translation 28 // Pekka Kaitaniemi, HIP (initial translation of ablav3p) 29 // Aleksandra Kelic, GSI (ABLA07 code) 29 // Aleksandra Kelic, GSI (ABLA07 code) 30 // Davide Mancusi, CEA (contact person INCL) 30 // Davide Mancusi, CEA (contact person INCL) 31 // Aatos Heikkinen, HIP (project coordination) 31 // Aatos Heikkinen, HIP (project coordination) 32 // 32 // 33 33 >> 34 #define ABLAXX_IN_GEANT4_MODE 1 >> 35 34 #include "globals.hh" 36 #include "globals.hh" 35 #include <cmath> << 36 #include <memory> << 37 #include <time.h> 37 #include <time.h> >> 38 #include <cmath> 38 39 39 #include "G4Abla.hh" 40 #include "G4Abla.hh" 40 #include "G4AblaDataDefs.hh" << 41 #include "G4AblaDataFile.hh" 41 #include "G4AblaDataFile.hh" 42 #include "G4AblaRandom.hh" 42 #include "G4AblaRandom.hh" 43 << 43 #ifdef ABLAXX_IN_GEANT4_MODE 44 G4Abla::G4Abla(G4VarNtp* aVarntp) << 44 G4Abla::G4Abla(G4Volant *aVolant, G4VarNtp *aVarntp) 45 { << 45 #else 46 verboseLevel = 0; << 46 G4Abla::G4Abla(G4INCL::Config *config, G4Volant *aVolant, G4VarNtp *aVarntp) 47 ilast = 0; << 47 #endif 48 varntp = static_cast<G4VarNtp*>(aVarntp); << 48 { 49 << 49 #ifndef ABLAXX_IN_GEANT4_MODE 50 verboseLevel = 0; << 50 theConfig = config; 51 gammaemission = 0; // 0 presaddle, 1 posts << 51 #endif 52 T_freeze_out_in = T_freeze_out = 0.; << 52 verboseLevel = 0; 53 Ainit = 0; << 53 ilast = 0; 54 Zinit = 0; << 54 volant = aVolant; // ABLA internal particle data 55 Sinit = 0; << 55 volant->iv = 0; 56 IEV_TAB_SSC = 0; << 56 varntp = aVarntp; // Output data structure 57 << 57 varntp->ntrack = 0; 58 ald = std::make_unique<G4Ald>(); << 58 59 ec2sub = std::make_unique<G4Ec2sub>(); << 59 verboseLevel = 0; 60 ecld = std::make_unique<G4Ecld>(); << 60 gammaemission= 0;// 0 presaddle, 1 postsaddle 61 masses = std::make_unique<G4Mexp>(); << 61 T_freeze_out = 0.; 62 fb = std::make_unique<G4Fb>(); << 62 Ainit=0; 63 fiss = std::make_unique<G4Fiss>(); << 63 Zinit=0; 64 opt = std::make_unique<G4Opt>(); << 64 Sinit=0; >> 65 >> 66 pace = new G4Pace(); >> 67 ald = new G4Ald(); >> 68 eenuc = new G4Eenuc(); >> 69 ec2sub = new G4Ec2sub(); >> 70 ecld = new G4Ecld(); >> 71 masses = new G4Mexp(); >> 72 fb = new G4Fb(); >> 73 fiss = new G4Fiss(); >> 74 opt = new G4Opt(); >> 75 } >> 76 >> 77 void G4Abla::setVerboseLevel(G4int level) >> 78 { >> 79 verboseLevel = level; >> 80 } >> 81 >> 82 G4Abla::~G4Abla() >> 83 { >> 84 delete pace; >> 85 delete ald; >> 86 delete eenuc; >> 87 delete ec2sub; >> 88 delete ecld; >> 89 delete masses; >> 90 delete fb; >> 91 delete fiss; >> 92 delete opt; 65 } 93 } 66 94 67 void G4Abla::setVerboseLevel(G4int level) { ve << 68 << 69 // Main interface to the evaporation without l 95 // Main interface to the evaporation without lambda evaporation 70 void G4Abla::DeexcitationAblaxx(G4int nucleusA << 96 void G4Abla::DeexcitationAblaxx(G4int nucleusA, G4int nucleusZ, G4double excitationEnergy, G4double angularMomentum, G4double momX, G4double momY, G4double momZ, G4int eventnumber) 71 G4int nucleusZ << 72 G4double excit << 73 G4double angul << 74 G4double momX, << 75 G4double momY, << 76 G4double momZ, << 77 G4int eventnum << 78 { 97 { 79 DeexcitationAblaxx(nucleusA, nucleusZ, exc << 98 DeexcitationAblaxx(nucleusA,nucleusZ,excitationEnergy,angularMomentum,momX,momY,momZ,eventnumber,0); 80 } 99 } 81 100 82 // Main interface to the evaporation with lamb 101 // Main interface to the evaporation with lambda emission 83 void G4Abla::DeexcitationAblaxx(G4int nucleusA << 102 void G4Abla::DeexcitationAblaxx(G4int nucleusA, G4int nucleusZ, G4double excitationEnergy, G4double angularMomentum, G4double momX, G4double momY, G4double momZ, G4int eventnumber, G4int nucleusS) 84 G4int nucleusZ << 103 { 85 G4double excit << 104 86 G4double angul << 105 const G4double amu = 931.4940; // MeV/C^2 87 G4double momX, << 106 const G4double C = 29.9792458; // cm/ns 88 G4double momY, << 107 89 G4double momZ, << 108 SetParametersG4(nucleusZ, nucleusA); 90 G4int eventnum << 109 91 G4int nucleusS << 110 mult10: 92 { << 111 G4int IS = 0; 93 << 112 94 const G4double amu = 931.4940; // MeV/C^2 << 113 if(nucleusS>0)nucleusS=0;// S=1 from INCL ???? 95 const G4double C = 29.9792458; // cm/ns << 114 96 << 115 G4int NbLam0 = std::abs(nucleusS); 97 SetParametersG4(nucleusZ, nucleusA); << 116 98 << 117 Ainit=-1*nucleusA; 99 mult10: << 118 Zinit=-1*nucleusZ; 100 G4int IS = 0; << 119 Sinit=-1*nucleusS; 101 << 120 102 varntp->clear(); // Clean up an initialize << 121 G4double aff = 0.0; 103 << 122 G4double zff = 0.0; 104 if (nucleusS > 0) << 123 G4int ZFP1 = 0, AFP1 = 0, AFPIMF = 0, ZFPIMF = 0, ZFP2 = 0, AFP2 = 0, SFP1 = 0, SFP2 = 0, SFPIMF = 0; 105 nucleusS = 0; // S=1 from INCL ???? << 124 G4double vx_eva = 0.0, vy_eva = 0.0, vz_eva = 0.0; 106 << 125 G4double VX_PREF=0.,VY_PREF=0.,VZ_PREF=00,VP1X,VP1Y,VP1Z,VXOUT,VYOUT,VZOUT,V_CM[3],VFP1_CM[3],VFP2_CM[3],VIMF_CM[3],VX2OUT,VY2OUT,VZ2OUT; 107 G4int NbLam0 = std::abs(nucleusS); << 126 G4double zf = 0.0, af = 0.0, mtota = 0.0, tkeimf = 0.0, jprf0=0.; 108 << 127 G4int ff = 0,afpnew=0,zfpnew=0,aprfp=0,zprfp=0,IOUNSTABLE=0,ILOOP=0,IEV_TAB=0,IEV_TAB_TEMP=0; 109 Ainit = -1 * nucleusA; << 128 G4int fimf = 0,INMIN=0,INMAX=0; 110 Zinit = -1 * nucleusZ; << 129 G4int ftype=0;//,ftype1=0; 111 Sinit = -1 * nucleusS; << 130 G4int inum = eventnumber; 112 << 131 G4int inttype = 0; 113 G4double aff = 0.0; << 132 opt->optimfallowed=1; 114 G4double zff = 0.0; << 133 115 G4int ZFP1 = 0, AFP1 = 0, AFPIMF = 0, ZFPI << 134 if(fiss->zt>56){ 116 G4double vx_eva = 0.0, vy_eva = 0.0, vz_ev << 135 fiss->ifis = 1; 117 G4double VX_PREF = 0., VY_PREF = 0., VZ_PR << 136 }else { 118 VFP2_CM[3], VIMF_CM[3], VX2OUT, V << 137 fiss->ifis = 0; 119 G4double zf = 0.0, af = 0.0, mtota = 0.0, << 138 } 120 G4int ff = 0, afpnew = 0, zfpnew = 0, aprf << 139 121 IEV_TAB_TEMP = 0; << 140 if(NbLam0>0){ 122 G4int fimf = 0, INMIN = 0, INMAX = 0; << 141 opt->nblan0 = NbLam0; 123 G4int ftype = 0; //,ftype1=0; << 142 } 124 G4int inum = eventnumber; << 143 125 G4int inttype = 0; << 144 G4double aprf = (G4double) nucleusA; 126 opt->optimfallowed = 1; << 145 G4double zprf = (G4double) nucleusZ; 127 << 146 G4double ee = excitationEnergy; 128 if (fiss->zt > 56) << 147 G4double jprf = angularMomentum; // actually root-mean-squared 129 { << 148 130 fiss->ifis = 1; << 149 G4double pxrem = momX; 131 } << 150 G4double pyrem = momY; 132 else << 151 G4double pzrem = momZ; 133 { << 152 G4double zimf,aimf; 134 fiss->ifis = 0; << 153 135 } << 154 volant->clear(); // Clean up an initialize ABLA output. 136 << 155 varntp->clear(); // Clean up an initialize ABLA output. 137 if (NbLam0 > 0) << 156 varntp->ntrack = 0; 138 { << 157 varntp->kfis = 0; 139 opt->nblan0 = NbLam0; << 158 volant->iv = 0; 140 } << 159 gammaemission=0; 141 << 160 G4double T_init=0.,T_diff=0.,a_tilda=0.,a_tilda_BU=0., EE_diff=0., EINCL=0., A_FINAL=0., Z_FINAL=0., E_FINAL=0.; 142 G4double aprf = (G4double)nucleusA; << 161 143 G4double zprf = (G4double)nucleusZ; << 162 G4double A_diff=0.,ASLOPE1,ASLOPE2,A_ACC,ABU_SLOPE, ABU_SUM=0., AMEM=0., ZMEM=0., EMEM=0., JMEM=0., PX_BU_SUM = 0.0, PY_BU_SUM = 0.0, PZ_BU_SUM = 0.0, ETOT_SUM=0., P_BU_SUM=0., ZBU_SUM=0.,Z_Breakup_sum=0.,A_Breakup,Z_Breakup,N_Breakup,G_SYMM,CZ,Sigma_Z,Z_Breakup_Mean,ZTEMP=0.,ATEMP=0.; 144 G4double ee = excitationEnergy; << 163 145 G4double jprf = angularMomentum; // actual << 164 G4double ETOT_PRF=0.0,PXPRFP=0.,PYPRFP=0.,PZPRFP=0.,PPRFP=0., VX1_BU=0., VY1_BU=0., VZ1_BU=0., VBU2=0., GAMMA_REL=1.0, Eexc_BU_SUM=0., VX_BU_SUM = 0., VY_BU_SUM =0.,VZ_BU_SUM =0., E_tot_BU=0.,EKIN_BU=0.,ZIMFBU=0., AIMFBU=0., ZFFBU=0., AFFBU=0., AFBU=0., ZFBU=0., EEBU=0.,TKEIMFBU=0.,vx_evabu=0.,vy_evabu=0.,vz_evabu=0., Bvalue_BU=0.,P_BU=0.,ETOT_BU=1.,PX_BU=0.,PY_BU=0.,PZ_BU=0.,VX2_BU=0.,VY2_BU=0.,VZ2_BU=0.; 146 << 165 147 G4double pxrem = momX; << 166 G4int ABU_DIFF,ZBU_DIFF,NBU_DIFF; 148 G4double pyrem = momY; << 167 G4int INEWLOOP = 0, ILOOPBU=0; 149 G4double pzrem = momZ; << 168 150 G4double zimf, aimf; << 169 G4double BU_TAB_TEMP[200][6], BU_TAB_TEMP1[200][6]; 151 << 170 G4double EV_TAB_TEMP[200][6],EV_TEMP[200][6]; 152 gammaemission = 0; << 171 G4int IMEM_BU[200], IMEM=0; 153 G4double T_init = 0., T_diff = 0., a_tilda << 172 154 Z_FINAL = 0., E_FINAL = 0.; << 173 if(nucleusA<1){ 155 << 174 std::cout << "Error - Remnant with a mass number A below 1." << std::endl; 156 G4double A_diff = 0., ASLOPE1, ASLOPE2, A_ << 175 //INCL_ERROR("Remnant with a mass number A below 1."); 157 PX_BU_SUM = 0.0, PY_BU_SUM = 0.0, << 176 return; 158 Z_Breakup_sum = 0., A_Breakup, Z_ << 177 } 159 ATEMP = 0.; << 178 160 << 179 for(G4int j=0;j<3;j++){ 161 G4double ETOT_PRF = 0.0, PXPRFP = 0., PYPR << 180 V_CM[j]=0.; 162 VBU2 = 0., GAMMA_REL = 1.0, Eexc_ << 181 VFP1_CM[j]=0.; 163 E_tot_BU = 0., EKIN_BU = 0., ZIMF << 182 VFP2_CM[j]=0.; 164 EEBU = 0., TKEIMFBU = 0., vx_evab << 183 VIMF_CM[j]=0.; 165 ETOT_BU = 1., PX_BU = 0., PY_BU = << 184 } 166 << 185 167 G4int ABU_DIFF, ZBU_DIFF, NBU_DIFF; << 186 for(G4int I1=0;I1<200;I1++){ 168 G4int INEWLOOP = 0, ILOOPBU = 0; << 187 for(G4int I2 = 0;I2<12;I2++) 169 << 188 BU_TAB[I1][I2] = 0.0; 170 G4double BU_TAB_TEMP[indexpart][6], BU_TAB << 189 for(G4int I2 = 0;I2<6;I2++){ 171 G4double EV_TAB_TEMP[indexpart][6], EV_TEM << 190 BU_TAB_TEMP[I1][I2] = 0.0; 172 G4int IMEM_BU[indexpart], IMEM = 0; << 191 BU_TAB_TEMP1[I1][I2] = 0.0; 173 << 192 EV_TAB_TEMP[I1][I2] = 0.0; 174 if (nucleusA < 1) << 193 EV_TAB[I1][I2] = 0.0; 175 { << 194 EV_TAB_SSC[I1][I2] = 0.0; 176 std::cout << "Error - Remnant with a m << 195 EV_TEMP[I1][I2] = 0.0; 177 // INCL_ERROR("Remnant with a mass num << 196 } 178 return; << 197 } 179 } << 198 >> 199 G4int idebug = 0; >> 200 if(idebug == 1) { >> 201 zprf = 81.; >> 202 aprf = 201.; >> 203 // ee = 86.5877686; >> 204 ee = 100.0; >> 205 jprf = 10.; >> 206 zf = 0.; >> 207 af = 0.; >> 208 mtota = 0.; >> 209 ff = 1; >> 210 inttype = 0; >> 211 //inum = 2; >> 212 } >> 213 // >> 214 G4double AAINCL = aprf; >> 215 G4double ZAINCL = zprf; >> 216 EINCL = ee; >> 217 // >> 218 // Velocity after the first stage of reaction (INCL) >> 219 // For coupling with INCL, comment the lines below, and use output >> 220 // of INCL as pxincl, pyincl,pzincl >> 221 // >> 222 G4double pincl = std::sqrt(pxrem*pxrem + pyrem*pyrem + pzrem*pzrem); >> 223 // PPRFP is in MeV/c >> 224 G4double ETOT_incl = std::sqrt(pincl*pincl + (AAINCL * amu)*(AAINCL * amu)); >> 225 G4double VX_incl = C * pxrem / ETOT_incl; >> 226 G4double VY_incl = C * pyrem / ETOT_incl; >> 227 G4double VZ_incl = C * pzrem / ETOT_incl; >> 228 // >> 229 // Multiplicity in the break-up event >> 230 G4int IMULTBU = 0; >> 231 G4int IMULTIFR = 0; >> 232 G4int I_Breakup=0; >> 233 G4int NbLamprf= 0; >> 234 IEV_TAB = 0; >> 235 /* >> 236 C Set maximum temperature for sequential decay (evaporation) >> 237 C Remove additional energy by simultaneous break up >> 238 C (vaporisation or multi-fragmentation) >> 239 >> 240 C Idea: If the temperature of the projectile spectator exceeds >> 241 c the limiting temperature T_freeze_out, the additional >> 242 C energy which is present in the spectator is used for >> 243 C a stage of simultaneous break up. It is either the >> 244 C simultaneous emission of a gaseous phase or the simultaneous >> 245 C emission of several intermediate-mass fragments. Only one >> 246 C piece of the projectile spectator (assumed to be the largest >> 247 C one) is kept track. >> 248 >> 249 C MVR, KHS, October 2001 >> 250 C KHS, AK 2007 - Masses from the power low; slope parameter dependent on >> 251 C energy per nucleon; symmtery-energy coeff. dependent on >> 252 C energy per nucleon. >> 253 >> 254 c Clear BU_TAB (array of multifragmentation products) >> 255 */ >> 256 if(T_freeze_out_in >= 0.0){ >> 257 T_freeze_out = T_freeze_out_in; >> 258 }else{ >> 259 T_freeze_out = max(9.33*std::exp(-0.00282*AAINCL),5.5); >> 260 // ! See: J. Natowitz et al, PRC65 (2002) 034618 >> 261 // T_freeze_out=DMAX1(9.0D0*DEXP(-0.001D0*AAABRA), >> 262 // & 5.5D0) >> 263 } >> 264 // >> 265 a_tilda = ald->av*aprf + ald->as*std::pow(aprf,2.0/3.0) + ald->ak*std::pow(aprf,1.0/3.0); >> 266 >> 267 T_init = std::sqrt(EINCL/a_tilda); >> 268 >> 269 T_diff = T_init - T_freeze_out; 180 270 181 for (G4int j = 0; j < 3; j++) << 271 if(T_diff>0.1 && zprf>2. && (aprf-zprf)>0.){ 182 { << 272 // T_Diff is set to be larger than 0.1 MeV in order to avoid strange cases for which 183 V_CM[j] = 0.; << 273 // T_Diff is of the order of 1.e-3 and less. 184 VFP1_CM[j] = 0.; << 185 VFP2_CM[j] = 0.; << 186 VIMF_CM[j] = 0.; << 187 } << 188 << 189 for (G4int I1 = 0; I1 < indexpart; I1++) << 190 { << 191 for (G4int I2 = 0; I2 < 12; I2++) << 192 BU_TAB[I1][I2] = 0.0; << 193 for (G4int I2 = 0; I2 < 6; I2++) << 194 { << 195 BU_TAB_TEMP[I1][I2] = 0.0; << 196 BU_TAB_TEMP1[I1][I2] = 0.0; << 197 EV_TAB_TEMP[I1][I2] = 0.0; << 198 EV_TAB[I1][I2] = 0.0; << 199 EV_TAB_SSC[I1][I2] = 0.0; << 200 EV_TEMP[I1][I2] = 0.0; << 201 } << 202 } << 203 << 204 G4int idebug = 0; << 205 if (idebug == 1) << 206 { << 207 zprf = 81.; << 208 aprf = 201.; << 209 // ee = 86.5877686; << 210 ee = 100.0; << 211 jprf = 10.; << 212 zf = 0.; << 213 af = 0.; << 214 mtota = 0.; << 215 ff = 1; << 216 inttype = 0; << 217 // inum = 2; << 218 } << 219 // << 220 G4double AAINCL = aprf; << 221 G4double ZAINCL = zprf; << 222 EINCL = ee; << 223 // << 224 // Velocity after the first stage of react << 225 // For coupling with INCL, comment the lin << 226 // of INCL as pxincl, pyincl,pzincl << 227 // << 228 G4double pincl = std::sqrt(pxrem * pxrem + << 229 // PPRFP is in MeV/c << 230 G4double ETOT_incl = std::sqrt(pincl * pin << 231 G4double VX_incl = C * pxrem / ETOT_incl; << 232 G4double VY_incl = C * pyrem / ETOT_incl; << 233 G4double VZ_incl = C * pzrem / ETOT_incl; << 234 // << 235 // Multiplicity in the break-up event << 236 G4int IMULTBU = 0; << 237 G4int IMULTIFR = 0; << 238 G4int I_Breakup = 0; << 239 G4int NbLamprf = 0; << 240 IEV_TAB = 0; << 241 << 242 /* << 243 C Set maximum temperature for sequenti << 244 C Remove additional energy by simultan << 245 C (vaporisation o << 246 << 247 C Idea: If the temperature of the proj << 248 c the limiting temperature T_fre << 249 C energy which is present in the << 250 C a stage of simultaneous break << 251 C simultaneous emission of a gas << 252 C emission of several intermedia << 253 C piece of the projectile specta << 254 C one) is kept track. << 255 << 256 C MVR, KHS, October 2001 << 257 C KHS, AK 2007 - Masses from the po << 258 on C energy per nucl << 259 dependent on C energy << 260 << 261 c Clear BU_TAB (array of multifragme << 262 */ << 263 if (T_freeze_out_in >= 0.0) << 264 { << 265 T_freeze_out = T_freeze_out_in; << 266 } << 267 else << 268 { << 269 T_freeze_out = max(9.33 * std::exp(-0. << 270 // ! See: J. Natowitz et al, P << 271 // T_freeze_out=DMAX1(9.0D0*DEX << 272 // & 5.5D0) << 273 } << 274 // << 275 a_tilda = ald->av * aprf + ald->as * std:: << 276 << 277 T_init = std::sqrt(EINCL / a_tilda); << 278 << 279 T_diff = T_init - T_freeze_out; << 280 << 281 if (T_diff > 0.1 && zprf > 2. && (aprf - z << 282 { << 283 // T_Diff is set to be larger than 0.1 << 284 // for which T_Diff is of the order of << 285 varntp->kfis = 10; 274 varntp->kfis = 10; 286 275 287 for (G4int i = 0; i < 5; i++) << 276 for(G4int i=0;i<5;i++){ 288 { << 277 EE_diff = EINCL - a_tilda * T_freeze_out*T_freeze_out; 289 EE_diff = EINCL - a_tilda * T_free << 278 // Energy removed 10*5/T_init per nucleon removed in simultaneous breakup 290 // Energy removed 10*5/ << 279 // adjusted to frag. xsections 238U (1AGeV) + Pb data, KHS Dec. 2005 291 // simultaneous breakup << 280 // This should maybe be re-checked, in a meanwhile several things in break-up description 292 // (1AGeV) + Pb data, K << 281 // have changed (AK). 293 // This should maybe be re-checked << 294 // break-up description have chang << 295 282 296 A_diff = dint(EE_diff / (8.0 * 5.0 283 A_diff = dint(EE_diff / (8.0 * 5.0 / T_freeze_out)); 297 284 298 if (A_diff > AAINCL) << 285 if(A_diff>AAINCL) A_diff = AAINCL; 299 A_diff = AAINCL; << 300 286 301 A_FINAL = AAINCL - A_diff; 287 A_FINAL = AAINCL - A_diff; 302 288 303 a_tilda = << 289 a_tilda = ald->av*A_FINAL + ald->as*std::pow(A_FINAL,2.0/3.0) + ald->ak*std::pow(A_FINAL,1.0/3.0); 304 ald->av * A_FINAL + ald->as * << 290 E_FINAL = a_tilda * T_freeze_out*T_freeze_out; 305 E_FINAL = a_tilda * T_freeze_out * << 306 << 307 if (A_FINAL < 4.0) << 308 { // To avoid numerical problems << 309 EE_diff = EINCL - E_FINAL; << 310 A_FINAL = 1.0; << 311 Z_FINAL = 1.0; << 312 E_FINAL = 0.0; << 313 goto mul4325; << 314 } << 315 } << 316 mul4325: << 317 // The idea is similar to Z determinat << 318 // partner is not fixed by the A/Z of << 319 // from Gaussian Z_FINAL_MEAN = dint(z << 320 << 321 Z_FINAL = dint(zprf * A_FINAL / (aprf) << 322 << 323 if (E_FINAL < 0.0) << 324 E_FINAL = 0.0; << 325 << 326 aprf = A_FINAL; << 327 zprf = Z_FINAL; << 328 ee = E_FINAL; << 329 << 330 A_diff = AAINCL - aprf; << 331 << 332 // Creation of multifragmentation prod << 333 if (A_diff <= 1.0) << 334 { << 335 aprf = AAINCL; << 336 zprf = ZAINCL; << 337 ee = EINCL; << 338 IMULTIFR = 0; << 339 goto mult7777; << 340 } << 341 else if (A_diff > 1.0) << 342 { << 343 << 344 A_ACC = 0.0; << 345 // Energy-dependence of the slope << 346 // to exp. data (see e.g. Sfienti << 347 ASLOPE1 = -2.400; // e*/a=7 -2.4 << 348 ASLOPE2 = -1.200; // e*/a=3 -1.2 << 349 << 350 a_tilda = ald->av * AAINCL + ald-> << 351 << 352 E_FINAL = a_tilda * T_freeze_out * << 353 << 354 ABU_SLOPE = (ASLOPE1 - ASLOPE2) / << 355 << 356 // Botvina et al, PRC 74 (2006) 04 << 357 // ABU_SLOPE = 5.57489D0- << 358 // & 0.3552D0*(E_FINAL/AAAB << 359 // & 7.268D-4*(E_FINAL/AAAB << 360 // They fit with A**(-tau) and her << 361 // ABU_SLOPE = ABU_SLOPE* << 362 << 363 // ABU_SLOPE = -2.60D0 << 364 // print*,ABU_SLOPE,(E_FI << 365 << 366 if (ABU_SLOPE > -1.01) << 367 ABU_SLOPE = -1.01; << 368 << 369 I_Breakup = 0; << 370 Z_Breakup_sum = Z_FINAL; << 371 ABU_SUM = 0.0; << 372 ZBU_SUM = 0.0; << 373 << 374 for (G4int i = 0; i < 100; i++) << 375 { << 376 IS = 0; << 377 mult4326: << 378 A_Breakup = dint(G4double(IPOW << 379 // Power law with exponent ABU << 380 IS = IS + 1; << 381 if (IS > 100) << 382 { << 383 std::cout << "WARNING: IPO << 384 "CALCULATING << 385 << A_Breakup << << 386 goto mult10; << 387 } << 388 << 389 if (A_Breakup > AAINCL) << 390 goto mult4326; << 391 << 392 if (A_Breakup <= 0.0) << 393 { << 394 std::cout << "A_BREAKUP <= << 395 goto mult10; << 396 } << 397 291 398 A_ACC = A_ACC + A_Breakup; << 292 if(A_FINAL<4.0){ // To avoid numerical problems >> 293 EE_diff = EINCL - E_FINAL; >> 294 A_FINAL = 1.0; >> 295 Z_FINAL = 1.0; >> 296 E_FINAL = 0.0; >> 297 goto mul4325; >> 298 } >> 299 } >> 300 mul4325: >> 301 // The idea is similar to Z determination of multifragment - Z of "heavy" partner is not >> 302 // fixed by the A/Z of the prefragment, but randomly picked from Gaussian >> 303 // Z_FINAL_MEAN = dint(zprf * A_FINAL / (aprf)); >> 304 >> 305 Z_FINAL = dint(zprf * A_FINAL / (aprf)); >> 306 >> 307 if(E_FINAL<0.0) E_FINAL = 0.0; >> 308 >> 309 aprf = A_FINAL; >> 310 zprf = Z_FINAL; >> 311 ee = E_FINAL; >> 312 >> 313 A_diff = AAINCL - aprf; >> 314 >> 315 // Creation of multifragmentation products by breakup >> 316 if(A_diff<=1.0){ >> 317 aprf = AAINCL; >> 318 zprf = ZAINCL; >> 319 ee = EINCL; >> 320 IMULTIFR = 0; >> 321 goto mult7777; >> 322 }else if(A_diff>1.0){ >> 323 >> 324 A_ACC = 0.0; >> 325 // Energy-dependence of the slope parameter, acc. to A. Botvina, fits also to exp. data (see >> 326 // e.g. Sfienti et al, NPA 2007) >> 327 ASLOPE1 = -2.400; // e*/a=7 -2.4 >> 328 ASLOPE2 = -1.200; // e*/a=3 -1.2 >> 329 >> 330 a_tilda = ald->av*AAINCL + ald->as*std::pow(AAINCL,2.0/3.0) + ald->ak*std::pow(AAINCL,1.0/3.0); >> 331 >> 332 E_FINAL = a_tilda * T_freeze_out*T_freeze_out; >> 333 >> 334 ABU_SLOPE = (ASLOPE1-ASLOPE2)/4.0*(E_FINAL/AAINCL)+ >> 335 ASLOPE1-(ASLOPE1-ASLOPE2)*7.0/4.0; >> 336 >> 337 // Botvina et al, PRC 74 (2006) 044609, fig. 5 for B0=18 MeV >> 338 // ABU_SLOPE = 5.57489D0-2.08149D0*(E_FINAL/AAABRA)+ >> 339 // & 0.3552D0*(E_FINAL/AAABRA)**2-0.024927D0*(E_FINAL/AAABRA)**3+ >> 340 // & 7.268D-4*(E_FINAL/AAABRA)**4 >> 341 // They fit with A**(-tau) and here is done A**(tau) >> 342 // ABU_SLOPE = ABU_SLOPE*(-1.D0) >> 343 >> 344 // ABU_SLOPE = -2.60D0 >> 345 // print*,ABU_SLOPE,(E_FINAL/AAABRA) >> 346 >> 347 if(ABU_SLOPE > -1.01) ABU_SLOPE = -1.01; >> 348 >> 349 I_Breakup = 0; >> 350 Z_Breakup_sum = Z_FINAL; >> 351 ABU_SUM = 0.0; >> 352 ZBU_SUM = 0.0; >> 353 >> 354 for(G4int i=0;i<100;i++){ >> 355 IS = 0; >> 356 mult4326: >> 357 A_Breakup = dint(G4double(IPOWERLIMHAZ(ABU_SLOPE,1,idnint(A_diff)))); >> 358 // Power law with exponent ABU_SLOPE >> 359 IS = IS +1; >> 360 if(IS>100){ >> 361 std::cout << "WARNING: IPOWERLIMHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING A_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED: " << A_Breakup << std::endl; >> 362 goto mult10; >> 363 } 399 364 400 if (A_ACC <= A_diff) << 365 if(A_Breakup>AAINCL) goto mult4326; 401 { << 402 366 403 Z_Breakup_Mean = dint(A_Br << 367 if(A_Breakup<=0.0){ >> 368 std::cout << "A_BREAKUP <= 0 " << std::endl; >> 369 goto mult10; >> 370 } 404 371 405 Z_Breakup_sum = Z_Breakup_ << 372 A_ACC = A_ACC + A_Breakup; 406 // << 407 // See G.A. Souliotis et a << 408 G_SYMM = 34.2281 - 5.14037 << 409 if (E_FINAL / AAINCL < 2.0 << 410 G_SYMM = 25.0; << 411 if (E_FINAL / AAINCL > 4.0 << 412 G_SYMM = 15.0; << 413 << 414 // G_SYMM = 23 << 415 << 416 G_SYMM = 25.0; // 25 << 417 CZ = 2.0 * G_SYMM * 4.0 / << 418 // 2*CZ=d^2(Esym)/dZ^2, Es << 419 // gamma = 23.6D0 is the s << 420 G4int IIS = 0; << 421 Sigma_Z = std::sqrt(T_free << 422 << 423 IS = 0; << 424 mult4333: << 425 Z_Breakup = dint(G4double( << 426 IS = IS + 1; << 427 // << 428 if (IS > 100) << 429 { << 430 std::cout << "WARNING: << 431 "CALCULAT << 432 "DICED: " << 433 << A_Breakup << 434 goto mult10; << 435 } << 436 << 437 if (Z_Breakup < 0.0) << 438 goto mult4333; << 439 if ((A_Breakup - Z_Breakup << 440 goto mult4333; << 441 if ((A_Breakup - Z_Breakup << 442 goto mult4333; << 443 << 444 if (Z_Breakup >= ZAINCL) << 445 { << 446 IIS = IIS + 1; << 447 if (IIS > 10) << 448 { << 449 std::cout << "Z_BR << 450 "BE R << 451 << std:: << 452 goto mult10; << 453 } << 454 goto mult4333; << 455 } << 456 373 457 // *** Find the limits << 374 if(A_ACC<=A_diff){ 458 isostab_lim(idnint(Z_Break << 459 // INMIN = MAX(1,IN << 460 if (Z_Breakup > 2.0) << 461 { << 462 if (idnint(A_Breakup - << 463 { << 464 // PRI << 465 // & IDNINT(Z_ << 466 goto mult4343; << 467 } << 468 } << 469 375 470 mult4343: << 376 Z_Breakup_Mean = dint(A_Breakup * ZAINCL / AAINCL); 471 377 472 // We consider all product << 378 Z_Breakup_sum = Z_Breakup_sum + Z_Breakup_Mean; 473 // I_Breakup << 379 // >> 380 // See G.A. Souliotis et al, PRC 75 (2007) 011601R (Fig. 2) >> 381 G_SYMM = 34.2281 - 5.14037 * E_FINAL/AAINCL; >> 382 if(E_FINAL/AAINCL < 2.0) G_SYMM = 25.0; >> 383 if(E_FINAL/AAINCL > 4.0) G_SYMM = 15.0; >> 384 >> 385 // G_SYMM = 23.6; >> 386 >> 387 G_SYMM = 25.0; //25 >> 388 CZ = 2.0 * G_SYMM * 4.0 / A_Breakup; >> 389 // 2*CZ=d^2(Esym)/dZ^2, Esym=Gamma*(A-2Z)**2/A >> 390 // gamma = 23.6D0 is the symmetry-energy coefficient >> 391 G4int IIS = 0; >> 392 Sigma_Z = std::sqrt(T_freeze_out/CZ); >> 393 >> 394 IS = 0; >> 395 mult4333: >> 396 Z_Breakup = dint( G4double(gausshaz(1,Z_Breakup_Mean,Sigma_Z))); >> 397 IS = IS +1; >> 398 // >> 399 if(IS>100){ >> 400 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING Z_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED: " << A_Breakup << " " << Z_Breakup << std::endl; >> 401 goto mult10; >> 402 } >> 403 >> 404 if(Z_Breakup<0.0 ) goto mult4333; >> 405 if((A_Breakup-Z_Breakup)<0.0) goto mult4333; >> 406 if((A_Breakup-Z_Breakup)==0.0 && Z_Breakup!=1.0) goto mult4333; >> 407 >> 408 if(Z_Breakup>=ZAINCL){ >> 409 IIS = IIS + 1; >> 410 if(IIS > 10){ >> 411 std::cout << "Z_BREAKUP RESAMPLED MORE THAN 10 TIMES; EVENT WILL BE RESAMPLED AGAIN " << std::endl; >> 412 goto mult10; >> 413 } >> 414 goto mult4333; >> 415 } 474 416 475 N_Breakup = A_Breakup - Z_ << 417 // *** Find the limits that fragment is bound : 476 BU_TAB[I_Breakup][0] = din << 418 isostab_lim(idnint(Z_Breakup),&INMIN,&INMAX); 477 BU_TAB[I_Breakup][1] = din << 419 // INMIN = MAX(1,INMIN-2) 478 ABU_SUM = ABU_SUM + BU_TAB << 420 if(Z_Breakup > 2.0){ 479 ZBU_SUM = ZBU_SUM + BU_TAB << 421 if(idnint(A_Breakup-Z_Breakup)<INMIN || idnint(A_Breakup-Z_Breakup)>(INMAX+5)){ 480 // << 422 // PRINT*,'N_Breakup >< NMAX', 481 // Break-up products are g << 423 // & IDNINT(Z_Breakup),IDNINT(A_Breakup-Z_Breakup),INMIN,INMAX 482 BU_TAB[I_Breakup][3] = 0.0 << 424 goto mult4343; 483 I_Breakup = I_Breakup + 1; << 425 } 484 IMULTBU = IMULTBU + 1; << 426 } 485 } << 427 486 else << 428 mult4343: 487 { << 429 488 // There are A_DIFF - << 430 // We consider all products, also nucleons created in the break-up 489 // not end up in multi << 431 // I_Breakup = I_Breakup + 1;// moved below 490 // of the Monte-Carlo << 432 491 // of the fragments ac << 433 N_Breakup = A_Breakup - Z_Breakup; 492 // print*,'Defi << 434 BU_TAB[I_Breakup][0] = dint(Z_Breakup); // Mass of break-up product 493 << 435 BU_TAB[I_Breakup][1] = dint(A_Breakup); // Z of break-up product 494 goto mult4327; << 436 ABU_SUM = ABU_SUM + BU_TAB[i][1]; 495 } // if(A_ACC<=A_diff) << 437 ZBU_SUM = ZBU_SUM + BU_TAB[i][0]; 496 } // for << 438 // 497 // mult4327: << 439 // Break-up products are given zero angular momentum (simplification) 498 // IMULTIFR = 1; << 440 BU_TAB[I_Breakup][3] = 0.0; 499 } // if(A_diff>1.0) << 441 I_Breakup = I_Breakup + 1; 500 mult4327: << 442 IMULTBU = IMULTBU + 1; 501 IMULTIFR = 1; << 443 }else{ 502 << 444 // There are A_DIFF - A_ACC nucleons lost by breakup, but they do not end up in multifragmentation products. 503 // "Missing" A and Z picked from the p << 445 // This is a deficiency of the Monte-Carlo method applied above to determine the sizes of the fragments 504 ABU_DIFF = idnint(ABU_SUM + aprf - AAI << 446 // according to the power law. 505 ZBU_DIFF = idnint(ZBU_SUM + zprf - ZAI << 447 // print*,'Deficiency',IDNINT(A_DIFF-A_ACC) 506 NBU_DIFF = idnint((ABU_SUM - ZBU_SUM) << 448 507 // << 449 goto mult4327; 508 if (IMULTBU > 200) << 450 }// if(A_ACC<=A_diff) 509 std::cout << "WARNING - MORE THAN << 451 }//for >> 452 //mult4327: >> 453 //IMULTIFR = 1; >> 454 } // if(A_diff>1.0) >> 455 mult4327: >> 456 IMULTIFR = 1; >> 457 >> 458 // "Missing" A and Z picked from the power law: >> 459 ABU_DIFF = idnint(ABU_SUM+aprf-AAINCL); >> 460 ZBU_DIFF = idnint(ZBU_SUM+zprf-ZAINCL); >> 461 NBU_DIFF = idnint((ABU_SUM-ZBU_SUM)+(aprf-zprf)-(AAINCL-ZAINCL)); >> 462 // >> 463 if(IMULTBU > 200) >> 464 std::cout << "WARNING - MORE THAN 200 BU " << IMULTBU << std::endl; 510 465 511 if (IMULTBU < 1) << 466 if(IMULTBU < 1) 512 std::cout << "WARNING - LESS THAN << 467 std::cout << "WARNING - LESS THAN 1 BU " << IMULTBU << std::endl; 513 //,AABRA,ZABRA,IDNINT(APRF),IDNINT(ZPR << 468 //,AABRA,ZABRA,IDNINT(APRF),IDNINT(ZPRF),ABU_DIFF,ZBU_DIFF 514 469 515 G4int IPROBA = 0; 470 G4int IPROBA = 0; 516 for (G4int i = 0; i < IMULTBU; i++) << 471 for(G4int i=0;i<IMULTBU;i++) 517 IMEM_BU[i] = 0; << 472 IMEM_BU[i] = 0; 518 473 519 while (NBU_DIFF != 0 && ZBU_DIFF != 0) << 474 while(NBU_DIFF!=0 && ZBU_DIFF!=0){ 520 { << 475 // (APRF,ZPRF) is also inlcuded in this game, as from time to time the program 521 // (APRF,ZPRF) is also inlcuded in << 476 // is entering into endless loop, as it can not find proper nucleus for adapting A and Z. 522 // program is entering into endles << 477 IS = 0; 523 // nucleus for adapting A and Z. << 478 mult5555: 524 IS = 0; << 479 G4double RHAZ = G4AblaRandom::flat()*G4double(IMULTBU); 525 mult5555: << 480 IPROBA = IPROBA + 1; 526 G4double RHAZ = G4AblaRandom::flat << 481 IS = IS + 1; 527 IPROBA = IPROBA + 1; << 482 if(IS>100){ 528 IS = IS + 1; << 483 std::cout << "WARNING: HAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING N_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED." << std::endl; 529 if (IS > 100) << 484 goto mult10; 530 { << 485 } 531 std::cout << "WARNING: HAZ CAL << 486 G4int IEL = G4int(RHAZ); 532 "N_BREAKUP IN Rn0 << 487 if(IMEM_BU[IEL]==1) goto mult5555; 533 << std::endl; << 488 if(!(IEL<200))std::cout << "5555:" << IEL << RHAZ << IMULTBU << std::endl; 534 goto mult10; << 489 if(IEL<0)std::cout << "5555:"<< IEL << RHAZ << IMULTBU << std::endl; 535 } << 490 if(IEL<=IMULTBU){ 536 G4int IEL = G4int(RHAZ); << 491 N_Breakup = dint(BU_TAB[IEL][1]-BU_TAB[IEL][0] - DSIGN(1.0,G4double(NBU_DIFF))); 537 if (IMEM_BU[IEL] == 1) << 492 }else if(IEL>IMULTBU){ 538 goto mult5555; << 493 N_Breakup = dint(aprf - zprf - DSIGN(1.0,G4double(NBU_DIFF))); 539 if (!(IEL < 200)) << 494 } 540 std::cout << "5555:" << IEL << << 495 if(N_Breakup<0.0){ 541 if (IEL < 0) << 496 IMEM_BU[IEL] = 1; 542 std::cout << "5555:" << IEL << << 497 goto mult5555; 543 if (IEL <= IMULTBU) << 498 } 544 { << 499 if(IEL<=IMULTBU){ 545 N_Breakup = dint(BU_TAB[IEL][1 << 500 ZTEMP = dint(BU_TAB[IEL][0] - DSIGN(1.0,G4double(ZBU_DIFF))); 546 } << 501 }else if(IEL>IMULTBU){ 547 else if (IEL > IMULTBU) << 502 ZTEMP = dint(zprf - DSIGN(1.0,G4double(ZBU_DIFF))); 548 { << 503 } 549 N_Breakup = dint(aprf - zprf - << 504 if(ZTEMP<0.0){ 550 } << 505 IMEM_BU[IEL] = 1; 551 if (N_Breakup < 0.0) << 506 goto mult5555; 552 { << 507 } 553 IMEM_BU[IEL] = 1; << 508 if(ZTEMP<1.0 && N_Breakup<1.0){ 554 goto mult5555; << 509 IMEM_BU[IEL] = 1; 555 } << 510 goto mult5555; 556 if (IEL <= IMULTBU) << 511 } 557 { << 512 // Nuclei with A=Z and Z>1 are allowed in this stage, as otherwise, 558 ZTEMP = dint(BU_TAB[IEL][0] - << 513 // for more central collisions there is not enough mass which can be 559 } << 514 // shufeled in order to conserve A and Z. These are mostly nuclei with 560 else if (IEL > IMULTBU) << 515 // Z=2 and in less extent 3, 4 or 5. 561 { << 516 // IF(ZTEMP.GT.1.D0 .AND. N_Breakup.EQ.0.D0) THEN 562 ZTEMP = dint(zprf - DSIGN(1.0, << 517 // GOTO 5555 563 } << 518 // ENDIF 564 if (ZTEMP < 0.0) << 519 if(IEL<=IMULTBU){ 565 { << 520 BU_TAB[IEL][0] = dint(ZTEMP); 566 IMEM_BU[IEL] = 1; << 521 BU_TAB[IEL][1] = dint(ZTEMP + N_Breakup); 567 goto mult5555; << 522 }else if(IEL>IMULTBU){ 568 } << 523 zprf = dint(ZTEMP); 569 if (ZTEMP < 1.0 && N_Breakup < 1.0 << 524 aprf = dint(ZTEMP + N_Breakup); 570 { << 525 } 571 IMEM_BU[IEL] = 1; << 526 NBU_DIFF = NBU_DIFF - ISIGN(1,NBU_DIFF); 572 goto mult5555; << 527 ZBU_DIFF = ZBU_DIFF - ISIGN(1,ZBU_DIFF); 573 } << 528 }// while 574 // Nuclei with A=Z and Z>1 are all << 575 // for more central collisions the << 576 // shufeled in order to conserve A << 577 // Z=2 and in less extent 3, 4 or << 578 // IF(ZTEMP.GT.1.D0 .A << 579 // GOTO 5555 << 580 // ENDIF << 581 if (IEL <= IMULTBU) << 582 { << 583 BU_TAB[IEL][0] = dint(ZTEMP); << 584 BU_TAB[IEL][1] = dint(ZTEMP + << 585 } << 586 else if (IEL > IMULTBU) << 587 { << 588 zprf = dint(ZTEMP); << 589 aprf = dint(ZTEMP + N_Breakup) << 590 } << 591 NBU_DIFF = NBU_DIFF - ISIGN(1, NBU << 592 ZBU_DIFF = ZBU_DIFF - ISIGN(1, ZBU << 593 } // while << 594 529 595 IPROBA = 0; 530 IPROBA = 0; 596 for (G4int i = 0; i < IMULTBU; i++) << 531 for(G4int i=0;i<IMULTBU;i++) 597 IMEM_BU[i] = 0; << 532 IMEM_BU[i] = 0; 598 533 599 if (NBU_DIFF != 0 && ZBU_DIFF == 0) << 534 if(NBU_DIFF != 0 && ZBU_DIFF == 0){ 600 { << 535 while(NBU_DIFF > 0 || NBU_DIFF < 0){ 601 while (NBU_DIFF > 0 || NBU_DIFF < << 536 IS = 0; 602 { << 537 mult5556: 603 IS = 0; << 538 G4double RHAZ = G4AblaRandom::flat()*G4double(IMULTBU); 604 mult5556: << 539 IS = IS + 1; 605 G4double RHAZ = G4AblaRandom:: << 540 if(IS>100){ 606 IS = IS + 1; << 541 std::cout << "WARNING: HAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING N_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED." << std::endl; 607 if (IS > 100) << 542 goto mult10; 608 { << 543 } 609 std::cout << "WARNING: HAZ << 544 G4int IEL = G4int(RHAZ); 610 "N_BREAKUP IN << 545 if(IMEM_BU[IEL]==1) goto mult5556; 611 << std::endl; << 546 // IPROBA = IPROBA + 1; 612 goto mult10; << 547 if(IPROBA>IMULTBU+1 && NBU_DIFF>0){ 613 } << 548 std::cout << "###',IPROBA,IMULTBU,NBU_DIFF,ZBU_DIFF,T_freeze_out" << std::endl; 614 G4int IEL = G4int(RHAZ); << 549 IPROBA = IPROBA + 1; 615 if (IMEM_BU[IEL] == 1) << 550 if(IEL<=IMULTBU){ 616 goto mult5556; << 551 BU_TAB[IEL][1] = dint(BU_TAB[IEL][1]-G4double(NBU_DIFF)); 617 // IPROBA = IPROBA + 1 << 552 }else{ if(IEL>IMULTBU) 618 if (IPROBA > IMULTBU + 1 && NB << 553 aprf = dint(aprf - G4double(NBU_DIFF)); 619 { << 554 } 620 std::cout << "###',IPROBA, << 555 goto mult5432; 621 IPROBA = IPROBA + 1; << 556 } 622 if (IEL <= IMULTBU) << 557 if(!(IEL<200))std::cout << "5556:" << IEL << RHAZ << IMULTBU << std::endl; 623 { << 558 if(IEL<0)std::cout << "5556:"<< IEL << RHAZ << IMULTBU << std::endl; 624 BU_TAB[IEL][1] = dint( << 559 if(IEL<=IMULTBU){ 625 } << 560 N_Breakup = dint(BU_TAB[IEL][1]-BU_TAB[IEL][0] - DSIGN(1.0,G4double(NBU_DIFF))); 626 else << 561 }else if(IEL>IMULTBU){ 627 { << 562 N_Breakup = dint(aprf - zprf - DSIGN(1.0,G4double(NBU_DIFF))); 628 if (IEL > IMULTBU) << 563 } 629 aprf = dint(aprf - << 564 if(N_Breakup<0.0){ 630 } << 565 IMEM_BU[IEL] = 1; 631 goto mult5432; << 566 goto mult5556; 632 } << 567 } 633 if (!(IEL < 200)) << 568 if(IEL<=IMULTBU){ 634 std::cout << "5556:" << IE << 569 ATEMP = dint(BU_TAB[IEL][0] + N_Breakup); 635 if (IEL < 0) << 570 }else if(IEL>IMULTBU){ 636 std::cout << "5556:" << IE << 571 ATEMP = dint(zprf + N_Breakup); 637 if (IEL <= IMULTBU) << 572 } 638 { << 573 if((ATEMP - N_Breakup)<1.0 && N_Breakup<1.0){ 639 N_Breakup = dint(BU_TAB[IE << 574 IMEM_BU[IEL] = 1; 640 } << 575 goto mult5556; 641 else if (IEL > IMULTBU) << 576 } 642 { << 577 // IF((ATEMP - N_Breakup).GT.1.D0 .AND. 643 N_Breakup = dint(aprf - zp << 578 // & N_Breakup.EQ.0.D0) THEN 644 } << 579 // IMEM_BU(IEL) = 1 645 if (N_Breakup < 0.0) << 580 // GOTO 5556 646 { << 581 // ENDIF 647 IMEM_BU[IEL] = 1; << 582 if(IEL<=IMULTBU) 648 goto mult5556; << 583 BU_TAB[IEL][1] = dint(BU_TAB[IEL][0] + N_Breakup); 649 } << 584 else if(IEL>IMULTBU) 650 if (IEL <= IMULTBU) << 585 aprf = dint(zprf + N_Breakup); 651 { << 586 // 652 ATEMP = dint(BU_TAB[IEL][0 << 587 NBU_DIFF = NBU_DIFF - ISIGN(1,NBU_DIFF); 653 } << 588 }//while(NBU_DIFF > 0 || NBU_DIFF < 0) 654 else if (IEL > IMULTBU) << 655 { << 656 ATEMP = dint(zprf + N_Brea << 657 } << 658 if ((ATEMP - N_Breakup) < 1.0 << 659 { << 660 IMEM_BU[IEL] = 1; << 661 goto mult5556; << 662 } << 663 // IF((ATEMP - N_B << 664 // & N_Breakup.EQ.0 << 665 // IMEM_BU(IEL) = << 666 // GOTO 5556 << 667 // ENDIF << 668 if (IEL <= IMULTBU) << 669 BU_TAB[IEL][1] = dint(BU_T << 670 else if (IEL > IMULTBU) << 671 aprf = dint(zprf + N_Break << 672 // << 673 NBU_DIFF = NBU_DIFF - ISIGN(1, << 674 } // while(NBU_DIFF > 0 || NBU_DIF << 675 << 676 IPROBA = 0; << 677 for (G4int i = 0; i < IMULTBU; i++ << 678 IMEM_BU[i] = 0; << 679 } << 680 else << 681 { // if(NBU_DIFF != 0 && ZBU_DIFF == 0 << 682 if (ZBU_DIFF != 0 && NBU_DIFF == 0 << 683 { << 684 while (ZBU_DIFF > 0 || ZBU_DIF << 685 { << 686 IS = 0; << 687 mult5557: << 688 G4double RHAZ = G4AblaRand << 689 IS = IS + 1; << 690 if (IS > 100) << 691 { << 692 std::cout << "WARNING: << 693 "N_BREAKU << 694 << std::endl << 695 goto mult10; << 696 } << 697 G4int IEL = G4int(RHAZ); << 698 if (IMEM_BU[IEL] == 1) << 699 goto mult5557; << 700 // IPROBA = IPROBA + 1; << 701 if (IPROBA > IMULTBU + 1 & << 702 { << 703 std::cout << "###',IPR << 704 IPROBA = IPROBA + 1; << 705 if (IEL <= IMULTBU) << 706 { << 707 N_Breakup = dint(B << 708 BU_TAB[IEL][0] = d << 709 BU_TAB[IEL][1] = d << 710 } << 711 else << 712 { << 713 if (IEL > IMULTBU) << 714 { << 715 N_Breakup = ap << 716 zprf = dint(zp << 717 aprf = dint(zp << 718 } << 719 } << 720 goto mult5432; << 721 } << 722 if (!(IEL < 200)) << 723 std::cout << "5557:" < << 724 if (IEL < 0) << 725 std::cout << "5557:" < << 726 if (IEL <= IMULTBU) << 727 { << 728 N_Breakup = dint(BU_TA << 729 ZTEMP = dint(BU_TAB[IE << 730 } << 731 else if (IEL > IMULTBU) << 732 { << 733 N_Breakup = dint(aprf << 734 ZTEMP = dint(zprf - DS << 735 } << 736 ATEMP = dint(ZTEMP + N_Bre << 737 if (ZTEMP < 0.0) << 738 { << 739 IMEM_BU[IEL] = 1; << 740 goto mult5557; << 741 } << 742 if ((ATEMP - ZTEMP) < 0.0) << 743 { << 744 IMEM_BU[IEL] = 1; << 745 goto mult5557; << 746 } << 747 if ((ATEMP - ZTEMP) < 1.0 << 748 { << 749 IMEM_BU[IEL] = 1; << 750 goto mult5557; << 751 } << 752 if (IEL <= IMULTBU) << 753 { << 754 BU_TAB[IEL][0] = dint( << 755 BU_TAB[IEL][1] = dint( << 756 } << 757 else << 758 { << 759 if (IEL > IMULTBU) << 760 { << 761 zprf = dint(ZTEMP) << 762 aprf = dint(ZTEMP << 763 } << 764 } << 765 ZBU_DIFF = ZBU_DIFF - ISIG << 766 } // while << 767 } // if(ZBU_DIFF != 0 && NBU_D << 768 } // if(NBU_DIFF != 0 && ZBU_D << 769 << 770 mult5432: << 771 // Looking for the heaviest fragment a << 772 // and "giving" excitation energy to f << 773 ZMEM = 0.0; << 774 << 775 for (G4int i = 0; i < IMULTBU; i++) << 776 { << 777 // For particles with Z>2 we calcu << 778 // temperature. << 779 // For particels with Z<3 we assu << 780 // temperature results in kinetic << 781 // distribution with T=Tfreeze-ou << 782 if (BU_TAB[i][0] > 2.0) << 783 { << 784 a_tilda_BU = ald->av * BU_TAB[ << 785 ald->ak * std::po << 786 BU_TAB[i][2] = a_tilda_BU * T_ << 787 } << 788 else << 789 { << 790 BU_TAB[i][2] = 0.0; << 791 } << 792 // << 793 if (BU_TAB[i][0] > ZMEM) << 794 { << 795 IMEM = i; << 796 ZMEM = BU_TAB[i][0]; << 797 AMEM = BU_TAB[i][1]; << 798 EMEM = BU_TAB[i][2]; << 799 JMEM = BU_TAB[i][3]; << 800 } << 801 } // for IMULTBU << 802 589 803 if (zprf < ZMEM) << 590 IPROBA = 0; 804 { << 591 for(G4int i=0;i<IMULTBU;i++) 805 BU_TAB[IMEM][0] = zprf; << 592 IMEM_BU[i] = 0; 806 BU_TAB[IMEM][1] = aprf; << 593 807 BU_TAB[IMEM][2] = ee; << 594 }else{// if(NBU_DIFF != 0 && ZBU_DIFF == 0) 808 BU_TAB[IMEM][3] = jprf; << 595 if(ZBU_DIFF != 0 && NBU_DIFF == 0){ 809 zprf = ZMEM; << 596 while(ZBU_DIFF > 0 || ZBU_DIFF < 0){ 810 aprf = AMEM; << 597 IS = 0; 811 aprfp = idnint(aprf); << 598 mult5557: 812 zprfp = idnint(zprf); << 599 G4double RHAZ = G4AblaRandom::flat()*G4double(IMULTBU); 813 ee = EMEM; << 600 IS = IS + 1; 814 jprf = JMEM; << 601 if(IS>100){ 815 } << 602 std::cout << "WARNING: HAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING N_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED." << std::endl; >> 603 goto mult10; >> 604 } >> 605 G4int IEL = G4int(RHAZ); >> 606 if(IMEM_BU[IEL]==1) goto mult5557; >> 607 //IPROBA = IPROBA + 1; >> 608 if(IPROBA>IMULTBU+1 && ZBU_DIFF>0){ >> 609 std::cout << "###',IPROBA,IMULTBU,NBU_DIFF,ZBU_DIFF,T_freeze_out" << std::endl; >> 610 IPROBA = IPROBA + 1; >> 611 if(IEL<=IMULTBU){ >> 612 N_Breakup = dint(BU_TAB[IEL][1]-BU_TAB[IEL][0]); >> 613 BU_TAB[IEL][0] = dint(BU_TAB[IEL][0] - G4double(ZBU_DIFF)); >> 614 BU_TAB[IEL][1] = dint(BU_TAB[IEL][0] + N_Breakup); >> 615 }else{ >> 616 if(IEL>IMULTBU){ >> 617 N_Breakup = aprf - zprf; >> 618 zprf = dint(zprf - G4double(ZBU_DIFF)); >> 619 aprf = dint(zprf + N_Breakup); >> 620 } >> 621 } >> 622 goto mult5432; >> 623 } >> 624 if(!(IEL<200))std::cout << "5557:" << IEL << RHAZ << IMULTBU << std::endl; >> 625 if(IEL<0)std::cout << "5557:"<< IEL << RHAZ << IMULTBU << std::endl; >> 626 if(IEL<=IMULTBU){ >> 627 N_Breakup = dint(BU_TAB[IEL][1]-BU_TAB[IEL][0]); >> 628 ZTEMP = dint(BU_TAB[IEL][0] - DSIGN(1.0,G4double(ZBU_DIFF))); >> 629 }else if(IEL>IMULTBU){ >> 630 N_Breakup = dint(aprf - zprf); >> 631 ZTEMP = dint(zprf - DSIGN(1.0,G4double(ZBU_DIFF))); >> 632 } >> 633 ATEMP = dint(ZTEMP + N_Breakup); >> 634 if(ZTEMP<0.0){ >> 635 IMEM_BU[IEL] = 1; >> 636 goto mult5557; >> 637 } >> 638 if((ATEMP-ZTEMP)<0.0){ >> 639 IMEM_BU[IEL] = 1; >> 640 goto mult5557; >> 641 } >> 642 if((ATEMP-ZTEMP)<1.0 && ZTEMP<1.0){ >> 643 IMEM_BU[IEL] = 1; >> 644 goto mult5557; >> 645 } >> 646 if(IEL<=IMULTBU){ >> 647 BU_TAB[IEL][0] = dint(ZTEMP); >> 648 BU_TAB[IEL][1] = dint(ZTEMP + N_Breakup); >> 649 }else{ >> 650 if(IEL>IMULTBU){ >> 651 zprf = dint(ZTEMP); >> 652 aprf = dint(ZTEMP + N_Breakup); >> 653 } >> 654 } >> 655 ZBU_DIFF = ZBU_DIFF - ISIGN(1,ZBU_DIFF); >> 656 }//while >> 657 }//if(ZBU_DIFF != 0 && NBU_DIFF == 0) >> 658 }// if(NBU_DIFF != 0 && ZBU_DIFF == 0) >> 659 >> 660 mult5432: >> 661 // Looking for the heaviest fragment among all multifragmentation events, and >> 662 // "giving" excitation energy to fragments >> 663 ZMEM = 0.0; >> 664 >> 665 for(G4int i =0;i<IMULTBU;i++){ >> 666 //For particles with Z>2 we calculate excitation energy from freeze-out temperature. >> 667 // For particels with Z<3 we assume that they form a gas, and that temperature results >> 668 // in kinetic energy (which is sampled from Maxwell distribution with T=Tfreeze-out) >> 669 // and not excitation energy. >> 670 if(BU_TAB[i][0]>2.0){ >> 671 a_tilda_BU = ald->av*BU_TAB[i][1] + ald->as*std::pow(BU_TAB[i][1],2.0/3.0) + ald->ak*std::pow(BU_TAB[i][1],1.0/3.0); >> 672 BU_TAB[i][2] = a_tilda_BU * T_freeze_out*T_freeze_out; // E* of break-up product >> 673 }else{ >> 674 BU_TAB[i][2] = 0.0; >> 675 } >> 676 // >> 677 if(BU_TAB[i][0] > ZMEM){ >> 678 IMEM = i; >> 679 ZMEM = BU_TAB[i][0]; >> 680 AMEM = BU_TAB[i][1]; >> 681 EMEM = BU_TAB[i][2]; >> 682 JMEM = BU_TAB[i][3]; >> 683 } >> 684 }//for IMULTBU >> 685 >> 686 if(zprf < ZMEM){ >> 687 BU_TAB[IMEM][0] = zprf; >> 688 BU_TAB[IMEM][1] = aprf; >> 689 BU_TAB[IMEM][2] = ee; >> 690 BU_TAB[IMEM][3] = jprf; >> 691 zprf = ZMEM; >> 692 aprf = AMEM; >> 693 aprfp = idnint(aprf); >> 694 zprfp = idnint(zprf); >> 695 ee = EMEM; >> 696 jprf = JMEM; >> 697 } 816 698 817 // Just for checking: << 699 // Just for checking: 818 ABU_SUM = aprf; 700 ABU_SUM = aprf; 819 ZBU_SUM = zprf; 701 ZBU_SUM = zprf; 820 for (G4int i = 0; i < IMULTBU; i++) << 702 for(G4int i = 0;i<IMULTBU;i++){ 821 { << 703 ABU_SUM = ABU_SUM + BU_TAB[i][1]; 822 ABU_SUM = ABU_SUM + BU_TAB[i][1]; << 704 ZBU_SUM = ZBU_SUM + BU_TAB[i][0]; 823 ZBU_SUM = ZBU_SUM + BU_TAB[i][0]; << 824 } 705 } 825 ABU_DIFF = idnint(ABU_SUM - AAINCL); << 706 ABU_DIFF = idnint(ABU_SUM-AAINCL); 826 ZBU_DIFF = idnint(ZBU_SUM - ZAINCL); << 707 ZBU_DIFF = idnint(ZBU_SUM-ZAINCL); 827 // << 708 // 828 if (ABU_DIFF != 0 || ZBU_DIFF != 0) << 709 if(ABU_DIFF!=0 || ZBU_DIFF!=0) 829 std::cout << "Problem of mass in B << 710 std::cout << "Problem of mass in BU " << ABU_DIFF << " " << ZBU_DIFF << std::endl; 830 PX_BU_SUM = 0.0; 711 PX_BU_SUM = 0.0; 831 PY_BU_SUM = 0.0; 712 PY_BU_SUM = 0.0; 832 PZ_BU_SUM = 0.0; 713 PZ_BU_SUM = 0.0; 833 // Momenta of break-up products are ca << 714 // Momenta of break-up products are calculated. They are all given in the rest frame 834 // rest frame of the primary prefragme << 715 // of the primary prefragment (i.e. after incl): 835 // *********************************** << 716 // Goldhaber model **************************************** 836 AMOMENT(AAINCL, aprf, 1, &PXPRFP, &PYP << 717 // "Heavy" residue 837 PPRFP = std::sqrt(PXPRFP * PXPRFP + PY << 718 AMOMENT(AAINCL,aprf,1,&PXPRFP,&PYPRFP,&PZPRFP); 838 // *********************************** << 719 PPRFP = std::sqrt(PXPRFP*PXPRFP + PYPRFP*PYPRFP + PZPRFP*PZPRFP); 839 // PPRFP is in MeV/c << 720 // ******************************************************** 840 ETOT_PRF = std::sqrt(PPRFP * PPRFP + ( << 721 // PPRFP is in MeV/c >> 722 ETOT_PRF = std::sqrt(PPRFP*PPRFP + (aprf * amu)*(aprf * amu)); 841 VX_PREF = C * PXPRFP / ETOT_PRF; 723 VX_PREF = C * PXPRFP / ETOT_PRF; 842 VY_PREF = C * PYPRFP / ETOT_PRF; 724 VY_PREF = C * PYPRFP / ETOT_PRF; 843 VZ_PREF = C * PZPRFP / ETOT_PRF; 725 VZ_PREF = C * PZPRFP / ETOT_PRF; 844 726 845 // Contribution from Coulomb repulsion << 727 // Contribution from Coulomb repulsion ******************** 846 tke_bu(zprf, aprf, ZAINCL, AAINCL, &VX << 728 tke_bu(zprf,aprf,ZAINCL,AAINCL,&VX1_BU,&VY1_BU,&VZ1_BU); 847 729 848 // Lorentz kinematics << 730 // Lorentz kinematics 849 // VX_PREF = VX_PREF + VX1_BU << 731 // VX_PREF = VX_PREF + VX1_BU 850 // VY_PREF = VY_PREF + VY1_BU << 732 // VY_PREF = VY_PREF + VY1_BU 851 // VZ_PREF = VZ_PREF + VZ1_BU << 733 // VZ_PREF = VZ_PREF + VZ1_BU 852 // Lorentz transformation << 734 // Lorentz transformation 853 lorentz_boost(VX1_BU, VY1_BU, VZ1_BU, << 735 lorentz_boost(VX1_BU,VY1_BU,VZ1_BU, >> 736 VX_PREF,VY_PREF,VZ_PREF, >> 737 &VXOUT,&VYOUT,&VZOUT); 854 738 855 VX_PREF = VXOUT; 739 VX_PREF = VXOUT; 856 VY_PREF = VYOUT; 740 VY_PREF = VYOUT; 857 VZ_PREF = VZOUT; 741 VZ_PREF = VZOUT; 858 742 859 // Total momentum: Goldhaber + Coulomb << 743 // Total momentum: Goldhaber + Coulomb 860 VBU2 = VX_PREF * VX_PREF + VY_PREF * V << 744 VBU2 = VX_PREF*VX_PREF + VY_PREF*VY_PREF + VZ_PREF*VZ_PREF; 861 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C << 745 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); 862 ETOT_PRF = aprf * amu / GAMMA_REL; 746 ETOT_PRF = aprf * amu / GAMMA_REL; 863 PXPRFP = ETOT_PRF * VX_PREF / C; 747 PXPRFP = ETOT_PRF * VX_PREF / C; 864 PYPRFP = ETOT_PRF * VY_PREF / C; 748 PYPRFP = ETOT_PRF * VY_PREF / C; 865 PZPRFP = ETOT_PRF * VZ_PREF / C; 749 PZPRFP = ETOT_PRF * VZ_PREF / C; 866 750 867 // *********************************** << 751 // ******************************************************** 868 // Momentum: Total width of abrasion << 752 // Momentum: Total width of abrasion and breakup assumed to be given 869 // by Fermi momenta of nucleons << 753 // by Fermi momenta of nucleons 870 // *********************************** << 754 // ***************************************** 871 755 872 PX_BU_SUM = PXPRFP; 756 PX_BU_SUM = PXPRFP; 873 PY_BU_SUM = PYPRFP; 757 PY_BU_SUM = PYPRFP; 874 PZ_BU_SUM = PZPRFP; 758 PZ_BU_SUM = PZPRFP; 875 759 876 Eexc_BU_SUM = ee; 760 Eexc_BU_SUM = ee; 877 Bvalue_BU = eflmac(idnint(aprf), idnin << 761 Bvalue_BU = eflmac(idnint(aprf),idnint(zprf),1,0); 878 762 879 for (I_Breakup = 0; I_Breakup < IMULTB << 763 for(I_Breakup=0;I_Breakup<IMULTBU;I_Breakup++){ 880 { << 764 // For bu products: 881 // For bu products: << 765 Bvalue_BU = Bvalue_BU + eflmac(idnint(BU_TAB[I_Breakup][1]), idnint(BU_TAB[I_Breakup][0]),1,0); 882 Bvalue_BU = Bvalue_BU + eflmac(idn << 766 Eexc_BU_SUM = Eexc_BU_SUM + BU_TAB[I_Breakup][2]; 883 Eexc_BU_SUM = Eexc_BU_SUM + BU_TAB << 767 884 << 768 AMOMENT(AAINCL,BU_TAB[I_Breakup][1],1,&PX_BU,&PY_BU,&PZ_BU); 885 AMOMENT(AAINCL, BU_TAB[I_Breakup][ << 769 P_BU = std::sqrt(PX_BU*PX_BU + PY_BU*PY_BU + PZ_BU*PZ_BU); 886 P_BU = std::sqrt(PX_BU * PX_BU + P << 770 // ******************************************************* 887 // ******************************* << 771 // PPRFP is in MeV/c 888 // PPRFP is in MeV/c << 772 ETOT_BU = std::sqrt(P_BU*P_BU + (BU_TAB[I_Breakup][1]*amu)*(BU_TAB[I_Breakup][1]*amu)); 889 ETOT_BU = std::sqrt(P_BU * P_BU + << 773 BU_TAB[I_Breakup][4] = C * PX_BU / ETOT_BU; // Velocity in x 890 BU_TAB[I_Breakup][4] = C * PX_BU / << 774 BU_TAB[I_Breakup][5] = C * PY_BU / ETOT_BU; // Velocity in y 891 BU_TAB[I_Breakup][5] = C * PY_BU / << 775 BU_TAB[I_Breakup][6] = C * PZ_BU / ETOT_BU; // Velocity in z 892 BU_TAB[I_Breakup][6] = C * PZ_BU / << 776 // Contribution from Coulomb repulsion: 893 // Contribution from Coulom << 777 tke_bu(BU_TAB[I_Breakup][0],BU_TAB[I_Breakup][1],ZAINCL,AAINCL,&VX2_BU,&VY2_BU,&VZ2_BU); 894 tke_bu(BU_TAB[I_Breakup][0], BU_TA << 778 // Lorentz kinematics 895 // Lorentz kinematics << 779 // BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) + VX2_BU ! velocity change by Coulomb repulsion 896 // BU_TAB(I_Breakup,5) = << 780 // BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) + VY2_BU 897 // change by Coulomb repu << 781 // BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) + VZ2_BU 898 // BU_TAB(I_Breakup,6) + << 782 // Lorentz transformation 899 // BU_TAB(I_Breakup,7) + << 783 lorentz_boost(VX2_BU,VY2_BU,VZ2_BU, 900 // Lorentz transformation << 784 BU_TAB[I_Breakup][4],BU_TAB[I_Breakup][5],BU_TAB[I_Breakup][6], 901 lorentz_boost(VX2_BU, << 785 &VXOUT,&VYOUT,&VZOUT); 902 VY2_BU, << 786 903 VZ2_BU, << 787 BU_TAB[I_Breakup][4] = VXOUT; 904 BU_TAB[I_Breakup][4] << 788 BU_TAB[I_Breakup][5] = VYOUT; 905 BU_TAB[I_Breakup][5] << 789 BU_TAB[I_Breakup][6] = VZOUT; 906 BU_TAB[I_Breakup][6] << 790 907 &VXOUT, << 791 // Total momentum: Goldhaber + Coulomb 908 &VYOUT, << 792 VBU2 = BU_TAB[I_Breakup][4]*BU_TAB[I_Breakup][4] + 909 &VZOUT); << 793 BU_TAB[I_Breakup][5]*BU_TAB[I_Breakup][5] + 910 << 794 BU_TAB[I_Breakup][6]*BU_TAB[I_Breakup][6]; 911 BU_TAB[I_Breakup][4] = VXOUT; << 795 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); 912 BU_TAB[I_Breakup][5] = VYOUT; << 796 ETOT_BU = BU_TAB[I_Breakup][1]*amu/GAMMA_REL; 913 BU_TAB[I_Breakup][6] = VZOUT; << 797 PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C; 914 << 798 PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C; 915 // Total momentum: Goldhaber + Cou << 799 PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C; 916 VBU2 = BU_TAB[I_Breakup][4] * BU_T << 800 917 BU_TAB[I_Breakup][6] * BU_T << 801 PX_BU_SUM = PX_BU_SUM + PX_BU; 918 GAMMA_REL = std::sqrt(1.0 - VBU2 / << 802 PY_BU_SUM = PY_BU_SUM + PY_BU; 919 ETOT_BU = BU_TAB[I_Breakup][1] * a << 803 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; 920 PX_BU = ETOT_BU * BU_TAB[I_Breakup << 804 921 PY_BU = ETOT_BU * BU_TAB[I_Breakup << 805 }//for I_Breakup 922 PZ_BU = ETOT_BU * BU_TAB[I_Breakup << 806 923 << 807 // In the frame of source (i.e. prefragment after abrasion or INCL) 924 PX_BU_SUM = PX_BU_SUM + PX_BU; << 808 P_BU_SUM = std::sqrt(PX_BU_SUM*PX_BU_SUM + PY_BU_SUM*PY_BU_SUM + 925 PY_BU_SUM = PY_BU_SUM + PY_BU; << 809 PZ_BU_SUM*PZ_BU_SUM); 926 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; << 810 // ******************************************************** 927 << 811 // PPRFP is in MeV/c 928 } // for I_Breakup << 812 ETOT_SUM = std::sqrt(P_BU_SUM*P_BU_SUM + 929 << 813 (AAINCL * amu)*(AAINCL * amu)); 930 // In the frame of source (i.e. pref << 931 P_BU_SUM = std::sqrt(PX_BU_SUM * PX_BU << 932 // *********************************** << 933 // PPRFP is in MeV/c << 934 ETOT_SUM = std::sqrt(P_BU_SUM * P_BU_S << 935 814 936 VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM; 815 VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM; 937 VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM; 816 VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM; 938 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM; 817 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM; 939 818 940 // Lorentz kinematics - DM 17/5/2010 << 819 // Lorentz kinematics - DM 17/5/2010 941 // VX_PREF = VX_PREF - VX_BU_SU << 820 // VX_PREF = VX_PREF - VX_BU_SUM 942 // VY_PREF = VY_PREF - VY_BU_SU << 821 // VY_PREF = VY_PREF - VY_BU_SUM 943 // VZ_PREF = VZ_PREF - VZ_BU_SU << 822 // VZ_PREF = VZ_PREF - VZ_BU_SUM 944 // Lorentz transformation << 823 // Lorentz transformation 945 lorentz_boost(-VX_BU_SUM, -VY_BU_SUM, << 824 lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM, >> 825 VX_PREF,VY_PREF,VZ_PREF, >> 826 &VXOUT,&VYOUT,&VZOUT); 946 827 947 VX_PREF = VXOUT; 828 VX_PREF = VXOUT; 948 VY_PREF = VYOUT; 829 VY_PREF = VYOUT; 949 VZ_PREF = VZOUT; 830 VZ_PREF = VZOUT; 950 831 951 VBU2 = VX_PREF * VX_PREF + VY_PREF * V << 832 VBU2 = VX_PREF*VX_PREF + VY_PREF*VY_PREF + VZ_PREF*VZ_PREF; 952 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C << 833 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); 953 ETOT_PRF = aprf * amu / GAMMA_REL; 834 ETOT_PRF = aprf * amu / GAMMA_REL; 954 PXPRFP = ETOT_PRF * VX_PREF / C; 835 PXPRFP = ETOT_PRF * VX_PREF / C; 955 PYPRFP = ETOT_PRF * VY_PREF / C; 836 PYPRFP = ETOT_PRF * VY_PREF / C; 956 PZPRFP = ETOT_PRF * VZ_PREF / C; 837 PZPRFP = ETOT_PRF * VZ_PREF / C; 957 838 958 PX_BU_SUM = 0.0; 839 PX_BU_SUM = 0.0; 959 PY_BU_SUM = 0.0; 840 PY_BU_SUM = 0.0; 960 PZ_BU_SUM = 0.0; 841 PZ_BU_SUM = 0.0; 961 842 962 PX_BU_SUM = PXPRFP; 843 PX_BU_SUM = PXPRFP; 963 PY_BU_SUM = PYPRFP; 844 PY_BU_SUM = PYPRFP; 964 PZ_BU_SUM = PZPRFP; 845 PZ_BU_SUM = PZPRFP; 965 E_tot_BU = ETOT_PRF; 846 E_tot_BU = ETOT_PRF; 966 847 967 EKIN_BU = aprf * amu / GAMMA_REL - apr 848 EKIN_BU = aprf * amu / GAMMA_REL - aprf * amu; 968 849 969 for (I_Breakup = 0; I_Breakup < IMULTB << 850 for(I_Breakup=0;I_Breakup<IMULTBU;I_Breakup++){ 970 { << 851 // Lorentz kinematics - DM 17/5/2010 971 // Lorentz kinematics - DM 17/5/20 << 852 // BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) - VX_BU_SUM 972 // BU_TAB(I_Breakup,5) = B << 853 // BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) - VY_BU_SUM 973 // BU_TAB(I_Breakup,6) = B << 854 // BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) - VZ_BU_SUM 974 // BU_TAB(I_Breakup,7) = B << 855 // Lorentz transformation 975 // Lorentz transformation << 856 lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM, 976 lorentz_boost(-VX_BU_SUM, << 857 BU_TAB[I_Breakup][4],BU_TAB[I_Breakup][5],BU_TAB[I_Breakup][6], 977 -VY_BU_SUM, << 858 &VXOUT,&VYOUT,&VZOUT); 978 -VZ_BU_SUM, << 859 979 BU_TAB[I_Breakup][4] << 860 BU_TAB[I_Breakup][4] = VXOUT; 980 BU_TAB[I_Breakup][5] << 861 BU_TAB[I_Breakup][5] = VYOUT; 981 BU_TAB[I_Breakup][6] << 862 BU_TAB[I_Breakup][6] = VZOUT; 982 &VXOUT, << 863 983 &VYOUT, << 864 VBU2 = BU_TAB[I_Breakup][4]*BU_TAB[I_Breakup][4] + 984 &VZOUT); << 865 BU_TAB[I_Breakup][5]*BU_TAB[I_Breakup][5] + 985 << 866 BU_TAB[I_Breakup][6]*BU_TAB[I_Breakup][6]; 986 BU_TAB[I_Breakup][4] = VXOUT; << 867 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); 987 BU_TAB[I_Breakup][5] = VYOUT; << 868 988 BU_TAB[I_Breakup][6] = VZOUT; << 869 ETOT_BU = BU_TAB[I_Breakup][1]*amu/GAMMA_REL; 989 << 870 990 VBU2 = BU_TAB[I_Breakup][4] * BU_T << 871 EKIN_BU = EKIN_BU + BU_TAB[I_Breakup][1] * amu / 991 BU_TAB[I_Breakup][6] * BU_T << 872 GAMMA_REL - BU_TAB[I_Breakup][1] * amu; 992 GAMMA_REL = std::sqrt(1.0 - VBU2 / << 873 993 << 874 PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C; 994 ETOT_BU = BU_TAB[I_Breakup][1] * a << 875 PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C; 995 << 876 PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C; 996 EKIN_BU = EKIN_BU + BU_TAB[I_Break << 877 E_tot_BU = E_tot_BU + ETOT_BU; 997 << 878 998 PX_BU = ETOT_BU * BU_TAB[I_Breakup << 879 PX_BU_SUM = PX_BU_SUM + PX_BU; 999 PY_BU = ETOT_BU * BU_TAB[I_Breakup << 880 PY_BU_SUM = PY_BU_SUM + PY_BU; 1000 PZ_BU = ETOT_BU * BU_TAB[I_Breaku << 881 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; 1001 E_tot_BU = E_tot_BU + ETOT_BU; << 882 }// for I_Breakup 1002 << 883 1003 PX_BU_SUM = PX_BU_SUM + PX_BU; << 884 if(std::abs(PX_BU_SUM)>10. || std::abs(PY_BU_SUM)>10. || 1004 PY_BU_SUM = PY_BU_SUM + PY_BU; << 885 std::abs(PZ_BU_SUM)>10.){ 1005 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; << 886 1006 } // for I_Breakup << 887 // In the frame of source (i.e. prefragment after INCL) 1007 << 888 P_BU_SUM = std::sqrt(PX_BU_SUM*PX_BU_SUM + PY_BU_SUM*PY_BU_SUM + 1008 if (std::abs(PX_BU_SUM) > 10. || std: << 889 PZ_BU_SUM*PZ_BU_SUM); 1009 { << 890 // ******************************************************** 1010 << 891 // PPRFP is in MeV/c 1011 // In the frame of source (i.e. << 892 ETOT_SUM = std::sqrt(P_BU_SUM*P_BU_SUM + 1012 P_BU_SUM = std::sqrt(PX_BU_SUM * << 893 (AAINCL * amu)*(AAINCL * amu)); 1013 // ****************************** << 894 1014 // PPRFP is in MeV/c << 895 VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM; 1015 ETOT_SUM = std::sqrt(P_BU_SUM * P << 896 VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM; 1016 << 897 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM; 1017 VX_BU_SUM = C * PX_BU_SUM / ETOT_ << 898 1018 VY_BU_SUM = C * PY_BU_SUM / ETOT_ << 899 // Lorentz kinematics 1019 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_ << 900 // VX_PREF = VX_PREF - VX_BU_SUM 1020 << 901 // VY_PREF = VY_PREF - VY_BU_SUM 1021 // Lorentz kinematics << 902 // VZ_PREF = VZ_PREF - VZ_BU_SUM 1022 // VX_PREF = VX_PREF - VX_ << 903 // Lorentz transformation 1023 // VY_PREF = VY_PREF - VY_ << 904 lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM, 1024 // VZ_PREF = VZ_PREF - VZ_ << 905 VX_PREF,VY_PREF,VZ_PREF, 1025 // Lorentz transformation << 906 &VXOUT,&VYOUT,&VZOUT); 1026 lorentz_boost(-VX_BU_SUM, -VY_BU_ << 1027 << 1028 VX_PREF = VXOUT; << 1029 VY_PREF = VYOUT; << 1030 VZ_PREF = VZOUT; << 1031 << 1032 VBU2 = VX_PREF * VX_PREF + VY_PRE << 1033 GAMMA_REL = std::sqrt(1.0 - VBU2 << 1034 ETOT_PRF = aprf * amu / GAMMA_REL << 1035 PXPRFP = ETOT_PRF * VX_PREF / C; << 1036 PYPRFP = ETOT_PRF * VY_PREF / C; << 1037 PZPRFP = ETOT_PRF * VZ_PREF / C; << 1038 << 1039 PX_BU_SUM = 0.0; << 1040 PY_BU_SUM = 0.0; << 1041 PZ_BU_SUM = 0.0; << 1042 << 1043 PX_BU_SUM = PXPRFP; << 1044 PY_BU_SUM = PYPRFP; << 1045 PZ_BU_SUM = PZPRFP; << 1046 E_tot_BU = ETOT_PRF; << 1047 << 1048 EKIN_BU = aprf * amu / GAMMA_REL << 1049 << 1050 for (I_Breakup = 0; I_Breakup < I << 1051 { << 1052 // Lorentz kinematics - DM 17 << 1053 // BU_TAB(I_Breakup,5 << 1054 // BU_TAB(I_Breakup,6 << 1055 // BU_TAB(I_Breakup,7 << 1056 // Lorentz transformation << 1057 lorentz_boost(-VX_BU_SUM, << 1058 -VY_BU_SUM, << 1059 -VZ_BU_SUM, << 1060 BU_TAB[I_Breaku << 1061 BU_TAB[I_Breaku << 1062 BU_TAB[I_Breaku << 1063 &VXOUT, << 1064 &VYOUT, << 1065 &VZOUT); << 1066 << 1067 BU_TAB[I_Breakup][4] = VXOUT; << 1068 BU_TAB[I_Breakup][5] = VYOUT; << 1069 BU_TAB[I_Breakup][6] = VZOUT; << 1070 << 1071 VBU2 = BU_TAB[I_Breakup][4] * << 1072 BU_TAB[I_Breakup][6] * << 1073 GAMMA_REL = std::sqrt(1.0 - V << 1074 << 1075 ETOT_BU = BU_TAB[I_Breakup][1 << 1076 << 1077 EKIN_BU = EKIN_BU + BU_TAB[I_ << 1078 << 1079 PX_BU = ETOT_BU * BU_TAB[I_Br << 1080 PY_BU = ETOT_BU * BU_TAB[I_Br << 1081 PZ_BU = ETOT_BU * BU_TAB[I_Br << 1082 E_tot_BU = E_tot_BU + ETOT_BU << 1083 << 1084 PX_BU_SUM = PX_BU_SUM + PX_BU << 1085 PY_BU_SUM = PY_BU_SUM + PY_BU << 1086 PZ_BU_SUM = PZ_BU_SUM + PZ_BU << 1087 } // for I_Breakup << 1088 } // if DABS(PX_BU_SUM).GT.10.d0 << 1089 // << 1090 // Find the limits that fragment << 1091 // LCPs and for nuclei with A=Z, << 1092 // decay: << 1093 << 1094 INEWLOOP = 0; << 1095 for (G4int i = 0; i < IMULTBU; i++) << 1096 { << 1097 if (BU_TAB[i][0] < 3.0 || BU_TAB[ << 1098 { << 1099 unstable_nuclei(idnint(BU_TAB << 1100 idnint(BU_TAB << 1101 &afpnew, << 1102 &zfpnew, << 1103 IOUNSTABLE, << 1104 BU_TAB[i][4], << 1105 BU_TAB[i][5], << 1106 BU_TAB[i][6], << 1107 &VP1X, << 1108 &VP1Y, << 1109 &VP1Z, << 1110 BU_TAB_TEMP, << 1111 &ILOOP); << 1112 << 1113 if (IOUNSTABLE > 0) << 1114 { << 1115 // Properties of "heavy f << 1116 BU_TAB[i][1] = G4double(a << 1117 BU_TAB[i][0] = G4double(z << 1118 BU_TAB[i][4] = VP1X; << 1119 BU_TAB[i][5] = VP1Y; << 1120 BU_TAB[i][6] = VP1Z; << 1121 << 1122 // Properties of "light" << 1123 for (int IJ = 0; IJ < ILO << 1124 { << 1125 BU_TAB[IMULTBU + INEW << 1126 BU_TAB[IMULTBU + INEW << 1127 BU_TAB[IMULTBU + INEW << 1128 BU_TAB[IMULTBU + INEW << 1129 BU_TAB[IMULTBU + INEW << 1130 BU_TAB[IMULTBU + INEW << 1131 BU_TAB[IMULTBU + INEW << 1132 } // for ILOOP << 1133 << 1134 INEWLOOP = INEWLOOP + ILO << 1135 << 1136 } // if IOUNSTABLE.GT.0 << 1137 } // if BU_TAB[I_Breakup][0]< << 1138 } // for IMULTBU << 1139 907 1140 // Increased array of BU_TAB << 908 VX_PREF = VXOUT; >> 909 VY_PREF = VYOUT; >> 910 VZ_PREF = VZOUT; >> 911 >> 912 VBU2 = VX_PREF*VX_PREF + VY_PREF*VY_PREF + VZ_PREF*VZ_PREF; >> 913 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); >> 914 ETOT_PRF = aprf * amu / GAMMA_REL; >> 915 PXPRFP = ETOT_PRF * VX_PREF / C; >> 916 PYPRFP = ETOT_PRF * VY_PREF / C; >> 917 PZPRFP = ETOT_PRF * VZ_PREF / C; >> 918 >> 919 PX_BU_SUM = 0.0; >> 920 PY_BU_SUM = 0.0; >> 921 PZ_BU_SUM = 0.0; >> 922 >> 923 PX_BU_SUM = PXPRFP; >> 924 PY_BU_SUM = PYPRFP; >> 925 PZ_BU_SUM = PZPRFP; >> 926 E_tot_BU = ETOT_PRF; >> 927 >> 928 EKIN_BU = aprf * amu / GAMMA_REL - aprf * amu; >> 929 >> 930 for(I_Breakup=0;I_Breakup<IMULTBU;I_Breakup++){ >> 931 // Lorentz kinematics - DM 17/5/2010 >> 932 // BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) - VX_BU_SUM >> 933 // BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) - VY_BU_SUM >> 934 // BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) - VZ_BU_SUM >> 935 // Lorentz transformation >> 936 lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM, >> 937 BU_TAB[I_Breakup][4],BU_TAB[I_Breakup][5],BU_TAB[I_Breakup][6], >> 938 &VXOUT,&VYOUT,&VZOUT); >> 939 >> 940 BU_TAB[I_Breakup][4] = VXOUT; >> 941 BU_TAB[I_Breakup][5] = VYOUT; >> 942 BU_TAB[I_Breakup][6] = VZOUT; >> 943 >> 944 VBU2 = BU_TAB[I_Breakup][4]*BU_TAB[I_Breakup][4] + >> 945 BU_TAB[I_Breakup][5]*BU_TAB[I_Breakup][5] + >> 946 BU_TAB[I_Breakup][6]*BU_TAB[I_Breakup][6]; >> 947 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); >> 948 >> 949 ETOT_BU = BU_TAB[I_Breakup][1]*amu/GAMMA_REL; >> 950 >> 951 EKIN_BU = EKIN_BU + BU_TAB[I_Breakup][1] * amu / >> 952 GAMMA_REL - BU_TAB[I_Breakup][1] * amu; >> 953 >> 954 PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C; >> 955 PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C; >> 956 PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C; >> 957 E_tot_BU = E_tot_BU + ETOT_BU; >> 958 >> 959 PX_BU_SUM = PX_BU_SUM + PX_BU; >> 960 PY_BU_SUM = PY_BU_SUM + PY_BU; >> 961 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; >> 962 }// for I_Breakup >> 963 }// if DABS(PX_BU_SUM).GT.10.d0 >> 964 // >> 965 // Find the limits that fragment is bound - only done for neutrons and LCPs and for >> 966 // nuclei with A=Z, for other nuclei it will be done after decay: >> 967 >> 968 INEWLOOP = 0; >> 969 for(G4int i=0;i<IMULTBU;i++){ >> 970 if(BU_TAB[i][0]<3.0 || BU_TAB[i][0]==BU_TAB[i][1]){ >> 971 unstable_nuclei(idnint(BU_TAB[i][1]),idnint(BU_TAB[i][0]), &afpnew,&zfpnew,IOUNSTABLE, >> 972 BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], >> 973 &VP1X,&VP1Y,&VP1Z,BU_TAB_TEMP,&ILOOP); >> 974 >> 975 if(IOUNSTABLE>0){ >> 976 // Properties of "heavy fragment": >> 977 BU_TAB[i][1] = G4double(afpnew); >> 978 BU_TAB[i][0] = G4double(zfpnew); >> 979 BU_TAB[i][4] = VP1X; >> 980 BU_TAB[i][5] = VP1Y; >> 981 BU_TAB[i][6] = VP1Z; >> 982 >> 983 //Properties of "light" fragments: >> 984 for(int IJ=0;IJ<ILOOP;IJ++){ >> 985 BU_TAB[IMULTBU+INEWLOOP+IJ][0] = BU_TAB_TEMP[IJ][0]; >> 986 BU_TAB[IMULTBU+INEWLOOP+IJ][1] = BU_TAB_TEMP[IJ][1]; >> 987 BU_TAB[IMULTBU+INEWLOOP+IJ][4] = BU_TAB_TEMP[IJ][2]; >> 988 BU_TAB[IMULTBU+INEWLOOP+IJ][5] = BU_TAB_TEMP[IJ][3]; >> 989 BU_TAB[IMULTBU+INEWLOOP+IJ][6] = BU_TAB_TEMP[IJ][4]; >> 990 BU_TAB[IMULTBU+INEWLOOP+IJ][2] = 0.0; >> 991 BU_TAB[IMULTBU+INEWLOOP+IJ][3] = 0.0; >> 992 }// for ILOOP >> 993 >> 994 INEWLOOP = INEWLOOP + ILOOP; >> 995 >> 996 }// if IOUNSTABLE.GT.0 >> 997 }//if BU_TAB[I_Breakup][0]<3.0 >> 998 }// for IMULTBU >> 999 >> 1000 // Increased array of BU_TAB 1141 IMULTBU = IMULTBU + INEWLOOP; 1001 IMULTBU = IMULTBU + INEWLOOP; 1142 // Evaporation from multifragmentatio << 1002 // Evaporation from multifragmentation products 1143 opt->optimfallowed = 1; // IMF is al << 1003 opt->optimfallowed = 1; // IMF is allowed 1144 fiss->ifis = 0; // fission i << 1004 fiss->ifis = 0; // fission is not allowed 1145 gammaemission = 0; << 1005 gammaemission=0; 1146 ILOOPBU = 0; 1006 ILOOPBU = 0; 1147 1007 1148 // Arrays for lambda emission from b << 1008 // Arrays for lambda emission from breakup fragments 1149 G4double* problamb; << 1009 G4double * problamb; 1150 problamb = new G4double[IMULTBU]; << 1010 problamb = new G4double[IMULTBU]; 1151 G4double sumN = aprf - zprf; << 1011 G4double sumN = aprf - zprf; 1152 for (G4int i = 0; i < IMULTBU; i++) << 1012 for(G4int i=0;i<IMULTBU;i++)sumN=sumN+BU_TAB[i][1]-BU_TAB[i][0]; 1153 sumN = sumN + BU_TAB[i][1] - BU_T << 1013 1154 << 1014 for(G4int i=0;i<IMULTBU;i++){ 1155 for (G4int i = 0; i < IMULTBU; i++) << 1015 problamb[i] = (BU_TAB[i][1]-BU_TAB[i][0])/sumN; 1156 { << 1016 } 1157 problamb[i] = (BU_TAB[i][1] - BU_ << 1017 G4int * Nblamb; 1158 } << 1018 Nblamb = new G4int[IMULTBU]; 1159 G4int* Nblamb; << 1019 for(G4int i=0;i<IMULTBU;i++)Nblamb[i] = 0; 1160 Nblamb = new G4int[IMULTBU]; << 1020 for(G4int j=0;j<NbLam0;){ 1161 for (G4int i = 0; i < IMULTBU; i++) << 1021 G4double probtotal = (aprf - zprf)/sumN; 1162 Nblamb[i] = 0; << 1022 G4double ran = G4AblaRandom::flat(); 1163 for (G4int j = 0; j < NbLam0;) << 1023 // Lambdas in the heavy breakup fragment 1164 { << 1024 if(ran <= probtotal){ 1165 G4double probtotal = (aprf - zprf << 1025 NbLamprf++; 1166 G4double ran = G4AblaRandom::flat << 1026 goto directlamb0; 1167 // Lambdas in the heavy breakup << 1027 } 1168 if (ran <= probtotal) << 1028 for(G4int i=0;i<IMULTBU;i++){ 1169 { << 1029 // Lambdas in the light breakup residues 1170 NbLamprf++; << 1030 if(probtotal < ran && ran <= probtotal+problamb[i]){ 1171 goto directlamb0; << 1031 Nblamb[i] = Nblamb[i] + 1; 1172 } << 1032 goto directlamb0; 1173 for (G4int i = 0; i < IMULTBU; i+ << 1033 } 1174 { << 1034 probtotal = probtotal + problamb[i]; 1175 // Lambdas in the light bre << 1035 } 1176 if (probtotal < ran && ran <= << 1036 directlamb0: 1177 { << 1037 j++; 1178 Nblamb[i] = Nblamb[i] + 1 << 1038 } 1179 goto directlamb0; << 1039 // 1180 } << 1040 for(G4int i=0;i<IMULTBU;i++){ 1181 probtotal = probtotal + probl << 1041 EEBU = BU_TAB[i][2]; 1182 } << 1042 BU_TAB[i][10] = BU_TAB[i][6]; 1183 directlamb0: << 1043 G4double jprfbu = BU_TAB[i][9]; 1184 j++; << 1044 if(BU_TAB[i][0]>2.0){ 1185 } << 1045 G4int nbl = Nblamb[i]; 1186 // << 1046 evapora(BU_TAB[i][0],BU_TAB[i][1],&EEBU,0.0, &ZFBU, &AFBU, &mtota, &vz_evabu, &vx_evabu,&vy_evabu, &ff, &fimf, &ZIMFBU, &AIMFBU,&TKEIMFBU, &jprfbu, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&nbl); 1187 for (G4int i = 0; i < IMULTBU; i++) << 1047 1188 { << 1048 Nblamb[i] = nbl; 1189 EEBU = BU_TAB[i][2]; << 1049 BU_TAB[i][9] = jprfbu; 1190 BU_TAB[i][10] = BU_TAB[i][6]; << 1050 1191 G4double jprfbu = BU_TAB[i][9]; << 1051 //Velocities of evaporated particles (in the frame of the primary prefragment) 1192 if (BU_TAB[i][0] > 2.0) << 1052 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 1193 { << 1053 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1194 G4int nbl = Nblamb[i]; << 1054 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1195 evapora(BU_TAB[i][0], << 1055 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1196 BU_TAB[i][1], << 1056 //Lorentz kinematics 1197 &EEBU, << 1057 // DO IK = 3, 5, 1 1198 0.0, << 1058 // EV_TAB(IJ+IEV_TAB,IK) = EV_TEMP(IJ,IK) + BU_TAB(I,IK+2) 1199 &ZFBU, << 1059 // ENDDO 1200 &AFBU, << 1060 // Lorentz transformation 1201 &mtota, << 1061 lorentz_boost(BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6], 1202 &vz_evabu, << 1062 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1203 &vx_evabu, << 1063 &VXOUT,&VYOUT,&VZOUT); 1204 &vy_evabu, << 1064 EV_TAB[IJ+IEV_TAB][2] = VXOUT; 1205 &ff, << 1065 EV_TAB[IJ+IEV_TAB][3] = VYOUT; 1206 &fimf, << 1066 EV_TAB[IJ+IEV_TAB][4] = VZOUT; 1207 &ZIMFBU, << 1067 } 1208 &AIMFBU, << 1068 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1209 &TKEIMFBU, << 1069 1210 &jprfbu, << 1070 //All velocities in the frame of the "primary" prefragment (after INC) 1211 &inttype, << 1071 // Lorentz kinematics 1212 &inum, << 1072 // BU_TAB(I,5) = BU_TAB(I,5) + VX_EVABU 1213 EV_TEMP, << 1073 // BU_TAB(I,6) = BU_TAB(I,6) + VY_EVABU 1214 &IEV_TAB_TEMP, << 1074 // BU_TAB(I,7) = BU_TAB(I,7) + VZ_EVABU 1215 &nbl); << 1075 // Lorentz transformation 1216 << 1076 lorentz_boost(vx_evabu,vy_evabu,vz_evabu, 1217 Nblamb[i] = nbl; << 1077 BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6], 1218 BU_TAB[i][9] = jprfbu; << 1078 &VXOUT,&VYOUT,&VZOUT); 1219 << 1079 BU_TAB[i][4] = VXOUT; 1220 // Velocities of evaporated p << 1080 BU_TAB[i][5] = VYOUT; 1221 // prefragment) << 1081 BU_TAB[i][6] = VZOUT; 1222 for (G4int IJ = 0; IJ < IEV_T << 1082 1223 { << 1083 if(fimf==0){ 1224 EV_TAB[IJ + IEV_TAB][0] = << 1084 BU_TAB[i][7] = dint(ZFBU); 1225 EV_TAB[IJ + IEV_TAB][1] = << 1085 BU_TAB[i][8] = dint(AFBU); 1226 EV_TAB[IJ + IEV_TAB][5] = << 1086 BU_TAB[i][11]= nbl; 1227 // Lorentz kinematics << 1087 }// if fimf==0 1228 // DO IK << 1088 1229 // EV_TA << 1089 if(fimf==1){ 1230 // BU_TA << 1090 // PRINT*,'IMF EMISSION FROM BU PRODUCTS' 1231 // Lorentz transformatio << 1091 // IMF emission: Heavy partner is not allowed to fission or to emitt IMF. 1232 lorentz_boost(BU_TAB[i][4 << 1092 //double FEE = EEBU; 1233 BU_TAB[i][5 << 1093 G4int FFBU1 = 0; 1234 BU_TAB[i][6 << 1094 G4int FIMFBU1 = 0; 1235 EV_TEMP[IJ] << 1095 opt->optimfallowed = 0; // IMF is not allowed 1236 EV_TEMP[IJ] << 1096 fiss->ifis = 0; // fission is not allowed 1237 EV_TEMP[IJ] << 1097 // Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF 1238 &VXOUT, << 1098 G4double EkinR1 = TKEIMFBU * AIMFBU / (AFBU+AIMFBU); 1239 &VYOUT, << 1099 G4double EkinR2 = TKEIMFBU * AFBU / (AFBU+AIMFBU); 1240 &VZOUT); << 1100 G4double V1 = std::sqrt(EkinR1/AFBU) * 1.3887; 1241 EV_TAB[IJ + IEV_TAB][2] = << 1101 G4double V2 = std::sqrt(EkinR2/AIMFBU) * 1.3887; 1242 EV_TAB[IJ + IEV_TAB][3] = << 1102 G4double VZ1_IMF = (2.0 * G4AblaRandom::flat() - 1.0) * V1; 1243 EV_TAB[IJ + IEV_TAB][4] = << 1103 G4double VPERP1 = std::sqrt(V1*V1 - VZ1_IMF*VZ1_IMF); 1244 } << 1104 G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142; 1245 IEV_TAB = IEV_TAB + IEV_TAB_T << 1105 G4double VX1_IMF = VPERP1 * std::sin(ALPHA1); >> 1106 G4double VY1_IMF = VPERP1 * std::cos(ALPHA1); >> 1107 G4double VX2_IMF = - VX1_IMF / V1 * V2; >> 1108 G4double VY2_IMF = - VY1_IMF / V1 * V2; >> 1109 G4double VZ2_IMF = - VZ1_IMF / V1 * V2; >> 1110 >> 1111 G4double EEIMFP = EEBU * AFBU /(AFBU + AIMFBU); >> 1112 G4double EEIMF = EEBU * AIMFBU /(AFBU + AIMFBU); >> 1113 >> 1114 // Decay of heavy partner >> 1115 G4double IINERTTOT = 0.40 * 931.490 * 1.160*1.160 *( std::pow(AIMFBU,5.0/3.0) + std::pow(AFBU,5.0/3.0)) + 931.490 * 1.160*1.160*AIMFBU*AFBU/(AIMFBU+AFBU)*(std::pow(AIMFBU,1./3.) + std::pow(AFBU,1./3.))*(std::pow(AIMFBU,1./3.) + std::pow(AFBU,1./3.)); >> 1116 >> 1117 G4double JPRFHEAVY = BU_TAB[i][9] * 0.4 * 931.49 * 1.16*1.16 * std::pow(AFBU,5.0/3.0) / IINERTTOT; >> 1118 G4double JPRFLIGHT = BU_TAB[i][9] * 0.4 * 931.49 * 1.16*1.16 * std::pow(AIMFBU,5.0/3.0) / IINERTTOT; >> 1119 >> 1120 // Lorentz kinematics >> 1121 // BU_TAB(I,5) = BU_TAB(I,5) + VX1_IMF >> 1122 // BU_TAB(I,6) = BU_TAB(I,6) + VY1_IMF >> 1123 // BU_TAB(I,7) = BU_TAB(I,7) + VZ1_IMF >> 1124 // Lorentz transformation >> 1125 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, >> 1126 BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6], >> 1127 &VXOUT,&VYOUT,&VZOUT); >> 1128 BU_TAB[i][4] = VXOUT; >> 1129 BU_TAB[i][5] = VYOUT; >> 1130 BU_TAB[i][6] = VZOUT; >> 1131 >> 1132 G4double vx1ev_imf=0., vy1ev_imf=0., vz1ev_imf=0., zdummy=0., adummy=0., tkedummy=0.,jprf1=0.; >> 1133 >> 1134 // Lambda particles >> 1135 G4int NbLamH=0; >> 1136 G4int NbLamimf=0; >> 1137 G4double pbH = (AFBU-ZFBU) / (AFBU-ZFBU+AIMFBU-ZIMFBU); >> 1138 for(G4int j=0;j<nbl;j++){ >> 1139 if(G4AblaRandom::flat()<pbH){ >> 1140 NbLamH++; >> 1141 }else{ >> 1142 NbLamimf++; >> 1143 } >> 1144 } >> 1145 // Decay of IMF's partner: >> 1146 evapora(ZFBU,AFBU,&EEIMFP,JPRFHEAVY, &ZFFBU, &AFFBU, &mtota, &vz1ev_imf, &vx1ev_imf,&vy1ev_imf, &FFBU1, &FIMFBU1, &zdummy, &adummy,&tkedummy, &jprf1, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamH); 1246 1147 1247 // All velocities in the fram << 1148 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 1248 // Lorentz kinematics << 1149 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1249 // BU_TAB(I,5 << 1150 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1250 // BU_TAB(I,6 << 1151 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1251 // BU_TAB(I,7 << 1152 //Lorentz kinematics 1252 // Lorentz transformation << 1153 // DO IK = 3, 5, 1 1253 lorentz_boost( << 1154 // EV_TAB(IJ+IEV_TAB,IK) = EV_TEMP(IJ,IK) + BU_TAB(I,IK+2) 1254 vx_evabu, vy_evabu, vz_ev << 1155 // ENDDO 1255 BU_TAB[i][4] = VXOUT; << 1156 // Lorentz transformation 1256 BU_TAB[i][5] = VYOUT; << 1157 lorentz_boost(BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6], 1257 BU_TAB[i][6] = VZOUT; << 1158 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1258 << 1159 &VXOUT,&VYOUT,&VZOUT); 1259 if (fimf == 0) << 1160 EV_TAB[IJ+IEV_TAB][2] = VXOUT; 1260 { << 1161 EV_TAB[IJ+IEV_TAB][3] = VYOUT; 1261 BU_TAB[i][7] = dint(ZFBU) << 1162 EV_TAB[IJ+IEV_TAB][4] = VZOUT; 1262 BU_TAB[i][8] = dint(AFBU) << 1163 } 1263 BU_TAB[i][11] = nbl; << 1164 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1264 } // if fimf==0 << 1165 1265 << 1166 BU_TAB[i][7] = dint(ZFFBU); 1266 if (fimf == 1) << 1167 BU_TAB[i][8] = dint(AFFBU); 1267 { << 1168 BU_TAB[i][11]= NbLamH; 1268 // PRINT*,'IMF << 1169 //Lorentz kinematics 1269 // IMF emission: Heavy pa << 1170 // BU_TAB(I,5) = BU_TAB(I,5) + vx1ev_imf 1270 // IMF. << 1171 // BU_TAB(I,6) = BU_TAB(I,6) + vy1ev_imf 1271 // double FEE = EEBU; << 1172 // BU_TAB(I,7) = BU_TAB(I,7) + vz1ev_imf 1272 G4int FFBU1 = 0; << 1173 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, 1273 G4int FIMFBU1 = 0; << 1174 BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6], 1274 opt->optimfallowed = 0; / << 1175 &VXOUT,&VYOUT,&VZOUT); 1275 fiss->ifis = 0; / << 1176 BU_TAB[i][4] = VXOUT; 1276 // Velocities of IMF and << 1177 BU_TAB[i][5] = VYOUT; 1277 G4double EkinR1 = TKEIMFB << 1178 BU_TAB[i][6] = VZOUT; 1278 G4double EkinR2 = TKEIMFB << 1179 // For IMF - fission and IMF emission are not allowed 1279 G4double V1 = std::sqrt(E << 1180 G4int FFBU2 = 0; 1280 G4double V2 = std::sqrt(E << 1181 G4int FIMFBU2 = 0; 1281 G4double VZ1_IMF = (2.0 * << 1182 opt->optimfallowed = 0; // IMF is not allowed 1282 G4double VPERP1 = std::sq << 1183 fiss->ifis = 0; // fission is not allowed 1283 G4double ALPHA1 = G4AblaR << 1184 // Decay of IMF 1284 G4double VX1_IMF = VPERP1 << 1185 G4double zffimf, affimf,zdummy1, adummy1, tkedummy1, jprf2, vx2ev_imf, vy2ev_imf, vz2ev_imf; 1285 G4double VY1_IMF = VPERP1 << 1186 1286 G4double VX2_IMF = -VX1_I << 1187 evapora(ZIMFBU,AIMFBU,&EEIMF,JPRFLIGHT, &zffimf, &affimf, &mtota, &vz2ev_imf, &vx2ev_imf,&vy2ev_imf, &FFBU2, &FIMFBU2, &zdummy1, &adummy1,&tkedummy1, &jprf2, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamimf); 1287 G4double VY2_IMF = -VY1_I << 1188 1288 G4double VZ2_IMF = -VZ1_I << 1189 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 1289 << 1190 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1290 G4double EEIMFP = EEBU * << 1191 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1291 G4double EEIMF = EEBU * A << 1192 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1292 << 1193 //Lorentz kinematics 1293 // Decay of heavy partner << 1194 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + BU_TAB(I,5) +VX2_IMF 1294 G4double IINERTTOT = << 1195 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + BU_TAB(I,6) +VY2_IMF 1295 0.40 * 931.490 * 1.16 << 1196 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + BU_TAB(I,7) +VZ2_IMF 1296 931.490 * 1.160 * 1.1 << 1197 // Lorentz transformation 1297 (std::pow(AIMFBU, << 1198 lorentz_boost(BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6], 1298 (std::pow(AIMFBU, << 1199 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1299 << 1200 &VXOUT,&VYOUT,&VZOUT); 1300 G4double JPRFHEAVY = << 1201 lorentz_boost(VX2_IMF,VY2_IMF,VZ2_IMF, 1301 BU_TAB[i][9] * 0.4 * << 1202 VXOUT,VYOUT,VZOUT, 1302 G4double JPRFLIGHT = << 1203 &VX2OUT,&VY2OUT,&VZ2OUT); 1303 BU_TAB[i][9] * 0.4 * << 1204 EV_TAB[IJ+IEV_TAB][2] = VX2OUT; 1304 << 1205 EV_TAB[IJ+IEV_TAB][3] = VY2OUT; 1305 // Lorentz kinematics << 1206 EV_TAB[IJ+IEV_TAB][4] = VZ2OUT; 1306 // BU_TAB(I,5) << 1207 } 1307 // BU_TAB(I,6) << 1208 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1308 // BU_TAB(I,7) << 1209 1309 // Lorentz transformation << 1210 BU_TAB[IMULTBU+ILOOPBU][0] = BU_TAB[i][0]; 1310 lorentz_boost( << 1211 BU_TAB[IMULTBU+ILOOPBU][1] = BU_TAB[i][1]; 1311 VX1_IMF, VY1_IMF, VZ1 << 1212 BU_TAB[IMULTBU+ILOOPBU][2] = BU_TAB[i][2]; 1312 BU_TAB[i][4] = VXOUT; << 1213 BU_TAB[IMULTBU+ILOOPBU][3] = BU_TAB[i][3]; 1313 BU_TAB[i][5] = VYOUT; << 1214 BU_TAB[IMULTBU+ILOOPBU][7] = dint(zffimf); 1314 BU_TAB[i][6] = VZOUT; << 1215 BU_TAB[IMULTBU+ILOOPBU][8] = dint(affimf); 1315 << 1216 BU_TAB[IMULTBU+ILOOPBU][11]= NbLamimf; 1316 G4double vx1ev_imf = 0., << 1217 // Lorentz transformation 1317 jprf1 = 0.; << 1218 lorentz_boost(VX2_IMF,VY2_IMF,VZ2_IMF, 1318 << 1219 BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6], 1319 // Lambda particles << 1220 &VXOUT,&VYOUT,&VZOUT); 1320 G4int NbLamH = 0; << 1221 lorentz_boost(vx2ev_imf,vy2ev_imf,vz2ev_imf, 1321 G4int NbLamimf = 0; << 1222 VXOUT,VYOUT,VZOUT, 1322 G4double pbH = (AFBU - ZF << 1223 &VX2OUT,&VY2OUT,&VZ2OUT); 1323 for (G4int j = 0; j < nbl << 1224 BU_TAB[IMULTBU+ILOOPBU][4] = VX2OUT; 1324 { << 1225 BU_TAB[IMULTBU+ILOOPBU][5] = VY2OUT; 1325 if (G4AblaRandom::fla << 1226 BU_TAB[IMULTBU+ILOOPBU][6] = VZ2OUT; 1326 { << 1227 ILOOPBU = ILOOPBU + 1; 1327 NbLamH++; << 1228 }// if fimf==1 1328 } << 1229 1329 else << 1230 } else {// if BU_TAB(I,1).GT.2.D0 1330 { << 1231 //BU_TAB[i][0] = BU_TAB[i][0]; 1331 NbLamimf++; << 1232 //BU_TAB[i][1] = BU_TAB[i][1]; 1332 } << 1233 //BU_TAB[i][2] = BU_TAB[i][2]; 1333 } << 1234 //BU_TAB[i][3] = BU_TAB[i][3]; 1334 // Decay of IMF's partner << 1235 BU_TAB[i][7] = BU_TAB[i][0]; 1335 evapora(ZFBU, << 1236 BU_TAB[i][8] = BU_TAB[i][1]; 1336 AFBU, << 1237 //BU_TAB[i][4] = BU_TAB[i][4]; 1337 &EEIMFP, << 1238 //BU_TAB[i][5] = BU_TAB[i][5]; 1338 JPRFHEAVY, << 1239 //BU_TAB[i][6] = BU_TAB[i][6]; 1339 &ZFFBU, << 1240 BU_TAB[i][11]= Nblamb[i]; 1340 &AFFBU, << 1241 }// if BU_TAB(I,1).GT.2.D0 1341 &mtota, << 1242 }// for IMULTBU 1342 &vz1ev_imf, << 1343 &vx1ev_imf, << 1344 &vy1ev_imf, << 1345 &FFBU1, << 1346 &FIMFBU1, << 1347 &zdummy, << 1348 &adummy, << 1349 &tkedummy, << 1350 &jprf1, << 1351 &inttype, << 1352 &inum, << 1353 EV_TEMP, << 1354 &IEV_TAB_TEMP, << 1355 &NbLamH); << 1356 << 1357 for (G4int IJ = 0; IJ < I << 1358 { << 1359 EV_TAB[IJ + IEV_TAB][ << 1360 EV_TAB[IJ + IEV_TAB][ << 1361 EV_TAB[IJ + IEV_TAB][ << 1362 // Lorentz kinematics << 1363 // D << 1364 // E << 1365 // B << 1366 // Lorentz transform << 1367 lorentz_boost(BU_TAB[ << 1368 BU_TAB[ << 1369 BU_TAB[ << 1370 EV_TEMP << 1371 EV_TEMP << 1372 EV_TEMP << 1373 &VXOUT, << 1374 &VYOUT, << 1375 &VZOUT) << 1376 EV_TAB[IJ + IEV_TAB][ << 1377 EV_TAB[IJ + IEV_TAB][ << 1378 EV_TAB[IJ + IEV_TAB][ << 1379 } << 1380 IEV_TAB = IEV_TAB + IEV_T << 1381 << 1382 BU_TAB[i][7] = dint(ZFFBU << 1383 BU_TAB[i][8] = dint(AFFBU << 1384 BU_TAB[i][11] = NbLamH; << 1385 // Lorentz kinematics << 1386 // BU_TAB(I,5) << 1387 // BU_TAB(I,6) << 1388 // BU_TAB(I,7) << 1389 lorentz_boost(vx1ev_imf, << 1390 vy1ev_imf, << 1391 vz1ev_imf, << 1392 BU_TAB[i][4 << 1393 BU_TAB[i][5 << 1394 BU_TAB[i][6 << 1395 &VXOUT, << 1396 &VYOUT, << 1397 &VZOUT); << 1398 BU_TAB[i][4] = VXOUT; << 1399 BU_TAB[i][5] = VYOUT; << 1400 BU_TAB[i][6] = VZOUT; << 1401 // For IMF - fission and << 1402 G4int FFBU2 = 0; << 1403 G4int FIMFBU2 = 0; << 1404 opt->optimfallowed = 0; / << 1405 fiss->ifis = 0; / << 1406 / << 1407 G4double zffimf, affimf, << 1408 << 1409 evapora(ZIMFBU, << 1410 AIMFBU, << 1411 &EEIMF, << 1412 JPRFLIGHT, << 1413 &zffimf, << 1414 &affimf, << 1415 &mtota, << 1416 &vz2ev_imf, << 1417 &vx2ev_imf, << 1418 &vy2ev_imf, << 1419 &FFBU2, << 1420 &FIMFBU2, << 1421 &zdummy1, << 1422 &adummy1, << 1423 &tkedummy1, << 1424 &jprf2, << 1425 &inttype, << 1426 &inum, << 1427 EV_TEMP, << 1428 &IEV_TAB_TEMP, << 1429 &NbLamimf); << 1430 << 1431 for (G4int IJ = 0; IJ < I << 1432 { << 1433 EV_TAB[IJ + IEV_TAB][ << 1434 EV_TAB[IJ + IEV_TAB][ << 1435 EV_TAB[IJ + IEV_TAB][ << 1436 // Lorentz kinematics << 1437 // EV_TAB << 1438 // +VX2_I << 1439 // BU_TAB << 1440 // EV_TEM << 1441 // Lorentz transform << 1442 lorentz_boost(BU_TAB[ << 1443 BU_TAB[ << 1444 BU_TAB[ << 1445 EV_TEMP << 1446 EV_TEMP << 1447 EV_TEMP << 1448 &VXOUT, << 1449 &VYOUT, << 1450 &VZOUT) << 1451 lorentz_boost(VX2_IMF << 1452 EV_TAB[IJ + IEV_TAB][ << 1453 EV_TAB[IJ + IEV_TAB][ << 1454 EV_TAB[IJ + IEV_TAB][ << 1455 } << 1456 IEV_TAB = IEV_TAB + IEV_T << 1457 << 1458 BU_TAB[IMULTBU + ILOOPBU] << 1459 BU_TAB[IMULTBU + ILOOPBU] << 1460 BU_TAB[IMULTBU + ILOOPBU] << 1461 BU_TAB[IMULTBU + ILOOPBU] << 1462 BU_TAB[IMULTBU + ILOOPBU] << 1463 BU_TAB[IMULTBU + ILOOPBU] << 1464 BU_TAB[IMULTBU + ILOOPBU] << 1465 // Lorentz transformation << 1466 lorentz_boost( << 1467 VX2_IMF, VY2_IMF, VZ2 << 1468 lorentz_boost(vx2ev_imf, << 1469 BU_TAB[IMULTBU + ILOOPBU] << 1470 BU_TAB[IMULTBU + ILOOPBU] << 1471 BU_TAB[IMULTBU + ILOOPBU] << 1472 ILOOPBU = ILOOPBU + 1; << 1473 } // if fimf==1 << 1474 } << 1475 else << 1476 { // if BU_TAB(I,1).GT.2.D0 << 1477 // BU_TAB[i][0] = BU_TAB[i][0]; << 1478 // BU_TAB[i][1] = BU_TAB[i][1 << 1479 // BU_TAB[i][2] = BU_TAB[i][2 << 1480 // BU_TAB[i][3] = BU_TAB[i][3 << 1481 BU_TAB[i][7] = BU_TAB[i][0]; << 1482 BU_TAB[i][8] = BU_TAB[i][1]; << 1483 // BU_TAB[i][4] = BU_TAB[i][4 << 1484 // BU_TAB[i][5] = BU_TAB[i][5 << 1485 // BU_TAB[i][6] = BU_TAB[i][6 << 1486 BU_TAB[i][11] = Nblamb[i]; << 1487 } // if BU_TAB(I,1).GT.2.D0 << 1488 } // for IMULTBU << 1489 1243 1490 IMULTBU = IMULTBU + ILOOPBU; << 1244 IMULTBU = IMULTBU + ILOOPBU; 1491 // << 1245 // 1492 // RESOLVE UNSTABLE NUCLEI << 1246 // RESOLVE UNSTABLE NUCLEI 1493 // << 1247 // 1494 INEWLOOP = 0; << 1248 INEWLOOP = 0; 1495 ABU_SUM = 0.0; << 1249 ABU_SUM = 0.0; 1496 ZBU_SUM = 0.0; << 1250 ZBU_SUM = 0.0; 1497 // << 1251 // 1498 for (G4int i = 0; i < IMULTBU; i++) << 1252 for(G4int i=0;i<IMULTBU;i++){ 1499 { << 1253 ABU_SUM = ABU_SUM + BU_TAB[i][8]; 1500 ABU_SUM = ABU_SUM + BU_TAB[i][8]; << 1254 ZBU_SUM = ZBU_SUM + BU_TAB[i][7]; 1501 ZBU_SUM = ZBU_SUM + BU_TAB[i][7]; << 1255 unstable_nuclei(idnint(BU_TAB[i][8]),idnint(BU_TAB[i][7]), &afpnew,&zfpnew,IOUNSTABLE, 1502 unstable_nuclei(idnint(BU_TAB[i][ << 1256 BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], 1503 idnint(BU_TAB[i][ << 1257 &VP1X,&VP1Y,&VP1Z,BU_TAB_TEMP1,&ILOOP); 1504 &afpnew, << 1258 1505 &zfpnew, << 1259 //From now on, all neutrons and LCP created in above subroutine are part of the 1506 IOUNSTABLE, << 1260 // BU_TAB array (see below - Properties of "light" fragments). Therefore, 1507 BU_TAB[i][4], << 1261 // NEVA, PEVA ... are not needed any more in the break-up stage. 1508 BU_TAB[i][5], << 1262 1509 BU_TAB[i][6], << 1263 if(IOUNSTABLE>0){ 1510 &VP1X, << 1264 // Properties of "heavy fragment": 1511 &VP1Y, << 1265 ABU_SUM = ABU_SUM + G4double(afpnew) - BU_TAB[i][8]; 1512 &VP1Z, << 1266 ZBU_SUM = ZBU_SUM + G4double(zfpnew) - BU_TAB[i][7]; 1513 BU_TAB_TEMP1, << 1267 BU_TAB[i][8] = G4double(afpnew); 1514 &ILOOP); << 1268 BU_TAB[i][7] = G4double(zfpnew); 1515 << 1269 BU_TAB[i][4] = VP1X; 1516 // From now on, all neutrons and << 1270 BU_TAB[i][5] = VP1Y; 1517 // of the << 1271 BU_TAB[i][6] = VP1Z; 1518 // BU_TAB array (see below - Pro << 1272 1519 // NEVA, PEVA ... are not needed << 1273 //Properties of "light" fragments: 1520 << 1274 for(G4int IJ=0;IJ<ILOOP;IJ++){ 1521 if (IOUNSTABLE > 0) << 1275 BU_TAB[IMULTBU+INEWLOOP+IJ][7] = BU_TAB_TEMP1[IJ][0]; 1522 { << 1276 BU_TAB[IMULTBU+INEWLOOP+IJ][8] = BU_TAB_TEMP1[IJ][1]; 1523 // Properties of "heavy fragm << 1277 BU_TAB[IMULTBU+INEWLOOP+IJ][4] = BU_TAB_TEMP1[IJ][2]; 1524 ABU_SUM = ABU_SUM + G4double( << 1278 BU_TAB[IMULTBU+INEWLOOP+IJ][5] = BU_TAB_TEMP1[IJ][3]; 1525 ZBU_SUM = ZBU_SUM + G4double( << 1279 BU_TAB[IMULTBU+INEWLOOP+IJ][6] = BU_TAB_TEMP1[IJ][4]; 1526 BU_TAB[i][8] = G4double(afpne << 1280 BU_TAB[IMULTBU+INEWLOOP+IJ][2] = 0.0; 1527 BU_TAB[i][7] = G4double(zfpne << 1281 BU_TAB[IMULTBU+INEWLOOP+IJ][3] = 0.0; 1528 BU_TAB[i][4] = VP1X; << 1282 BU_TAB[IMULTBU+INEWLOOP+IJ][0] = BU_TAB[i][0]; 1529 BU_TAB[i][5] = VP1Y; << 1283 BU_TAB[IMULTBU+INEWLOOP+IJ][1] = BU_TAB[i][1]; 1530 BU_TAB[i][6] = VP1Z; << 1284 BU_TAB[IMULTBU+INEWLOOP+IJ][11] = BU_TAB[i][11]; 1531 << 1285 ABU_SUM = ABU_SUM + BU_TAB[IMULTBU+INEWLOOP+IJ][8]; 1532 // Properties of "light" frag << 1286 ZBU_SUM = ZBU_SUM + BU_TAB[IMULTBU+INEWLOOP+IJ][7]; 1533 for (G4int IJ = 0; IJ < ILOOP << 1287 }// for ILOOP 1534 { << 1288 1535 BU_TAB[IMULTBU + INEWLOOP << 1289 INEWLOOP = INEWLOOP + ILOOP; 1536 BU_TAB[IMULTBU + INEWLOOP << 1290 }// if(IOUNSTABLE>0) 1537 BU_TAB[IMULTBU + INEWLOOP << 1291 }// for IMULTBU unstable 1538 BU_TAB[IMULTBU + INEWLOOP << 1539 BU_TAB[IMULTBU + INEWLOOP << 1540 BU_TAB[IMULTBU + INEWLOOP << 1541 BU_TAB[IMULTBU + INEWLOOP << 1542 BU_TAB[IMULTBU + INEWLOOP << 1543 BU_TAB[IMULTBU + INEWLOOP << 1544 BU_TAB[IMULTBU + INEWLOOP << 1545 ABU_SUM = ABU_SUM + BU_TA << 1546 ZBU_SUM = ZBU_SUM + BU_TA << 1547 } // for ILOOP << 1548 << 1549 INEWLOOP = INEWLOOP + ILOOP; << 1550 } // if(IOUNSTABLE>0) << 1551 } // for IMULTBU unstable << 1552 1292 1553 // Increased array of BU_TAB << 1293 // Increased array of BU_TAB 1554 IMULTBU = IMULTBU + INEWLOOP; 1294 IMULTBU = IMULTBU + INEWLOOP; 1555 1295 1556 // Transform all velocities into the << 1296 // Transform all velocities into the rest frame of the projectile 1557 lorentz_boost(VX_incl, VY_incl, VZ_in << 1297 lorentz_boost(VX_incl,VY_incl,VZ_incl, >> 1298 VX_PREF,VY_PREF,VZ_PREF, >> 1299 &VXOUT,&VYOUT,&VZOUT); 1558 VX_PREF = VXOUT; 1300 VX_PREF = VXOUT; 1559 VY_PREF = VYOUT; 1301 VY_PREF = VYOUT; 1560 VZ_PREF = VZOUT; 1302 VZ_PREF = VZOUT; 1561 1303 1562 for (G4int i = 0; i < IMULTBU; i++) << 1304 for(G4int i=0;i<IMULTBU;i++){ 1563 { << 1305 lorentz_boost(VX_incl,VY_incl,VZ_incl, 1564 lorentz_boost(VX_incl, VY_incl, V << 1306 BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6], 1565 BU_TAB[i][4] = VXOUT; << 1307 &VXOUT,&VYOUT,&VZOUT); 1566 BU_TAB[i][5] = VYOUT; << 1308 BU_TAB[i][4] = VXOUT; 1567 BU_TAB[i][6] = VZOUT; << 1309 BU_TAB[i][5] = VYOUT; 1568 } << 1310 BU_TAB[i][6] = VZOUT; 1569 for (G4int i = 0; i < IEV_TAB; i++) << 1311 } 1570 { << 1312 for(G4int i=0;i<IEV_TAB;i++){ 1571 lorentz_boost(VX_incl, VY_incl, V << 1313 lorentz_boost(VX_incl,VY_incl,VZ_incl, 1572 EV_TAB[i][2] = VXOUT; << 1314 EV_TAB[i][2],EV_TAB[i][3],EV_TAB[i][4], 1573 EV_TAB[i][3] = VYOUT; << 1315 &VXOUT,&VYOUT,&VZOUT); 1574 EV_TAB[i][4] = VZOUT; << 1316 EV_TAB[i][2] = VXOUT; 1575 } << 1317 EV_TAB[i][3] = VYOUT; 1576 if (IMULTBU > 200) << 1318 EV_TAB[i][4] = VZOUT; 1577 std::cout << "IMULTBU>200 " << IM << 1319 } 1578 delete[] problamb; << 1579 delete[] Nblamb; << 1580 } // if(T_diff>0.1) << 1581 // End of multi-fragmentation << 1582 mult7777: << 1583 << 1584 // Start basic de-excitation of fragments << 1585 aprfp = idnint(aprf); << 1586 zprfp = idnint(zprf); << 1587 << 1588 if (IMULTIFR == 0) << 1589 { << 1590 // These momenta are in the frame of << 1591 // direct kinematics) << 1592 VX_PREF = VX_incl; << 1593 VY_PREF = VY_incl; << 1594 VZ_PREF = VZ_incl; << 1595 } << 1596 // Lambdas after multi-fragmentation << 1597 if (IMULTIFR == 1) << 1598 { << 1599 NbLam0 = NbLamprf; << 1600 } << 1601 // << 1602 // CALL THE EVAPORATION SUBROUTINE << 1603 // << 1604 opt->optimfallowed = 1; // IMF is allowe << 1605 fiss->ifis = 1; // fission is al << 1606 fimf = 0; << 1607 ff = 0; << 1608 1320 1609 // To spare computing time; these events << 1610 // IF(ZPRFP.LE.2.AND.ZPRFP.LT.APRFP) << 1611 if (zprfp <= 2 && zprfp < aprfp) << 1612 { << 1613 zf = zprf; << 1614 af = aprf; << 1615 ee = 0.0; << 1616 ff = 0; << 1617 fimf = 0; << 1618 ftype = 0; << 1619 aimf = 0.0; << 1620 zimf = 0.0; << 1621 tkeimf = 0.0; << 1622 vx_eva = 0.0; << 1623 vy_eva = 0.0; << 1624 vz_eva = 0.0; << 1625 jprf0 = jprf; << 1626 goto a1972; << 1627 } << 1628 1321 1629 // if(ZPRFP.LE.2.AND.ZPRFP.EQ.APRFP) << 1322 if(IMULTBU>200)std::cout << "IMULTBU>200 " << IMULTBU << std::endl; 1630 if (zprfp <= 2 && zprfp == aprfp) << 1323 }// if(T_diff>0.1) 1631 { << 1324 // End of multi-fragmentation 1632 unstable_nuclei(aprfp, << 1325 mult7777: 1633 zprfp, << 1326 1634 &afpnew, << 1327 // std::cout << "hola 100" << std::endl; 1635 &zfpnew, << 1328 1636 IOUNSTABLE, << 1329 // Start basic de-excitation of fragments 1637 VX_PREF, << 1330 aprfp = idnint(aprf); 1638 VY_PREF, << 1331 zprfp = idnint(zprf); 1639 VZ_PREF, << 1332 1640 &VP1X, << 1333 if(IMULTIFR == 0){ 1641 &VP1Y, << 1334 // These momenta are in the frame of the projectile (or target in case of direct kinematics) 1642 &VP1Z, << 1335 VX_PREF = VX_incl; 1643 EV_TAB_TEMP, << 1336 VY_PREF = VY_incl; 1644 &ILOOP); << 1337 VZ_PREF = VZ_incl; 1645 af = G4double(afpnew); << 1338 } 1646 zf = G4double(zfpnew); << 1339 // Lambdas after multi-fragmentation 1647 VX_PREF = VP1X; << 1340 if(IMULTIFR == 1){ 1648 VY_PREF = VP1Y; << 1341 NbLam0 = NbLamprf; 1649 VZ_PREF = VP1Z; << 1342 } 1650 for (G4int I = 0; I < ILOOP; I++) << 1343 // 1651 { << 1344 // CALL THE EVAPORATION SUBROUTINE 1652 for (G4int IJ = 0; IJ < 6; IJ++) << 1345 // 1653 EV_TAB[I + IEV_TAB][IJ] = EV_ << 1346 opt->optimfallowed = 1; // IMF is allowed 1654 } << 1347 fiss->ifis = 1; // fission is allowed >> 1348 fimf=0; >> 1349 ff=0; >> 1350 >> 1351 // To spare computing time; these events in any case cannot decay >> 1352 // IF(ZPRFP.LE.2.AND.ZPRFP.LT.APRFP)THEN FIXME: <= or < >> 1353 if(zprfp<=2 && zprfp<aprfp){ >> 1354 zf = zprf; >> 1355 af = aprf; >> 1356 ee = 0.0; >> 1357 ff = 0; >> 1358 fimf = 0; >> 1359 ftype = 0; >> 1360 aimf = 0.0; >> 1361 zimf = 0.0; >> 1362 tkeimf = 0.0; >> 1363 vx_eva = 0.0; >> 1364 vy_eva = 0.0; >> 1365 vz_eva = 0.0; >> 1366 jprf0 = jprf; >> 1367 goto a1972; >> 1368 } >> 1369 >> 1370 // if(ZPRFP.LE.2.AND.ZPRFP.EQ.APRFP) >> 1371 if(zprfp<=2 && zprfp==aprfp){ >> 1372 unstable_nuclei(aprfp,zprfp,&afpnew,&zfpnew,IOUNSTABLE, >> 1373 VX_PREF, VY_PREF, VZ_PREF, >> 1374 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); >> 1375 af = G4double(afpnew); >> 1376 zf = G4double(zfpnew); >> 1377 VX_PREF = VP1X; >> 1378 VY_PREF = VP1Y; >> 1379 VZ_PREF = VP1Z; >> 1380 for(G4int I = 0;I<ILOOP;I++){ >> 1381 for(G4int IJ = 0; IJ<6; IJ++) >> 1382 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; >> 1383 } 1655 IEV_TAB = IEV_TAB + ILOOP; 1384 IEV_TAB = IEV_TAB + ILOOP; 1656 ee = 0.0; 1385 ee = 0.0; 1657 ff = 0; 1386 ff = 0; 1658 fimf = 0; 1387 fimf = 0; 1659 ftype = 0; 1388 ftype = 0; 1660 aimf = 0.0; 1389 aimf = 0.0; 1661 zimf = 0.0; 1390 zimf = 0.0; 1662 tkeimf = 0.0; 1391 tkeimf = 0.0; 1663 vx_eva = 0.0; 1392 vx_eva = 0.0; 1664 vy_eva = 0.0; 1393 vy_eva = 0.0; 1665 vz_eva = 0.0; 1394 vz_eva = 0.0; 1666 jprf0 = jprf; 1395 jprf0 = jprf; 1667 goto a1972; << 1396 goto a1972; 1668 } << 1397 } 1669 1398 1670 // IF(ZPRFP.EQ.APRFP)THEN << 1399 // IF(ZPRFP.EQ.APRFP)THEN 1671 if (zprfp == aprfp) << 1400 if(zprfp==aprfp){ 1672 { << 1401 unstable_nuclei(aprfp,zprfp,&afpnew,&zfpnew,IOUNSTABLE, 1673 unstable_nuclei(aprfp, << 1402 VX_PREF, VY_PREF, VZ_PREF, 1674 zprfp, << 1403 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 1675 &afpnew, << 1404 af = G4double(afpnew); 1676 &zfpnew, << 1405 zf = G4double(zfpnew); 1677 IOUNSTABLE, << 1406 VX_PREF = VP1X; 1678 VX_PREF, << 1407 VY_PREF = VP1Y; 1679 VY_PREF, << 1408 VZ_PREF = VP1Z; 1680 VZ_PREF, << 1409 for(G4int I = 0;I<ILOOP;I++){ 1681 &VP1X, << 1410 for(G4int IJ = 0; IJ<6; IJ++) 1682 &VP1Y, << 1411 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 1683 &VP1Z, << 1412 } 1684 EV_TAB_TEMP, << 1685 &ILOOP); << 1686 af = G4double(afpnew); << 1687 zf = G4double(zfpnew); << 1688 VX_PREF = VP1X; << 1689 VY_PREF = VP1Y; << 1690 VZ_PREF = VP1Z; << 1691 for (G4int I = 0; I < ILOOP; I++) << 1692 { << 1693 for (G4int IJ = 0; IJ < 6; IJ++) << 1694 EV_TAB[I + IEV_TAB][IJ] = EV_ << 1695 } << 1696 IEV_TAB = IEV_TAB + ILOOP; 1413 IEV_TAB = IEV_TAB + ILOOP; 1697 ee = 0.0; 1414 ee = 0.0; 1698 ff = 0; 1415 ff = 0; 1699 fimf = 0; 1416 fimf = 0; 1700 ftype = 0; 1417 ftype = 0; 1701 aimf = 0.0; 1418 aimf = 0.0; 1702 zimf = 0.0; 1419 zimf = 0.0; 1703 tkeimf = 0.0; 1420 tkeimf = 0.0; 1704 vx_eva = 0.0; 1421 vx_eva = 0.0; 1705 vy_eva = 0.0; 1422 vy_eva = 0.0; 1706 vz_eva = 0.0; 1423 vz_eva = 0.0; 1707 jprf0 = jprf; 1424 jprf0 = jprf; 1708 goto a1972; << 1425 goto a1972; 1709 } << 1426 } 1710 // << 1427 // 1711 evapora(zprf, << 1428 evapora(zprf,aprf,&ee,jprf, &zf, &af, &mtota, &vz_eva, &vx_eva, &vy_eva, &ff, &fimf, &zimf, &aimf,&tkeimf, &jprf0, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLam0); 1712 aprf, << 1429 // 1713 &ee, << 1430 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 1714 jprf, << 1431 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1715 &zf, << 1432 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1716 &af, << 1433 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1717 &mtota, << 1434 // 1718 &vz_eva, << 1435 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 1719 &vx_eva, << 1436 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 1720 &vy_eva, << 1437 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 1721 &ff, << 1438 // Lorentz transformation 1722 &fimf, << 1439 lorentz_boost(VX_PREF,VY_PREF,VZ_PREF, 1723 &zimf, << 1440 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1724 &aimf, << 1441 &VXOUT,&VYOUT,&VZOUT); 1725 &tkeimf, << 1442 EV_TAB[IJ+IEV_TAB][2] = VXOUT; 1726 &jprf0, << 1443 EV_TAB[IJ+IEV_TAB][3] = VYOUT; 1727 &inttype, << 1444 EV_TAB[IJ+IEV_TAB][4] = VZOUT; 1728 &inum, << 1445 } 1729 EV_TEMP, << 1446 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1730 &IEV_TAB_TEMP, << 1447 1731 &NbLam0); << 1448 a1972: 1732 // << 1449 1733 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ+ << 1450 // vi_pref - velocity of the prefragment; vi_eva - recoil due to evaporation 1734 { << 1451 lorentz_boost(VX_PREF,VY_PREF,VZ_PREF, 1735 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ] << 1452 vx_eva,vy_eva,vz_eva, 1736 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ] << 1453 &VXOUT,&VYOUT,&VZOUT); 1737 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ] << 1454 V_CM[0] = VXOUT; 1738 // << 1455 V_CM[1] = VYOUT; 1739 // EV_TAB(IJ+IEV_TAB,3) << 1456 V_CM[2] = VZOUT; 1740 // EV_TAB(IJ+IEV_TAB,4) << 1457 // 1741 // EV_TAB(IJ+IEV_TAB,5) << 1458 if(ff == 0 && fimf == 0){ 1742 // Lorentz transformation << 1459 // Evaporation of neutrons and LCP; no IMF, no fission 1743 lorentz_boost( << 1460 ftype = 0; 1744 VX_PREF, VY_PREF, VZ_PREF, EV_TEM << 1461 ZFP1 = idnint(zf); 1745 EV_TAB[IJ + IEV_TAB][2] = VXOUT; << 1462 AFP1 = idnint(af); 1746 EV_TAB[IJ + IEV_TAB][3] = VYOUT; << 1463 SFP1 = NbLam0; 1747 EV_TAB[IJ + IEV_TAB][4] = VZOUT; << 1464 AFPIMF = 0; 1748 } << 1465 ZFPIMF = 0; 1749 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; << 1466 SFPIMF = 0; 1750 << 1467 ZFP2 = 0; 1751 a1972: << 1468 AFP2 = 0; 1752 << 1469 SFP2 = 0; 1753 // vi_pref - velocity of the prefragment; << 1470 VFP1_CM[0] = V_CM[0]; 1754 lorentz_boost(VX_PREF, VY_PREF, VZ_PREF, << 1471 VFP1_CM[1] = V_CM[1]; 1755 V_CM[0] = VXOUT; << 1472 VFP1_CM[2] = V_CM[2]; 1756 V_CM[1] = VYOUT; << 1473 for(G4int j=0;j<3;j++){ 1757 V_CM[2] = VZOUT; << 1474 VIMF_CM[j] = 0.0; 1758 // << 1475 VFP2_CM[j] = 0.0; 1759 if (ff == 0 && fimf == 0) << 1476 } 1760 { << 1477 } 1761 // Evaporation of neutrons and LCP; n << 1478 // 1762 ftype = 0; << 1479 if(ff == 1 && fimf == 0) ftype = 1; // fission 1763 ZFP1 = idnint(zf); << 1480 if(ff == 0 && fimf == 1) ftype = 2; // IMF emission 1764 AFP1 = idnint(af); << 1481 // 1765 SFP1 = NbLam0; << 1482 // AFP,ZFP IS THE FINAL FRAGMENT IF NO FISSION OR IMF EMISSION OCCURS 1766 AFPIMF = 0; << 1483 // IN CASE OF FISSION IT IS THE NUCLEUS THAT UNDERGOES FISSION OR IMF 1767 ZFPIMF = 0; << 1484 // 1768 SFPIMF = 0; << 1485 1769 ZFP2 = 0; << 1486 //***************** FISSION *************************************** 1770 AFP2 = 0; << 1487 // 1771 SFP2 = 0; << 1488 if(ftype == 1){ 1772 VFP1_CM[0] = V_CM[0]; << 1489 varntp->kfis = 1; 1773 VFP1_CM[1] = V_CM[1]; << 1490 if(NbLam0>0)varntp->kfis = 20; 1774 VFP1_CM[2] = V_CM[2]; << 1491 // ftype1=0; 1775 for (G4int j = 0; j < 3; j++) << 1492 1776 { << 1493 G4int IEV_TAB_FIS = 0,imode=0; 1777 VIMF_CM[j] = 0.0; << 1494 1778 VFP2_CM[j] = 0.0; << 1495 G4double vx1_fission=0.,vy1_fission=0.,vz1_fission=0.; 1779 } << 1496 G4double vx2_fission=0.,vy2_fission=0.,vz2_fission=0.; 1780 } << 1497 G4double vx_eva_sc=0.,vy_eva_sc=0.,vz_eva_sc=0.; 1781 // << 1498 1782 if (ff == 1 && fimf == 0) << 1499 fission(af,zf,ee,jprf0, 1783 ftype = 1; // fission << 1500 &vx1_fission,&vy1_fission,&vz1_fission, 1784 if (ff == 0 && fimf == 1) << 1501 &vx2_fission,&vy2_fission,&vz2_fission, 1785 ftype = 2; // IMF emission << 1502 &ZFP1,&AFP1,&SFP1,&ZFP2,&AFP2,&SFP2,&imode, 1786 // << 1503 &vx_eva_sc,&vy_eva_sc,&vz_eva_sc,EV_TEMP,&IEV_TAB_FIS,&NbLam0); 1787 // AFP,ZFP IS THE FINAL FRAGMENT IF NO FI << 1504 1788 // IN CASE OF FISSION IT IS THE NUCLEUS T << 1505 for(G4int IJ = 0; IJ< IEV_TAB_FIS;IJ++){ 1789 // << 1506 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1790 << 1507 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1791 //***************** FISSION ************* << 1508 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1792 // << 1509 // Lorentz kinematics 1793 if (ftype == 1) << 1510 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 1794 { << 1511 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 1795 varntp->kfis = 1; << 1512 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 1796 if (NbLam0 > 0) << 1513 // Lorentz transformation 1797 varntp->kfis = 20; << 1514 lorentz_boost(V_CM[0],V_CM[1],V_CM[2], 1798 // ftype1=0; << 1515 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1799 << 1516 &VXOUT,&VYOUT,&VZOUT); 1800 G4int IEV_TAB_FIS = 0, imode = 0; << 1517 EV_TAB[IJ+IEV_TAB][2] = VXOUT; 1801 << 1518 EV_TAB[IJ+IEV_TAB][3] = VYOUT; 1802 G4double vx1_fission = 0., vy1_fissio << 1519 EV_TAB[IJ+IEV_TAB][4] = VZOUT; 1803 G4double vx2_fission = 0., vy2_fissio << 1520 } 1804 G4double vx_eva_sc = 0., vy_eva_sc = << 1521 IEV_TAB = IEV_TAB + IEV_TAB_FIS; 1805 << 1522 1806 fission(af, << 1523 // if(imode==1) ftype1 = 1; // S1 mode 1807 zf, << 1524 // if(imode==2) ftype1 = 2; // S2 mode 1808 ee, << 1525 1809 jprf0, << 1526 AFPIMF = 0; 1810 &vx1_fission, << 1527 ZFPIMF = 0; 1811 &vy1_fission, << 1528 SFPIMF = 0; 1812 &vz1_fission, << 1529 1813 &vx2_fission, << 1530 // VX_EVA_SC,VY_EVA_SC,VZ_EVA_SC - recoil due to particle emisison 1814 &vy2_fission, << 1531 // between saddle and scission 1815 &vz2_fission, << 1532 // Lorentz kinematics 1816 &ZFP1, << 1533 // VFP1_CM(1) = V_CM(1) + VX1_FISSION + VX_EVA_SC ! Velocity of FF1 in x 1817 &AFP1, << 1534 // VFP1_CM(2) = V_CM(2) + VY1_FISSION + VY_EVA_SC ! Velocity of FF1 in y 1818 &SFP1, << 1535 // VFP1_CM(3) = V_CM(3) + VZ1_FISSION + VZ_EVA_SC ! Velocity of FF1 in x 1819 &ZFP2, << 1536 lorentz_boost(vx1_fission,vy1_fission,vz1_fission, 1820 &AFP2, << 1537 V_CM[0],V_CM[1],V_CM[2], 1821 &SFP2, << 1538 &VXOUT,&VYOUT,&VZOUT); 1822 &imode, << 1539 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, 1823 &vx_eva_sc, << 1540 VXOUT,VYOUT,VZOUT, 1824 &vy_eva_sc, << 1541 &VX2OUT,&VY2OUT,&VZ2OUT); 1825 &vz_eva_sc, << 1826 EV_TEMP, << 1827 &IEV_TAB_FIS, << 1828 &NbLam0); << 1829 << 1830 for (G4int IJ = 0; IJ < IEV_TAB_FIS; << 1831 { << 1832 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP << 1833 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP << 1834 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP << 1835 // Lorentz kinematics << 1836 // EV_TAB(IJ+IEV_TA << 1837 // EV_TAB(IJ+IEV_TA << 1838 // EV_TAB(IJ+IEV_TA << 1839 // Lorentz transformation << 1840 lorentz_boost( << 1841 V_CM[0], V_CM[1], V_CM[2], EV << 1842 EV_TAB[IJ + IEV_TAB][2] = VXOUT; << 1843 EV_TAB[IJ + IEV_TAB][3] = VYOUT; << 1844 EV_TAB[IJ + IEV_TAB][4] = VZOUT; << 1845 } << 1846 IEV_TAB = IEV_TAB + IEV_TAB_FIS; << 1847 << 1848 // if(imode==1) ftype1 = 1; // S1 << 1849 // if(imode==2) ftype1 = 2; // S2 << 1850 << 1851 AFPIMF = 0; << 1852 ZFPIMF = 0; << 1853 SFPIMF = 0; << 1854 << 1855 // VX_EVA_SC,VY_EVA_SC,VZ_EVA_SC - re << 1856 // between saddle and scission << 1857 // Lorentz kinematics << 1858 // VFP1_CM(1) = V_CM(1) + VX1_ << 1859 // in x VFP1_CM(2) = V_CM(2) + << 1860 // FF1 in y VFP1_CM(3) = V_CM( << 1861 // of FF1 in x << 1862 lorentz_boost(vx1_fission, vy1_fissio << 1863 lorentz_boost(vx_eva_sc, vy_eva_sc, v << 1864 VFP1_CM[0] = VX2OUT; 1542 VFP1_CM[0] = VX2OUT; 1865 VFP1_CM[1] = VY2OUT; 1543 VFP1_CM[1] = VY2OUT; 1866 VFP1_CM[2] = VZ2OUT; 1544 VFP1_CM[2] = VZ2OUT; 1867 1545 1868 // Lorentz kinematics << 1546 // Lorentz kinematics 1869 // VFP2_CM(1) = V_CM(1) + VX2_ << 1547 // VFP2_CM(1) = V_CM(1) + VX2_FISSION + VX_EVA_SC ! Velocity of FF2 in x 1870 // in x VFP2_CM(2) = V_CM(2) + << 1548 // VFP2_CM(2) = V_CM(2) + VY2_FISSION + VY_EVA_SC ! Velocity of FF2 in y 1871 // FF2 in y VFP2_CM(3) = V_CM( << 1549 // VFP2_CM(3) = V_CM(3) + VZ2_FISSION + VZ_EVA_SC ! Velocity of FF2 in x 1872 // of FF2 in x << 1550 lorentz_boost(vx2_fission,vy2_fission,vz2_fission, 1873 lorentz_boost(vx2_fission, vy2_fissio << 1551 V_CM[0],V_CM[1],V_CM[2], 1874 lorentz_boost(vx_eva_sc, vy_eva_sc, v << 1552 &VXOUT,&VYOUT,&VZOUT); >> 1553 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, >> 1554 VXOUT,VYOUT,VZOUT, >> 1555 &VX2OUT,&VY2OUT,&VZ2OUT); 1875 VFP2_CM[0] = VX2OUT; 1556 VFP2_CM[0] = VX2OUT; 1876 VFP2_CM[1] = VY2OUT; 1557 VFP2_CM[1] = VY2OUT; 1877 VFP2_CM[2] = VZ2OUT; 1558 VFP2_CM[2] = VZ2OUT; 1878 1559 1879 //************** IMF EMISSION << 1560 //************** IMF EMISSION ************************************************ 1880 //*********************************** << 1561 // 1881 // << 1562 }else if(ftype == 2){ 1882 } << 1563 // IMF emission: Heavy partner is allowed to fission and to emitt IMF, but ONLY once. 1883 else if (ftype == 2) << 1564 G4int FF11 = 0; 1884 { << 1565 G4int FIMF11 = 0; 1885 // IMF emission: Heavy partner is all << 1566 opt->optimfallowed = 1; // IMF is allowed 1886 // ONLY once. << 1567 fiss->ifis = 1; // fission is allowed 1887 G4int FF11 = 0; << 1568 // Lambda particles 1888 G4int FIMF11 = 0; << 1569 G4int NbLamH=0; 1889 opt->optimfallowed = 1; // IMF is al << 1570 G4int NbLamimf=0; 1890 fiss->ifis = 1; // fission i << 1571 G4double pbH = (af-zf) / (af-zf+aimf-zimf); 1891 // Lambda pa << 1572 //double pbL = aimf / (af+aimf); 1892 G4int NbLamH = 0; << 1573 for(G4int i=0;i<NbLam0;i++){ 1893 G4int NbLamimf = 0; << 1574 if(G4AblaRandom::flat()<pbH){ 1894 G4double pbH = (af - zf) / (af - zf + << 1575 NbLamH++; 1895 // double pbL = aimf / (af+aimf); << 1576 }else{ 1896 for (G4int i = 0; i < NbLam0; i++) << 1577 NbLamimf++; 1897 { << 1578 } 1898 if (G4AblaRandom::flat() < pbH) << 1579 } 1899 { << 1580 // 1900 NbLamH++; << 1581 // Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF 1901 } << 1582 G4double EkinR1 = tkeimf * aimf / (af+aimf); 1902 else << 1583 G4double EkinR2 = tkeimf * af / (af+aimf); 1903 { << 1584 G4double V1 = std::sqrt(EkinR1/af) * 1.3887; 1904 NbLamimf++; << 1585 G4double V2 = std::sqrt(EkinR2/aimf) * 1.3887; 1905 } << 1586 G4double VZ1_IMF = (2.0 * G4AblaRandom::flat() - 1.0) * V1; 1906 } << 1587 G4double VPERP1 = std::sqrt(V1*V1 - VZ1_IMF*VZ1_IMF); 1907 // << 1588 G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142; 1908 // Velocities of IMF and partner: 1 << 1589 G4double VX1_IMF = VPERP1 * std::sin(ALPHA1); 1909 G4double EkinR1 = tkeimf * aimf / (af << 1590 G4double VY1_IMF = VPERP1 * std::cos(ALPHA1); 1910 G4double EkinR2 = tkeimf * af / (af + << 1591 G4double VX2_IMF = - VX1_IMF / V1 * V2; 1911 G4double V1 = std::sqrt(EkinR1 / af) << 1592 G4double VY2_IMF = - VY1_IMF / V1 * V2; 1912 G4double V2 = std::sqrt(EkinR2 / aimf << 1593 G4double VZ2_IMF = - VZ1_IMF / V1 * V2; 1913 G4double VZ1_IMF = (2.0 * G4AblaRando << 1594 1914 G4double VPERP1 = std::sqrt(V1 * V1 - << 1595 G4double EEIMFP = ee * af /(af + aimf); 1915 G4double ALPHA1 = G4AblaRandom::flat( << 1596 G4double EEIMF = ee * aimf /(af + aimf); 1916 G4double VX1_IMF = VPERP1 * std::sin( << 1597 1917 G4double VY1_IMF = VPERP1 * std::cos( << 1598 // Decay of heavy partner 1918 G4double VX2_IMF = -VX1_IMF / V1 * V2 << 1599 G4double IINERTTOT = 0.40 * 931.490 * 1.160*1.160 *( std::pow(aimf,5.0/3.0) + std::pow(af,5.0/3.0)) + 931.490 * 1.160*1.160*aimf*af/(aimf+af)*(std::pow(aimf,1./3.) + std::pow(af,1./3.))*(std::pow(aimf,1./3.) + std::pow(af,1./3.)); 1919 G4double VY2_IMF = -VY1_IMF / V1 * V2 << 1600 1920 G4double VZ2_IMF = -VZ1_IMF / V1 * V2 << 1601 G4double JPRFHEAVY = jprf0 * 0.4 * 931.49 * 1.16*1.16 * std::pow(af,5.0/3.0) / IINERTTOT; 1921 << 1602 G4double JPRFLIGHT = jprf0 * 0.4 * 931.49 * 1.16*1.16 * std::pow(aimf,5.0/3.0) / IINERTTOT; 1922 G4double EEIMFP = ee * af / (af + aim << 1603 if(af<2.0) std::cout << "RN117-4,AF,ZF,EE,JPRFheavy" << std::endl; 1923 G4double EEIMF = ee * aimf / (af + ai << 1604 1924 << 1605 G4double vx1ev_imf=0., vy1ev_imf=0., vz1ev_imf=0., zdummy=0., adummy=0., tkedummy=0.,jprf1=0.; 1925 // Decay of heavy partner << 1606 1926 G4double IINERTTOT = 0.40 * 931.490 * << 1607 evapora(zf,af,&EEIMFP,JPRFHEAVY, &zff, &aff, &mtota, &vz1ev_imf, &vx1ev_imf,&vy1ev_imf, &FF11, &FIMF11, &zdummy, &adummy,&tkedummy, &jprf1, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamH); 1927 931.490 * 1.160 << 1608 1928 (std::pow(ai << 1609 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 1929 (std::pow(ai << 1610 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1930 << 1611 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1931 G4double JPRFHEAVY = jprf0 * 0.4 * 93 << 1612 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1932 G4double JPRFLIGHT = jprf0 * 0.4 * 93 << 1613 // 1933 if (af < 2.0) << 1614 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 1934 std::cout << "RN117-4,AF,ZF,EE,JP << 1615 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 1935 << 1616 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 1936 G4double vx1ev_imf = 0., vy1ev_imf = << 1617 // Lorentz transformation 1937 << 1618 lorentz_boost(V_CM[0],V_CM[1],V_CM[2], 1938 evapora(zf, << 1619 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1939 af, << 1620 &VXOUT,&VYOUT,&VZOUT); 1940 &EEIMFP, << 1621 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, 1941 JPRFHEAVY, << 1622 VXOUT,VYOUT,VZOUT, 1942 &zff, << 1623 &VX2OUT,&VY2OUT,&VZ2OUT); 1943 &aff, << 1624 EV_TAB[IJ+IEV_TAB][2] = VX2OUT; 1944 &mtota, << 1625 EV_TAB[IJ+IEV_TAB][3] = VY2OUT; 1945 &vz1ev_imf, << 1626 EV_TAB[IJ+IEV_TAB][4] = VZ2OUT; 1946 &vx1ev_imf, << 1627 } 1947 &vy1ev_imf, << 1628 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1948 &FF11, << 1629 1949 &FIMF11, << 1630 // For IMF - fission and IMF emission are not allowed 1950 &zdummy, << 1631 G4int FF22 = 0; 1951 &adummy, << 1632 G4int FIMF22 = 0; 1952 &tkedummy, << 1633 opt->optimfallowed = 0; // IMF is not allowed 1953 &jprf1, << 1634 fiss->ifis = 0; // fission is not allowed 1954 &inttype, << 1635 1955 &inum, << 1636 // Decay of IMF 1956 EV_TEMP, << 1637 G4double zffimf, affimf,zdummy1=0., adummy1=0., tkedummy1=0.,jprf2,vx2ev_imf,vy2ev_imf, 1957 &IEV_TAB_TEMP, << 1638 vz2ev_imf; 1958 &NbLamH); << 1639 1959 << 1640 evapora(zimf,aimf,&EEIMF,JPRFLIGHT, &zffimf, &affimf, &mtota, &vz2ev_imf, &vx2ev_imf,&vy2ev_imf, &FF22, &FIMF22, &zdummy1, &adummy1,&tkedummy1, &jprf2, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamimf); 1960 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; << 1641 1961 { << 1642 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 1962 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP << 1643 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1963 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP << 1644 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1964 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP << 1645 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1965 // << 1646 // 1966 // EV_TAB(IJ+IEV_TA << 1647 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 1967 // EV_TAB(IJ+IEV_TA << 1648 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 1968 // EV_TAB(IJ+IEV_TA << 1649 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 1969 // Lorentz transformation << 1650 // Lorentz transformation 1970 lorentz_boost( << 1651 lorentz_boost(V_CM[0],V_CM[1],V_CM[2], 1971 V_CM[0], V_CM[1], V_CM[2], EV << 1652 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1972 lorentz_boost(vx1ev_imf, vy1ev_im << 1653 &VXOUT,&VYOUT,&VZOUT); 1973 EV_TAB[IJ + IEV_TAB][2] = VX2OUT; << 1654 lorentz_boost(VX2_IMF,VY2_IMF,VZ2_IMF, 1974 EV_TAB[IJ + IEV_TAB][3] = VY2OUT; << 1655 VXOUT,VYOUT,VZOUT, 1975 EV_TAB[IJ + IEV_TAB][4] = VZ2OUT; << 1656 &VX2OUT,&VY2OUT,&VZ2OUT); 1976 } << 1657 EV_TAB[IJ+IEV_TAB][2] = VX2OUT; 1977 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; << 1658 EV_TAB[IJ+IEV_TAB][3] = VY2OUT; 1978 << 1659 EV_TAB[IJ+IEV_TAB][4] = VZ2OUT; 1979 // For IMF - fission and IMF emission << 1660 } 1980 G4int FF22 = 0; << 1661 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1981 G4int FIMF22 = 0; << 1662 // As IMF is not allowed to emit IMF, adummy1=zdummy1=0 1982 opt->optimfallowed = 0; // IMF is no << 1663 1983 fiss->ifis = 0; // fission i << 1664 AFPIMF = idnint(affimf); 1984 << 1665 ZFPIMF = idnint(zffimf); 1985 // Decay of IMF << 1666 SFPIMF = NbLamimf; 1986 G4double zffimf, affimf, zdummy1 = 0. << 1667 1987 << 1668 // vi1_imf, vi2_imf - velocities of imf and partner from TKE; 1988 evapora(zimf, << 1669 // vi1ev_imf, vi2_imf - recoil of partner and imf due to evaporation 1989 aimf, << 1670 // Lorentz kinematics - DM 18/5/2010 1990 &EEIMF, << 1671 // VIMF_CM(1) = V_CM(1) + VX2_IMF + VX2EV_IMF 1991 JPRFLIGHT, << 1672 // VIMF_CM(2) = V_CM(2) + VY2_IMF + VY2EV_IMF 1992 &zffimf, << 1673 // VIMF_CM(3) = V_CM(3) + VZ2_IMF + VZ2EV_IMF 1993 &affimf, << 1674 lorentz_boost(VX2_IMF,VY2_IMF,VZ2_IMF, 1994 &mtota, << 1675 V_CM[0],V_CM[1],V_CM[2], 1995 &vz2ev_imf, << 1676 &VXOUT,&VYOUT,&VZOUT); 1996 &vx2ev_imf, << 1677 lorentz_boost(vx2ev_imf,vy2ev_imf,vz2ev_imf, 1997 &vy2ev_imf, << 1678 VXOUT,VYOUT,VZOUT, 1998 &FF22, << 1679 &VX2OUT,&VY2OUT,&VZ2OUT); 1999 &FIMF22, << 2000 &zdummy1, << 2001 &adummy1, << 2002 &tkedummy1, << 2003 &jprf2, << 2004 &inttype, << 2005 &inum, << 2006 EV_TEMP, << 2007 &IEV_TAB_TEMP, << 2008 &NbLamimf); << 2009 << 2010 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; << 2011 { << 2012 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP << 2013 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP << 2014 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP << 2015 // << 2016 // EV_TAB(IJ+IEV_TA << 2017 // EV_TAB(IJ+IEV_TA << 2018 // EV_TAB(IJ+IEV_TA << 2019 // Lorentz transformation << 2020 lorentz_boost( << 2021 V_CM[0], V_CM[1], V_CM[2], EV << 2022 lorentz_boost(VX2_IMF, VY2_IMF, V << 2023 EV_TAB[IJ + IEV_TAB][2] = VX2OUT; << 2024 EV_TAB[IJ + IEV_TAB][3] = VY2OUT; << 2025 EV_TAB[IJ + IEV_TAB][4] = VZ2OUT; << 2026 } << 2027 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; << 2028 // As IMF is not allowed to emit IMF, << 2029 << 2030 AFPIMF = idnint(affimf); << 2031 ZFPIMF = idnint(zffimf); << 2032 SFPIMF = NbLamimf; << 2033 << 2034 // vi1_imf, vi2_imf - velocities of i << 2035 // vi1ev_imf, vi2_imf - recoil of par << 2036 // Lorentz kinematics - DM 18/5/2010 << 2037 // VIMF_CM(1) = V_CM(1) + VX2_ << 2038 // VIMF_CM(2) = V_CM(2) + VY2_ << 2039 // VIMF_CM(3) = V_CM(3) + VZ2_ << 2040 lorentz_boost(VX2_IMF, VY2_IMF, VZ2_I << 2041 lorentz_boost(vx2ev_imf, vy2ev_imf, v << 2042 VIMF_CM[0] = VX2OUT; 1680 VIMF_CM[0] = VX2OUT; 2043 VIMF_CM[1] = VY2OUT; 1681 VIMF_CM[1] = VY2OUT; 2044 VIMF_CM[2] = VZ2OUT; 1682 VIMF_CM[2] = VZ2OUT; 2045 // Lorentz kinematics << 1683 // Lorentz kinematics 2046 // VFP1_CM(1) = V_CM(1) + VX1_I << 1684 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF 2047 // VFP1_CM(2) = V_CM(2) + VY1_I << 1685 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF 2048 // VFP1_CM(3) = V_CM(3) + VZ1_I << 1686 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF 2049 lorentz_boost(VX1_IMF, VY1_IMF, VZ1_I << 1687 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, 2050 lorentz_boost(vx1ev_imf, vy1ev_imf, v << 1688 V_CM[0],V_CM[1],V_CM[2], >> 1689 &VXOUT,&VYOUT,&VZOUT); >> 1690 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, >> 1691 VXOUT,VYOUT,VZOUT, >> 1692 &VX2OUT,&VY2OUT,&VZ2OUT); 2051 VFP1_CM[0] = VX2OUT; 1693 VFP1_CM[0] = VX2OUT; 2052 VFP1_CM[1] = VY2OUT; 1694 VFP1_CM[1] = VY2OUT; 2053 VFP1_CM[2] = VZ2OUT; 1695 VFP1_CM[2] = VZ2OUT; 2054 1696 2055 if (FF11 == 0 && FIMF11 == 0) << 1697 if(FF11==0 && FIMF11==0){ 2056 { << 1698 // heavy partner deexcites by emission of light particles 2057 // heavy partner deexcites by emi << 1699 AFP1 = idnint(aff); 2058 AFP1 = idnint(aff); << 1700 ZFP1 = idnint(zff); 2059 ZFP1 = idnint(zff); << 1701 SFP1 = NbLamH; 2060 SFP1 = NbLamH; << 1702 ZFP2 = 0; 2061 ZFP2 = 0; << 1703 AFP2 = 0; 2062 AFP2 = 0; << 1704 SFP2 = 0; 2063 SFP2 = 0; << 1705 ftype = 2; 2064 ftype = 2; << 1706 AFPIMF = idnint(affimf); 2065 AFPIMF = idnint(affimf); << 1707 ZFPIMF = idnint(zffimf); 2066 ZFPIMF = idnint(zffimf); << 1708 SFPIMF = NbLamimf; 2067 SFPIMF = NbLamimf; << 1709 for(G4int I=0;I<3;I++) 2068 for (G4int I = 0; I < 3; I++) << 1710 VFP2_CM[I] = 0.0; 2069 VFP2_CM[I] = 0.0; << 1711 2070 } << 1712 2071 else if (FF11 == 1 && FIMF11 == 0) << 1713 } else if(FF11==1 && FIMF11==0){ 2072 { << 1714 // Heavy partner fissions 2073 // Heavy partner fissions << 1715 varntp->kfis = 1; 2074 varntp->kfis = 1; << 1716 if(NbLam0>0)varntp->kfis = 20; 2075 if (NbLam0 > 0) << 1717 // 2076 varntp->kfis = 20; << 1718 opt->optimfallowed = 0; // IMF is not allowed 2077 // << 1719 fiss->ifis = 0; // fission is not allowed 2078 opt->optimfallowed = 0; // IMF i << 1720 // 2079 fiss->ifis = 0; // fissi << 1721 zf = zff; 2080 // << 1722 af = aff; 2081 zf = zff; << 1723 ee = EEIMFP; 2082 af = aff; << 1724 // ftype1=0; 2083 ee = EEIMFP; << 1725 ftype=21; 2084 // ftype1=0; << 1726 2085 ftype = 21; << 1727 G4int IEV_TAB_FIS = 0,imode=0; 2086 << 1728 2087 G4int IEV_TAB_FIS = 0, imode = 0; << 1729 G4double vx1_fission=0.,vy1_fission=0.,vz1_fission=0.; 2088 << 1730 G4double vx2_fission=0.,vy2_fission=0.,vz2_fission=0.; 2089 G4double vx1_fission = 0., vy1_fi << 1731 G4double vx_eva_sc=0.,vy_eva_sc=0.,vz_eva_sc=0.; 2090 G4double vx2_fission = 0., vy2_fi << 1732 2091 G4double vx_eva_sc = 0., vy_eva_s << 1733 fission(af,zf,ee,jprf1, 2092 << 1734 &vx1_fission,&vy1_fission,&vz1_fission, 2093 fission(af, << 1735 &vx2_fission,&vy2_fission,&vz2_fission, 2094 zf, << 1736 &ZFP1,&AFP1,&SFP1,&ZFP2,&AFP2,&SFP2,&imode, 2095 ee, << 1737 &vx_eva_sc,&vy_eva_sc,&vz_eva_sc,EV_TEMP,&IEV_TAB_FIS,&NbLamH); 2096 jprf1, << 1738 2097 &vx1_fission, << 1739 for(int IJ = 0; IJ< IEV_TAB_FIS;IJ++){ 2098 &vy1_fission, << 1740 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 2099 &vz1_fission, << 1741 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 2100 &vx2_fission, << 1742 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 2101 &vy2_fission, << 1743 // Lorentz kinematics 2102 &vz2_fission, << 1744 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 2103 &ZFP1, << 1745 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 2104 &AFP1, << 1746 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 2105 &SFP1, << 1747 // Lorentz transformation 2106 &ZFP2, << 1748 lorentz_boost(VFP1_CM[0],VFP1_CM[1],VFP1_CM[2], 2107 &AFP2, << 1749 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 2108 &SFP2, << 1750 &VXOUT,&VYOUT,&VZOUT); 2109 &imode, << 1751 EV_TAB[IJ+IEV_TAB][2] = VXOUT; 2110 &vx_eva_sc, << 1752 EV_TAB[IJ+IEV_TAB][3] = VYOUT; 2111 &vy_eva_sc, << 1753 EV_TAB[IJ+IEV_TAB][4] = VZOUT; 2112 &vz_eva_sc, << 1754 } 2113 EV_TEMP, << 1755 IEV_TAB = IEV_TAB + IEV_TAB_FIS; 2114 &IEV_TAB_FIS, << 1756 2115 &NbLamH); << 1757 // if(imode==1) ftype1 = 1; // S1 mode 2116 << 1758 // if(imode==2) ftype1 = 2; // S2 mode 2117 for (int IJ = 0; IJ < IEV_TAB_FIS << 1759 2118 { << 1760 // Lorentz kinematics 2119 EV_TAB[IJ + IEV_TAB][0] = EV_ << 1761 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF + VX1_FISSION + 2120 EV_TAB[IJ + IEV_TAB][1] = EV_ << 1762 // & VX_EVA_SC ! Velocity of FF1 in x 2121 EV_TAB[IJ + IEV_TAB][5] = EV_ << 1763 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF + VY1_FISSION + 2122 // Lorentz kinematics << 1764 // & VY_EVA_SC ! Velocity of FF1 in y 2123 // EV_TAB(IJ+IE << 1765 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF + VZ1_FISSION + 2124 // EV_TAB(IJ+IE << 1766 // & VZ_EVA_SC ! Velocity of FF1 in x 2125 // EV_TAB(IJ+IE << 1767 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, 2126 // Lorentz transformation << 1768 V_CM[0],V_CM[1],V_CM[2], 2127 lorentz_boost(VFP1_CM[0], << 1769 &VXOUT,&VYOUT,&VZOUT); 2128 VFP1_CM[1], << 1770 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, 2129 VFP1_CM[2], << 1771 VXOUT,VYOUT,VZOUT, 2130 EV_TEMP[IJ][2], << 1772 &VX2OUT,&VY2OUT,&VZ2OUT); 2131 EV_TEMP[IJ][3], << 1773 lorentz_boost(vx1_fission,vy1_fission,vz1_fission, 2132 EV_TEMP[IJ][4], << 1774 VX2OUT,VY2OUT,VZ2OUT, 2133 &VXOUT, << 1775 &VXOUT,&VYOUT,&VZOUT); 2134 &VYOUT, << 1776 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, 2135 &VZOUT); << 1777 VXOUT,VYOUT,VZOUT, 2136 EV_TAB[IJ + IEV_TAB][2] = VXO << 1778 &VX2OUT,&VY2OUT,&VZ2OUT); 2137 EV_TAB[IJ + IEV_TAB][3] = VYO << 1779 VFP1_CM[0] = VX2OUT; 2138 EV_TAB[IJ + IEV_TAB][4] = VZO << 1780 VFP1_CM[1] = VY2OUT; 2139 } << 1781 VFP1_CM[2] = VZ2OUT; 2140 IEV_TAB = IEV_TAB + IEV_TAB_FIS; << 2141 1782 2142 // if(imode==1) ftype1 = 1; / << 1783 // Lorentz kinematics 2143 // if(imode==2) ftype1 = 2; / << 1784 // VFP2_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF + VX2_FISSION + >> 1785 // & VX_EVA_SC ! Velocity of FF2 in x >> 1786 // VFP2_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF + VY2_FISSION + >> 1787 // & VY_EVA_SC ! Velocity of FF2 in y >> 1788 // VFP2_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF + VZ2_FISSION + >> 1789 // & VZ_EVA_SC ! Velocity of FF2 in x >> 1790 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, >> 1791 V_CM[0],V_CM[1],V_CM[2], >> 1792 &VXOUT,&VYOUT,&VZOUT); >> 1793 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, >> 1794 VXOUT,VYOUT,VZOUT, >> 1795 &VX2OUT,&VY2OUT,&VZ2OUT); >> 1796 lorentz_boost(vx2_fission,vy2_fission,vz2_fission, >> 1797 VX2OUT,VY2OUT,VZ2OUT, >> 1798 &VXOUT,&VYOUT,&VZOUT); >> 1799 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, >> 1800 VXOUT,VYOUT,VZOUT, >> 1801 &VX2OUT,&VY2OUT,&VZ2OUT); >> 1802 VFP2_CM[0] = VX2OUT; >> 1803 VFP2_CM[1] = VY2OUT; >> 1804 VFP2_CM[2] = VZ2OUT; 2144 1805 2145 // Lorentz kinematics << 1806 } else if(FF11==0 && FIMF11==1){ 2146 // VFP1_CM(1) = V_CM(1) + << 1807 // Heavy partner emits imf, consequtive imf emission or fission is not allowed 2147 // & VX_EVA_SC << 1808 opt->optimfallowed = 0; // IMF is not allowed 2148 // VFP1_CM(2) = V_CM(2) + << 1809 fiss->ifis = 0; // fission is not allowed 2149 // & VY_EVA_SC << 1810 // 2150 // VFP1_CM(3) = V_CM(3) + << 1811 zf = zff; 2151 // & VZ_EVA_SC << 1812 af = aff; 2152 lorentz_boost(VX1_IMF, VY1_IMF, V << 1813 ee = EEIMFP; 2153 lorentz_boost(vx1ev_imf, vy1ev_im << 1814 aimf = adummy; 2154 lorentz_boost(vx1_fission, vy1_fi << 1815 zimf = zdummy; 2155 lorentz_boost(vx_eva_sc, vy_eva_s << 1816 tkeimf = tkedummy; 2156 VFP1_CM[0] = VX2OUT; << 1817 FF11 = 0; 2157 VFP1_CM[1] = VY2OUT; << 1818 FIMF11 = 0; 2158 VFP1_CM[2] = VZ2OUT; << 1819 ftype = 22; 2159 << 1820 // Lambda particles 2160 // Lorentz kinematics << 1821 G4int NbLamH1=0; 2161 // VFP2_CM(1) = V_CM(1) + << 1822 G4int NbLamimf1=0; 2162 // & VX_EVA_SC << 1823 G4double pbH1 = (af-zf) / (af-zf+aimf-zimf); 2163 // VFP2_CM(2) = V_CM(2) + << 1824 for(G4int i=0;i<NbLamH;i++){ 2164 // & VY_EVA_SC << 1825 if(G4AblaRandom::flat()<pbH1){ 2165 // VFP2_CM(3) = V_CM(3) + << 1826 NbLamH1++; 2166 // & VZ_EVA_SC << 1827 }else{ 2167 lorentz_boost(VX1_IMF, VY1_IMF, V << 1828 NbLamimf1++; 2168 lorentz_boost(vx1ev_imf, vy1ev_im << 1829 } 2169 lorentz_boost(vx2_fission, vy2_fi << 1830 } 2170 lorentz_boost(vx_eva_sc, vy_eva_s << 1831 // 2171 VFP2_CM[0] = VX2OUT; << 1832 // Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF 2172 VFP2_CM[1] = VY2OUT; << 1833 EkinR1 = tkeimf * aimf / (af+aimf); 2173 VFP2_CM[2] = VZ2OUT; << 1834 EkinR2 = tkeimf * af / (af+aimf); 2174 } << 1835 V1 = std::sqrt(EkinR1/af) * 1.3887; 2175 else if (FF11 == 0 && FIMF11 == 1) << 1836 V2 = std::sqrt(EkinR2/aimf) * 1.3887; 2176 { << 1837 G4double VZ1_IMFS = (2.0 * G4AblaRandom::flat() - 1.0) * V1; 2177 // Heavy partner emits imf, conse << 1838 VPERP1 = std::sqrt(V1*V1 - VZ1_IMFS*VZ1_IMFS); 2178 // allowed << 1839 ALPHA1 = G4AblaRandom::flat() * 2. * 3.142; 2179 opt->optimfallowed = 0; // IMF i << 1840 G4double VX1_IMFS = VPERP1 * std::sin(ALPHA1); 2180 fiss->ifis = 0; // fissi << 1841 G4double VY1_IMFS = VPERP1 * std::cos(ALPHA1); 2181 // << 1842 G4double VX2_IMFS = - VX1_IMFS / V1 * V2; 2182 zf = zff; << 1843 G4double VY2_IMFS = - VY1_IMFS / V1 * V2; 2183 af = aff; << 1844 G4double VZ2_IMFS = - VZ1_IMFS / V1 * V2; 2184 ee = EEIMFP; << 1845 2185 aimf = adummy; << 1846 EEIMFP = ee * af /(af + aimf); 2186 zimf = zdummy; << 1847 EEIMF = ee * aimf /(af + aimf); 2187 tkeimf = tkedummy; << 1848 2188 FF11 = 0; << 1849 // Decay of heavy partner 2189 FIMF11 = 0; << 1850 IINERTTOT = 0.40 * 931.490 * 1.160*1.160 *( std::pow(aimf,5.0/3.0) + std::pow(af,5.0/3.0)) + 931.490 * 1.160*1.160*aimf*af/(aimf+af)*(std::pow(aimf,1./3.) + std::pow(af,1./3.))*(std::pow(aimf,1./3.) + std::pow(af,1./3.)); 2190 ftype = 22; << 1851 2191 // Lambda particles << 1852 JPRFHEAVY = jprf1 * 0.4 * 931.49 * 1.16*1.16 * std::pow(af,5.0/3.0) / IINERTTOT; 2192 G4int NbLamH1 = 0; << 1853 JPRFLIGHT = jprf1 * 0.4 * 931.49 * 1.16*1.16 * std::pow(aimf,5.0/3.0) / IINERTTOT; 2193 G4int NbLamimf1 = 0; << 1854 2194 G4double pbH1 = (af - zf) / (af - << 1855 G4double zffs=0.,affs=0.,vx1ev_imfs=0.,vy1ev_imfs=0.,vz1ev_imfs=0.,jprf3=0.; 2195 for (G4int i = 0; i < NbLamH; i++ << 1856 2196 { << 1857 evapora(zf,af,&EEIMFP,JPRFHEAVY, &zffs, &affs, &mtota, &vz1ev_imfs, &vx1ev_imfs,&vy1ev_imfs, &FF11, &FIMF11, &zdummy, &adummy,&tkedummy, &jprf3, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamH1); 2197 if (G4AblaRandom::flat() < pb << 1858 2198 { << 1859 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 2199 NbLamH1++; << 1860 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 2200 } << 1861 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 2201 else << 1862 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 2202 { << 1863 // 2203 NbLamimf1++; << 1864 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 2204 } << 1865 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 2205 } << 1866 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 2206 // << 1867 // Lorentz transformation 2207 // Velocities of IMF and partner: << 1868 lorentz_boost(VFP1_CM[0],VFP1_CM[1],VFP1_CM[2], 2208 EkinR1 = tkeimf * aimf / (af + ai << 1869 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 2209 EkinR2 = tkeimf * af / (af + aimf << 1870 &VXOUT,&VYOUT,&VZOUT); 2210 V1 = std::sqrt(EkinR1 / af) * 1.3 << 1871 lorentz_boost(vx1ev_imfs,vy1ev_imfs,vz1ev_imfs, 2211 V2 = std::sqrt(EkinR2 / aimf) * 1 << 1872 VXOUT,VYOUT,VZOUT, 2212 G4double VZ1_IMFS = (2.0 * G4Abla << 1873 &VX2OUT,&VY2OUT,&VZ2OUT); 2213 VPERP1 = std::sqrt(V1 * V1 - VZ1_ << 1874 EV_TAB[IJ+IEV_TAB][2] = VX2OUT; 2214 ALPHA1 = G4AblaRandom::flat() * 2 << 1875 EV_TAB[IJ+IEV_TAB][3] = VY2OUT; 2215 G4double VX1_IMFS = VPERP1 * std: << 1876 EV_TAB[IJ+IEV_TAB][4] = VZ2OUT; 2216 G4double VY1_IMFS = VPERP1 * std: << 1877 } 2217 G4double VX2_IMFS = -VX1_IMFS / V << 1878 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 2218 G4double VY2_IMFS = -VY1_IMFS / V << 1879 2219 G4double VZ2_IMFS = -VZ1_IMFS / V << 1880 // For IMF - fission and IMF emission are not allowed 2220 << 1881 opt->optimfallowed = 0; // IMF is not allowed 2221 EEIMFP = ee * af / (af + aimf); << 1882 fiss->ifis = 0; // fission is not allowed 2222 EEIMF = ee * aimf / (af + aimf); << 1883 // 2223 << 1884 FF22 = 0; 2224 // Decay of heavy partner << 1885 FIMF22 = 0; 2225 IINERTTOT = 0.40 * 931.490 * 1.16 << 1886 // Decay of "second" IMF 2226 931.490 * 1.160 * 1.1 << 1887 G4double zffimfs=0.,affimfs=0.,vx2ev_imfs=0.,vy2ev_imfs=0.,vz2ev_imfs=0.,jprf4=0.; 2227 (std::pow(aimf, 1 << 1888 2228 (std::pow(aimf, 1 << 1889 evapora(zimf,aimf,&EEIMF,JPRFLIGHT, &zffimfs, &affimfs, &mtota, &vz2ev_imfs, &vx2ev_imfs,&vy2ev_imfs, &FF22, &FIMF22, &zdummy1, &adummy1,&tkedummy1, &jprf4, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamimf1); 2229 << 1890 2230 JPRFHEAVY = jprf1 * 0.4 * 931.49 << 1891 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 2231 JPRFLIGHT = jprf1 * 0.4 * 931.49 << 1892 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 2232 << 1893 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 2233 G4double zffs = 0., affs = 0., vx << 1894 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 2234 << 1895 // 2235 evapora(zf, << 1896 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 2236 af, << 1897 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 2237 &EEIMFP, << 1898 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 2238 JPRFHEAVY, << 1899 // Lorentz transformation 2239 &zffs, << 1900 lorentz_boost(VFP1_CM[0],VFP1_CM[1],VFP1_CM[2], 2240 &affs, << 1901 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 2241 &mtota, << 1902 &VXOUT,&VYOUT,&VZOUT); 2242 &vz1ev_imfs, << 1903 lorentz_boost(vx2ev_imfs,vy2ev_imfs,vz2ev_imfs, 2243 &vx1ev_imfs, << 1904 VXOUT,VYOUT,VZOUT, 2244 &vy1ev_imfs, << 1905 &VX2OUT,&VY2OUT,&VZ2OUT); 2245 &FF11, << 1906 EV_TAB[IJ+IEV_TAB][2] = VX2OUT; 2246 &FIMF11, << 1907 EV_TAB[IJ+IEV_TAB][3] = VY2OUT; 2247 &zdummy, << 1908 EV_TAB[IJ+IEV_TAB][4] = VZ2OUT; 2248 &adummy, << 1909 } 2249 &tkedummy, << 1910 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 2250 &jprf3, << 1911 2251 &inttype, << 1912 AFP1 = idnint(affs); 2252 &inum, << 1913 ZFP1 = idnint(zffs); 2253 EV_TEMP, << 1914 SFP1 = NbLamH1; 2254 &IEV_TAB_TEMP, << 1915 ZFP2 = idnint(zffimfs); 2255 &NbLamH1); << 1916 AFP2 = idnint(affimfs); 2256 << 1917 SFP2 = NbLamimf1; 2257 for (G4int IJ = 0; IJ < IEV_TAB_T << 1918 2258 { << 1919 // Velocity of final heavy residue 2259 EV_TAB[IJ + IEV_TAB][0] = EV_ << 1920 // Lorentz kinematics 2260 EV_TAB[IJ + IEV_TAB][1] = EV_ << 1921 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF 2261 EV_TAB[IJ + IEV_TAB][5] = EV_ << 1922 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF 2262 // << 1923 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF 2263 // EV_TAB(IJ+IE << 1924 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, 2264 // EV_TAB(IJ+IE << 1925 V_CM[0],V_CM[1],V_CM[2], 2265 // EV_TAB(IJ+IE << 1926 &VXOUT,&VYOUT,&VZOUT); 2266 // Lorentz transformation << 1927 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, 2267 lorentz_boost(VFP1_CM[0], << 1928 VXOUT,VYOUT,VZOUT, 2268 VFP1_CM[1], << 1929 &VX2OUT,&VY2OUT,&VZ2OUT); 2269 VFP1_CM[2], << 1930 lorentz_boost(VX1_IMFS,VY1_IMFS,VZ1_IMFS, 2270 EV_TEMP[IJ][2], << 1931 VX2OUT,VY2OUT,VZ2OUT, 2271 EV_TEMP[IJ][3], << 1932 &VXOUT,&VYOUT,&VZOUT); 2272 EV_TEMP[IJ][4], << 1933 lorentz_boost(vx1ev_imfs,vy1ev_imfs,vz1ev_imfs, 2273 &VXOUT, << 1934 VXOUT,VYOUT,VZOUT, 2274 &VYOUT, << 1935 &VX2OUT,&VY2OUT,&VZ2OUT); 2275 &VZOUT); << 1936 VFP1_CM[0] = VX2OUT; 2276 lorentz_boost(vx1ev_imfs, vy1 << 1937 VFP1_CM[1] = VY2OUT; 2277 EV_TAB[IJ + IEV_TAB][2] = VX2 << 1938 VFP1_CM[2] = VZ2OUT; 2278 EV_TAB[IJ + IEV_TAB][3] = VY2 << 2279 EV_TAB[IJ + IEV_TAB][4] = VZ2 << 2280 } << 2281 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; << 2282 1939 2283 // For IMF - fission and IMF emis << 1940 // Velocity of the second IMF 2284 opt->optimfallowed = 0; // IMF i << 1941 // Lorentz kinematics 2285 fiss->ifis = 0; // fissi << 1942 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF 2286 // << 1943 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF 2287 FF22 = 0; << 1944 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF 2288 FIMF22 = 0; << 1945 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, 2289 // Decay of "second" IMF << 1946 V_CM[0],V_CM[1],V_CM[2], 2290 G4double zffimfs = 0., affimfs = << 1947 &VXOUT,&VYOUT,&VZOUT); 2291 << 1948 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, 2292 evapora(zimf, << 1949 VXOUT,VYOUT,VZOUT, 2293 aimf, << 1950 &VX2OUT,&VY2OUT,&VZ2OUT); 2294 &EEIMF, << 1951 lorentz_boost(VX2_IMFS,VY2_IMFS,VZ2_IMFS, 2295 JPRFLIGHT, << 1952 VX2OUT,VY2OUT,VZ2OUT, 2296 &zffimfs, << 1953 &VXOUT,&VYOUT,&VZOUT); 2297 &affimfs, << 1954 lorentz_boost(vx2ev_imfs,vy2ev_imfs,vz2ev_imfs, 2298 &mtota, << 1955 VXOUT,VYOUT,VZOUT, 2299 &vz2ev_imfs, << 1956 &VX2OUT,&VY2OUT,&VZ2OUT); 2300 &vx2ev_imfs, << 1957 VFP2_CM[0] = VX2OUT; 2301 &vy2ev_imfs, << 1958 VFP2_CM[1] = VY2OUT; 2302 &FF22, << 1959 VFP2_CM[2] = VZ2OUT; 2303 &FIMF22, << 1960 }//second decay 2304 &zdummy1, << 1961 }// if(ftype == 2) 2305 &adummy1, << 2306 &tkedummy1, << 2307 &jprf4, << 2308 &inttype, << 2309 &inum, << 2310 EV_TEMP, << 2311 &IEV_TAB_TEMP, << 2312 &NbLamimf1); << 2313 << 2314 for (G4int IJ = 0; IJ < IEV_TAB_T << 2315 { << 2316 EV_TAB[IJ + IEV_TAB][0] = EV_ << 2317 EV_TAB[IJ + IEV_TAB][1] = EV_ << 2318 EV_TAB[IJ + IEV_TAB][5] = EV_ << 2319 // << 2320 // EV_TAB(IJ+IE << 2321 // EV_TAB(IJ+IE << 2322 // EV_TAB(IJ+IE << 2323 // Lorentz transformation << 2324 lorentz_boost(VFP1_CM[0], << 2325 VFP1_CM[1], << 2326 VFP1_CM[2], << 2327 EV_TEMP[IJ][2], << 2328 EV_TEMP[IJ][3], << 2329 EV_TEMP[IJ][4], << 2330 &VXOUT, << 2331 &VYOUT, << 2332 &VZOUT); << 2333 lorentz_boost(vx2ev_imfs, vy2 << 2334 EV_TAB[IJ + IEV_TAB][2] = VX2 << 2335 EV_TAB[IJ + IEV_TAB][3] = VY2 << 2336 EV_TAB[IJ + IEV_TAB][4] = VZ2 << 2337 } << 2338 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; << 2339 1962 2340 AFP1 = idnint(affs); << 1963 // Only evaporation of light particles 2341 ZFP1 = idnint(zffs); << 1964 if(ftype!=1 && ftype!=21){ 2342 SFP1 = NbLamH1; << 2343 ZFP2 = idnint(zffimfs); << 2344 AFP2 = idnint(affimfs); << 2345 SFP2 = NbLamimf1; << 2346 << 2347 // Velocity of final heavy residu << 2348 // Lorentz kinematics << 2349 // VFP1_CM(1) = V_CM(1) + V << 2350 // VFP1_CM(2) = V_CM(2) + V << 2351 // VFP1_CM(3) = V_CM(3) + V << 2352 lorentz_boost(VX1_IMF, VY1_IMF, V << 2353 lorentz_boost(vx1ev_imf, vy1ev_im << 2354 lorentz_boost(VX1_IMFS, VY1_IMFS, << 2355 lorentz_boost(vx1ev_imfs, vy1ev_i << 2356 VFP1_CM[0] = VX2OUT; << 2357 VFP1_CM[1] = VY2OUT; << 2358 VFP1_CM[2] = VZ2OUT; << 2359 << 2360 // Velocity of the second IMF << 2361 // Lorentz kinematics << 2362 // VFP1_CM(1) = V_CM(1) + V << 2363 // VFP1_CM(2) = V_CM(2) + V << 2364 // VFP1_CM(3) = V_CM(3) + V << 2365 lorentz_boost(VX1_IMF, VY1_IMF, V << 2366 lorentz_boost(vx1ev_imf, vy1ev_im << 2367 lorentz_boost(VX2_IMFS, VY2_IMFS, << 2368 lorentz_boost(vx2ev_imfs, vy2ev_i << 2369 VFP2_CM[0] = VX2OUT; << 2370 VFP2_CM[1] = VY2OUT; << 2371 VFP2_CM[2] = VZ2OUT; << 2372 } // second decay << 2373 } // if(ftype == 2) << 2374 << 2375 // Only evaporation of light particles << 2376 if (ftype != 1 && ftype != 21) << 2377 { << 2378 << 2379 // ----------- RESOLVE UNSTABLE NUCLE << 2380 IOUNSTABLE = 0; << 2381 << 2382 unstable_nuclei(AFP1, << 2383 ZFP1, << 2384 &afpnew, << 2385 &zfpnew, << 2386 IOUNSTABLE, << 2387 VFP1_CM[0], << 2388 VFP1_CM[1], << 2389 VFP1_CM[2], << 2390 &VP1X, << 2391 &VP1Y, << 2392 &VP1Z, << 2393 EV_TAB_TEMP, << 2394 &ILOOP); << 2395 << 2396 if (IOUNSTABLE == 1) << 2397 { << 2398 AFP1 = afpnew; << 2399 ZFP1 = zfpnew; << 2400 VFP1_CM[0] = VP1X; << 2401 VFP1_CM[1] = VP1Y; << 2402 VFP1_CM[2] = VP1Z; << 2403 for (G4int I = 0; I < ILOOP; I++) << 2404 { << 2405 for (G4int IJ = 0; IJ < 5; IJ << 2406 EV_TAB[I + IEV_TAB][IJ] = << 2407 } << 2408 IEV_TAB = IEV_TAB + ILOOP; << 2409 } << 2410 1965 2411 if (ftype > 1) << 1966 // ----------- RESOLVE UNSTABLE NUCLEI 2412 { << 1967 IOUNSTABLE=0; 2413 IOUNSTABLE = 0; << 2414 << 2415 unstable_nuclei(AFPIMF, << 2416 ZFPIMF, << 2417 &afpnew, << 2418 &zfpnew, << 2419 IOUNSTABLE, << 2420 VIMF_CM[0], << 2421 VIMF_CM[1], << 2422 VIMF_CM[2], << 2423 &VP1X, << 2424 &VP1Y, << 2425 &VP1Z, << 2426 EV_TAB_TEMP, << 2427 &ILOOP); << 2428 << 2429 if (IOUNSTABLE == 1) << 2430 { << 2431 AFPIMF = afpnew; << 2432 ZFPIMF = zfpnew; << 2433 VIMF_CM[0] = VP1X; << 2434 VIMF_CM[1] = VP1Y; << 2435 VIMF_CM[2] = VP1Z; << 2436 for (G4int I = 0; I < ILOOP; << 2437 { << 2438 for (G4int IJ = 0; IJ < 5 << 2439 EV_TAB[I + IEV_TAB][I << 2440 } << 2441 IEV_TAB = IEV_TAB + ILOOP; << 2442 } << 2443 1968 2444 if (ftype > 2) << 1969 unstable_nuclei(AFP1,ZFP1,&afpnew,&zfpnew,IOUNSTABLE, 2445 { << 1970 VFP1_CM[0],VFP1_CM[1],VFP1_CM[2], 2446 IOUNSTABLE = 0; << 1971 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 2447 << 1972 2448 unstable_nuclei(AFP2, << 1973 if(IOUNSTABLE==1){ 2449 ZFP2, << 1974 AFP1 = afpnew; 2450 &afpnew, << 1975 ZFP1 = zfpnew; 2451 &zfpnew, << 1976 VFP1_CM[0] = VP1X; 2452 IOUNSTABLE, << 1977 VFP1_CM[1] = VP1Y; 2453 VFP2_CM[0], << 1978 VFP1_CM[2] = VP1Z; 2454 VFP2_CM[1], << 1979 for(G4int I = 0;I<ILOOP;I++){ 2455 VFP2_CM[2], << 1980 for(G4int IJ = 0; IJ<5; IJ++) 2456 &VP1X, << 1981 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 2457 &VP1Y, << 1982 } 2458 &VP1Z, << 1983 IEV_TAB = IEV_TAB + ILOOP; 2459 EV_TAB_TEMP, << 1984 } 2460 &ILOOP); << 2461 << 2462 if (IOUNSTABLE == 1) << 2463 { << 2464 AFP2 = afpnew; << 2465 ZFP2 = zfpnew; << 2466 VFP2_CM[0] = VP1X; << 2467 VFP2_CM[1] = VP1Y; << 2468 VFP2_CM[2] = VP1Z; << 2469 for (G4int I = 0; I < ILO << 2470 { << 2471 for (G4int IJ = 0; IJ << 2472 EV_TAB[I + IEV_TA << 2473 } << 2474 IEV_TAB = IEV_TAB + ILOOP << 2475 } << 2476 } // ftype>2 << 2477 } // ftype>1 << 2478 } << 2479 1985 2480 // For the case of fission: << 1986 if(ftype>1){ 2481 if (ftype == 1 || ftype == 21) << 1987 IOUNSTABLE=0; 2482 { << 2483 // ----------- RESOLVE UNSTABLE NUCLE << 2484 IOUNSTABLE = 0; << 2485 // ----------- Fragment 1 << 2486 unstable_nuclei(AFP1, << 2487 ZFP1, << 2488 &afpnew, << 2489 &zfpnew, << 2490 IOUNSTABLE, << 2491 VFP1_CM[0], << 2492 VFP1_CM[1], << 2493 VFP1_CM[2], << 2494 &VP1X, << 2495 &VP1Y, << 2496 &VP1Z, << 2497 EV_TAB_TEMP, << 2498 &ILOOP); << 2499 << 2500 if (IOUNSTABLE == 1) << 2501 { << 2502 AFP1 = afpnew; << 2503 ZFP1 = zfpnew; << 2504 VFP1_CM[0] = VP1X; << 2505 VFP1_CM[1] = VP1Y; << 2506 VFP1_CM[2] = VP1Z; << 2507 for (G4int I = 0; I < ILOOP; I++) << 2508 { << 2509 for (G4int IJ = 0; IJ < 5; IJ << 2510 EV_TAB[I + IEV_TAB][IJ] = << 2511 } << 2512 IEV_TAB = IEV_TAB + ILOOP; << 2513 } << 2514 1988 2515 IOUNSTABLE = 0; << 1989 unstable_nuclei(AFPIMF,ZFPIMF,&afpnew,&zfpnew,IOUNSTABLE, 2516 // ----------- Fragment 2 << 1990 VIMF_CM[0],VIMF_CM[1],VIMF_CM[2], 2517 unstable_nuclei(AFP2, << 1991 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 2518 ZFP2, << 1992 2519 &afpnew, << 1993 if(IOUNSTABLE==1){ 2520 &zfpnew, << 1994 AFPIMF = afpnew; 2521 IOUNSTABLE, << 1995 ZFPIMF = zfpnew; 2522 VFP2_CM[0], << 1996 VIMF_CM[0] = VP1X; 2523 VFP2_CM[1], << 1997 VIMF_CM[1] = VP1Y; 2524 VFP2_CM[2], << 1998 VIMF_CM[2] = VP1Z; 2525 &VP1X, << 1999 for(G4int I = 0;I<ILOOP;I++){ 2526 &VP1Y, << 2000 for(G4int IJ = 0; IJ<5; IJ++) 2527 &VP1Z, << 2001 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 2528 EV_TAB_TEMP, << 2002 } 2529 &ILOOP); << 2003 IEV_TAB = IEV_TAB + ILOOP; 2530 << 2531 if (IOUNSTABLE == 1) << 2532 { << 2533 AFP2 = afpnew; << 2534 ZFP2 = zfpnew; << 2535 VFP2_CM[0] = VP1X; << 2536 VFP2_CM[1] = VP1Y; << 2537 VFP2_CM[2] = VP1Z; << 2538 for (G4int I = 0; I < ILOOP; I++) << 2539 { << 2540 for (G4int IJ = 0; IJ < 5; IJ << 2541 EV_TAB[I + IEV_TAB][IJ] = << 2542 } << 2543 IEV_TAB = IEV_TAB + ILOOP; << 2544 } 2004 } 2545 2005 2546 if (ftype == 21) << 2006 if(ftype>2){ 2547 { << 2007 IOUNSTABLE=0; 2548 IOUNSTABLE = 0; << 2008 2549 // ----------- Fragment IMF << 2009 unstable_nuclei(AFP2,ZFP2,&afpnew,&zfpnew,IOUNSTABLE, 2550 unstable_nuclei(AFPIMF, << 2010 VFP2_CM[0],VFP2_CM[1],VFP2_CM[2], 2551 ZFPIMF, << 2011 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 2552 &afpnew, << 2012 2553 &zfpnew, << 2013 if(IOUNSTABLE==1){ 2554 IOUNSTABLE, << 2014 AFP2 = afpnew; 2555 VIMF_CM[0], << 2015 ZFP2 = zfpnew; 2556 VIMF_CM[1], << 2016 VFP2_CM[0] = VP1X; 2557 VIMF_CM[2], << 2017 VFP2_CM[1] = VP1Y; 2558 &VP1X, << 2018 VFP2_CM[2] = VP1Z; 2559 &VP1Y, << 2019 for(G4int I = 0;I<ILOOP;I++){ 2560 &VP1Z, << 2020 for(G4int IJ = 0; IJ<5; IJ++) 2561 EV_TAB_TEMP, << 2021 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 2562 &ILOOP); << 2022 } 2563 << 2023 IEV_TAB = IEV_TAB + ILOOP; 2564 if (IOUNSTABLE == 1) << 2024 } 2565 { << 2025 }// ftype>2 2566 AFPIMF = afpnew; << 2026 }// ftype>1 2567 ZFPIMF = zfpnew; << 2568 VIMF_CM[0] = VP1X; << 2569 VIMF_CM[1] = VP1Y; << 2570 VIMF_CM[2] = VP1Z; << 2571 for (G4int I = 0; I < ILOOP; << 2572 { << 2573 for (G4int IJ = 0; IJ < 5 << 2574 EV_TAB[I + IEV_TAB][I << 2575 } << 2576 IEV_TAB = IEV_TAB + ILOOP; << 2577 } << 2578 } // ftype=21 << 2579 } 2027 } 2580 2028 2581 // Cross check << 2029 2582 if ((ftype == 1 || ftype == 21) && (AFP2 << 2030 // For the case of fission: 2583 { << 2031 if(ftype==1 || ftype==21){ 2584 std::cout << "ZFP1:" << ZFP1 << std:: << 2032 // ----------- RESOLVE UNSTABLE NUCLEI 2585 std::cout << "AFP1:" << AFP1 << std:: << 2033 IOUNSTABLE=0; 2586 std::cout << "ZFP2:" << ZFP2 << std:: << 2034 // ----------- Fragment 1 2587 std::cout << "AFP2:" << AFP2 << std:: << 2035 unstable_nuclei(AFP1,ZFP1,&afpnew,&zfpnew,IOUNSTABLE, 2588 } << 2036 VFP1_CM[0],VFP1_CM[1],VFP1_CM[2], 2589 << 2037 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 2590 // Put heavy residues in the EV_TAB a << 2038 2591 EV_TAB[IEV_TAB][0] = ZFP1; << 2039 if(IOUNSTABLE==1){ 2592 EV_TAB[IEV_TAB][1] = AFP1; << 2040 AFP1 = afpnew; 2593 EV_TAB[IEV_TAB][5] = SFP1; << 2041 ZFP1 = zfpnew; 2594 EV_TAB[IEV_TAB][2] = VFP1_CM[0]; << 2042 VFP1_CM[0] = VP1X; 2595 EV_TAB[IEV_TAB][3] = VFP1_CM[1]; << 2043 VFP1_CM[1] = VP1Y; 2596 EV_TAB[IEV_TAB][4] = VFP1_CM[2]; << 2044 VFP1_CM[2] = VP1Z; 2597 IEV_TAB = IEV_TAB + 1; << 2045 for(G4int I = 0;I<ILOOP;I++){ 2598 << 2046 for(G4int IJ = 0; IJ<5; IJ++) 2599 if (AFP2 > 0) << 2047 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 2600 { << 2048 } 2601 EV_TAB[IEV_TAB][0] = ZFP2; << 2049 IEV_TAB = IEV_TAB + ILOOP; 2602 EV_TAB[IEV_TAB][1] = AFP2; << 2050 } 2603 EV_TAB[IEV_TAB][5] = SFP2; << 2051 2604 EV_TAB[IEV_TAB][2] = VFP2_CM[0]; << 2052 IOUNSTABLE=0; 2605 EV_TAB[IEV_TAB][3] = VFP2_CM[1]; << 2053 // ----------- Fragment 2 2606 EV_TAB[IEV_TAB][4] = VFP2_CM[2]; << 2054 unstable_nuclei(AFP2,ZFP2,&afpnew,&zfpnew,IOUNSTABLE, 2607 IEV_TAB = IEV_TAB + 1; << 2055 VFP2_CM[0],VFP2_CM[1],VFP2_CM[2], 2608 } << 2056 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 2609 << 2057 2610 if (AFPIMF > 0) << 2058 if(IOUNSTABLE==1){ 2611 { << 2059 AFP2 = afpnew; 2612 EV_TAB[IEV_TAB][0] = ZFPIMF; << 2060 ZFP2 = zfpnew; 2613 EV_TAB[IEV_TAB][1] = AFPIMF; << 2061 VFP2_CM[0] = VP1X; 2614 EV_TAB[IEV_TAB][5] = SFPIMF; << 2062 VFP2_CM[1] = VP1Y; 2615 EV_TAB[IEV_TAB][2] = VIMF_CM[0]; << 2063 VFP2_CM[2] = VP1Z; 2616 EV_TAB[IEV_TAB][3] = VIMF_CM[1]; << 2064 for(G4int I = 0;I<ILOOP;I++){ 2617 EV_TAB[IEV_TAB][4] = VIMF_CM[2]; << 2065 for(G4int IJ = 0; IJ<5; IJ++) 2618 IEV_TAB = IEV_TAB + 1; << 2066 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; >> 2067 } >> 2068 IEV_TAB = IEV_TAB + ILOOP; >> 2069 } >> 2070 >> 2071 if(ftype==21){ >> 2072 IOUNSTABLE=0; >> 2073 // ----------- Fragment IMF >> 2074 unstable_nuclei(AFPIMF,ZFPIMF,&afpnew,&zfpnew,IOUNSTABLE, >> 2075 VIMF_CM[0],VIMF_CM[1],VIMF_CM[2], >> 2076 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); >> 2077 >> 2078 if(IOUNSTABLE==1){ >> 2079 AFPIMF = afpnew; >> 2080 ZFPIMF = zfpnew; >> 2081 VIMF_CM[0] = VP1X; >> 2082 VIMF_CM[1] = VP1Y; >> 2083 VIMF_CM[2] = VP1Z; >> 2084 for(G4int I = 0;I<ILOOP;I++){ >> 2085 for(G4int IJ = 0; IJ<5; IJ++) >> 2086 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; >> 2087 } >> 2088 IEV_TAB = IEV_TAB + ILOOP; >> 2089 } >> 2090 }// ftype=21 2619 } 2091 } 2620 // Put the array of particles in the root << 2092 2621 FillData(IMULTBU, IEV_TAB); << 2093 // Cross check 2622 return; << 2094 if((ftype == 1 || ftype == 21) && (AFP2<=0 || AFP1<=0 || ZFP2<=0 || ZFP1<=0)){ >> 2095 std::cout << "ZFP1:" << ZFP1 << std::endl; >> 2096 std::cout << "AFP1:" << AFP1 << std::endl; >> 2097 std::cout << "ZFP2:" << ZFP2 << std::endl; >> 2098 std::cout << "AFP2:" << AFP2 << std::endl; >> 2099 } >> 2100 >> 2101 // Put heavy residues in the EV_TAB array >> 2102 EV_TAB[IEV_TAB][0] = ZFP1; >> 2103 EV_TAB[IEV_TAB][1] = AFP1; >> 2104 EV_TAB[IEV_TAB][5] = SFP1; >> 2105 EV_TAB[IEV_TAB][2] = VFP1_CM[0]; >> 2106 EV_TAB[IEV_TAB][3] = VFP1_CM[1]; >> 2107 EV_TAB[IEV_TAB][4] = VFP1_CM[2]; >> 2108 IEV_TAB = IEV_TAB + 1; >> 2109 >> 2110 if(AFP2>0){ >> 2111 EV_TAB[IEV_TAB][0] = ZFP2; >> 2112 EV_TAB[IEV_TAB][1] = AFP2; >> 2113 EV_TAB[IEV_TAB][5] = SFP2; >> 2114 EV_TAB[IEV_TAB][2] = VFP2_CM[0]; >> 2115 EV_TAB[IEV_TAB][3] = VFP2_CM[1]; >> 2116 EV_TAB[IEV_TAB][4] = VFP2_CM[2]; >> 2117 IEV_TAB = IEV_TAB + 1; >> 2118 } >> 2119 >> 2120 if(AFPIMF>0){ >> 2121 EV_TAB[IEV_TAB][0] = ZFPIMF; >> 2122 EV_TAB[IEV_TAB][1] = AFPIMF; >> 2123 EV_TAB[IEV_TAB][5] = SFPIMF; >> 2124 EV_TAB[IEV_TAB][2] = VIMF_CM[0]; >> 2125 EV_TAB[IEV_TAB][3] = VIMF_CM[1]; >> 2126 EV_TAB[IEV_TAB][4] = VIMF_CM[2]; >> 2127 IEV_TAB = IEV_TAB + 1; >> 2128 } >> 2129 // Put the array of particles in the root file of INCL >> 2130 FillData(IMULTBU,IEV_TAB); >> 2131 return; 2623 } 2132 } 2624 2133 2625 // Evaporation code 2134 // Evaporation code 2626 void G4Abla::initEvapora() 2135 void G4Abla::initEvapora() 2627 { 2136 { 2628 2137 2629 // 40 C BFPRO,S << 2138 // 40 C BFPRO,SNPRO,SPPRO,SHELL 2630 // 41 C << 2139 // 41 C 2631 // 42 C AP,ZP,AT,ZT - PROJECTIL << 2140 // 42 C AP,ZP,AT,ZT - PROJECTILE AND TARGET MASSES 2632 // 43 C EAP,BETA - BEAM ENER << 2141 // 43 C EAP,BETA - BEAM ENERGY PER NUCLEON, V/C 2633 // 44 C BMAXNUC - MAX. IMPA << 2142 // 44 C BMAXNUC - MAX. IMPACT PARAMETER FOR NUCL. REAC. 2634 // 45 C CRTOT,CRNUC - TOTAL AND << 2143 // 45 C CRTOT,CRNUC - TOTAL AND NUCLEAR REACTION CROSS SECTION 2635 // 46 C R_0,R_P,R_T, - RADIUS PA << 2144 // 46 C R_0,R_P,R_T, - RADIUS PARAMETER, PROJECTILE+ TARGET RADII 2636 // 47 C IMAX,IRNDM,PI - MAXIMUM N << 2145 // 47 C IMAX,IRNDM,PI - MAXIMUM NUMBER OF EVENTS, DUMMY, 3.141... 2637 // 48 C BFPRO - FISSION B << 2146 // 48 C BFPRO - FISSION BARRIER OF THE PROJECTILE 2638 // 49 C SNPRO - NEUTRON S << 2147 // 49 C SNPRO - NEUTRON SEPARATION ENERGY OF THE PROJECTILE 2639 // PROJECTILE 50 C SPPRO << 2148 // 50 C SPPRO - PROTON " " " " " 2640 // 51 C SHELL - GROUND ST << 2149 // 51 C SHELL - GROUND STATE SHELL CORRECTION 2641 // 52 << 2150 // 52 C--------------------------------------------------------------------- 2642 // C--------------------------------- << 2151 // 53 C 2643 // 53 C << 2152 // 54 C ENERGIES WIDTHS AND CROSS SECTIONS FOR EM EXCITATION 2644 // 54 C ENERGIES WIDTHS AND CROSS << 2153 // 55 C COMMON /EMDPAR/ EGDR,EGQR,FWHMGDR,FWHMGQR,CREMDE1,CREMDE2, 2645 // 55 C COMMON /EMDPAR/ EGDR,EGQR << 2154 // 56 C AE1,BE1,CE1,AE2,BE2,CE2,SR1,SR2,XR 2646 // 56 C AE1,BE1,C << 2155 // 57 C 2647 // 57 C << 2156 // 58 C EGDR,EGQR - MEAN ENERGY OF GDR AND GQR 2648 // 58 C EGDR,EGQR - MEAN EN << 2157 // 59 C FWHMGDR,FWHMGQR - FWHM OF GDR, GQR 2649 // 59 C FWHMGDR,FWHMGQR - FWHM OF << 2158 // 60 C CREMDE1,CREMDE2 - EM CROSS SECTION FOR E1 AND E2 2650 // 60 C CREMDE1,CREMDE2 - EM CROS << 2159 // 61 C AE1,BE1,CE1 - ARRAYS TO CALCULATE 2651 // 61 C AE1,BE1,CE1 - ARRAYS << 2160 // 62 C AE2,BE2,CE2 - THE EXCITATION ENERGY AFTER E.M. EXC. 2652 // 62 C AE2,BE2,CE2 - THE EXC << 2161 // 63 C SR1,SR2,XR - WITH MONTE CARLO 2653 // 63 C SR1,SR2,XR - WITH MO << 2162 // 64 C--------------------------------------------------------------------- 2654 // 64 << 2163 // 65 C 2655 // C--------------------------------- << 2164 // 66 C DEFORMATIONS AND G.S. SHELL EFFECTS 2656 // 65 C << 2165 // 67 C COMMON /ECLD/ ECGNZ,ECFNZ,VGSLD,ALPHA 2657 // 66 C DEFORMATIONS AND G.S. SHE << 2166 // 68 C 2658 // 67 C COMMON /ECLD/ ECGNZ,ECF << 2167 // 69 C ECGNZ - GROUND STATE SHELL CORR. FRLDM FOR A SPHERICAL G.S. 2659 // 68 C << 2168 // 70 C ECFNZ - SHELL CORRECTION FOR THE SADDLE POINT (NOW: == 0) 2660 // 69 C ECGNZ - GROUND STATE SHEL << 2169 // 71 C VGSLD - DIFFERENCE BETWEEN DEFORMED G.S. AND LDM VALUE 2661 // G.S. << 2170 // 72 C ALPHA - ALPHA GROUND STATE DEFORMATION (THIS IS NOT BETA2!) 2662 // 70 C ECFNZ - SHELL CORRECTION << 2171 // 73 C BETA2 = SQRT(5/(4PI)) * ALPHA 2663 // 71 C VGSLD - DIFFERENCE BETWEE << 2172 // 74 C--------------------------------------------------------------------- 2664 // 72 C ALPHA - ALPHA GROUND STAT << 2173 // 75 C 2665 // BETA2!) 73 C BETA2 = S << 2174 // 76 C ARRAYS FOR EXCITATION ENERGY BY STATISTICAL HOLE ENERY MODEL 2666 // C--------------------------------- << 2175 // 77 C COMMON /EENUC/ SHE, XHE 2667 // 75 C << 2176 // 78 C 2668 // 76 C ARRAYS FOR EXCITATION ENE << 2177 // 79 C SHE, XHE - ARRAYS TO CALCULATE THE EXC. ENERGY AFTER 2669 // MODEL 77 C COMMON /EENUC/ SHE << 2178 // 80 C ABRASION BY THE STATISTICAL HOLE ENERGY MODEL 2670 // XHE - ARRAYS TO CALCULATE THE EXC. << 2179 // 81 C--------------------------------------------------------------------- 2671 // THE STATISTICAL HOLE ENERGY MODEL << 2180 // 82 C 2672 // C--------------------------------- << 2181 // 83 C G.S. SHELL EFFECT 2673 // 82 C << 2182 // 84 C COMMON /EC2SUB/ ECNZ 2674 // 83 C G.S. SHELL EFFECT << 2183 // 85 C 2675 // 84 C COMMON /EC2SUB/ ECNZ << 2184 // 86 C ECNZ G.S. SHELL EFFECT FOR THE MASSES (IDENTICAL TO ECGNZ) 2676 // 85 C << 2185 // 87 C--------------------------------------------------------------------- 2677 // 86 C ECNZ G.S. SHELL EFFECT FO << 2186 // 2678 // 87 << 2187 2679 // C--------------------------------- << 2188 G4double MN = 939.5653301; 2680 // << 2189 G4double MP = 938.7829835; 2681 << 2190 2682 G4double MN = 939.5653301; << 2191 #ifdef ABLAXX_IN_GEANT4_MODE 2683 G4double MP = 938.7829835; << 2192 G4AblaDataFile *dataInterface = new G4AblaDataFile(); 2684 << 2193 #else 2685 G4AblaDataFile* dataInterface = new G4Abl << 2194 G4AblaDataFile *dataInterface = new G4AblaDataFile(theConfig); 2686 if (dataInterface->readData() == true) << 2195 #endif 2687 { << 2196 if(dataInterface->readData() == true) { 2688 if (verboseLevel > 0) << 2197 if(verboseLevel > 0) { 2689 { << 2198 // G4cout <<"G4Abla: Datafiles read successfully." << G4endl; 2690 // G4cout <<"G4Abla: Datafiles re << 2199 } 2691 } << 2200 } 2692 } << 2201 else { 2693 else << 2202 // G4Exception("ERROR: Failed to read datafiles."); 2694 { << 2203 } 2695 // G4Exception("ERROR: Failed to r << 2204 2696 } << 2205 for(G4int z = 0; z < 99; z++) { //do 30 z = 0,98,1 2697 << 2206 for(G4int n = 0; n < 154; n++) { //do 31 n = 0,153,1 2698 for (G4int z = 0; z < 99; z++) << 2207 ecld->ecfnz[n][z] = 0.e0; 2699 { // do 30 z = 0,98,1 << 2208 ec2sub->ecnz[n][z] = dataInterface->getEcnz(n,z); 2700 for (G4int n = 0; n < 154; n++) << 2209 ecld->ecgnz[n][z] = dataInterface->getEcnz(n,z); 2701 { // do 31 n = 0,153,1 << 2210 ecld->alpha[n][z] = dataInterface->getAlpha(n,z); 2702 ecld->ecfnz[n][z] = 0.e0; << 2211 ecld->vgsld[n][z] = dataInterface->getVgsld(n,z); 2703 ec2sub->ecnz[n][z] = dataInterfac << 2212 ecld->rms[n][z] = dataInterface->getRms(n,z); 2704 ecld->ecgnz[n][z] = dataInterface << 2213 } 2705 ecld->alpha[n][z] = dataInterface << 2214 } 2706 ecld->vgsld[n][z] = dataInterface << 2215 2707 ecld->rms[n][z] = dataInterface-> << 2216 for(G4int z = 0; z < 137; z++){ 2708 } << 2217 for(G4int n = 0; n < 251; n++){ 2709 } << 2218 ecld->beta2[n][z] = dataInterface->getBeta2(n,z); 2710 << 2219 ecld->beta4[n][z] = dataInterface->getBeta4(n,z); 2711 for (G4int iz = 0; iz < zcolsbeta; iz++) << 2220 } 2712 for (G4int in = 0; in < nrowsbeta; in << 2221 } 2713 { << 2222 2714 ecld->beta2[in][iz] = dataInterfa << 2223 for(G4int z = 0; z < 500; z++) { 2715 ecld->beta4[in][iz] = dataInterfa << 2224 for(G4int a = 0; a < 500; a++) { 2716 } << 2225 pace->dm[z][a] = dataInterface->getPace2(z,a); 2717 << 2226 } 2718 G4double mfrldm[lprows][lpcols]; << 2227 } 2719 // For 2 < Z < 12 we take "experimental" << 2228 2720 // calculated Read FRLDM tables << 2229 2721 for (G4int i = 1; i < lpcols; i++) << 2230 2722 { << 2231 G4double mfrldm[154][13]; 2723 for (G4int j = 1; j < lprows; j++) << 2232 // For 2 < Z < 12 we take "experimental" shell corrections instead of calculated 2724 { << 2233 // Read FRLDM tables 2725 if (dataInterface->getMexpID(j, i << 2234 for(G4int i=1;i<13;i++){ 2726 { << 2235 for(G4int j=1;j<154;j++){ 2727 masses->mexpiop[j][i] = 1; << 2236 if(dataInterface->getMexpID(j,i)==1){ 2728 } << 2237 masses->mexpiop[j][i]=1; 2729 else << 2238 }else{ 2730 { << 2239 masses->mexpiop[j][i]=0; 2731 masses->mexpiop[j][i] = 0; << 2240 } 2732 } << 2241 // LD masses (even-odd effect is later considered according to Ignatyuk) 2733 // LD masses (even-odd effect is << 2242 if(i==0 && j==0) 2734 if (i == 0 && j == 0) << 2243 mfrldm[j][i] = 0.; 2735 mfrldm[j][i] = 0.; << 2244 else 2736 else << 2245 mfrldm[j][i] = MP*i+MN*j+eflmac(i+j,i,1,0); 2737 mfrldm[j][i] = MP * i + MN * << 2246 } 2738 } << 2247 } 2739 } << 2248 2740 << 2249 G4double e0=0.; 2741 for (G4int i = 0; i < lpcols; i++) << 2250 for(G4int i=1;i<13;i++){ 2742 for (G4int j = 0; j < lprows; j++) << 2251 for(G4int j=1;j<154;j++){ 2743 masses->massexp[j][i] = dataInter << 2252 masses->bind[j][i]=0.; 2744 << 2253 if(masses->mexpiop[j][i]==1){ 2745 G4double e0 = 0.; << 2254 if(j<3){ 2746 for (G4int i = 1; i < lpcols; i++) << 2255 2747 { << 2256 ec2sub->ecnz[j][i] = 0.0; 2748 for (G4int j = 1; j < lprows; j++) << 2257 ecld->ecgnz[j][i] = ec2sub->ecnz[j][i]; 2749 { << 2258 masses->bind[j][i] = dataInterface->getMexp(j,i)-MP*i -MN*j; 2750 masses->bind[j][i] = 0.; << 2259 ecld->vgsld[j][i]=0.; 2751 if (masses->mexpiop[j][i] == 1) << 2260 2752 { << 2261 e0=0.; 2753 if (j < 30) << 2262 }else{ 2754 { << 2263 // For these nuclei, we take "experimental" ground-state shell corrections 2755 << 2264 // 2756 ec2sub->ecnz[j][i] = 0.0; << 2265 // Parametrization of CT model by Ignatyuk; note that E0 is shifted to correspond 2757 ecld->ecgnz[j][i] = ec2su << 2266 // to pairing shift in Fermi-gas model (there, energy is shifted taking odd-odd nuclei as bassis) 2758 masses->bind[j][i] = data << 2267 G4double para=0.; 2759 ecld->vgsld[j][i] = 0.; << 2268 parite(j+i,¶); 2760 << 2269 if(para<0.0){ 2761 e0 = 0.; << 2270 // e-o, o-e >> 2271 e0 = 0.285+11.17*std::pow(j+i,-0.464) -0.390-0.00058*(j+i); >> 2272 }else{ >> 2273 G4double parz=0.; >> 2274 parite(i,&parz); >> 2275 if (parz>0.0){ >> 2276 // e-e >> 2277 e0 = 22.34*std::pow(j+i,-0.464)-0.235; >> 2278 }else{ >> 2279 // o-o >> 2280 e0 = 0.0; >> 2281 } >> 2282 } >> 2283 // >> 2284 if((j==i)&&mod(j,2)==1&&mod(i,2)==1){ >> 2285 e0 = e0 - 30.0*(1.0/G4double(j+i)); 2762 } 2286 } 2763 else << 2764 { << 2765 // For these nuclei, we t << 2766 // corrections << 2767 // << 2768 // Parametrization of CT << 2769 // correspond to pairing << 2770 // shifted taking odd-odd << 2771 G4double para = 0.; << 2772 parite(j + i, ¶); << 2773 if (para < 0.0) << 2774 { << 2775 // e-o, o-e << 2776 e0 = 0.285 + 11.17 * << 2777 } << 2778 else << 2779 { << 2780 G4double parz = 0.; << 2781 parite(i, &parz); << 2782 if (parz > 0.0) << 2783 { << 2784 // e-e << 2785 e0 = 22.34 * std: << 2786 } << 2787 else << 2788 { << 2789 // o-o << 2790 // << 2791 // << 2792 e0 = 0.0; << 2793 } << 2794 } << 2795 // << 2796 if ((j == i) && mod(j, 2) << 2797 { << 2798 e0 = e0 - 30.0 * (1.0 << 2799 } << 2800 2287 2801 G4double delta_tot = ec2s << 2288 G4double delta_tot = ec2sub->ecnz[j][i] - ecld->vgsld[j][i]; 2802 ec2sub->ecnz[j][i] = data << 2289 ec2sub->ecnz[j][i] = dataInterface->getMexp(j,i) - (mfrldm[j][i] - e0); 2803 2290 2804 ecld->vgsld[j][i] = max(0 << 2291 ecld->vgsld[j][i] = max(0.0,ec2sub->ecnz[j][i] - delta_tot); 2805 ecld->ecgnz[j][i] = ec2su << 2292 ecld->ecgnz[j][i] = ec2sub->ecnz[j][i]; 2806 2293 2807 } // if j << 2294 }//if j 2808 } // if mexpiop << 2295 }//if mexpiop 2809 } << 2296 } 2810 } << 2297 } 2811 // << 2298 // 2812 delete dataInterface; << 2299 delete dataInterface; 2813 } 2300 } 2814 2301 2815 void G4Abla::SetParametersG4(G4int z, G4int a 2302 void G4Abla::SetParametersG4(G4int z, G4int a) 2816 { 2303 { 2817 // A and Z for the target << 2304 //A and Z for the target 2818 fiss->at = a; << 2305 fiss->at = a; 2819 fiss->zt = z; << 2306 fiss->zt = z; 2820 << 2307 2821 // switch-fission.1=on.0=off << 2308 // shell+pairing.0-1-2-3 for IMFs 2822 fiss->ifis = 1; << 2309 opt->optshpimf = 0; 2823 << 2310 2824 // shell+pairing.0-1-2-3 << 2311 //collective enhancement switched on 1 or off 0 in densn (qr=val or =1.) 2825 fiss->optshp = 3; << 2312 fiss->optcol = 1; 2826 if (fiss->zt < 84 && fiss->zt > 60) << 2313 if(fiss->zt<83 && fiss->zt>56){ 2827 fiss->optshp = 1; << 2314 fiss->optshp = 1; 2828 << 2315 } 2829 // optemd =0,1 0 no emd, 1 incl. emd << 2316 if(fiss->zt<=56){ 2830 opt->optemd = 1; << 2317 fiss->optcol = 0; 2831 // read(10,*,iostat=io) dum(10),optcha << 2318 fiss->optshp = 3; 2832 opt->optcha = 1; << 2319 } 2833 << 2834 // shell+pairing.0-1-2-3 for IMFs << 2835 opt->optshpimf = 0; << 2836 opt->optimfallowed = 1; << 2837 << 2838 // collective enhancement switched on 1 o << 2839 fiss->optcol = 1; << 2840 if (fiss->zt <= 28) << 2841 { << 2842 fiss->optcol = 0; << 2843 fiss->optshp = 0; << 2844 opt->optshpimf = 1; << 2845 } << 2846 else if (fiss->zt <= 58) << 2847 { << 2848 fiss->optcol = 0; << 2849 fiss->optshp = 1; << 2850 opt->optshpimf = 3; << 2851 } << 2852 // collective enhancement parameters << 2853 fiss->ucr = 40.; << 2854 fiss->dcr = 10.; << 2855 << 2856 // switch for temperature constant model << 2857 fiss->optct = 1; << 2858 << 2859 ald->optafan = 0; << 2860 << 2861 // nuclear.viscosity.(beta) << 2862 fiss->bet = 4.5; << 2863 fiss->bethyp = 28.0; << 2864 fiss->optxfis = 3; << 2865 << 2866 // Level density parameters << 2867 ald->av = 0.0730; << 2868 ald->as = 0.0950; << 2869 ald->ak = 0.0000; << 2870 << 2871 // Multi-fragmentation << 2872 T_freeze_out_in = -6.5; << 2873 } 2320 } 2874 2321 2875 void G4Abla::SetParameters() 2322 void G4Abla::SetParameters() 2876 { 2323 { 2877 /* << 2324 /* 2878 C IFIS = INTEGER SWITCH FOR FISSION << 2325 C IFIS = INTEGER SWITCH FOR FISSION 2879 C OPTSHP = INTEGER SWITCH FOR SHELL C << 2326 C OPTSHP = INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY 2880 C =0 NO MICROSCOPIC CORRECTION << 2327 C =0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY 2881 C =1 SHELL , NO PAIRING CORREC << 2328 C =1 SHELL , NO PAIRING CORRECTION 2882 C =2 PAIRING, NO SHELL CORRECT << 2329 C =2 PAIRING, NO SHELL CORRECTION 2883 C =3 SHELL AND PAIRING CORRECT << 2330 C =3 SHELL AND PAIRING CORRECTION IN MASSES AND ENERGY 2884 C OPTCOL =0,1 COLLECTIVE ENHANCEMENT << 2331 C OPTCOL =0,1 COLLECTIVE ENHANCEMENT SWITCHED ON 1 OR OFF 0 IN DENSN 2885 C OPTAFAN=0,1 SWITCH FOR AF/AN = 1 IN << 2332 C OPTAFAN=0,1 SWITCH FOR AF/AN = 1 IN DENSNIV 0 AF/AN>1 1 AF/AN=1 2886 C BET = REAL REDUCED FRICTION CO << 2333 C BET = REAL REDUCED FRICTION COEFFICIENT / 10**(+21) S**(-1) 2887 C OPTXFIS= INTEGER 0,1,2 FOR MYERS & << 2334 C OPTXFIS= INTEGER 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV 2888 C FISSILITY PARAMETER. << 2335 C FISSILITY PARAMETER. 2889 C << 2336 C 2890 C NUCLEAR LEVEL DENSITIES: << 2337 C NUCLEAR LEVEL DENSITIES: 2891 C AV = REAL KOEFFICIENTS FOR CALC << 2338 C AV = REAL KOEFFICIENTS FOR CALCULATION OF A(TILDE) 2892 C AS = REAL LEVEL DENSITY PARAMET << 2339 C AS = REAL LEVEL DENSITY PARAMETER 2893 C AK = REAL << 2340 C AK = REAL 2894 */ << 2341 */ 2895 << 2342 2896 // switch-fission.1=on.0=off << 2343 // switch-fission.1=on.0=off 2897 fiss->ifis = 1; << 2344 fiss->ifis = 1; 2898 << 2345 2899 // shell+pairing.0-1-2-3 << 2346 // shell+pairing.0-1-2-3 2900 fiss->optshp = 3; << 2347 fiss->optshp = 3; 2901 if (fiss->zt < 84 && fiss->zt > 56) << 2348 if(fiss->zt<84 && fiss->zt>56) 2902 fiss->optshp = 1; << 2349 fiss->optshp = 1; 2903 << 2350 2904 // optemd =0,1 0 no emd, 1 incl. emd << 2351 // optemd =0,1 0 no emd, 1 incl. emd 2905 opt->optemd = 1; << 2352 opt->optemd = 1; 2906 // read(10,*,iostat=io) dum(10),optcha << 2353 // read(10,*,iostat=io) dum(10),optcha 2907 opt->optcha = 1; << 2354 opt->optcha = 1; 2908 << 2355 2909 // shell+pairing.0-1-2-3 for IMFs << 2356 // shell+pairing.0-1-2-3 for IMFs 2910 opt->optshpimf = 0; << 2357 opt->optshpimf = 0; 2911 opt->optimfallowed = 1; << 2358 opt->optimfallowed = 1; 2912 << 2359 2913 // nuclear.viscosity.(beta) << 2360 // nuclear.viscosity.(beta) 2914 fiss->bet = 4.5; << 2361 fiss->bet = 4.5; 2915 << 2362 2916 // collective enhancement switched on 1 o << 2363 //collective enhancement switched on 1 or off 0 in densn (qr=val or =1.) 2917 fiss->optcol = 1; << 2364 fiss->optcol = 1; 2918 if (fiss->zt <= 56) << 2365 if(fiss->zt<=56){ 2919 { << 2366 fiss->optcol = 0; 2920 fiss->optcol = 0; << 2367 fiss->optshp = 3; 2921 fiss->optshp = 3; << 2368 } 2922 } << 2369 //collective enhancement parameters 2923 // collective enhancement parameters << 2370 fiss->ucr = 40.; 2924 fiss->ucr = 40.; << 2371 fiss->dcr = 10.; 2925 fiss->dcr = 10.; << 2372 2926 << 2373 // switch for temperature constant model (CTM) 2927 // switch for temperature constant model << 2374 fiss->optct = 1; 2928 fiss->optct = 1; << 2375 2929 << 2376 ald->optafan = 0; 2930 ald->optafan = 0; << 2377 2931 << 2378 ald->av = 0.0730; 2932 ald->av = 0.0730; << 2379 ald->as = 0.0950; 2933 ald->as = 0.0950; << 2380 ald->ak = 0.0000; 2934 ald->ak = 0.0000; << 2381 2935 << 2382 fiss->optxfis = 3; 2936 fiss->optxfis = 3; << 2383 2937 << 2384 // Multi-fragmentation 2938 // Multi-fragmentation << 2385 T_freeze_out_in = -6.5; 2939 T_freeze_out_in = -6.5; << 2386 2940 } << 2387 } 2941 << 2388 2942 void G4Abla::mglw(G4double a, G4double z, G4d << 2389 void G4Abla::mglw(G4double a, G4double z, G4double *el) 2943 { << 2390 { 2944 // MODEL DE LA GOUTTE LIQUIDE DE C. F. WE << 2391 // MODEL DE LA GOUTTE LIQUIDE DE C. F. WEIZSACKER. 2945 // USUALLY AN OBSOLETE OPTION << 2392 // USUALLY AN OBSOLETE OPTION 2946 << 2393 2947 G4double xv = 0.0, xs = 0.0, xc = 0.0, xa << 2394 G4double xv = 0.0, xs = 0.0, xc = 0.0, xa = 0.0; 2948 << 2395 2949 if ((a <= 0.01) || (z < 0.01)) << 2396 if ((a <= 0.01) || (z < 0.01)) { 2950 { << 2397 (*el) = 1.0e38; 2951 (*el) = 1.0e38; << 2398 } 2952 } << 2399 else { 2953 else << 2400 xv = -15.56*a; 2954 { << 2401 xs = 17.23*std::pow(a,(2.0/3.0)); 2955 xv = -15.56 * a; << 2402 2956 xs = 17.23 * std::pow(a, (2.0 / 3.0)) << 2403 if (a > 1.0) { 2957 << 2404 xc = 0.7*z*(z-1.0)*std::pow((a-1.0),(-1.e0/3.e0)); 2958 if (a > 1.0) << 2405 } 2959 { << 2406 else { 2960 xc = 0.7 * z * (z - 1.0) * std::p << 2407 xc = 0.0; 2961 } << 2408 } 2962 else << 2409 } 2963 { << 2410 2964 xc = 0.0; << 2411 xa = 23.6*(std::pow((a-2.0*z),2)/a); 2965 } << 2412 (*el) = xv+xs+xc+xa; 2966 } << 2413 return; 2967 << 2414 } 2968 xa = 23.6 * (std::pow((a - 2.0 * z), 2) / << 2415 2969 (*el) = xv + xs + xc + xa; << 2416 void G4Abla::mglms(G4double a, G4double z, G4int refopt4, G4double *el) >> 2417 { >> 2418 // USING FUNCTION EFLMAC(IA,IZ,0) >> 2419 // >> 2420 // REFOPT4 = 0 : WITHOUT MICROSCOPIC CORRECTIONS >> 2421 // REFOPT4 = 1 : WITH SHELL CORRECTION >> 2422 // REFOPT4 = 2 : WITH PAIRING CORRECTION >> 2423 // REFOPT4 = 3 : WITH SHELL- AND PAIRING CORRECTION >> 2424 >> 2425 // 1839 C----------------------------------------------------------------------- >> 2426 // 1840 C A1 LOCAL MASS NUMBER (INTEGER VARIABLE OF A) >> 2427 // 1841 C Z1 LOCAL NUCLEAR CHARGE (INTEGER VARIABLE OF Z) >> 2428 // 1842 C REFOPT4 OPTION, SPECIFYING THE MASS FORMULA (SEE ABOVE) >> 2429 // 1843 C A MASS NUMBER >> 2430 // 1844 C Z NUCLEAR CHARGE >> 2431 // 1845 C DEL PAIRING CORRECTION >> 2432 // 1846 C EL BINDING ENERGY >> 2433 // 1847 C ECNZ( , ) TABLE OF SHELL CORRECTIONS >> 2434 // 1848 C----------------------------------------------------------------------- >> 2435 // 1849 C >> 2436 G4int a1 = idnint(a); >> 2437 G4int z1 = idnint(z); >> 2438 G4int n1 = a1-z1; >> 2439 >> 2440 if ( (a1 <= 0) || (z1 <= 0) || ((a1-z1) <= 0) ) { //then >> 2441 // modif pour recuperer une masse p et n correcte: >> 2442 (*el) = 1.e38; 2970 return; 2443 return; 2971 } << 2444 // goto mglms50; 2972 << 2445 } 2973 void G4Abla::mglms(G4double a, G4double z, G4 << 2446 else { 2974 { << 2447 // binding energy incl. pairing contr. is calculated from 2975 // USING FUNCTION EFLMAC(IA,IZ,0) << 2448 // function eflmac 2976 // << 2449 (*el) = eflmac(a1,z1,0,refopt4); 2977 // REFOPT4 = 0 : WITHOUT MICROSCOPIC CORR << 2450 2978 // REFOPT4 = 1 : WITH SHELL CORRECTION << 2451 if (refopt4 > 0) { 2979 // REFOPT4 = 2 : WITH PAIRING CORRECTION << 2452 if (refopt4 != 2) { 2980 // REFOPT4 = 3 : WITH SHELL- AND PAIRING << 2453 (*el) = (*el) + ec2sub->ecnz[a1-z1][z1]; 2981 << 2454 } 2982 // 1839 << 2983 // C----------------------------------- << 2984 // 1840 C A1 LOCAL MASS NU << 2985 // 1841 C Z1 LOCAL NUCLEAR << 2986 // 1842 C REFOPT4 OPTION, << 2987 // ABOVE) 1843 C A << 2988 // NUCLEAR CHARGE 1845 C DEL << 2989 // C EL BINDING ENER << 2990 // SHELL CORRECTIONS 1848 << 2991 // C----------------------------------- << 2992 // 1849 C << 2993 G4int a1 = idnint(a); << 2994 G4int z1 = idnint(z); << 2995 G4int n1 = a1 - z1; << 2996 << 2997 if ((a1 <= 0) || (z1 <= 0) || ((a1 - z1) << 2998 { // then << 2999 // modif pour recuperer une masse p e << 3000 (*el) = 1.e38; << 3001 return; << 3002 // goto mglms50; << 3003 } 2455 } 3004 else << 2456 3005 { << 2457 if(z1>=90){ 3006 // binding energy incl. pairing contr << 2458 if(n1<=145){ 3007 // function eflmac << 2459 (*el) = (*el) + (12.552-0.1436*z1); 3008 (*el) = eflmac(a1, z1, 0, refopt4); << 2460 }else{ 3009 << 2461 if(n1>145&&n1<=152){ 3010 if (refopt4 > 0) << 2462 (*el) = (*el) + ((152.4-1.77*z1)+(-0.972+0.0113*z1)*n1); 3011 { << 3012 if (refopt4 != 2) << 3013 { << 3014 (*el) = (*el) + ec2sub->ecnz[ << 3015 } << 3016 } << 3017 << 3018 if (z1 >= 90) << 3019 { << 3020 if (n1 <= 145) << 3021 { << 3022 (*el) = (*el) + (12.552 - 0.1 << 3023 } << 3024 else << 3025 { << 3026 if (n1 > 145 && n1 <= 152) << 3027 { << 3028 (*el) = (*el) + ((152.4 - << 3029 } << 3030 } << 3031 } 2463 } >> 2464 } 3032 } 2465 } 3033 return; << 2466 >> 2467 } >> 2468 return; 3034 } 2469 } 3035 2470 3036 G4double G4Abla::spdef(G4int a, G4int z, G4in 2471 G4double G4Abla::spdef(G4int a, G4int z, G4int optxfis) 3037 { 2472 { 3038 2473 3039 // INPUT: A,Z,OPTXFIS MASS AND CHARGE OF << 2474 // INPUT: A,Z,OPTXFIS MASS AND CHARGE OF A NUCLEUS, 3040 // OPTION FOR FISSILITY << 2475 // OPTION FOR FISSILITY 3041 // OUTPUT: SPDEF << 2476 // OUTPUT: SPDEF 3042 << 2477 3043 // ALPHA2 SADDLE POINT DEF. COHEN&SWIATEC << 2478 // ALPHA2 SADDLE POINT DEF. COHEN&SWIATECKI ANN.PHYS. 22 (1963) 406 3044 // RANGING FROM FISSILITY X=0.30 TO X=1.0 << 2479 // RANGING FROM FISSILITY X=0.30 TO X=1.00 IN STEPS OF 0.02 3045 << 2480 3046 G4int index = 0; << 2481 G4int index = 0; 3047 G4double x = 0.0, v = 0.0, dx = 0.0; << 2482 G4double x = 0.0, v = 0.0, dx = 0.0; 3048 << 2483 3049 const G4int alpha2Size = 37; << 2484 const G4int alpha2Size = 37; 3050 // The value 0.0 at alpha2[0] added by PK << 2485 // The value 0.0 at alpha2[0] added by PK. 3051 G4double alpha2[alpha2Size] = { 0.0, << 2486 G4double alpha2[alpha2Size] = {0.0, 2.5464e0, 2.4944e0, 2.4410e0, 2.3915e0, 2.3482e0, 3052 2.1982e0, << 2487 2.3014e0, 2.2479e0, 2.1982e0, 2.1432e0, 2.0807e0, 2.0142e0, 1.9419e0, 3053 1.6473e0, << 2488 1.8714e0, 1.8010e0, 1.7272e0, 1.6473e0, 1.5601e0, 1.4526e0, 1.3164e0, 3054 0.6360e0, << 2489 1.1391e0, 0.9662e0, 0.8295e0, 0.7231e0, 0.6360e0, 0.5615e0, 0.4953e0, 3055 0.1827e0, << 2490 0.4354e0, 0.3799e0, 0.3274e0, 0.2779e0, 0.2298e0, 0.1827e0, 0.1373e0, >> 2491 0.0901e0, 0.0430e0, 0.0000e0}; >> 2492 >> 2493 dx = 0.02; >> 2494 x = fissility(a,z,0,0.,0.,optxfis); >> 2495 >> 2496 v = (x - 0.3)/dx + 1.0; >> 2497 index = idnint(v); >> 2498 >> 2499 if (index < 1) { >> 2500 return(alpha2[1]); >> 2501 } >> 2502 >> 2503 if (index == 36) { >> 2504 return(alpha2[36]); >> 2505 } >> 2506 else { >> 2507 return(alpha2[index] + (alpha2[index+1] - alpha2[index]) / dx * ( x - (0.3e0 + dx*(index-1)))); >> 2508 } 3056 2509 3057 dx = 0.02; << 2510 return alpha2[0]; // The algorithm is not supposed to reach this point. 3058 x = fissility(a, z, 0, 0., 0., optxfis); << 3059 << 3060 v = (x - 0.3) / dx + 1.0; << 3061 index = idnint(v); << 3062 << 3063 if (index < 1) << 3064 { << 3065 return (alpha2[1]); << 3066 } << 3067 << 3068 if (index == 36) << 3069 { << 3070 return (alpha2[36]); << 3071 } << 3072 else << 3073 { << 3074 return (alpha2[index] + (alpha2[index << 3075 } << 3076 << 3077 return alpha2[0]; // The algorithm is not << 3078 } 2511 } 3079 2512 3080 G4double G4Abla::fissility(G4int a, G4int z, 2513 G4double G4Abla::fissility(G4int a, G4int z, G4int ny, G4double sn, G4double slam, G4int optxfis) 3081 { 2514 { 3082 // CALCULATION OF FISSILITY PARAMETER << 2515 // CALCULATION OF FISSILITY PARAMETER 3083 // << 2516 // 3084 // INPUT: A,Z INTEGER MASS & CHARGE OF NU << 2517 // INPUT: A,Z INTEGER MASS & CHARGE OF NUCLEUS 3085 // OPTXFIS = 0 : MYERS, SWIATECKI << 2518 // OPTXFIS = 0 : MYERS, SWIATECKI 3086 // 1 : DAHLINGER << 2519 // 1 : DAHLINGER 3087 // 2 : ANDREYEV << 2520 // 2 : ANDREYEV 3088 << 2521 3089 G4double aa = 0.0, zz = 0.0, i = 0.0, z2a << 2522 G4double aa = 0.0, zz = 0.0, i = 0.0,z2a,C_S,R,W,G,G1,G2,A_CC; 3090 G4double fissilityResult = 0.0; << 2523 G4double fissilityResult = 0.0; 3091 << 2524 3092 aa = G4double(a); << 2525 aa = G4double(a); 3093 zz = G4double(z); << 2526 zz = G4double(z); 3094 i = G4double(a - 2 * z) / aa; << 2527 i = G4double(a-2*z) / aa; 3095 z2a = zz * zz / aa - ny * (1115. - 939. + << 2528 z2a= zz*zz/aa-ny*(1115.-939.+sn-slam)/(0.7053*std::pow(a,2./3.)); 3096 << 2529 3097 // myers & swiatecki droplet modell << 2530 // myers & swiatecki droplet modell 3098 if (optxfis == 0) << 2531 if (optxfis == 0) { //then 3099 { // then << 2532 fissilityResult = std::pow(zz,2) / aa /50.8830e0 / (1.0e0 - 1.7826e0 * std::pow(i,2)); 3100 fissilityResult = std::pow(zz, 2) / a << 2533 } 3101 } << 2534 3102 << 2535 if (optxfis == 1) { 3103 if (optxfis == 1) << 2536 // dahlinger fit: 3104 { << 2537 fissilityResult = std::pow(zz,2) / aa * std::pow((49.22e0*(1.e0 - 0.3803e0*std::pow(i,2) - 20.489e0*std::pow(i,4))),(-1)); 3105 // dahlinger fit: << 2538 } 3106 fissilityResult = std::pow(zz, 2) / a << 2539 3107 std::pow((49.22e0 * << 2540 if (optxfis == 2) { 3108 } << 2541 // dubna fit: 3109 << 2542 fissilityResult = std::pow(zz,2) / aa /(48.e0*(1.e0 - 17.22e0*std::pow(i,4))); 3110 if (optxfis == 2) << 2543 } 3111 { << 2544 3112 // dubna fit: << 2545 if (optxfis == 3) { 3113 fissilityResult = std::pow(zz, 2) / a << 2546 // Fissiilty is calculated according to FRLDM, see Sierk, PRC 1984. 3114 } << 2547 C_S = 21.13 * (1.0 - 2.3*i*i); 3115 << 2548 R = 1.16 * std::pow(aa,1.0/3.0); 3116 if (optxfis == 3) << 2549 W = 0.704/R; 3117 { << 2550 G1 = 1.0 - 15.0/8.0*W+21.0/8.0*W*W*W; 3118 // Fissiilty is calculated according << 2551 G2 = 1.0 + 9.0/2.0*W + 7.0*W*W + 7.0/2.0*W*W*W; 3119 C_S = 21.13 * (1.0 - 2.3 * i * i); << 2552 G = 1.0 - 5.0*W*W*(G1 - 3.0/4.0*G2*std::exp(-2.0/W)); 3120 R = 1.16 * std::pow(aa, 1.0 / 3.0); << 2553 A_CC = 3.0/5.0 * 1.44 * G / 1.16; 3121 W = 0.704 / R; << 2554 fissilityResult = z2a * A_CC/(2.0*C_S); 3122 G1 = 1.0 - 15.0 / 8.0 * W + 21.0 / 8. << 2555 } 3123 G2 = 1.0 + 9.0 / 2.0 * W + 7.0 * W * << 2556 3124 G = 1.0 - 5.0 * W * W * (G1 - 3.0 / 4 << 2557 if (fissilityResult > 1.0) { 3125 A_CC = 3.0 / 5.0 * 1.44 * G / 1.16; << 2558 fissilityResult = 1.0; 3126 fissilityResult = z2a * A_CC / (2.0 * << 2559 } 3127 } << 2560 3128 << 2561 if (fissilityResult < 0.0) { 3129 if (fissilityResult > 1.0) << 2562 fissilityResult = 0.0; 3130 { << 2563 } 3131 fissilityResult = 1.0; << 2564 3132 } << 2565 return fissilityResult; 3133 << 2566 } 3134 if (fissilityResult < 0.0) << 2567 3135 { << 2568 void G4Abla::evapora(G4double zprf, G4double aprf, G4double *ee_par, G4double jprf_par,G4double *zf_par, G4double *af_par, G4double *mtota_par,G4double *vleva_par, G4double *vxeva_par, G4double *vyeva_par, 3136 fissilityResult = 0.0; << 2569 G4int *ff_par,G4int *fimf_par, G4double *fzimf, G4double *faimf,G4double *tkeimf_par,G4double *jprfout, G4int *inttype_par, G4int *inum_par,G4double EV_TEMP[200][6],G4int *iev_tab_temp_par, G4int *NbLam0_par) 3137 } << 2570 { 3138 << 2571 G4double zf = zprf; 3139 return fissilityResult; << 2572 G4double af = aprf; 3140 } << 2573 G4double ee = (*ee_par); 3141 << 2574 G4double jprf = dint(jprf_par); 3142 void G4Abla::evapora(G4double zprf, << 2575 G4double mtota = (*mtota_par); 3143 G4double aprf, << 2576 G4double vleva = 0.; 3144 G4double* ee_par, << 2577 G4double vxeva = 0.; 3145 G4double jprf_par, << 2578 G4double vyeva = 0.; 3146 G4double* zf_par, << 2579 G4int ff = (*ff_par); 3147 G4double* af_par, << 2580 G4int fimf = (*fimf_par); 3148 G4double* mtota_par, << 2581 G4double tkeimf = (*tkeimf_par); 3149 G4double* vleva_par, << 2582 G4int inttype = (*inttype_par); 3150 G4double* vxeva_par, << 2583 G4int inum = (*inum_par); 3151 G4double* vyeva_par, << 2584 G4int NbLam0 = (*NbLam0_par); 3152 G4int* ff_par, << 2585 3153 G4int* fimf_par, << 2586 // 533 C 3154 G4double* fzimf, << 2587 // 534 C INPUT: 3155 G4double* faimf, << 2588 // 535 C 3156 G4double* tkeimf_par, << 2589 // 536 C ZPRF, APRF, EE(EE IS MODIFIED!), JPRF 3157 G4double* jprfout, << 2590 // 537 C 3158 G4int* inttype_par, << 2591 // 538 C PROJECTILE AND TARGET PARAMETERS + CROSS SECTIONS 3159 G4int* inum_par, << 2592 // 539 C COMMON /ABRAMAIN/ AP,ZP,AT,ZT,EAP,BETA,BMAXNUC,CRTOT,CRNUC, 3160 G4double EV_TEMP[indexpa << 2593 // 540 C R_0,R_P,R_T, IMAX,IRNDM,PI, 3161 G4int* iev_tab_temp_par, << 2594 // 541 C BFPRO,SNPRO,SPPRO,SHELL 3162 G4int* NbLam0_par) << 2595 // 542 C 3163 { << 2596 // 543 C AP,ZP,AT,ZT - PROJECTILE AND TARGET MASSES 3164 G4double zf = zprf; << 2597 // 544 C EAP,BETA - BEAM ENERGY PER NUCLEON, V/C 3165 G4double af = aprf; << 2598 // 545 C BMAXNUC - MAX. IMPACT PARAMETER FOR NUCL. REAC. 3166 G4double ee = (*ee_par); << 2599 // 546 C CRTOT,CRNUC - TOTAL AND NUCLEAR REACTION CROSS SECTION 3167 G4double jprf = dint(jprf_par); << 2600 // 547 C R_0,R_P,R_T, - RADIUS PARAMETER, PROJECTILE+ TARGET RADII 3168 G4double mtota = (*mtota_par); << 2601 // 548 C IMAX,IRNDM,PI - MAXIMUM NUMBER OF EVENTS, DUMMY, 3.141... 3169 G4double vleva = 0.; << 2602 // 549 C BFPRO - FISSION BARRIER OF THE PROJECTILE 3170 G4double vxeva = 0.; << 2603 // 550 C SNPRO - NEUTRON SEPARATION ENERGY OF THE PROJECTILE 3171 G4double vyeva = 0.; << 2604 // 551 C SPPRO - PROTON " " " " " 3172 G4int ff = (*ff_par); << 2605 // 552 C SHELL - GROUND STATE SHELL CORRECTION 3173 G4int fimf = (*fimf_par); << 2606 // 553 C 3174 G4double tkeimf = (*tkeimf_par); << 2607 // 554 C--------------------------------------------------------------------- 3175 G4int inttype = (*inttype_par); << 2608 // 555 C FISSION BARRIERS 3176 G4int inum = (*inum_par); << 2609 // 556 C COMMON /FB/ EFA 3177 G4int NbLam0 = (*NbLam0_par); << 2610 // 557 C EFA - ARRAY OF FISSION BARRIERS 3178 << 2611 // 558 C--------------------------------------------------------------------- 3179 // 533 C << 2612 // 559 C OUTPUT: 3180 // 534 C INPUT: << 2613 // 560 C ZF, AF, MTOTA, PLEVA, PTEVA, FF, INTTYPE, INUM 3181 // 535 C << 2614 // 561 C 3182 // 536 C ZPRF, APRF, EE(EE IS MODI << 2615 // 562 C ZF,AF - CHARGE AND MASS OF FINAL FRAGMENT AFTER EVAPORATION 3183 // 537 C << 2616 // 563 C MTOTA _ NUMBER OF EVAPORATED ALPHAS 3184 // 538 C PROJECTILE AND TARGET PAR << 2617 // 564 C PLEVA,PXEVA,PYEVA - MOMENTUM RECOIL BY EVAPORATION 3185 // 539 C COMMON /ABRAMAIN/ << 2618 // 565 C INTTYPE - TYPE OF REACTION 0/1 NUCLEAR OR ELECTROMAGNETIC 3186 // AP,ZP,AT,ZT,EAP,BETA,BMAXNUC,CRTOT, << 2619 // 566 C FF - 0/1 NO FISSION / FISSION EVENT 3187 // IMAX,IRNDM,PI, 541 C << 2620 // 567 C INUM - EVENTNUMBER 3188 // 542 C << 2621 // 568 C ____________________________________________________________________ 3189 // 543 C AP,ZP,AT,ZT - PROJECTIL << 2622 // 569 C / 3190 // 544 C EAP,BETA - BEAM ENER << 2623 // 570 C / CALCUL DE LA MASSE ET CHARGE FINALES D'UNE CHAINE D'EVAPORATION 3191 // 545 C BMAXNUC - MAX. IMPA << 2624 // 571 C / 3192 // 546 C CRTOT,CRNUC - TOTAL AND << 2625 // 572 C / PROCEDURE FOR CALCULATING THE FINAL MASS AND CHARGE VALUES OF A 3193 // 547 C R_0,R_P,R_T, - RADIUS PA << 2626 // 573 C / SPECIFIC EVAPORATION CHAIN, STARTING POINT DEFINED BY (APRF, ZPRF, 3194 // 548 C IMAX,IRNDM,PI - MAXIMUM N << 2627 // 574 C / EE) 3195 // 549 C BFPRO - FISSION B << 2628 // 575 C / On ajoute les 3 composantes de l'impulsion (PXEVA,PYEVA,PLEVA) 3196 // 550 C SNPRO - NEUTRON S << 2629 // 576 C / (actuellement PTEVA n'est pas correct; mauvaise norme...) 3197 // PROJECTILE 551 C SPPRO << 2630 // 577 C /____________________________________________________________________ 3198 // 552 C SHELL - GROUND ST << 2631 // 578 C 3199 // 553 C << 2632 // 612 C 3200 // 554 << 2633 // 613 C----------------------------------------------------------------------- 3201 // C---------------------------------- << 2634 // 614 C IRNDM DUMMY ARGUMENT FOR RANDOM-NUMBER FUNCTION 3202 // 555 C FISSION BARRIERS << 2635 // 615 C SORTIE LOCAL HELP VARIABLE TO END THE EVAPORATION CHAIN 3203 // 556 C COMMON /FB/ EFA << 2636 // 616 C ZF NUCLEAR CHARGE OF THE FRAGMENT 3204 // 557 C EFA - ARRAY OF FISSION << 2637 // 617 C ZPRF NUCLEAR CHARGE OF THE PREFRAGMENT 3205 // 558 << 2638 // 618 C AF MASS NUMBER OF THE FRAGMENT 3206 // C---------------------------------- << 2639 // 619 C APRF MASS NUMBER OF THE PREFRAGMENT 3207 // 559 C OUTPUT: << 2640 // 620 C EPSILN ENERGY BURNED IN EACH EVAPORATION STEP 3208 // 560 C ZF, AF, MTOTA, P << 2641 // 621 C MALPHA LOCAL MASS CONTRIBUTION TO MTOTA IN EACH EVAPORATION 3209 // 561 C << 2642 // 622 C STEP 3210 // 562 C ZF,AF - CHARGE AND MASS O << 2643 // 623 C EE EXCITATION ENERGY (VARIABLE) 3211 // EVAPORATION 563 C MTOTA _ NUMBE << 2644 // 624 C PROBP PROTON EMISSION PROBABILITY 3212 // PLEVA,PXEVA,PYEVA - MOMENTUM RECOIL << 2645 // 625 C PROBN NEUTRON EMISSION PROBABILITY 3213 // TYPE OF REACTION 0/1 NUCLEAR OR ELE << 2646 // 626 C PROBA ALPHA-PARTICLE EMISSION PROBABILITY 3214 // NO FISSION / FISSION EVENT 567 C << 2647 // 627 C PTOTL TOTAL EMISSION PROBABILITY 3215 // ___________________________________ << 2648 // 628 C E LOWEST PARTICLE-THRESHOLD ENERGY 3216 // C / 570 C / CALCUL DE LA MASSE << 2649 // 629 C SN NEUTRON SEPARATION ENERGY 3217 // D'EVAPORATION 571 C / << 2650 // 630 C SBP PROTON SEPARATION ENERGY PLUS EFFECTIVE COULOMB 3218 // 572 C / PROCEDURE FOR CALCULATING << 2651 // 631 C BARRIER 3219 // OF A << 2652 // 632 C SBA ALPHA-PARTICLE SEPARATION ENERGY PLUS EFFECTIVE 3220 // 573 C / SPECIFIC EVAPORATION CHAI << 2653 // 633 C COULOMB BARRIER 3221 // (APRF, ZPRF, 574 C / EE) 575 C << 2654 // 634 C BP EFFECTIVE PROTON COULOMB BARRIER 3222 // composantes de l'impulsion (PXEVA,P << 2655 // 635 C BA EFFECTIVE ALPHA COULOMB BARRIER 3223 // 576 C / (actuellement PTEVA n'e << 2656 // 636 C MTOTA TOTAL MASS OF THE EVAPORATED ALPHA PARTICLES 3224 // norme...) 577 C << 2657 // 637 C X UNIFORM RANDOM NUMBER FOR NUCLEAR CHARGE 3225 // /__________________________________ << 2658 // 638 C AMOINS LOCAL MASS NUMBER OF EVAPORATED PARTICLE 3226 // 578 C << 2659 // 639 C ZMOINS LOCAL NUCLEAR CHARGE OF EVAPORATED PARTICLE 3227 // 612 C << 2660 // 640 C ECP KINETIC ENERGY OF PROTON WITHOUT COULOMB 3228 // 613 << 2661 // 641 C REPULSION 3229 // C---------------------------------- << 2662 // 642 C ECN KINETIC ENERGY OF NEUTRON 3230 // 614 C IRNDM DUMMY A << 2663 // 643 C ECA KINETIC ENERGY OF ALPHA PARTICLE WITHOUT COULOMB 3231 // FUNCTION 615 C SORTIE LOCAL << 2664 // 644 C REPULSION 3232 // EVAPORATION CHAIN 616 C ZF << 2665 // 645 C PLEVA TRANSVERSAL RECOIL MOMENTUM OF EVAPORATION 3233 // FRAGMENT 617 C ZPRF << 2666 // 646 C PTEVA LONGITUDINAL RECOIL MOMENTUM OF EVAPORATION 3234 // PREFRAGMENT 618 C AF << 2667 // 647 C FF FISSION FLAG 3235 // C APRF MASS NUMBER << 2668 // 648 C INTTYPE INTERACTION TYPE FLAG 3236 // 620 C EPSILN ENERGY << 2669 // 649 C RNDX RECOIL MOMENTUM IN X-DIRECTION IN A SINGLE STEP 3237 // 621 C MALPHA LOCAL MASS CO << 2670 // 650 C RNDY RECOIL MOMENTUM IN Y-DIRECTION IN A SINGLE STEP 3238 // EVAPORATION 622 C << 2671 // 651 C RNDZ RECOIL MOMENTUM IN Z-DIRECTION IN A SINGLE STEP 3239 // EXCITATION ENERGY (VARIABLE) 624 C << 2672 // 652 C RNDN NORMALIZATION OF RECOIL MOMENTUM FOR EACH STEP 3240 // EMISSION PROBABILITY 625 C PRO << 2673 // 653 C----------------------------------------------------------------------- 3241 // PROBABILITY 626 C PROBA << 2674 // 654 C 3242 // PROBABILITY 627 C PTOTL << 2675 // 3243 // C E LOWEST PART << 2676 G4double epsiln = 0.0, probp = 0.0, probd = 0.0, probt = 0.0, probn = 0.0, probhe = 0.0, proba = 0.0, probg = 0.0, probimf=0.0, problamb0 = 0.0, ptotl = 0.0, e = 0.0, tcn = 0.0; 3244 // NEUTRON SEPARATION ENERGY 630 C << 2677 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, zmoins = 0.0,sp = 0.0, sd = 0.0, st = 0.0, she = 0.0, sa = 0.0, slamb0 = 0.0; 3245 // SEPARATION ENERGY PLUS EFFECTIVE CO << 2678 G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, ect = 0.0,eche = 0.0,eca = 0.0, ecg = 0.0, eclamb0 = 0.0, bp = 0.0, bd = 0.0, bt = 0.0, bhe = 0.0, ba = 0.0; 3246 // ALPHA-PARTICLE SEPARATION ENERGY PL << 2679 G4double zimf= 0.0,aimf= 0.0,bimf= 0.0,sbimf= 0.0,timf= 0.0; 3247 // BARRIER 634 C BP << 2680 G4int itest = 0, sortie=0; 3248 // 635 C BA EFFECTI << 2681 G4double probf = 0.0; 3249 // 636 C MTOTA TOTAL M << 2682 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = 0.0; 3250 // PARTICLES 637 C X << 2683 G4double rnd = 0.0; 3251 // NUCLEAR CHARGE << 2684 G4double ef = 0.0; 3252 // 638 C AMOINS LOCAL MASS NU << 2685 G4double ts1 = 0.0; 3253 // 639 C ZMOINS LOCAL NUCLEAR << 2686 G4int fgamma = 0, gammadecay = 0, flamb0decay=0; 3254 // 640 C ECP KINETIC << 2687 G4double pc = 0.0, malpha = 0.0; 3255 // 641 C REPULS << 2688 G4double jprfn=0.0, jprfp=0.0, jprfd=0.0, jprft=0.0, jprfhe=0.0, jprfa=0.0, jprflamb0 = 0.0; 3256 // 642 C ECN KINETIC << 2689 G4double tsum = 0.0; 3257 // 643 C ECA KINETIC << 2690 G4int twon; 3258 // COULOMB 644 C << 2691 3259 // TRANSVERSAL RECOIL MOMENTUM OF EVAP << 2692 const G4double c = 29.9792458; 3260 // RECOIL MOMENTUM OF EVAPORATION 647 << 2693 const G4double mu = 931.494; 3261 // FLAG 648 C INTTYPE I << 2694 const G4double mu2 = 931.494*931.494; 3262 // 649 C RNDX RECOIL << 2695 3263 // SINGLE STEP 650 C RNDY << 2696 G4double pleva = 0.0; 3264 // IN A SINGLE STEP 651 C RNDZ << 2697 G4double pxeva = 0.0; 3265 // Z-DIRECTION IN A SINGLE STEP << 2698 G4double pyeva = 0.0; 3266 // 652 C RNDN NORMALI << 2699 G4int IEV_TAB_TEMP=0; 3267 // EACH STEP 653 << 2700 3268 // C---------------------------------- << 2701 for(G4int I1=0;I1<200;I1++) 3269 // 654 C << 2702 for(G4int I2=0;I2<6;I2++) 3270 // << 2703 EV_TEMP[I1][I2] = 0.0; 3271 G4double epsiln = 0.0, probp = 0.0, probd << 2704 // 3272 probimf = 0.0, problamb0 = 0.0, << 2705 ff = 0; 3273 G4double sn = 0.0, sbp = 0.0, sbd = 0.0, << 2706 itest = 0; 3274 sp = 0.0, sd = 0.0, st = 0.0, sh << 2707 // 3275 G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, << 2708 evapora10: 3276 bd = 0.0, bt = 0.0, bhe = 0.0, b << 2709 // 3277 G4double zimf = 0.0, aimf = 0.0, bimf = 0 << 2710 // calculation of the probabilities for the different decay channels 3278 G4int itest = 0, sortie = 0; << 2711 // plus separation energies and kinetic energies of the particles 3279 G4double probf = 0.0; << 2712 // 3280 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = << 2713 if(ee<0.|| zf<3.)goto evapora100; 3281 G4double rnd = 0.0; << 2714 direct(zf,af,ee,jprf,&probp,&probd,&probt,&probn,&probhe,&proba,&probg,&probimf,&probf,&problamb0,&ptotl, 3282 G4double ef = 0.0; << 2715 &sn,&sbp,&sbd,&sbt,&sbhe,&sba,&slamb0, 3283 G4double ts1 = 0.0; << 2716 &ecn,&ecp,&ecd,&ect,&eche,&eca,&ecg,&eclamb0, 3284 G4int fgamma = 0, gammadecay = 0, flamb0d << 2717 &bp,&bd,&bt,&bhe,&ba,&sp,&sd,&st,&she,&sa,&ef,&ts1,inttype,inum,itest,&sortie,&tcn, 3285 G4double pc = 0.0, malpha = 0.0; << 2718 &jprfn, &jprfp, &jprfd, &jprft, &jprfhe, &jprfa, &jprflamb0, &tsum, NbLam0); 3286 G4double jprfn = 0.0, jprfp = 0.0, jprfd << 2719 // 3287 G4double tsum = 0.0; << 2720 // HERE THE FINAL STEPS OF THE EVAPORATION ARE CALCULATED 3288 G4int twon; << 2721 // 3289 << 2722 if(ptotl==0.0) goto evapora100; 3290 const G4double c = 29.9792458; << 3291 const G4double mu = 931.494; << 3292 const G4double mu2 = 931.494 * 931.494; << 3293 << 3294 G4double pleva = 0.0; << 3295 G4double pxeva = 0.0; << 3296 G4double pyeva = 0.0; << 3297 G4int IEV_TAB_TEMP = 0; << 3298 << 3299 for (G4int I1 = 0; I1 < indexpart; I1++) << 3300 for (G4int I2 = 0; I2 < 6; I2++) << 3301 EV_TEMP[I1][I2] = 0.0; << 3302 // << 3303 ff = 0; << 3304 itest = 0; << 3305 // << 3306 evapora10: << 3307 // << 3308 // calculation of the probabilities for t << 3309 // plus separation energies and kinetic e << 3310 // << 3311 if (ee < 0. || zf < 3.) << 3312 goto evapora100; << 3313 direct(zf, << 3314 af, << 3315 ee, << 3316 jprf, << 3317 &probp, << 3318 &probd, << 3319 &probt, << 3320 &probn, << 3321 &probhe, << 3322 &proba, << 3323 &probg, << 3324 &probimf, << 3325 &probf, << 3326 &problamb0, << 3327 &ptotl, << 3328 &sn, << 3329 &sbp, << 3330 &sbd, << 3331 &sbt, << 3332 &sbhe, << 3333 &sba, << 3334 &slamb0, << 3335 &ecn, << 3336 &ecp, << 3337 &ecd, << 3338 &ect, << 3339 &eche, << 3340 &eca, << 3341 &ecg, << 3342 &eclamb0, << 3343 &bp, << 3344 &bd, << 3345 &bt, << 3346 &bhe, << 3347 &ba, << 3348 &sp, << 3349 &sd, << 3350 &st, << 3351 &she, << 3352 &sa, << 3353 &ef, << 3354 &ts1, << 3355 inttype, << 3356 inum, << 3357 itest, << 3358 &sortie, << 3359 &tcn, << 3360 &jprfn, << 3361 &jprfp, << 3362 &jprfd, << 3363 &jprft, << 3364 &jprfhe, << 3365 &jprfa, << 3366 &jprflamb0, << 3367 &tsum, << 3368 NbLam0); << 3369 // << 3370 // HERE THE FINAL STEPS OF THE EVAPORATIO << 3371 // << 3372 if (ptotl == 0.0) << 3373 goto evapora100; << 3374 << 3375 e = dmin1(sba, sbhe, dmin1(sbt, sbhe, dmi << 3376 << 3377 if (e > 1e30) << 3378 std::cout << "ERROR AT THE EXIT OF EV << 3379 << 3380 if (sortie == 1) << 3381 { << 3382 if (probn != 0.0) << 3383 { << 3384 amoins = 1.0; << 3385 zmoins = 0.0; << 3386 epsiln = sn + ecn; << 3387 pc = std::sqrt(std::pow((1.0 + (e << 3388 malpha = 0.0; << 3389 fgamma = 0; << 3390 fimf = 0; << 3391 flamb0decay = 0; << 3392 gammadecay = 0; << 3393 } << 3394 else if (probp != 0.0) << 3395 { << 3396 amoins = 1.0; << 3397 zmoins = 1.0; << 3398 epsiln = sp + ecp; << 3399 pc = std::sqrt(std::pow((1.0 + ec << 3400 malpha = 0.0; << 3401 fgamma = 0; << 3402 fimf = 0; << 3403 flamb0decay = 0; << 3404 gammadecay = 0; << 3405 } << 3406 else if (probd != 0.0) << 3407 { << 3408 amoins = 2.0; << 3409 zmoins = 1.0; << 3410 epsiln = sd + ecd; << 3411 pc = std::sqrt(std::pow((1.0 + ec << 3412 malpha = 0.0; << 3413 fgamma = 0; << 3414 fimf = 0; << 3415 flamb0decay = 0; << 3416 gammadecay = 0; << 3417 } << 3418 else if (probt != 0.0) << 3419 { << 3420 amoins = 3.0; << 3421 zmoins = 1.0; << 3422 epsiln = st + ect; << 3423 pc = std::sqrt(std::pow((1.0 + ec << 3424 malpha = 0.0; << 3425 fgamma = 0; << 3426 fimf = 0; << 3427 flamb0decay = 0; << 3428 gammadecay = 0; << 3429 } << 3430 else if (probhe != 0.0) << 3431 { << 3432 amoins = 3.0; << 3433 zmoins = 2.0; << 3434 epsiln = she + eche; << 3435 pc = std::sqrt(std::pow((1.0 + ec << 3436 malpha = 0.0; << 3437 fgamma = 0; << 3438 fimf = 0; << 3439 flamb0decay = 0; << 3440 gammadecay = 0; << 3441 } << 3442 else << 3443 { << 3444 if (proba != 0.0) << 3445 { << 3446 amoins = 4.0; << 3447 zmoins = 2.0; << 3448 epsiln = sa + eca; << 3449 pc = std::sqrt(std::pow((1.0 << 3450 malpha = 4.0; << 3451 fgamma = 0; << 3452 fimf = 0; << 3453 flamb0decay = 0; << 3454 gammadecay = 0; << 3455 } << 3456 } << 3457 goto direct99; << 3458 } << 3459 2723 3460 // here the normal evaporation cascade st << 2724 e = dmin1(sba,sbhe,dmin1(sbt,sbhe,dmin1(sn,sbp,sbd))); 3461 2725 3462 // random number for the evaporation << 2726 if(e>1e30)std::cout << "ERROR AT THE EXIT OF EVAPORA,E>1.D30,AF="<< af << " ZF=" << zf << std::endl; 3463 x = G4AblaRandom::flat() * ptotl; << 3464 2727 3465 itest = 0; << 2728 if(sortie==1){ 3466 if (x < proba) << 2729 if (probn!=0.0) { 3467 { << 2730 amoins = 1.0; 3468 // alpha evaporation << 2731 zmoins = 0.0; 3469 amoins = 4.0; << 2732 epsiln = sn + ecn; 3470 zmoins = 2.0; << 2733 pc = std::sqrt(std::pow((1.0 + (ecn)/9.3956e2),2.) - 1.0) * 9.3956e2; 3471 epsiln = sa + eca; << 2734 malpha = 0.0; 3472 pc = std::sqrt(std::pow((1.0 + eca / << 2735 fgamma = 0; 3473 malpha = 4.0; << 2736 fimf = 0; 3474 fgamma = 0; << 2737 flamb0decay=0; 3475 fimf = 0; << 2738 gammadecay = 0; 3476 ff = 0; << 2739 } 3477 flamb0decay = 0; << 2740 else if(probp!=0.0){ 3478 gammadecay = 0; << 2741 amoins = 1.0; 3479 jprf = jprfa; << 2742 zmoins = 1.0; 3480 } << 2743 epsiln = sp + ecp; 3481 else if (x < proba + probhe) << 2744 pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2.) - 1.0) * 9.3827e2; 3482 { << 2745 malpha = 0.0; 3483 // He3 evaporation << 2746 fgamma = 0; 3484 amoins = 3.0; << 2747 fimf = 0; 3485 zmoins = 2.0; << 2748 flamb0decay=0; 3486 epsiln = she + eche; << 2749 gammadecay = 0; 3487 pc = std::sqrt(std::pow((1.0 + eche / << 2750 } 3488 malpha = 0.0; << 2751 else if(probd!=0.0){ 3489 fgamma = 0; << 2752 amoins = 2.0; 3490 fimf = 0; << 2753 zmoins = 1.0; 3491 ff = 0; << 2754 epsiln = sd + ecd; 3492 flamb0decay = 0; << 2755 pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3; 3493 gammadecay = 0; << 2756 malpha = 0.0; 3494 jprf = jprfhe; << 2757 fgamma = 0; 3495 } << 2758 fimf = 0; 3496 else if (x < proba + probhe + probt) << 2759 flamb0decay=0; 3497 { << 2760 gammadecay = 0; 3498 // triton evaporation << 2761 } 3499 amoins = 3.0; << 2762 else if(probt!=0.0){ 3500 zmoins = 1.0; << 2763 amoins = 3.0; 3501 epsiln = st + ect; << 2764 zmoins = 1.0; 3502 pc = std::sqrt(std::pow((1.0 + ect / << 2765 epsiln = st + ect; 3503 malpha = 0.0; << 2766 pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3; 3504 fgamma = 0; << 2767 malpha = 0.0; 3505 fimf = 0; << 2768 fgamma = 0; 3506 ff = 0; << 2769 fimf = 0; 3507 flamb0decay = 0; << 2770 flamb0decay=0; 3508 gammadecay = 0; << 2771 gammadecay = 0; 3509 jprf = jprft; << 2772 } 3510 } << 2773 else if(probhe!=0.0){ 3511 else if (x < proba + probhe + probt + pro << 2774 amoins = 3.0; 3512 { << 2775 zmoins = 2.0; 3513 // deuteron evaporation << 2776 epsiln = she + eche; 3514 amoins = 2.0; << 2777 pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3; 3515 zmoins = 1.0; << 2778 malpha = 0.0; 3516 epsiln = sd + ecd; << 2779 fgamma = 0; 3517 pc = std::sqrt(std::pow((1.0 + ecd / << 2780 fimf = 0; 3518 malpha = 0.0; << 2781 flamb0decay=0; 3519 fgamma = 0; << 2782 gammadecay = 0; 3520 fimf = 0; << 2783 } 3521 ff = 0; << 2784 else{ if(proba!=0.0){ 3522 flamb0decay = 0; << 2785 amoins = 4.0; 3523 gammadecay = 0; << 2786 zmoins = 2.0; 3524 jprf = jprfd; << 2787 epsiln = sa + eca; 3525 } << 2788 pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3; 3526 else if (x < proba + probhe + probt + pro << 2789 malpha = 4.0; 3527 { << 2790 fgamma = 0; 3528 // proton evaporation << 2791 fimf = 0; 3529 amoins = 1.0; << 2792 flamb0decay=0; 3530 zmoins = 1.0; << 2793 gammadecay = 0; 3531 epsiln = sp + ecp; << 3532 pc = std::sqrt(std::pow((1.0 + ecp / << 3533 malpha = 0.0; << 3534 fgamma = 0; << 3535 fimf = 0; << 3536 ff = 0; << 3537 flamb0decay = 0; << 3538 gammadecay = 0; << 3539 jprf = jprfp; << 3540 } << 3541 else if (x < proba + probhe + probt + pro << 3542 { << 3543 // neutron evaporation << 3544 amoins = 1.0; << 3545 zmoins = 0.0; << 3546 epsiln = sn + ecn; << 3547 pc = std::sqrt(std::pow((1.0 + (ecn) << 3548 malpha = 0.0; << 3549 fgamma = 0; << 3550 fimf = 0; << 3551 ff = 0; << 3552 flamb0decay = 0; << 3553 gammadecay = 0; << 3554 jprf = jprfn; << 3555 } << 3556 else if (x < proba + probhe + probt + pro << 3557 { << 3558 // lambda0 evaporation << 3559 amoins = 1.0; << 3560 zmoins = 0.0; << 3561 epsiln = slamb0 + eclamb0; << 3562 pc = std::sqrt(std::pow((1.0 + (eclam << 3563 malpha = 0.0; << 3564 fgamma = 0; << 3565 fimf = 0; << 3566 ff = 0; << 3567 flamb0decay = 1; << 3568 opt->nblan0 = opt->nblan0 - 1; << 3569 NbLam0 = NbLam0 - 1; << 3570 gammadecay = 0; << 3571 jprf = jprflamb0; << 3572 } << 3573 else if (x < proba + probhe + probt + pro << 3574 { << 3575 // gamma evaporation << 3576 amoins = 0.0; << 3577 zmoins = 0.0; << 3578 epsiln = ecg; << 3579 pc = ecg; << 3580 malpha = 0.0; << 3581 flamb0decay = 0; << 3582 gammadecay = 1; << 3583 // Next IF command is to shorten the << 3584 // only possible channel << 3585 if (probp == 0.0 && probn == 0.0 && p << 3586 problamb0 == 0.0 && probimf == 0. << 3587 fgamma = 1; << 3588 fimf = 0; << 3589 ff = 0; << 3590 } << 3591 else if (x < proba + probhe + probt + pro << 3592 { << 3593 // imf evaporation << 3594 // AIMF and ZIMF obtained from comple << 3595 // possible Gamma(IMF) and then rando << 3596 << 3597 G4int iloop = 0; << 3598 dir1973: << 3599 imf(af, zf, tcn, ee, &zimf, &aimf, &b << 3600 iloop++; << 3601 if (iloop > 100) << 3602 std::cout << "Problem in EVAPORA: << 3603 if (zimf >= (zf - 2.0)) << 3604 goto dir1973; << 3605 if (zimf > zf / 2.0) << 3606 { << 3607 zimf = zf - zimf; << 3608 aimf = af - aimf; << 3609 } << 3610 // These cases should in principle ne << 3611 if (zimf == 0.0 || aimf == 0.0 || sbi << 3612 std::cout << "warning: Look in EV << 3613 << 3614 // I sample the total kinetic energy << 3615 // from the distribution determined w << 3616 // TKEIMF is the kinetic energy in th << 3617 << 3618 G4int ii = 0; << 3619 dir1235: << 3620 tkeimf = fmaxhaz(timf); << 3621 ii++; << 3622 if (ii > 100) << 3623 { << 3624 tkeimf = min(2.0 * timf, ee - sbi << 3625 goto dir1000; << 3626 } << 3627 if (tkeimf <= 0.0) << 3628 goto dir1235; << 3629 if (tkeimf > (ee - sbimf) && timf > 0 << 3630 goto dir1235; << 3631 dir1000: << 3632 tkeimf = tkeimf + bimf; << 3633 << 3634 amoins = aimf; << 3635 zmoins = zimf; << 3636 epsiln = (sbimf - bimf) + tkeimf; << 3637 pc = 0.0; << 3638 malpha = 0.0; << 3639 fgamma = 0; << 3640 fimf = 1; << 3641 ff = 0; << 3642 flamb0decay = 0; << 3643 gammadecay = 0; << 3644 } 2794 } 3645 else << 2795 } 3646 { << 2796 goto direct99; 3647 // fission << 2797 } 3648 // in case of fission-events the frag << 2798 3649 // before fission occurs with excitat << 2799 // here the normal evaporation cascade starts 3650 // fission fragment mass distribution << 2800 3651 << 2801 // random number for the evaporation 3652 amoins = 0.0; << 2802 x = G4AblaRandom::flat() * ptotl; 3653 zmoins = 0.0; << 2803 3654 epsiln = ef; << 2804 itest = 0; 3655 // << 2805 if (x < proba) { 3656 malpha = 0.0; << 2806 // alpha evaporation 3657 pc = 0.0; << 2807 amoins = 4.0; 3658 ff = 1; << 2808 zmoins = 2.0; 3659 fimf = 0; << 2809 epsiln = sa + eca; 3660 fgamma = 0; << 2810 pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3; 3661 flamb0decay = 0; << 2811 malpha = 4.0; 3662 gammadecay = 0; << 2812 fgamma = 0; 3663 } << 2813 fimf = 0; 3664 // << 2814 ff = 0; 3665 direct99: << 2815 flamb0decay=0; 3666 if (ee <= 0.01) << 2816 gammadecay = 0; 3667 ee = 0.01; << 2817 jprf=jprfa; 3668 // Davide Mancusi (DM) - 2010 << 2818 } 3669 if (gammadecay == 1 && ee < (epsiln + 0.0 << 2819 else if (x < proba+probhe) { 3670 { << 2820 // He3 evaporation >> 2821 amoins = 3.0; >> 2822 zmoins = 2.0; >> 2823 epsiln = she + eche; >> 2824 pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3; >> 2825 malpha = 0.0; >> 2826 fgamma = 0; >> 2827 fimf = 0; >> 2828 ff = 0; >> 2829 flamb0decay=0; >> 2830 gammadecay = 0; >> 2831 jprf=jprfhe; >> 2832 } >> 2833 else if (x < proba+probhe+probt) { >> 2834 // triton evaporation >> 2835 amoins = 3.0; >> 2836 zmoins = 1.0; >> 2837 epsiln = st + ect; >> 2838 pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3; >> 2839 malpha = 0.0; >> 2840 fgamma = 0; >> 2841 fimf = 0; >> 2842 ff = 0; >> 2843 flamb0decay=0; >> 2844 gammadecay = 0; >> 2845 jprf=jprft; >> 2846 } >> 2847 else if (x < proba+probhe+probt+probd) { >> 2848 // deuteron evaporation >> 2849 amoins = 2.0; >> 2850 zmoins = 1.0; >> 2851 epsiln = sd + ecd; >> 2852 pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3; >> 2853 malpha = 0.0; >> 2854 fgamma = 0; >> 2855 fimf = 0; >> 2856 ff = 0; >> 2857 flamb0decay=0; >> 2858 gammadecay = 0; >> 2859 jprf=jprfd; >> 2860 } >> 2861 else if (x < proba+probhe+probt+probd+probp) { >> 2862 // proton evaporation >> 2863 amoins = 1.0; >> 2864 zmoins = 1.0; >> 2865 epsiln = sp + ecp; >> 2866 pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2) - 1.0) * 9.3827e2; >> 2867 malpha = 0.0; >> 2868 fgamma = 0; >> 2869 fimf = 0; >> 2870 ff = 0; >> 2871 flamb0decay=0; >> 2872 gammadecay = 0; >> 2873 jprf=jprfp; >> 2874 } >> 2875 else if (x < proba+probhe+probt+probd+probp+probn) { >> 2876 // neutron evaporation >> 2877 amoins = 1.0; >> 2878 zmoins = 0.0; >> 2879 epsiln = sn + ecn; >> 2880 pc = std::sqrt(std::pow((1.0 + (ecn)/9.3956e2),2.) - 1.0) * 9.3956e2; >> 2881 malpha = 0.0; >> 2882 fgamma = 0; >> 2883 fimf = 0; >> 2884 ff = 0; >> 2885 flamb0decay=0; >> 2886 gammadecay = 0; >> 2887 jprf=jprfn; >> 2888 } >> 2889 else if (x < proba+probhe+probt+probd+probp+probn+problamb0) { >> 2890 // lambda0 evaporation >> 2891 amoins = 1.0; >> 2892 zmoins = 0.0; >> 2893 epsiln = slamb0 + eclamb0; >> 2894 pc = std::sqrt(std::pow((1.0 + (eclamb0)/11.1568e2),2.) - 1.0) * 11.1568e2; >> 2895 malpha = 0.0; >> 2896 fgamma = 0; >> 2897 fimf = 0; >> 2898 ff = 0; >> 2899 flamb0decay = 1; >> 2900 opt->nblan0 = opt->nblan0 -1; >> 2901 NbLam0 = NbLam0 -1; >> 2902 gammadecay = 0; >> 2903 jprf=jprflamb0; >> 2904 } >> 2905 else if (x < proba+probhe+probt+probd+probp+probn+problamb0+probg) { >> 2906 // gamma evaporation >> 2907 amoins = 0.0; >> 2908 zmoins = 0.0; >> 2909 epsiln = ecg; >> 2910 pc = ecg; >> 2911 malpha = 0.0; >> 2912 flamb0decay = 0; >> 2913 gammadecay = 1; >> 2914 //Next IF command is to shorten the calculations when gamma-emission is the only >> 2915 //possible channel >> 2916 if(probp==0.0 && probn==0.0 && probd==0.0 && probt==0.0 && proba==0.0 && probhe==0.0 && problamb0==0.0 && probimf==0.0 && probf==0.0)fgamma = 1; >> 2917 fimf = 0; >> 2918 ff = 0; >> 2919 } >> 2920 else if (x < proba+probhe+probt+probd+probp+probn+problamb0+probg+probimf) { >> 2921 // imf evaporation >> 2922 // AIMF and ZIMF obtained from complete procedure (integration over all >> 2923 // possible Gamma(IMF) and then randomly picked >> 2924 >> 2925 G4int iloop=0; >> 2926 dir1973: >> 2927 imf(af,zf,tcn,ee,&zimf,&aimf,&bimf,&sbimf,&timf,jprf); >> 2928 iloop++; >> 2929 if(iloop>100)std::cout << "Problem in EVAPORA: IMF called > 100 times" << std::endl; >> 2930 if(zimf>=(zf-2.0)) goto dir1973; >> 2931 if(zimf>zf/2.0){ >> 2932 zimf = zf - zimf; >> 2933 aimf = af - aimf; >> 2934 } >> 2935 // These cases should in principle never happen >> 2936 if(zimf==0.0 || aimf==0.0 || sbimf>ee)std::cout << "warning: Look in EVAPORA CALL IMF" << std::endl; >> 2937 >> 2938 // I sample the total kinetic energy consumed by the system of two nuclei >> 2939 // from the distribution determined with the temperature at saddle point >> 2940 // TKEIMF is the kinetic energy in the centre of mass of IMF and its partner >> 2941 >> 2942 G4int ii=0; >> 2943 dir1235: >> 2944 tkeimf= fmaxhaz(timf); >> 2945 ii++; >> 2946 if(ii>100){ >> 2947 tkeimf=min(2.0*timf,ee-sbimf); >> 2948 goto dir1000; >> 2949 } >> 2950 if(tkeimf<=0.0)goto dir1235; >> 2951 if(tkeimf>(ee-sbimf) && timf>0.5)goto dir1235; >> 2952 dir1000: >> 2953 tkeimf = tkeimf + bimf; >> 2954 >> 2955 amoins = aimf; >> 2956 zmoins = zimf; >> 2957 epsiln = (sbimf-bimf) + tkeimf; >> 2958 pc = 0.0; >> 2959 malpha = 0.0; >> 2960 fgamma = 0; >> 2961 fimf = 1; >> 2962 ff = 0; >> 2963 flamb0decay = 0; >> 2964 gammadecay = 0; >> 2965 } >> 2966 else { >> 2967 // fission >> 2968 // in case of fission-events the fragment nucleus is the mother nucleus >> 2969 // before fission occurs with excitation energy above the fis.- barrier. >> 2970 // fission fragment mass distribution is calulated in subroutine fisdis >> 2971 >> 2972 amoins = 0.0; >> 2973 zmoins = 0.0; >> 2974 epsiln = ef; >> 2975 // >> 2976 malpha = 0.0; >> 2977 pc = 0.0; >> 2978 ff = 1; >> 2979 fimf = 0; >> 2980 fgamma = 0; >> 2981 flamb0decay = 0; >> 2982 gammadecay = 0; >> 2983 } >> 2984 // >> 2985 direct99: >> 2986 if (ee <= 0.01)ee = 0.01; >> 2987 // Davide Mancusi (DM) - 2010 >> 2988 if(gammadecay==1 && ee<(epsiln+0.010)){ 3671 epsiln = ee - 0.010; 2989 epsiln = ee - 0.010; 3672 // fgamma = 1; << 2990 // fgamma = 1; 3673 } << 2991 } 3674 2992 3675 if (epsiln < 0.0) << 2993 if(epsiln<0.0){ 3676 { << 2994 std::cout << "***WARNING epsilon<0***" << std::endl; 3677 std::cout << "***WARNING epsilon<0*** << 2995 //epsiln=0.; 3678 // epsiln=0.; << 2996 //PRINT*,IDECAYMODE,IDNINT(AF),IDNINT(ZF),EE,EPSILN 3679 // PRINT*,IDECAYMODE,IDNINT(AF),IDNIN << 2997 } 3680 } << 2998 // calculation of the daughter nucleus 3681 // calculation of the daughter nucleus << 2999 af = af - amoins; 3682 af = af - amoins; << 3000 zf = zf - zmoins; 3683 zf = zf - zmoins; << 3001 ee = ee - epsiln; 3684 ee = ee - epsiln; << 3002 if (ee <= 0.01)ee = 0.01; 3685 if (ee <= 0.01) << 3003 mtota = mtota + malpha; 3686 ee = 0.01; << 3004 3687 mtota = mtota + malpha; << 3005 3688 << 3006 //if(amoins==2 && zmoins==0)std::cout << ee << std::endl; 3689 // if(amoins==2 && zmoins==0)std::cout << << 3007 3690 << 3008 3691 secondneutron: << 3009 secondneutron: 3692 if (amoins == 2 && zmoins == 0) << 3010 if(amoins==2 && zmoins==0){twon=1;amoins=1;}else{ twon=0;} 3693 { << 3011 3694 twon = 1; << 3012 3695 amoins = 1; << 3013 // Determination of x,y,z components of momentum from known emission momentum PC 3696 } << 3014 if(ff==0 && fimf==0){ 3697 else << 3015 // 3698 { << 3016 if(flamb0decay==1){ 3699 twon = 0; << 3017 EV_TEMP[IEV_TAB_TEMP][0] = 0.; 3700 } << 3018 EV_TEMP[IEV_TAB_TEMP][1] = -2; 3701 << 3019 EV_TEMP[IEV_TAB_TEMP][5] = 1.; 3702 // Determination of x,y,z components of m << 3020 }else{ 3703 // PC << 3021 EV_TEMP[IEV_TAB_TEMP][0] = zmoins; 3704 if (ff == 0 && fimf == 0) << 3022 EV_TEMP[IEV_TAB_TEMP][1] = amoins; 3705 { << 3023 EV_TEMP[IEV_TAB_TEMP][5] = 0.; 3706 // << 3707 if (flamb0decay == 1) << 3708 { << 3709 EV_TEMP[IEV_TAB_TEMP][0] = 0.; << 3710 EV_TEMP[IEV_TAB_TEMP][1] = -2; << 3711 EV_TEMP[IEV_TAB_TEMP][5] = 1.; << 3712 } << 3713 else << 3714 { << 3715 EV_TEMP[IEV_TAB_TEMP][0] = zmoins << 3716 EV_TEMP[IEV_TAB_TEMP][1] = amoins << 3717 EV_TEMP[IEV_TAB_TEMP][5] = 0.; << 3718 } 3024 } 3719 rnd = G4AblaRandom::flat(); 3025 rnd = G4AblaRandom::flat(); 3720 ctet1 = 2.0 * rnd - 1.0; << 3026 ctet1 = 2.0*rnd - 1.0; // z component: uniform probability between -1 and 1 3721 stet1 = std::sqrt(1.0 - std::pow(ctet << 3027 stet1 = std::sqrt(1.0 - std::pow(ctet1,2)); // component perpendicular to z 3722 rnd = G4AblaRandom::flat(); 3028 rnd = G4AblaRandom::flat(); 3723 phi1 = rnd * 2.0 * 3.141592654; << 3029 phi1 = rnd*2.0*3.141592654; // angle in x-y plane: uniform probability between 0 and 2*pi 3724 << 3030 G4double xcv = stet1*std::cos(phi1);// x component 3725 G4double xcv = stet1 * std::cos(phi1) << 3031 G4double ycv = stet1*std::sin(phi1);// y component 3726 G4double ycv = stet1 * std::sin(phi1) << 3032 G4double zcv = ctet1; // z component 3727 G4double zcv = ctet1; << 3033 // In the CM system 3728 << 3034 if(gammadecay==0){ 3729 if (gammadecay == 0) << 3035 // Light particle 3730 { << 3036 G4double ETOT_LP = std::sqrt(pc*pc + amoins*amoins * mu2); 3731 // Light particle << 3037 if(flamb0decay==1)ETOT_LP = std::sqrt(pc*pc + 1115.683*1115.683); 3732 G4double ETOT_LP = std::sqrt(pc * << 3038 EV_TEMP[IEV_TAB_TEMP][2] = c * pc * xcv / ETOT_LP; 3733 if (flamb0decay == 1) << 3039 EV_TEMP[IEV_TAB_TEMP][3] = c * pc * ycv / ETOT_LP; 3734 ETOT_LP = std::sqrt(pc * pc + << 3040 EV_TEMP[IEV_TAB_TEMP][4] = c * pc * zcv / ETOT_LP; 3735 EV_TEMP[IEV_TAB_TEMP][2] = c * pc << 3041 }else{ 3736 EV_TEMP[IEV_TAB_TEMP][3] = c * pc << 3042 // gamma ray 3737 EV_TEMP[IEV_TAB_TEMP][4] = c * pc << 3043 EV_TEMP[IEV_TAB_TEMP][2] = pc * xcv; 3738 } << 3044 EV_TEMP[IEV_TAB_TEMP][3] = pc * ycv; 3739 else << 3045 EV_TEMP[IEV_TAB_TEMP][4] = pc * zcv; 3740 { << 3046 } 3741 // gamma ray << 3047 G4double VXOUT=0.,VYOUT=0.,VZOUT=0.; 3742 EV_TEMP[IEV_TAB_TEMP][2] = pc * x << 3048 lorentz_boost(vxeva,vyeva,vleva, 3743 EV_TEMP[IEV_TAB_TEMP][3] = pc * y << 3049 EV_TEMP[IEV_TAB_TEMP][2],EV_TEMP[IEV_TAB_TEMP][3], 3744 EV_TEMP[IEV_TAB_TEMP][4] = pc * z << 3050 EV_TEMP[IEV_TAB_TEMP][4], 3745 } << 3051 &VXOUT,&VYOUT,&VZOUT); 3746 G4double VXOUT = 0., VYOUT = 0., VZOU << 3747 lorentz_boost(vxeva, << 3748 vyeva, << 3749 vleva, << 3750 EV_TEMP[IEV_TAB_TEMP][2 << 3751 EV_TEMP[IEV_TAB_TEMP][3 << 3752 EV_TEMP[IEV_TAB_TEMP][4 << 3753 &VXOUT, << 3754 &VYOUT, << 3755 &VZOUT); << 3756 EV_TEMP[IEV_TAB_TEMP][2] = VXOUT; 3052 EV_TEMP[IEV_TAB_TEMP][2] = VXOUT; 3757 EV_TEMP[IEV_TAB_TEMP][3] = VYOUT; 3053 EV_TEMP[IEV_TAB_TEMP][3] = VYOUT; 3758 EV_TEMP[IEV_TAB_TEMP][4] = VZOUT; 3054 EV_TEMP[IEV_TAB_TEMP][4] = VZOUT; 3759 // Heavy residue << 3055 // Heavy residue 3760 if (gammadecay == 0) << 3056 if(gammadecay==0){ 3761 { << 3057 G4double v2 = std::pow(EV_TEMP[IEV_TAB_TEMP][2],2.) + 3762 G4double v2 = std::pow(EV_TEMP[IE << 3058 std::pow(EV_TEMP[IEV_TAB_TEMP][3],2.) + 3763 std::pow(EV_TEMP[IE << 3059 std::pow(EV_TEMP[IEV_TAB_TEMP][4],2.); 3764 G4double gamma = 1.0 / std::sqrt( << 3060 G4double gamma = 1.0/std::sqrt(1.0 - v2 / (c*c)); 3765 G4double etot_lp = amoins * mu * << 3061 G4double etot_lp = amoins*mu * gamma; 3766 pxeva = pxeva - EV_TEMP[IEV_TAB_T << 3062 pxeva = pxeva - EV_TEMP[IEV_TAB_TEMP][2] * etot_lp / c; 3767 pyeva = pyeva - EV_TEMP[IEV_TAB_T << 3063 pyeva = pyeva - EV_TEMP[IEV_TAB_TEMP][3] * etot_lp / c; 3768 pleva = pleva - EV_TEMP[IEV_TAB_T << 3064 pleva = pleva - EV_TEMP[IEV_TAB_TEMP][4] * etot_lp / c; 3769 } << 3065 }else{ 3770 else << 3066 // in case of gammas, EV_TEMP contains momentum components and not velocity 3771 { << 3067 pxeva = pxeva - EV_TEMP[IEV_TAB_TEMP][2]; 3772 // in case of gammas, EV_TEMP con << 3068 pyeva = pyeva - EV_TEMP[IEV_TAB_TEMP][3]; 3773 // velocity << 3069 pleva = pleva - EV_TEMP[IEV_TAB_TEMP][4]; 3774 pxeva = pxeva - EV_TEMP[IEV_TAB_T << 3070 } 3775 pyeva = pyeva - EV_TEMP[IEV_TAB_T << 3071 G4double pteva = std::sqrt(pxeva*pxeva + pyeva*pyeva); 3776 pleva = pleva - EV_TEMP[IEV_TAB_T << 3072 // To be checked: 3777 } << 3073 G4double etot = std::sqrt ( pleva*pleva + pteva*pteva + af*af * mu2 ); 3778 G4double pteva = std::sqrt(pxeva * px << 3074 vxeva = c * pxeva / etot; // recoil velocity components of residue due to evaporation 3779 // To be checked: << 3780 G4double etot = std::sqrt(pleva * ple << 3781 vxeva = c * pxeva / etot; // recoil v << 3782 vyeva = c * pyeva / etot; 3075 vyeva = c * pyeva / etot; 3783 vleva = c * pleva / etot; 3076 vleva = c * pleva / etot; 3784 IEV_TAB_TEMP = IEV_TAB_TEMP + 1; 3077 IEV_TAB_TEMP = IEV_TAB_TEMP + 1; 3785 } << 3078 } 3786 << 3787 if (twon == 1) << 3788 { << 3789 goto secondneutron; << 3790 } << 3791 << 3792 // condition for end of evaporation << 3793 if (zf < 3. || (ff == 1) || (fgamma == 1) << 3794 { << 3795 goto evapora100; << 3796 } << 3797 goto evapora10; << 3798 << 3799 evapora100: << 3800 (*zf_par) = zf; << 3801 (*af_par) = af; << 3802 (*ee_par) = ee; << 3803 (*faimf) = aimf; << 3804 (*fzimf) = zimf; << 3805 (*jprfout) = jprf; << 3806 (*tkeimf_par) = tkeimf; << 3807 (*mtota_par) = mtota; << 3808 (*vleva_par) = vleva; << 3809 (*vxeva_par) = vxeva; << 3810 (*vyeva_par) = vyeva; << 3811 (*ff_par) = ff; << 3812 (*fimf_par) = fimf; << 3813 (*inttype_par) = inttype; << 3814 (*iev_tab_temp_par) = IEV_TAB_TEMP; << 3815 (*inum_par) = inum; << 3816 (*NbLam0_par) = NbLam0; << 3817 return; << 3818 } << 3819 3079 3820 void G4Abla::direct(G4double zprf, << 3080 if(twon==1){goto secondneutron;} 3821 G4double a, << 3822 G4double ee, << 3823 G4double jprf, << 3824 G4double* probp_par, << 3825 G4double* probd_par, << 3826 G4double* probt_par, << 3827 G4double* probn_par, << 3828 G4double* probhe_par, << 3829 G4double* proba_par, << 3830 G4double* probg_par, << 3831 G4double* probimf_par, << 3832 G4double* probf_par, << 3833 G4double* problamb0_par, << 3834 G4double* ptotl_par, << 3835 G4double* sn_par, << 3836 G4double* sbp_par, << 3837 G4double* sbd_par, << 3838 G4double* sbt_par, << 3839 G4double* sbhe_par, << 3840 G4double* sba_par, << 3841 G4double* slamb0_par, << 3842 G4double* ecn_par, << 3843 G4double* ecp_par, << 3844 G4double* ecd_par, << 3845 G4double* ect_par, << 3846 G4double* eche_par, << 3847 G4double* eca_par, << 3848 G4double* ecg_par, << 3849 G4double* eclamb0_par, << 3850 G4double* bp_par, << 3851 G4double* bd_par, << 3852 G4double* bt_par, << 3853 G4double* bhe_par, << 3854 G4double* ba_par, << 3855 G4double* sp_par, << 3856 G4double* sd_par, << 3857 G4double* st_par, << 3858 G4double* she_par, << 3859 G4double* sa_par, << 3860 G4double* ef_par, << 3861 G4double* ts1_par, << 3862 G4int, << 3863 G4int inum, << 3864 G4int itest, << 3865 G4int* sortie, << 3866 G4double* tcn, << 3867 G4double* jprfn_par, << 3868 G4double* jprfp_par, << 3869 G4double* jprfd_par, << 3870 G4double* jprft_par, << 3871 G4double* jprfhe_par, << 3872 G4double* jprfa_par, << 3873 G4double* jprflamb0_par, << 3874 G4double* tsum_par, << 3875 G4int NbLam0) << 3876 { << 3877 G4double probp = (*probp_par); << 3878 G4double probd = (*probd_par); << 3879 G4double probt = (*probt_par); << 3880 G4double probn = (*probn_par); << 3881 G4double probhe = (*probhe_par); << 3882 G4double proba = (*proba_par); << 3883 G4double probg = (*probg_par); << 3884 G4double probimf = (*probimf_par); << 3885 G4double probf = (*probf_par); << 3886 G4double problamb0 = (*problamb0_par); << 3887 G4double ptotl = (*ptotl_par); << 3888 G4double sn = (*sn_par); << 3889 G4double sp = (*sp_par); << 3890 G4double sd = (*sd_par); << 3891 G4double st = (*st_par); << 3892 G4double she = (*she_par); << 3893 G4double sa = (*sa_par); << 3894 G4double slamb0 = 0.0; << 3895 G4double sbp = (*sbp_par); << 3896 G4double sbd = (*sbd_par); << 3897 G4double sbt = (*sbt_par); << 3898 G4double sbhe = (*sbhe_par); << 3899 G4double sba = (*sba_par); << 3900 G4double ecn = (*ecn_par); << 3901 G4double ecp = (*ecp_par); << 3902 G4double ecd = (*ecd_par); << 3903 G4double ect = (*ect_par); << 3904 G4double eche = (*eche_par); << 3905 G4double eca = (*eca_par); << 3906 G4double ecg = (*ecg_par); << 3907 G4double eclamb0 = (*eclamb0_par); << 3908 G4double bp = (*bp_par); << 3909 G4double bd = (*bd_par); << 3910 G4double bt = (*bt_par); << 3911 G4double bhe = (*bhe_par); << 3912 G4double ba = (*ba_par); << 3913 G4double tsum = (*tsum_par); << 3914 << 3915 // CALCULATION OF PARTICLE-EMISSION PROBA << 3916 // BASED ON THE SIMPLIFIED FORMULAS FOR T << 3917 // MORETTO, ROCHESTER MEETING TO AVOID CO << 3918 // INTENSIVE INTEGRATION OF THE LEVEL DEN << 3919 // USES EFFECTIVE COULOMB BARRIERS AND AN << 3920 // OF THE EVAPORATED PARTICLES << 3921 // COLLECTIVE ENHANCMENT OF THE LEVEL DEN << 3922 // DYNAMICAL HINDRANCE OF FISSION IS INCL << 3923 // APPROXIMATION. SEE A.R. JUNGHANS DIPLO << 3924 // SHELL AND PAIRING STRUCTURES IN THE LE << 3925 << 3926 // INPUT: << 3927 // ZPRF,A,EE CHARGE, MASS, EXCITATION EN << 3928 // NUCLEUS << 3929 // JPRF ROOT-MEAN-SQUARED ANGULAR M << 3930 << 3931 // DEFORMATIONS AND G.S. SHELL EFFECTS << 3932 // COMMON /ECLD/ ECGNZ,ECFNZ,VGSLD,ALPH << 3933 << 3934 // ECGNZ - GROUND STATE SHELL CORR. FRLDM << 3935 // ECFNZ - SHELL CORRECTION FOR THE SADDL << 3936 // VGSLD - DIFFERENCE BETWEEN DEFORMED G. << 3937 // ALPHA - ALPHA GROUND STATE DEFORMATION << 3938 // BETA2 = SQRT((4PI)/5) * ALPHA << 3939 << 3940 // OPTIONS AND PARAMETERS FOR FISSION CHA << 3941 // COMMON /FISS/ AKAP,BET,HOMEGA,KOEFF << 3942 // OPTSHP,OPTXFIS,OPTLES << 3943 // << 3944 // AKAP - HBAR**2/(2* MN * R_0**2) = 1 << 3945 // BET - REDUCED NUCLEAR FRICTION COE << 3946 // HOMEGA - CURVATURE OF THE FISSION BAR << 3947 // KOEFF - COEFFICIENT FOR THE LD FISSI << 3948 // IFIS - 0/1 FISSION CHANNEL OFF/ON << 3949 // OPTSHP - INTEGER SWITCH FOR SHELL COR << 3950 // = 0 NO MICROSCOPIC CORRECTIO << 3951 // = 1 SHELL , NO PAIRING << 3952 // = 2 PAIRING, NO SHELL << 3953 // = 3 SHELL AND PAIRING << 3954 // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT S << 3955 // OPTXFIS- 0,1,2 FOR MYERS & SWIATECKI, << 3956 // FISSILITY PARAMETER. << 3957 // OPTLES - CONSTANT TEMPERATURE LEVEL D << 3958 // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT O << 3959 << 3960 // LEVEL DENSITY PARAMETERS << 3961 // COMMON /ALD/ AV,AS,AK,OPTAFAN << 3962 // AV,AS,AK - VOLUME,SURF << 3963 // LEVEL DENSI << 3964 // OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1 << 3965 // RECOMMENDED IS OPTAFAN = 0 << 3966 << 3967 // FISSION BARRIERS << 3968 // COMMON /FB/ EFA << 3969 // EFA - ARRAY OF FISSION BARRIERS << 3970 << 3971 // OUTPUT: PROBN,PROBP,PROBA,PROBF,PTOTL: << 3972 // - EMISSION PROBABILITIES FOR N EUTRON, << 3973 // PARTICLES, F ISSION AND NORMALISATION << 3974 // SN,SBP,SBA: SEPARATION ENERGIES N P A << 3975 // INCLUDING EFFECTIVE BARRIERS << 3976 // ECN,ECP,ECA,BP,BA << 3977 // - AVERAGE KINETIC ENERGIES (2*T) AND E << 3978 << 3979 G4double bk = 0.0; << 3980 G4double bksp = 0.0; << 3981 G4double bc = 0.0; << 3982 G4int afp = 0; << 3983 G4double het = 0.0; << 3984 G4double at = 0.0; << 3985 G4double bs = 0.0; << 3986 G4double bssp = 0.0; << 3987 G4double bshell = 0.0; << 3988 G4double cf = 0.0; << 3989 G4double defbet = 0.0; << 3990 G4double densa = 0.0; << 3991 G4double denshe = 0.0; << 3992 G4double densg = 0.0; << 3993 G4double densn = 0.0; << 3994 G4double densp = 0.0; << 3995 G4double densd = 0.0; << 3996 G4double denst = 0.0; << 3997 G4double denslamb0 = 0.0; << 3998 G4double eer = 0.0; << 3999 G4double ecor = 0.0; << 4000 G4double ef = 0.0; << 4001 G4double ft = 0.0; << 4002 G4double timf = 0.0; << 4003 G4double qr = 0.0; << 4004 G4double qrcn = 0.0; << 4005 G4double omegap = 0.0; << 4006 G4double omegad = 0.0; << 4007 G4double omegat = 0.0; << 4008 G4double omegahe = 0.0; << 4009 G4double omegaa = 0.0; << 4010 G4double ga = 0.0; << 4011 G4double ghe = 0.0; << 4012 G4double gf = 0.0; << 4013 G4double gff = 0.0; << 4014 G4double gn = 0.0; << 4015 G4double gp = 0.0; << 4016 G4double gd = 0.0; << 4017 G4double gt = 0.0; << 4018 G4double gg = 0.0; << 4019 G4double glamb0 = 0.0; << 4020 G4double gimf = 0.0; << 4021 G4double gimf3 = 0.0; << 4022 G4double gimf5 = 0.0; << 4023 G4double bimf = 0.0; << 4024 G4double bsimf = 0.0; << 4025 G4double sbimf = 0.0; << 4026 G4double densimf = 0.0; << 4027 G4double defbetimf = 0.0; << 4028 G4double b_imf = 0.0; << 4029 G4double a_imf = 0.0; << 4030 G4double omegaimf = 0.0; << 4031 G4int izimf = 0; << 4032 G4double zimf = 0.0; << 4033 G4double gsum = 0.0; << 4034 G4double gtotal = 0.0; << 4035 G4double hbar = 6.582122e-22; << 4036 G4double emin = 0.0; << 4037 G4int il = 0; << 4038 G4int choice_fisspart = 0; << 4039 G4double t_lapse = 0.0; << 4040 G4int imaxwell = 0; << 4041 G4int in = 0; << 4042 G4int iz = 0; << 4043 G4int ind = 0; << 4044 G4int izd = 0; << 4045 G4int j = 0; << 4046 G4int k = 0; << 4047 G4double ma1z = 0.0; << 4048 G4double mazz = 0.0; << 4049 G4double ma2z = 0.0; << 4050 G4double ma1z1 = 0.0; << 4051 G4double ma2z1 = 0.0; << 4052 G4double ma3z1 = 0.0; << 4053 G4double ma3z2 = 0.0; << 4054 G4double ma4z2 = 0.0; << 4055 G4double maz = 0.0; << 4056 G4double nt = 0.0; << 4057 G4double pi = 3.1415926535; << 4058 G4double pt = 0.0; << 4059 G4double dt = 0.0; << 4060 G4double tt = 0.0; << 4061 G4double lamb0t = 0.0; << 4062 G4double gtemp = 0.0; << 4063 G4double rdt = 0.0; << 4064 G4double rtt = 0.0; << 4065 G4double rat = 0.0; << 4066 G4double rhet = 0.0; << 4067 G4double refmod = 0.0; << 4068 G4double rnt = 0.0; << 4069 G4double rpt = 0.0; << 4070 G4double rlamb0t = 0.0; << 4071 G4double sbfis = 1.e40; << 4072 G4double segs = 0.0; << 4073 G4double selmax = 0.0; << 4074 G4double tauc = 0.0; << 4075 G4double temp = 0.0; << 4076 G4double ts1 = 0.0; << 4077 G4double xx = 0.0; << 4078 G4double y = 0.0; << 4079 G4double k1 = 0.0; << 4080 G4double omegasp = 0.0; << 4081 G4double homegasp = 0.0; << 4082 G4double omegags = 0.0; << 4083 G4double homegags = 0.0; << 4084 G4double pa = 0.0; << 4085 G4double gamma = 0.0; << 4086 G4double gfactor = 0.0; << 4087 G4double bscn; << 4088 G4double bkcn; << 4089 G4double bccn; << 4090 G4double ftcn = 0.0; << 4091 G4double mfcd; << 4092 G4double jprfn = jprf; << 4093 G4double jprfp = jprf; << 4094 G4double jprfd = jprf; << 4095 G4double jprft = jprf; << 4096 G4double jprfhe = jprf; << 4097 G4double jprfa = jprf; << 4098 G4double jprflamb0 = jprf; << 4099 G4double djprf = 0.0; << 4100 G4double dlout = 0.0; << 4101 G4double sdlout = 0.0; << 4102 G4double iinert = 0.0; << 4103 G4double erot = 0.0; << 4104 G4double erotn = 0.0; << 4105 G4double erotp = 0.0; << 4106 G4double erotd = 0.0; << 4107 G4double erott = 0.0; << 4108 G4double erothe = 0.0; << 4109 G4double erota = 0.0; << 4110 G4double erotlamb0 = 0.0; << 4111 G4double erotcn = 0.0; << 4112 // G4double ecorcn=0.0; << 4113 G4double imfarg = 0.0; << 4114 G4double width_imf = 0.0; << 4115 G4int IDjprf = 0; << 4116 G4int fimf_allowed = opt->optimfallowed; << 4117 << 4118 if (itest == 1) << 4119 { << 4120 } << 4121 // Switch to calculate Maxwellian distrib << 4122 imaxwell = 1; << 4123 *sortie = 0; << 4124 << 4125 // just a change of name until the end of << 4126 eer = ee; << 4127 if (inum == 1) << 4128 { << 4129 ilast = 1; << 4130 } << 4131 // calculation of masses << 4132 // refmod = 1 ==> myers,swiatecki model << 4133 // refmod = 0 ==> weizsaecker model << 4134 refmod = 1; // Default = 1 << 4135 // << 4136 if (refmod == 1) << 4137 { << 4138 mglms(a, zprf, fiss->optshp, &maz); << 4139 mglms(a - 1.0, zprf, fiss->optshp, &m << 4140 mglms(a - 2.0, zprf, fiss->optshp, &m << 4141 mglms(a - 1.0, zprf - 1.0, fiss->opts << 4142 mglms(a - 2.0, zprf - 1.0, fiss->opts << 4143 mglms(a - 3.0, zprf - 1.0, fiss->opts << 4144 mglms(a - 3.0, zprf - 2.0, fiss->opts << 4145 mglms(a - 4.0, zprf - 2.0, fiss->opts << 4146 } << 4147 else << 4148 { << 4149 mglw(a, zprf, &maz); << 4150 mglw(a - 1.0, zprf, &ma1z); << 4151 mglw(a - 1.0, zprf - 1.0, &ma1z1); << 4152 mglw(a - 2.0, zprf - 1.0, &ma2z1); << 4153 mglw(a - 3.0, zprf - 1.0, &ma3z1); << 4154 mglw(a - 3.0, zprf - 2.0, &ma3z2); << 4155 mglw(a - 4.0, zprf - 2.0, &ma4z2); << 4156 } << 4157 << 4158 if ((a - 1.) == 3.0 && (zprf - 1.0) == 2. << 4159 ma1z1 = -7.7181660; << 4160 if ((a - 1.) == 4.0 && (zprf - 1.0) == 2. << 4161 ma1z1 = -28.295992; << 4162 << 4163 // separation energies << 4164 sn = ma1z - maz; << 4165 sp = ma1z1 - maz; << 4166 sd = ma2z1 - maz - 2.2246; << 4167 st = ma3z1 - maz - 8.481977; << 4168 she = ma3z2 - maz - 7.7181660; << 4169 sa = ma4z2 - maz - 28.295992; << 4170 // << 4171 if (NbLam0 > 1) << 4172 { << 4173 sn = gethyperbinding(a, zprf, NbLam0) << 4174 sp = gethyperbinding(a, zprf, NbLam0) << 4175 sd = gethyperbinding(a, zprf, NbLam0) << 4176 st = gethyperbinding(a, zprf, NbLam0) << 4177 she = gethyperbinding(a, zprf, NbLam0 << 4178 sa = gethyperbinding(a, zprf, NbLam0) << 4179 slamb0 = gethyperbinding(a, zprf, NbL << 4180 } << 4181 if (NbLam0 == 1) << 4182 { << 4183 G4double deltasn = sn - (gethyperbind << 4184 G4double deltasp = sp - (gethyperbind << 4185 G4double deltasd = sd - (gethyperbind << 4186 G4double deltast = st - (gethyperbind << 4187 G4double deltashe = she - (gethyperbi << 4188 G4double deltasa = sa - (gethyperbind << 4189 << 4190 sn = deltasn + gethyperbinding(a, zpr << 4191 sp = deltasp + gethyperbinding(a, zpr << 4192 sd = deltasd + gethyperbinding(a, zpr << 4193 st = deltast + gethyperbinding(a, zpr << 4194 she = deltashe + gethyperbinding(a, z << 4195 sa = deltasa + gethyperbinding(a, zpr << 4196 slamb0 = gethyperseparation(a, zprf, << 4197 } << 4198 << 4199 // coulomb barriers << 4200 // Proton << 4201 if (zprf <= 1.0e0 || a <= 1.0e0 || (a - z << 4202 { << 4203 sbp = 1.0e75; << 4204 bp = 1.0e75; << 4205 } << 4206 else << 4207 { << 4208 barrs(idnint(zprf - 1.), idnint(a - 1 << 4209 bp = max(bp, 0.1); << 4210 sbp = sp + bp; << 4211 } << 4212 << 4213 // Deuteron << 4214 if (zprf <= 1.0e0 || a <= 2.0e0 || (a - z << 4215 { << 4216 sbd = 1.0e75; << 4217 bd = 1.0e75; << 4218 } << 4219 else << 4220 { << 4221 barrs(idnint(zprf - 1.), idnint(a - 2 << 4222 bd = max(bd, 0.1); << 4223 sbd = sd + bd; << 4224 } << 4225 << 4226 // Triton << 4227 if (zprf <= 1.0e0 || a <= 3.0e0 || (a - z << 4228 { << 4229 sbt = 1.0e75; << 4230 bt = 1.0e75; << 4231 } << 4232 else << 4233 { << 4234 barrs(idnint(zprf - 1.), idnint(a - 3 << 4235 bt = max(bt, 0.1); << 4236 sbt = st + bt; << 4237 } << 4238 << 4239 // Alpha << 4240 if (a - 4.0 <= 0.0 || zprf <= 2.0 || (a - << 4241 { << 4242 sba = 1.0e+75; << 4243 ba = 1.0e+75; << 4244 } << 4245 else << 4246 { << 4247 barrs(idnint(zprf - 2.), idnint(a - 4 << 4248 ba = max(ba, 0.1); << 4249 sba = sa + ba; << 4250 } << 4251 << 4252 // He3 << 4253 if (a - 3.0 <= 0.0 || zprf <= 2.0 || (a - << 4254 { << 4255 sbhe = 1.0e+75; << 4256 bhe = 1.0e+75; << 4257 } << 4258 else << 4259 { << 4260 barrs(idnint(zprf - 2.), idnint(a - 3 << 4261 bhe = max(bhe, 0.1); << 4262 sbhe = she + bhe; << 4263 } << 4264 << 4265 // Dealing with particle-unbound systems << 4266 emin = dmin1(sba, sbhe, dmin1(sbt, sbhe, << 4267 << 4268 if (emin <= 0.0) << 4269 { << 4270 *sortie = 1; << 4271 unbound(sn, << 4272 sp, << 4273 sd, << 4274 st, << 4275 she, << 4276 sa, << 4277 bp, << 4278 bd, << 4279 bt, << 4280 bhe, << 4281 ba, << 4282 &probf, << 4283 &probn, << 4284 &probp, << 4285 &probd, << 4286 &probt, << 4287 &probhe, << 4288 &proba, << 4289 &probimf, << 4290 &probg, << 4291 &ecn, << 4292 &ecp, << 4293 &ecd, << 4294 &ect, << 4295 &eche, << 4296 &eca); << 4297 goto direct70; << 4298 } << 4299 // << 4300 k = idnint(zprf); << 4301 j = idnint(a - zprf); << 4302 if (fiss->ifis > 0) << 4303 { << 4304 // now ef is calculated from efa that << 4305 // barfit which takes into account th << 4306 // note *** shell correction (ecgnz) << 4307 il = idnint(jprf); << 4308 barfit(k, k + j, il, &sbfis, &segs, & << 4309 if ((fiss->optshp == 1) || (fiss->opt << 4310 { << 4311 ef = G4double(sbfis) - ecld->ecgn << 4312 // JLRS - Nov 2016 - Corrected va << 4313 if (k == 90) << 4314 { << 4315 if (mod(j, 2) == 1) << 4316 { << 4317 ef = ef * (4.5114 - 2.268 << 4318 } << 4319 else << 4320 { << 4321 ef = ef * (3.3931 - 1.533 << 4322 } << 4323 } << 4324 if (k == 92) << 4325 { << 4326 if ((a - zprf) / zprf > 1.52) << 4327 ef = ef * (1.1222 - 0.108 << 4328 } << 4329 if (k >= 94 && k <= 98 && j < 158 << 4330 { // Data in this range have been << 4331 // tested e-e << 4332 if (mod(j, 2) == 0 && mod(k, << 4333 { << 4334 if (k >= 94) << 4335 { << 4336 ef = ef - (11.54108 * << 4337 } << 4338 } << 4339 // O-O << 4340 if (mod(j, 2) == 1 && mod(k, << 4341 { << 4342 if (k >= 95) << 4343 { << 4344 ef = ef - (14.567 * ( << 4345 } << 4346 } << 4347 // Odd A << 4348 if (mod(j, 2) == 0 && mod(k, << 4349 { << 4350 if (j >= 144) << 4351 { << 4352 ef = ef - (13.662 * ( << 4353 } << 4354 } << 4355 3081 4356 if (mod(j, 2) == 1 && mod(k, << 3082 // condition for end of evaporation 4357 { << 3083 if (zf < 3. || (ff == 1) || (fgamma == 1) || (fimf==1)) { 4358 if (j >= 144) << 3084 goto evapora100; 4359 { << 3085 } 4360 ef = ef - (13.662 * ( << 3086 goto evapora10; 4361 } << 3087 4362 } << 3088 evapora100: 4363 } << 3089 (*zf_par) = zf; 4364 } << 3090 (*af_par) = af; 4365 else << 3091 (*ee_par) = ee; 4366 { << 3092 (*faimf) = aimf; 4367 ef = G4double(sbfis); << 3093 (*fzimf) = zimf; 4368 } << 3094 (*jprfout) = jprf; 4369 // << 3095 (*tkeimf_par) = tkeimf; 4370 // TO AVOID NEGATIVE VALUES FOR IMPOS << 3096 (*mtota_par) = mtota; 4371 // THE FISSION BARRIER IS SET TO ZERO << 3097 (*vleva_par) = vleva; 4372 // << 3098 (*vxeva_par) = vxeva; 4373 if (ef < 0.0) << 3099 (*vyeva_par) = vyeva; 4374 ef = 0.0; << 3100 (*ff_par) = ff; 4375 fb->efa[j][k] = ef; << 3101 (*fimf_par) = fimf; 4376 // << 3102 (*inttype_par) = inttype; 4377 // Hyper-fission barrier << 3103 (*iev_tab_temp_par)= IEV_TAB_TEMP; 4378 // << 3104 (*inum_par) = inum; 4379 if (NbLam0 > 0) << 3105 (*NbLam0_par) = NbLam0; 4380 { << 3106 return; 4381 ef = ef + 0.51 * (1115. - 938. + << 3107 } 4382 } << 3108 4383 // << 3109 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) 4384 // Set fission barrier << 3110 { 4385 // << 3111 G4double probp = (*probp_par); 4386 (*ef_par) = ef; << 3112 G4double probd = (*probd_par); 4387 // << 3113 G4double probt = (*probt_par); 4388 // calculation of surface and curvatu << 3114 G4double probn = (*probn_par); 4389 // to calculate the level density par << 3115 G4double probhe = (*probhe_par); 4390 xx = fissility((k + j), k, NbLam0, sn << 3116 G4double proba = (*proba_par); 4391 y = 1.00 - xx; << 3117 G4double probg = (*probg_par); 4392 if (y < 0.0) << 3118 G4double probimf = (*probimf_par); 4393 y = 0.0; << 3119 G4double probf = (*probf_par); 4394 if (y > 1.0) << 3120 G4double problamb0 = (*problamb0_par); 4395 y = 1.0; << 3121 G4double ptotl = (*ptotl_par); 4396 bssp = bipol(1, y); << 3122 G4double sn = (*sn_par); 4397 bksp = bipol(2, y); << 3123 G4double sp = (*sp_par); 4398 } << 3124 G4double sd = (*sd_par); 4399 else << 3125 G4double st = (*st_par); 4400 { << 3126 G4double she = (*she_par); 4401 ef = 1.0e40; << 3127 G4double sa = (*sa_par); 4402 sbfis = 1.0e40; << 3128 G4double slamb0 = 0.0; 4403 bssp = 1.0; << 3129 G4double sbp = (*sbp_par); 4404 bksp = 1.0; << 3130 G4double sbd = (*sbd_par); 4405 } << 3131 G4double sbt = (*sbt_par); 4406 // << 3132 G4double sbhe = (*sbhe_par); 4407 // COMPOUND NUCLEUS LEVEL DENSITY << 3133 G4double sba = (*sba_par); 4408 // << 3134 G4double ecn = (*ecn_par); 4409 // AK 2007 - Now DENSNIV called with cor << 3135 G4double ecp = (*ecp_par); 4410 << 3136 G4double ecd = (*ecd_par); 4411 afp = idnint(a); << 3137 G4double ect = (*ect_par); 4412 iz = idnint(zprf); << 3138 G4double eche = (*eche_par); 4413 in = afp - iz; << 3139 G4double eca = (*eca_par); 4414 bshell = ecld->ecgnz[in][iz] - ecld->vgsl << 3140 G4double ecg = (*ecg_par); 4415 defbet = ecld->beta2[in][iz]; << 3141 G4double eclamb0 = (*eclamb0_par); 4416 << 3142 G4double bp = (*bp_par); 4417 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std << 3143 G4double bd = (*bd_par); 4418 erot = jprf * jprf * 197.328 * 197.328 / << 3144 G4double bt = (*bt_par); 4419 erotcn = erot; << 3145 G4double bhe = (*bhe_par); 4420 << 3146 G4double ba = (*ba_par); 4421 bsbkbc(a, zprf, &bscn, &bkcn, &bccn); << 3147 G4double tsum = (*tsum_par); 4422 << 3148 4423 // if(ee > erot+emin){ << 3149 // CALCULATION OF PARTICLE-EMISSION PROBABILITIES & FISSION / 4424 densniv( << 3150 // BASED ON THE SIMPLIFIED FORMULAS FOR THE DECAY WIDTH BY / 4425 a, zprf, ee, 0.0, &densg, bshell, bsc << 3151 // MORETTO, ROCHESTER MEETING TO AVOID COMPUTING TIME / 4426 ftcn = temp; << 3152 // INTENSIVE INTEGRATION OF THE LEVEL DENSITIES / 4427 /* << 3153 // USES EFFECTIVE COULOMB BARRIERS AND AN AVERAGE KINETIC ENERGY/ 4428 //ecorcn = ecor; << 3154 // OF THE EVAPORATED PARTICLES / >> 3155 // COLLECTIVE ENHANCMENT OF THE LEVEL DENSITY IS INCLUDED / >> 3156 // DYNAMICAL HINDRANCE OF FISSION IS INCLUDED BY A STEP FUNCTION/ >> 3157 // APPROXIMATION. SEE A.R. JUNGHANS DIPLOMA THESIS / >> 3158 // SHELL AND PAIRING STRUCTURES IN THE LEVEL DENSITY IS INCLUDED/ >> 3159 >> 3160 // INPUT: >> 3161 // ZPRF,A,EE CHARGE, MASS, EXCITATION ENERGY OF COMPOUND >> 3162 // NUCLEUS >> 3163 // JPRF ROOT-MEAN-SQUARED ANGULAR MOMENTUM >> 3164 >> 3165 // DEFORMATIONS AND G.S. SHELL EFFECTS >> 3166 // COMMON /ECLD/ ECGNZ,ECFNZ,VGSLD,ALPHA >> 3167 >> 3168 // ECGNZ - GROUND STATE SHELL CORR. FRLDM FOR A SPHERICAL G.S. >> 3169 // ECFNZ - SHELL CORRECTION FOR THE SADDLE POINT (NOW: == 0) >> 3170 // VGSLD - DIFFERENCE BETWEEN DEFORMED G.S. AND LDM VALUE >> 3171 // ALPHA - ALPHA GROUND STATE DEFORMATION (THIS IS NOT BETA2!) >> 3172 // BETA2 = SQRT((4PI)/5) * ALPHA >> 3173 >> 3174 //OPTIONS AND PARAMETERS FOR FISSION CHANNEL >> 3175 //COMMON /FISS/ AKAP,BET,HOMEGA,KOEFF,IFIS, >> 3176 // OPTSHP,OPTXFIS,OPTLES,OPTCOL >> 3177 // >> 3178 // AKAP - HBAR**2/(2* MN * R_0**2) = 10 MEV, R_0 = 1.4 FM >> 3179 // BET - REDUCED NUCLEAR FRICTION COEFFICIENT IN (10**21 S**-1) >> 3180 // HOMEGA - CURVATURE OF THE FISSION BARRIER = 1 MEV >> 3181 // KOEFF - COEFFICIENT FOR THE LD FISSION BARRIER == 1.0 >> 3182 // IFIS - 0/1 FISSION CHANNEL OFF/ON >> 3183 // OPTSHP - INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY >> 3184 // = 0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY >> 3185 // = 1 SHELL , NO PAIRING >> 3186 // = 2 PAIRING, NO SHELL >> 3187 // = 3 SHELL AND PAIRING >> 3188 // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT SWITCHED ON/OFF >> 3189 // OPTXFIS- 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV >> 3190 // FISSILITY PARAMETER. >> 3191 // OPTLES - CONSTANT TEMPERATURE LEVEL DENSITY FOR A,Z > TH-224 >> 3192 // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT OFF/ON >> 3193 >> 3194 // LEVEL DENSITY PARAMETERS >> 3195 // COMMON /ALD/ AV,AS,AK,OPTAFAN >> 3196 // AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE >> 3197 // LEVEL DENSITY PARAMETER >> 3198 // OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1 >> 3199 // RECOMMENDED IS OPTAFAN = 0 >> 3200 >> 3201 // FISSION BARRIERS >> 3202 // COMMON /FB/ EFA >> 3203 // EFA - ARRAY OF FISSION BARRIERS >> 3204 >> 3205 >> 3206 // OUTPUT: PROBN,PROBP,PROBA,PROBF,PTOTL: >> 3207 // - EMISSION PROBABILITIES FOR N EUTRON, P ROTON, A LPHA >> 3208 // PARTICLES, F ISSION AND NORMALISATION >> 3209 // SN,SBP,SBA: SEPARATION ENERGIES N P A >> 3210 // INCLUDING EFFECTIVE BARRIERS >> 3211 // ECN,ECP,ECA,BP,BA >> 3212 // - AVERAGE KINETIC ENERGIES (2*T) AND EFFECTIVE BARRIERS >> 3213 >> 3214 G4double bk = 0.0; >> 3215 G4double bksp = 0.0; >> 3216 G4double bc = 0.0; >> 3217 G4int afp = 0; >> 3218 G4double het = 0.0; >> 3219 G4double at = 0.0; >> 3220 G4double bs = 0.0; >> 3221 G4double bssp = 0.0; >> 3222 G4double bshell = 0.0; >> 3223 G4double cf = 0.0; >> 3224 G4double defbet = 0.0; >> 3225 G4double densa = 0.0; >> 3226 G4double denshe = 0.0; >> 3227 G4double densg = 0.0; >> 3228 G4double densn = 0.0; >> 3229 G4double densp = 0.0; >> 3230 G4double densd = 0.0; >> 3231 G4double denst = 0.0; >> 3232 G4double denslamb0 = 0.0; >> 3233 G4double eer = 0.0; >> 3234 G4double ecor = 0.0; >> 3235 G4double ef = 0.0; >> 3236 G4double ft = 0.0; >> 3237 G4double timf = 0.0; >> 3238 G4double qr = 0.0; >> 3239 G4double qrcn = 0.0; >> 3240 G4double omegap=0.0; >> 3241 G4double omegad=0.0; >> 3242 G4double omegat=0.0; >> 3243 G4double omegahe=0.0; >> 3244 G4double omegaa=0.0; >> 3245 G4double ga = 0.0; >> 3246 G4double ghe = 0.0; >> 3247 G4double gf = 0.0; >> 3248 G4double gff = 0.0; >> 3249 G4double gn = 0.0; >> 3250 G4double gp = 0.0; >> 3251 G4double gd = 0.0; >> 3252 G4double gt = 0.0; >> 3253 G4double gg = 0.0; >> 3254 G4double glamb0 = 0.0; >> 3255 G4double gimf = 0.0; >> 3256 G4double gimf3 = 0.0; >> 3257 G4double gimf5 = 0.0; >> 3258 G4double bimf = 0.0; >> 3259 G4double bsimf = 0.0; >> 3260 G4double sbimf = 0.0; >> 3261 G4double densimf = 0.0; >> 3262 G4double defbetimf = 0.0; >> 3263 G4double b_imf = 0.0; >> 3264 G4double a_imf = 0.0; >> 3265 G4double omegaimf = 0.0; >> 3266 G4int izimf = 0; >> 3267 G4double zimf = 0.0; >> 3268 G4double gsum = 0.0; >> 3269 G4double gtotal=0.0; >> 3270 G4double hbar = 6.582122e-22; >> 3271 G4double emin = 0.0; >> 3272 G4int il = 0; >> 3273 G4int choice_fisspart = 0; >> 3274 G4double t_lapse=0.0; >> 3275 G4int imaxwell = 0; >> 3276 G4int in = 0; >> 3277 G4int iz = 0; >> 3278 G4int ind = 0; >> 3279 G4int izd = 0; >> 3280 G4int j = 0; >> 3281 G4int k = 0; >> 3282 G4double ma1z = 0.0; >> 3283 G4double mazz = 0.0; >> 3284 G4double ma2z = 0.0; >> 3285 G4double ma1z1 = 0.0; >> 3286 G4double ma2z1 = 0.0; >> 3287 G4double ma3z1 = 0.0; >> 3288 G4double ma3z2 = 0.0; >> 3289 G4double ma4z2 = 0.0; >> 3290 G4double maz = 0.0; >> 3291 G4double nt = 0.0; >> 3292 G4double pi = 3.1415926535; >> 3293 G4double pt = 0.0; >> 3294 G4double dt = 0.0; >> 3295 G4double tt = 0.0; >> 3296 G4double lamb0t = 0.0; >> 3297 G4double gtemp = 0.0; >> 3298 G4double rdt = 0.0; >> 3299 G4double rtt = 0.0; >> 3300 G4double rat = 0.0; >> 3301 G4double rhet = 0.0; >> 3302 G4double refmod = 0.0; >> 3303 G4double rnt = 0.0; >> 3304 G4double rpt = 0.0; >> 3305 G4double rlamb0t = 0.0; >> 3306 G4double sbfis = 1.e40; >> 3307 G4double segs = 0.0; >> 3308 G4double selmax = 0.0; >> 3309 G4double tauc = 0.0; >> 3310 G4double temp = 0.0; >> 3311 G4double ts1 = 0.0; >> 3312 G4double xx = 0.0; >> 3313 G4double y = 0.0; >> 3314 G4double k1 = 0.0; >> 3315 G4double omegasp=0.0; >> 3316 G4double homegasp=0.0; >> 3317 G4double omegags=0.0; >> 3318 G4double homegags=0.0; >> 3319 G4double pa = 0.0; >> 3320 G4double gamma = 0.0; >> 3321 G4double gfactor = 0.0; >> 3322 G4double bscn; >> 3323 G4double bkcn; >> 3324 G4double bccn; >> 3325 G4double ftcn=0.0; >> 3326 G4double mfcd; >> 3327 G4double jprfn=jprf; >> 3328 G4double jprfp=jprf; >> 3329 G4double jprfd=jprf; >> 3330 G4double jprft=jprf; >> 3331 G4double jprfhe=jprf; >> 3332 G4double jprfa=jprf; >> 3333 G4double jprflamb0=jprf; >> 3334 G4double djprf=0.0; >> 3335 G4double dlout=0.0; >> 3336 G4double sdlout=0.0; >> 3337 G4double iinert=0.0; >> 3338 G4double erot=0.0; >> 3339 G4double erotn=0.0; >> 3340 G4double erotp=0.0; >> 3341 G4double erotd=0.0; >> 3342 G4double erott=0.0; >> 3343 G4double erothe=0.0; >> 3344 G4double erota=0.0; >> 3345 G4double erotlamb0=0.0; >> 3346 G4double erotcn=0.0; >> 3347 // G4double ecorcn=0.0; >> 3348 G4double imfarg=0.0; >> 3349 G4double width_imf=0.0; >> 3350 G4int IDjprf=0; >> 3351 G4int fimf_allowed=opt->optimfallowed; >> 3352 >> 3353 if(itest==1){ >> 3354 >> 3355 } >> 3356 // Switch to calculate Maxwellian distribution of kinetic energies >> 3357 imaxwell = 1; >> 3358 *sortie = 0; >> 3359 >> 3360 // just a change of name until the end of this subroutine >> 3361 eer = ee; >> 3362 if (inum == 1) { >> 3363 ilast = 1; >> 3364 } >> 3365 // calculation of masses >> 3366 // refmod = 1 ==> myers,swiatecki model >> 3367 // refmod = 0 ==> weizsaecker model >> 3368 refmod = 1; // Default = 1 >> 3369 // >> 3370 if (refmod == 1) { >> 3371 mglms(a,zprf,fiss->optshp,&maz); >> 3372 mglms(a-1.0,zprf,fiss->optshp,&ma1z); >> 3373 mglms(a-2.0,zprf,fiss->optshp,&ma2z); >> 3374 mglms(a-1.0,zprf-1.0,fiss->optshp,&ma1z1); >> 3375 mglms(a-2.0,zprf-1.0,fiss->optshp,&ma2z1); >> 3376 mglms(a-3.0,zprf-1.0,fiss->optshp,&ma3z1); >> 3377 mglms(a-3.0,zprf-2.0,fiss->optshp,&ma3z2); >> 3378 mglms(a-4.0,zprf-2.0,fiss->optshp,&ma4z2); >> 3379 } >> 3380 else { >> 3381 mglw(a,zprf,&maz); >> 3382 mglw(a-1.0,zprf,&ma1z); >> 3383 mglw(a-1.0,zprf-1.0,&ma1z1); >> 3384 mglw(a-2.0,zprf-1.0,&ma2z1); >> 3385 mglw(a-3.0,zprf-1.0,&ma3z1); >> 3386 mglw(a-3.0,zprf-2.0,&ma3z2); >> 3387 mglw(a-4.0,zprf-2.0,&ma4z2); >> 3388 } >> 3389 >> 3390 if((a-1.)==3.0 && (zprf-1.0)==2.0) ma1z1=-7.7181660; >> 3391 if((a-1.)==4.0 && (zprf-1.0)==2.0) ma1z1=-28.295992; >> 3392 >> 3393 // separation energies >> 3394 sn = ma1z - maz; >> 3395 sp = ma1z1 - maz; >> 3396 sd = ma2z1 - maz - 2.2246; >> 3397 st = ma3z1 - maz - 8.481977; >> 3398 she = ma3z2 - maz - 7.7181660; >> 3399 sa = ma4z2 - maz - 28.295992; >> 3400 // >> 3401 if(NbLam0>1){ >> 3402 sn = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf,NbLam0); >> 3403 sp = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf-1.,NbLam0); >> 3404 sd = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-2.,zprf-1.,NbLam0); >> 3405 st = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-1.,NbLam0); >> 3406 she = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-2.,NbLam0); >> 3407 sa = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-4.,zprf-2.,NbLam0); >> 3408 slamb0 = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf,NbLam0-1); >> 3409 } >> 3410 if(NbLam0==1){ >> 3411 G4double deltasn = sn - (gethyperbinding(a,zprf,0)-gethyperbinding(a-1.,zprf,0)); >> 3412 G4double deltasp = sp - (gethyperbinding(a,zprf,0)-gethyperbinding(a-1.,zprf-1,0)); >> 3413 G4double deltasd = sd - (gethyperbinding(a,zprf,0)-gethyperbinding(a-2.,zprf-1,0)); >> 3414 G4double deltast = st - (gethyperbinding(a,zprf,0)-gethyperbinding(a-3.,zprf-1,0)); >> 3415 G4double deltashe = she - (gethyperbinding(a,zprf,0)-gethyperbinding(a-3.,zprf-2,0)); >> 3416 G4double deltasa = sa - (gethyperbinding(a,zprf,0)-gethyperbinding(a-4.,zprf-2,0)); >> 3417 >> 3418 sn = deltasn + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf,NbLam0); >> 3419 sp = deltasp + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf-1.,NbLam0); >> 3420 sd = deltasd + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-2.,zprf-1.,NbLam0); >> 3421 st = deltast + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-1.,NbLam0); >> 3422 she = deltashe + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-2.,NbLam0); >> 3423 sa = deltasa + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-4.,zprf-2.,NbLam0); >> 3424 slamb0 = gethyperseparation(a,zprf,NbLam0); >> 3425 } >> 3426 >> 3427 // coulomb barriers >> 3428 //Proton >> 3429 if (zprf <= 1.0e0 || a <= 1.0e0 || (a-zprf) < 0.0) { >> 3430 sbp = 1.0e75; >> 3431 bp = 1.0e75; >> 3432 }else{ >> 3433 barrs(idnint(zprf-1.),idnint(a-1.),1,1,&bp,&omegap); >> 3434 bp = max(bp,0.1); >> 3435 sbp = sp + bp; >> 3436 } >> 3437 >> 3438 //Deuteron >> 3439 if (zprf <= 1.0e0 || a <= 2.0e0 || (a-zprf) < 1.0) { >> 3440 sbd = 1.0e75; >> 3441 bd = 1.0e75; >> 3442 }else{ >> 3443 barrs(idnint(zprf-1.),idnint(a-2.),1,2,&bd,&omegad); >> 3444 bd = max(bd,0.1); >> 3445 sbd = sd + bd; >> 3446 } >> 3447 >> 3448 //Triton >> 3449 if (zprf <= 1.0e0 || a <= 3.0e0 || (a-zprf) < 2.0) { >> 3450 sbt = 1.0e75; >> 3451 bt = 1.0e75; >> 3452 }else{ >> 3453 barrs(idnint(zprf-1.),idnint(a-3.),1,3,&bt,&omegat); >> 3454 bt = max(bt,0.1); >> 3455 sbt = st + bt; >> 3456 } >> 3457 >> 3458 //Alpha >> 3459 if (a-4.0<=0.0 || zprf<=2.0 || (a-zprf)<2.0) { >> 3460 sba = 1.0e+75; >> 3461 ba = 1.0e+75; >> 3462 }else{ >> 3463 barrs(idnint(zprf-2.),idnint(a-4.),2,4,&ba,&omegaa); >> 3464 ba = max(ba,0.1); >> 3465 sba = sa + ba; >> 3466 } >> 3467 >> 3468 //He3 >> 3469 if (a-3.0 <= 0.0 || zprf<=2.0 || (a-zprf)<1.0) { >> 3470 sbhe = 1.0e+75; >> 3471 bhe = 1.0e+75; >> 3472 }else{ >> 3473 barrs(idnint(zprf-2.),idnint(a-3.),2,3,&bhe,&omegahe); >> 3474 bhe = max(bhe,0.1); >> 3475 sbhe = she + bhe; >> 3476 } >> 3477 >> 3478 // Dealing with particle-unbound systems >> 3479 emin = dmin1(sba,sbhe,dmin1(sbt,sbhe,dmin1(sn,sbp,sbd))); >> 3480 >> 3481 if(emin<=0.0){ >> 3482 *sortie = 1; >> 3483 unbound(sn,sp,sd,st,she,sa,bp,bd,bt,bhe,ba,&probf,&probn,&probp,&probd,&probt,&probhe,&proba,&probimf,&probg,&ecn,&ecp,&ecd,&ect,&eche,&eca); >> 3484 goto direct70; >> 3485 } >> 3486 // >> 3487 k = idnint(zprf); >> 3488 j = idnint(a - zprf); >> 3489 if (fiss->ifis > 0) { >> 3490 // now ef is calculated from efa that depends on the subroutine >> 3491 // barfit which takes into account the modification on the ang. mom. >> 3492 // note *** shell correction (ecgnz) >> 3493 il = idnint(jprf); >> 3494 barfit(k,k+j,il,&sbfis,&segs,&selmax); >> 3495 if ((fiss->optshp == 1) || (fiss->optshp == 3)) { >> 3496 ef = G4double(sbfis) - ecld->ecgnz[j][k]; >> 3497 // JLRS - Nov 2016 - Corrected values of fission barriers for actinides >> 3498 if(k==90){ >> 3499 if(mod(j,2)==1){ >> 3500 ef = ef*(4.5114-2.2687*(a-zprf)/zprf); 4429 }else{ 3501 }else{ 4430 // If EE < EROT, only gamma emission can << 3502 ef = ef*(3.3931-1.5338*(a-zprf)/zprf); 4431 probf = 0.0; << 3503 } 4432 probp = 0.0; << 3504 } 4433 probd = 0.0; << 3505 if(k==92){ 4434 probt = 0.0; << 3506 if((a-zprf)/zprf>1.52)ef=ef*(1.1222-0.10886*(a-zprf)/zprf)-0.1; 4435 probn = 0.0; << 3507 } 4436 probhe = 0.0; << 3508 if(k>=94&&k<=98&&j<158){// Data in this range have been tested 4437 proba = 0.0; << 3509 // e-e 4438 probg = 1.0; << 3510 if(mod(j,2)==0&&mod(k,2)==0){ 4439 probimf = 0.0; << 3511 if(k>=94){ef = ef-(11.54108*(a-zprf)/zprf-18.074);} 4440 //c JLRS 03/2017 - Added this calculation << 3512 } 4441 //C According to A. Ignatyuk, GG : << 3513 // O-O 4442 //C Here BS=BK=1, as this was assumed in << 3514 if(mod(j,2)==1&&mod(k,2)==1){ 4443 pa = (ald->av)*a + (ald->as)*std << 3515 if(k>=95){ef = ef-(14.567*(a-zprf)/zprf-23.266);} 4444 (ald->ak)*std::pow(a,1./3.); gamma = 2.5 << 3516 } 4445 = 1.+gamma*ecld->ecgnz[in][iz]; if(gfacto << 3517 // Odd A 4446 } << 3518 if(mod(j,2)==0&&mod(k,2)==1){ 4447 // << 3519 if(j>=144){ef = ef-(13.662*(a-zprf)/zprf-21.656);} 4448 gtemp = 17.60/(std::pow(a,0.699) << 3520 } 4449 ecg = 4.0 * gtemp; << 3521 4450 // << 3522 if(mod(j,2)==1&&mod(k,2)==0){ 4451 goto direct70; << 3523 if(j>=144){ef = ef-(13.662*(a-zprf)/zprf-21.656);} 4452 } << 3524 } 4453 */ << 3525 } 4454 << 3526 } 4455 // ------------------------------------- << 3527 else { 4456 // LEVEL DENSITIES AND TEMPERATURE << 3528 ef = G4double(sbfis); 4457 // ------------------------------------- << 4458 // << 4459 // MVR - in case of charged particle emi << 4460 // comes from random kinetic energy from << 4461 // if option imaxwell = 1 (otherwise E=2 << 4462 // << 4463 // AK - LEVEL DENSITY AND TEMPERATURE AT << 4464 // in the subroutine FISSION_WIDTH << 4465 // << 4466 // << 4467 // LEVEL DENSITY AND TEMPERATURE IN THE N << 4468 // << 4469 // KHS, AK 2007 - Reduction of angular mo << 4470 // momentum of emitted fragment JLRS Nov- << 4471 // abla++ << 4472 << 4473 if (in >= 2) << 4474 { << 4475 ind = idnint(a) - idnint(zprf) - 1; << 4476 izd = idnint(zprf); << 4477 if (jprf > 0.10) << 4478 { << 4479 lorb(a, a - 1., jprf, ee - sn, &d << 4480 djprf = gausshaz(1, dlout, sdlout << 4481 if (IDjprf == 1) << 4482 djprf = 0.0; << 4483 jprfn = jprf + djprf; << 4484 jprfn = dint(std::abs(jprfn)); // << 4485 } << 4486 bshell = ecld->ecgnz[ind][izd] - ecld << 4487 defbet = ecld->beta2[ind][izd]; << 4488 << 4489 iinert = << 4490 0.4 * 931.49 * 1.16 * 1.16 * std: << 4491 erotn = jprfn * jprfn * 197.328 * 197 << 4492 bsbkbc(a - 1., zprf, &bs, &bk, &bc); << 4493 << 4494 // level density and temperature in t << 4495 densniv(a - 1.0, << 4496 zprf, << 4497 ee, << 4498 sn, << 4499 &densn, << 4500 bshell, << 4501 bs, << 4502 bk, << 4503 &temp, << 4504 fiss->optshp, << 4505 fiss->optcol, << 4506 defbet, << 4507 &ecor, << 4508 jprfn, << 4509 0, << 4510 &qr); << 4511 nt = temp; << 4512 ecn = 0.0; << 4513 if (densn > 0.) << 4514 { << 4515 G4int IS = 0; << 4516 if (imaxwell == 1) << 4517 { << 4518 rnt = nt; << 4519 dir1234: << 4520 ecn = fvmaxhaz_neut(rnt); << 4521 IS++; << 4522 if (IS > 100) << 4523 { << 4524 std::cout << "WARNING: FV << 4525 goto exi1000; << 4526 } << 4527 if (ecn > (ee - sn)) << 4528 { << 4529 if ((ee - sn) < rnt) << 4530 ecn = ee - sn; << 4531 else << 4532 goto dir1234; << 4533 } << 4534 if (ecn <= 0.0) << 4535 goto dir1234; << 4536 } << 4537 else << 4538 { << 4539 ecn = 2.0 * nt; << 4540 } << 4541 } << 4542 } << 4543 else << 4544 { << 4545 densn = 0.0; << 4546 ecn = 0.0; << 4547 nt = 0.0; << 4548 } << 4549 exi1000: << 4550 << 4551 // LEVEL DENSITY AND TEMPERATURE IN THE P << 4552 // << 4553 // Reduction of angular momentum due to o << 4554 // fragment << 4555 if (iz >= 2) << 4556 { << 4557 ind = idnint(a) - idnint(zprf); << 4558 izd = idnint(zprf) - 1; << 4559 if (jprf > 0.10) << 4560 { << 4561 lorb(a, a - 1., jprf, ee - sbp, & << 4562 djprf = gausshaz(1, dlout, sdlout << 4563 if (IDjprf == 1) << 4564 djprf = 0.0; << 4565 jprfp = jprf + djprf; << 4566 jprfp = dint(std::abs(jprfp)); // << 4567 } << 4568 bshell = ecld->ecgnz[ind][izd] - ecld << 4569 defbet = ecld->beta2[ind][izd]; << 4570 << 4571 iinert = << 4572 0.4 * 931.49 * 1.16 * 1.16 * std: << 4573 erotp = jprfp * jprfp * 197.328 * 197 << 4574 << 4575 bsbkbc(a - 1., zprf - 1., &bs, &bk, & << 4576 << 4577 // level density and temperature in t << 4578 densniv(a - 1.0, << 4579 zprf - 1.0, << 4580 ee, << 4581 sbp, << 4582 &densp, << 4583 bshell, << 4584 bs, << 4585 bk, << 4586 &temp, << 4587 fiss->optshp, << 4588 fiss->optcol, << 4589 defbet, << 4590 &ecor, << 4591 jprfp, << 4592 0, << 4593 &qr); << 4594 pt = temp; << 4595 ecp = 0.; << 4596 if (densp > 0.) << 4597 { << 4598 G4int IS = 0; << 4599 if (imaxwell == 1) << 4600 { << 4601 rpt = pt; << 4602 dir1235: << 4603 ecp = fvmaxhaz(rpt); << 4604 IS++; << 4605 if (IS > 100) << 4606 { << 4607 std::cout << "WARNING: FV << 4608 goto exi1001; << 4609 } << 4610 if (ecp > (ee - sbp)) << 4611 { << 4612 if ((ee - sbp) < rpt) << 4613 ecp = ee - sbp; << 4614 else << 4615 goto dir1235; << 4616 } << 4617 if (ecp <= 0.0) << 4618 goto dir1235; << 4619 ecp = ecp + bp; << 4620 } << 4621 else << 4622 { << 4623 ecp = 2.0 * pt + bp; << 4624 } << 4625 } << 4626 } << 4627 else << 4628 { << 4629 densp = 0.0; << 4630 ecp = 0.0; << 4631 pt = 0.0; << 4632 } << 4633 exi1001: << 4634 << 4635 // FINAL LEVEL DENSITY AND TEMPERATURE A << 4636 // << 4637 // Reduction of angular momentum due to o << 4638 // fragment << 4639 if ((in >= 2) && (iz >= 2)) << 4640 { << 4641 ind = idnint(a) - idnint(zprf) - 1; << 4642 izd = idnint(zprf) - 1; << 4643 if (jprf > 0.10) << 4644 { << 4645 lorb(a, a - 2., jprf, ee - sbd, & << 4646 djprf = gausshaz(1, dlout, sdlout << 4647 if (IDjprf == 1) << 4648 djprf = 0.0; << 4649 jprfd = jprf + djprf; << 4650 jprfd = dint(std::abs(jprfd)); // << 4651 } << 4652 bshell = ecld->ecgnz[ind][izd] - ecld << 4653 defbet = ecld->beta2[ind][izd]; << 4654 << 4655 iinert = << 4656 0.4 * 931.49 * 1.16 * 1.16 * std: << 4657 erotd = jprfd * jprfd * 197.328 * 197 << 4658 << 4659 bsbkbc(a - 2., zprf - 1., &bs, &bk, & << 4660 << 4661 // level density and temperature in t << 4662 densniv(a - 2.0, << 4663 zprf - 1.0e0, << 4664 ee, << 4665 sbd, << 4666 &densd, << 4667 bshell, << 4668 bs, << 4669 bk, << 4670 &temp, << 4671 fiss->optshp, << 4672 fiss->optcol, << 4673 defbet, << 4674 &ecor, << 4675 jprfd, << 4676 0, << 4677 &qr); << 4678 << 4679 dt = temp; << 4680 ecd = 0.0; << 4681 if (densd > 0.) << 4682 { << 4683 G4int IS = 0; << 4684 if (imaxwell == 1) << 4685 { << 4686 rdt = dt; << 4687 dir1236: << 4688 ecd = fvmaxhaz(rdt); << 4689 IS++; << 4690 if (IS > 100) << 4691 { << 4692 std::cout << "WARNING: FV << 4693 goto exi1002; << 4694 } << 4695 if (ecd > (ee - sbd)) << 4696 { << 4697 if ((ee - sbd) < rdt) << 4698 ecd = ee - sbd; << 4699 else << 4700 goto dir1236; << 4701 } << 4702 if (ecd <= 0.0) << 4703 goto dir1236; << 4704 ecd = ecd + bd; << 4705 } << 4706 else << 4707 { << 4708 ecd = 2.0 * dt + bd; << 4709 } << 4710 } << 4711 } << 4712 else << 4713 { << 4714 densd = 0.0; << 4715 ecd = 0.0; << 4716 dt = 0.0; << 4717 } << 4718 exi1002: << 4719 << 4720 // FINAL LEVEL DENSITY AND TEMPERATURE A << 4721 // << 4722 // Reduction of angular momentum due to o << 4723 // fragment << 4724 if ((in >= 3) && (iz >= 2)) << 4725 { << 4726 ind = idnint(a) - idnint(zprf) - 2; << 4727 izd = idnint(zprf) - 1; << 4728 if (jprf > 0.10) << 4729 { << 4730 lorb(a, a - 3., jprf, ee - sbt, & << 4731 djprf = gausshaz(1, dlout, sdlout << 4732 if (IDjprf == 1) << 4733 djprf = 0.0; << 4734 jprft = jprf + djprf; << 4735 jprft = dint(std::abs(jprft)); // << 4736 } << 4737 bshell = ecld->ecgnz[ind][izd] - ecld << 4738 defbet = ecld->beta2[ind][izd]; << 4739 << 4740 iinert = << 4741 0.4 * 931.49 * 1.16 * 1.16 * std: << 4742 erott = jprft * jprft * 197.328 * 197 << 4743 << 4744 bsbkbc(a - 3., zprf - 1., &bs, &bk, & << 4745 << 4746 // level density and temperature in t << 4747 densniv(a - 3.0, << 4748 zprf - 1.0, << 4749 ee, << 4750 sbt, << 4751 &denst, << 4752 bshell, << 4753 bs, << 4754 bk, << 4755 &temp, << 4756 fiss->optshp, << 4757 fiss->optcol, << 4758 defbet, << 4759 &ecor, << 4760 jprft, << 4761 0, << 4762 &qr); << 4763 << 4764 tt = temp; << 4765 ect = 0.; << 4766 if (denst > 0.) << 4767 { << 4768 G4int IS = 0; << 4769 if (imaxwell == 1) << 4770 { << 4771 rtt = tt; << 4772 dir1237: << 4773 ect = fvmaxhaz(rtt); << 4774 IS++; << 4775 if (IS > 100) << 4776 { << 4777 std::cout << "WARNING: FV << 4778 goto exi1003; << 4779 } << 4780 if (ect > (ee - sbt)) << 4781 { << 4782 if ((ee - sbt) < rtt) << 4783 ect = ee - sbt; << 4784 else << 4785 goto dir1237; << 4786 } << 4787 if (ect <= 0.0) << 4788 goto dir1237; << 4789 ect = ect + bt; << 4790 } << 4791 else << 4792 { << 4793 ect = 2.0 * tt + bt; << 4794 } << 4795 } << 4796 } << 4797 else << 4798 { << 4799 denst = 0.0; << 4800 ect = 0.0; << 4801 tt = 0.0; << 4802 } << 4803 exi1003: << 4804 << 4805 // LEVEL DENSITY AND TEMPERATURE IN THE A << 4806 // << 4807 // Reduction of angular momentum due to o << 4808 // fragment << 4809 if ((in >= 3) && (iz >= 3)) << 4810 { << 4811 ind = idnint(a) - idnint(zprf) - 2; << 4812 izd = idnint(zprf) - 2; << 4813 if (jprf > 0.10) << 4814 { << 4815 lorb(a, a - 4., jprf, ee - sba, & << 4816 djprf = gausshaz(1, dlout, sdlout << 4817 if (IDjprf == 1) << 4818 djprf = 0.0; << 4819 jprfa = jprf + djprf; << 4820 jprfa = dint(std::abs(jprfa)); // << 4821 } << 4822 bshell = ecld->ecgnz[ind][izd] - ecld << 4823 defbet = ecld->beta2[ind][izd]; << 4824 << 4825 iinert = << 4826 0.4 * 931.49 * 1.16 * 1.16 * std: << 4827 erota = jprfa * jprfa * 197.328 * 197 << 4828 << 4829 bsbkbc(a - 4., zprf - 2., &bs, &bk, & << 4830 << 4831 // level density and temperature in t << 4832 densniv(a - 4.0, << 4833 zprf - 2.0, << 4834 ee, << 4835 sba, << 4836 &densa, << 4837 bshell, << 4838 bs, << 4839 bk, << 4840 &temp, << 4841 fiss->optshp, << 4842 fiss->optcol, << 4843 defbet, << 4844 &ecor, << 4845 jprfa, << 4846 0, << 4847 &qr); << 4848 << 4849 at = temp; << 4850 eca = 0.0; << 4851 if (densa > 0.) << 4852 { << 4853 G4int IS = 0; << 4854 if (imaxwell == 1) << 4855 { << 4856 rat = at; << 4857 dir1238: << 4858 eca = fvmaxhaz(rat); << 4859 IS++; << 4860 if (IS > 100) << 4861 { << 4862 std::cout << "WARNING: FV << 4863 goto exi1004; << 4864 } << 4865 if (eca > (ee - sba)) << 4866 { << 4867 if ((ee - sba) < rat) << 4868 eca = ee - sba; << 4869 else << 4870 goto dir1238; << 4871 } << 4872 if (eca <= 0.0) << 4873 goto dir1238; << 4874 eca = eca + ba; << 4875 } << 4876 else << 4877 { << 4878 eca = 2.0 * at + ba; << 4879 } << 4880 } << 4881 } << 4882 else << 4883 { << 4884 densa = 0.0; << 4885 eca = 0.0; << 4886 at = 0.0; << 4887 } << 4888 exi1004: << 4889 << 4890 // FINAL LEVEL DENSITY AND TEMPERATURE A << 4891 // << 4892 // Reduction of angular momentum due to o << 4893 // fragment << 4894 if ((in >= 2) && (iz >= 3)) << 4895 { << 4896 ind = idnint(a) - idnint(zprf) - 1; << 4897 izd = idnint(zprf) - 2; << 4898 if (jprf > 0.10) << 4899 { << 4900 lorb(a, a - 3., jprf, ee - sbhe, << 4901 djprf = gausshaz(1, dlout, sdlout << 4902 if (IDjprf == 1) << 4903 djprf = 0.0; << 4904 jprfhe = jprf + djprf; << 4905 jprfhe = dint(std::abs(jprfhe)); << 4906 } << 4907 bshell = ecld->ecgnz[ind][izd] - ecld << 4908 defbet = ecld->beta2[ind][izd]; << 4909 << 4910 iinert = << 4911 0.4 * 931.49 * 1.16 * 1.16 * std: << 4912 erothe = jprfhe * jprfhe * 197.328 * << 4913 << 4914 bsbkbc(a - 3., zprf - 2., &bs, &bk, & << 4915 << 4916 // level density and temperature in t << 4917 densniv(a - 3.0, << 4918 zprf - 2.0, << 4919 ee, << 4920 sbhe, << 4921 &denshe, << 4922 bshell, << 4923 bs, << 4924 bk, << 4925 &temp, << 4926 fiss->optshp, << 4927 fiss->optcol, << 4928 defbet, << 4929 &ecor, << 4930 jprfhe, << 4931 0, << 4932 &qr); << 4933 << 4934 het = temp; << 4935 eche = 0.0; << 4936 if (denshe > 0.) << 4937 { << 4938 G4int IS = 0; << 4939 if (imaxwell == 1) << 4940 { << 4941 rhet = het; << 4942 dir1239: << 4943 eche = fvmaxhaz(rhet); << 4944 IS++; << 4945 if (IS > 100) << 4946 { << 4947 std::cout << "WARNING: FV << 4948 goto exi1005; << 4949 } << 4950 if (eche > (ee - sbhe)) << 4951 { << 4952 if ((ee - sbhe) < rhet) << 4953 eche = ee - sbhe; << 4954 else << 4955 goto dir1239; << 4956 } << 4957 if (eche <= 0.0) << 4958 goto dir1239; << 4959 eche = eche + bhe; << 4960 } << 4961 else << 4962 { << 4963 eche = 2.0 * het + bhe; << 4964 } << 4965 } << 4966 } 3529 } 4967 else << 3530 // 4968 { << 3531 // TO AVOID NEGATIVE VALUES FOR IMPOSSIBLE NUCLEI 4969 denshe = 0.0; << 3532 // THE FISSION BARRIER IS SET TO ZERO IF SMALLER THAN ZERO. 4970 eche = 0.0; << 3533 // 4971 het = 0.0; << 3534 if (ef < 0.0)ef = 0.0; 4972 } << 3535 fb->efa[j][k]=ef; 4973 exi1005: << 3536 // 4974 << 3537 // Hyper-fission barrier 4975 // LEVEL DENSITY AND TEMPERATURE IN THE L << 3538 // 4976 // << 3539 if(NbLam0>0){ 4977 // - Reduction of angular momentum due to << 3540 ef = ef + 0.51*(1115.-938.+sn-slamb0)/std::pow(a,2./3.); 4978 // fragment JLRS Jun-2017 - Added these c << 4979 << 4980 if (in >= 2 && NbLam0 > 0) << 4981 { << 4982 ind = idnint(a) - idnint(zprf) - 1; << 4983 izd = idnint(zprf); << 4984 if (jprf > 0.10) << 4985 { << 4986 lorb(a, a - 1., jprf, ee - slamb0 << 4987 djprf = gausshaz(1, dlout, sdlout << 4988 if (IDjprf == 1) << 4989 djprf = 0.0; << 4990 jprflamb0 = jprf + djprf; << 4991 jprflamb0 = dint(std::abs(jprflam << 4992 } << 4993 bshell = ecld->ecgnz[ind][izd] - ecld << 4994 defbet = ecld->beta2[ind][izd]; << 4995 << 4996 iinert = << 4997 0.4 * 931.49 * 1.16 * 1.16 * std: << 4998 erotlamb0 = jprflamb0 * jprflamb0 * 1 << 4999 bsbkbc(a - 1., zprf, &bs, &bk, &bc); << 5000 << 5001 // level density and temperature in t << 5002 densniv(a - 1.0, << 5003 zprf, << 5004 ee, << 5005 slamb0, << 5006 &denslamb0, << 5007 bshell, << 5008 bs, << 5009 bk, << 5010 &temp, << 5011 fiss->optshp, << 5012 fiss->optcol, << 5013 defbet, << 5014 &ecor, << 5015 jprflamb0, << 5016 0, << 5017 &qr); << 5018 lamb0t = temp; << 5019 eclamb0 = 0.0; << 5020 if (denslamb0 > 0.) << 5021 { << 5022 G4int IS = 0; << 5023 if (imaxwell == 1) << 5024 { << 5025 rlamb0t = lamb0t; << 5026 dir1240: << 5027 eclamb0 = fvmaxhaz_neut(rlamb << 5028 IS++; << 5029 if (IS > 100) << 5030 { << 5031 std::cout << "WARNING: FV << 5032 goto exi1006; << 5033 } << 5034 if (eclamb0 > (ee - slamb0)) << 5035 { << 5036 if ((ee - slamb0) < rlamb << 5037 eclamb0 = ee - slamb0 << 5038 else << 5039 goto dir1240; << 5040 } << 5041 if (eclamb0 <= 0.0) << 5042 goto dir1240; << 5043 } << 5044 else << 5045 { << 5046 eclamb0 = 2.0 * lamb0t; << 5047 } << 5048 } << 5049 } 3541 } 5050 else << 3542 // 5051 { << 3543 // Set fission barrier 5052 denslamb0 = 0.0; << 3544 // 5053 eclamb0 = 0.0; << 3545 (*ef_par) = ef; 5054 lamb0t = 0.0; << 3546 // 5055 } << 3547 // calculation of surface and curvature integrals needed to 5056 exi1006: << 3548 // to calculate the level density parameter at the saddle point 5057 << 3549 xx = fissility((k+j),k,NbLam0,sn,slamb0,fiss->optxfis); 5058 // Decay widths for particles << 3550 y = 1.00 - xx; 5059 if (densg > 0.) << 3551 if(y<0.0) y = 0.0; 5060 { << 3552 if(y>1.0) y = 1.0; 5061 // << 3553 bssp = bipol(1,y); 5062 // CALCULATION OF THE PARTIAL DECAY W << 3554 bksp = bipol(2,y); 5063 // USED FOR BOTH THE TIME SCALE AND T << 3555 } 5064 // << 3556 else { 5065 // AKAP = HBAR**2/(2* MN * R_0** << 3557 ef = 1.0e40; 5066 // << 3558 sbfis = 1.0e40; 5067 // AK, KHS 2005 - Energy-dependen inv << 3559 bssp = 1.0; 5068 // of << 3560 bksp = 1.0; 5069 // Coulomb barrier for << 3561 } 5070 // JLRS 2017 - Implementation in abla << 3562 // 5071 << 3563 // COMPOUND NUCLEUS LEVEL DENSITY 5072 if (densn <= 0.0) << 3564 // 5073 { << 3565 // AK 2007 - Now DENSNIV called with correct BS, BK 5074 gn = 0.0; << 5075 } << 5076 else << 5077 { << 5078 gn = width(a, zprf, 1.0, 0.0, nt, << 5079 } << 5080 if (densp <= 0.0) << 5081 { << 5082 gp = 0.0; << 5083 } << 5084 else << 5085 { << 5086 gp = width(a, zprf, 1.0, 1.0, pt, << 5087 } << 5088 if (densd <= 0.0) << 5089 { << 5090 gd = 0.0; << 5091 } << 5092 else << 5093 { << 5094 gd = width(a, zprf, 2.0, 1.0, dt, << 5095 } << 5096 if (denst <= 0.0) << 5097 { << 5098 gt = 0.0; << 5099 } << 5100 else << 5101 { << 5102 gt = width(a, zprf, 3.0, 1.0, tt, << 5103 } << 5104 if (denshe <= 0.0) << 5105 { << 5106 ghe = 0.0; << 5107 } << 5108 else << 5109 { << 5110 ghe = width(a, zprf, 3.0, 2.0, he << 5111 } << 5112 if (densa <= 0.0) << 5113 { << 5114 ga = 0.0; << 5115 } << 5116 else << 5117 { << 5118 ga = width(a, zprf, 4.0, 2.0, at, << 5119 } << 5120 if (denslamb0 <= 0.0) << 5121 { << 5122 glamb0 = 0.0; << 5123 } << 5124 else << 5125 { << 5126 glamb0 = width(a, zprf, 1.0, -2.0 << 5127 } << 5128 << 5129 // ************************** << 5130 // * Treatment of IMFs * << 5131 // * KHS, AK, MVR 2005-2006 * << 5132 // ************************** << 5133 3566 5134 G4int izcn = 0, incn = 0, inmin = 0, << 3567 afp = idnint(a); 5135 G4double aimf, mares, maimf; << 3568 iz = idnint(zprf); >> 3569 in = afp - iz; >> 3570 bshell = ecld->ecgnz[in][iz]- ecld->vgsld[in][iz]; >> 3571 defbet = ecld->beta2[in][iz]; >> 3572 >> 3573 iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet); >> 3574 erot = jprf * jprf * 197.328 * 197.328 /(2. * iinert); >> 3575 erotcn = erot; >> 3576 >> 3577 bsbkbc(a,zprf,&bscn,&bkcn,&bccn); >> 3578 >> 3579 // if(ee > erot+emin){ >> 3580 densniv(a,zprf,ee,0.0,&densg,bshell,bscn,bkcn,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprf,0,&qrcn); >> 3581 ftcn = temp; >> 3582 /* >> 3583 //ecorcn = ecor; >> 3584 }else{ >> 3585 // If EE < EROT, only gamma emission can take place >> 3586 probf = 0.0; >> 3587 probp = 0.0; >> 3588 probd = 0.0; >> 3589 probt = 0.0; >> 3590 probn = 0.0; >> 3591 probhe = 0.0; >> 3592 proba = 0.0; >> 3593 probg = 1.0; >> 3594 probimf = 0.0; >> 3595 //c JLRS 03/2017 - Added this calculation >> 3596 //C According to A. Ignatyuk, GG : >> 3597 //C Here BS=BK=1, as this was assumed in the parameterization >> 3598 pa = (ald->av)*a + (ald->as)*std::pow(a,2./3.) + (ald->ak)*std::pow(a,1./3.); >> 3599 gamma = 2.5 * pa * std::pow(a,-4./3.); >> 3600 gfactor = 1.+gamma*ecld->ecgnz[in][iz]; >> 3601 if(gfactor<=0.){ >> 3602 gfactor = 0.0; >> 3603 } >> 3604 // >> 3605 gtemp = 17.60/(std::pow(a,0.699) * std::sqrt(gfactor)); >> 3606 ecg = 4.0 * gtemp; >> 3607 // >> 3608 goto direct70; >> 3609 } >> 3610 */ >> 3611 >> 3612 // --------------------------------------------------------------- >> 3613 // LEVEL DENSITIES AND TEMPERATURES OF THE FINAL STATES >> 3614 // --------------------------------------------------------------- >> 3615 // >> 3616 // MVR - in case of charged particle emission temperature >> 3617 // comes from random kinetic energy from a Maxwelliam distribution >> 3618 // if option imaxwell = 1 (otherwise E=2T) >> 3619 // >> 3620 // AK - LEVEL DENSITY AND TEMPERATURE AT THE SADDLE POINT -> now calculated in the subroutine FISSION_WIDTH >> 3621 // >> 3622 // >> 3623 // LEVEL DENSITY AND TEMPERATURE IN THE NEUTRON DAUGHTER >> 3624 // >> 3625 // KHS, AK 2007 - Reduction of angular momentum due to orbital angular momentum of emitted fragment >> 3626 // JLRS Nov-2016 - Added these caculations in abla++ 5136 3627 5137 if (fimf_allowed == 0 || zprf <= 5.0 << 3628 if (in >= 2) { 5138 { << 3629 ind=idnint(a)-idnint(zprf)-1; 5139 gimf = 0.0; << 3630 izd=idnint(zprf); 5140 } << 3631 if(jprf>0.10){ 5141 else << 3632 lorb(a,a-1.,jprf,ee-sn,&dlout,&sdlout); 5142 { << 3633 djprf = gausshaz(1,dlout,sdlout); 5143 // Estimate the total decay << 3634 if(IDjprf==1) djprf = 0.0; 5144 // By using the logarithmic << 3635 jprfn = jprf + djprf; 5145 << 3636 jprfn = dint(std::abs(jprfn)); // The nucleus just turns the other way around 5146 mglms(a, zprf, opt->optshpimf, &m << 3637 } 5147 << 3638 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; 5148 gimf3 = 0.0; << 3639 defbet = ecld->beta2[ind][izd]; 5149 zimf = 3.0; << 3640 5150 izimf = 3; << 3641 iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-1.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet); 5151 // *** Find the limits that << 3642 erotn = jprfn * jprfn * 197.328 * 197.328 /(2. * iinert); 5152 izcn = idnint(zprf); // Z of << 3643 bsbkbc(a-1.,zprf,&bs,&bk,&bc); 5153 incn = idnint(a) - izcn; // N of << 3644 5154 << 3645 // level density and temperature in the neutron daughter 5155 isostab_lim(izimf, &inmin, << 3646 densniv(a-1.0,zprf,ee,sn,&densn,bshell, bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfn,0,&qr); 5156 &inmax); // Bound iso << 3647 nt = temp; 5157 isostab_lim(izcn - izimf, << 3648 ecn=0.0; 5158 &inmi, << 3649 if(densn>0.){ 5159 &inma); << 3650 G4int IS=0; 5160 << 3651 if(imaxwell == 1){ 5161 inmin = max(inmin, incn - inma); << 3652 rnt = nt; 5162 inmax = min(inmax, incn - inmi); << 3653 dir1234: 5163 << 3654 ecn=fvmaxhaz_neut(rnt); 5164 inmax = max(inmax, inmin); // In << 3655 IS++; 5165 << 3656 if(IS>100){std::cout << "WARNING: FVMAXHAZ_NEUT CALLED MORE THAN 100 TIMES" << std::endl; 5166 for (G4int iaimf = izimf + inmin; << 3657 goto exi1000; 5167 { << 3658 } 5168 aimf = G4double(iaimf); << 3659 if(ecn>(ee-sn)){ 5169 if (aimf >= a || zimf >= zprf << 3660 if((ee-sn)<rnt) 5170 { << 3661 ecn = ee-sn; 5171 width_imf = 0.0; << 3662 else 5172 } << 3663 goto dir1234; 5173 else << 3664 } 5174 { << 3665 if(ecn<=0.0) goto dir1234; 5175 // Q-values << 3666 }else{ 5176 mglms(a - aimf, zprf - zi << 3667 ecn = 2.0 * nt; 5177 mglms(aimf, zimf, opt->op << 3668 } 5178 // Bass barrier << 3669 } 5179 barrs(idnint(zprf - zimf) << 3670 } 5180 sbimf = maimf + mares - m << 3671 else { 5181 // Rotation energy << 3672 densn = 0.0; 5182 defbetimf = ecld->beta2[i << 3673 ecn = 0.0; 5183 ecld->beta2[i << 3674 nt = 0.0; 5184 << 3675 } 5185 iinert = 0.40 * 931.490 * << 3676 exi1000: 5186 (std::pow(ai << 5187 931.490 * 1.160 << 5188 (std::pow(ai << 5189 (std::pow(ai << 5190 << 5191 erot = jprf * jprf * 197. << 5192 << 5193 // Width << 5194 if (densg == 0.0 || ee < << 5195 { << 5196 width_imf = 0.0; << 5197 } << 5198 else << 5199 { << 5200 // To take into accou << 5201 // BSIMF = ((A-A << 5202 // AIMF**(2.D0/3 << 5203 bsimf = bscn; << 5204 densniv( << 5205 a, zprf, ee, sbim << 5206 << 5207 imfarg = (sbimf + ero << 5208 if (imfarg > 200.0) << 5209 imfarg = 200.0; << 5210 << 5211 // For IMF - The avai << 5212 // densities in CN at << 5213 // G=WIDTH*ro_CN(E-SB << 5214 // approximation: ro( << 5215 // included to take i << 5216 // deformed. If (abov << 5217 // this ratio is equa << 5218 width_imf = 0.0; << 5219 // << 5220 width_imf = << 5221 width(a, zprf, ai << 5222 } // if densg << 5223 } // if aimf << 5224 gimf3 = gimf3 + width_imf; << 5225 } // for IAIMF << 5226 << 5227 // zimf = 5 << 5228 gimf5 = 0.0; << 5229 zimf = 5.0; << 5230 izimf = 5; << 5231 // *** Find the limits that << 5232 izcn = idnint(zprf); // Z of << 5233 incn = idnint(a) - izcn; // N of << 5234 << 5235 isostab_lim(izimf, &inmin, << 5236 &inmax); // Bound iso << 5237 isostab_lim(izcn - izimf, << 5238 &inmi, << 5239 &inma); << 5240 << 5241 inmin = max(inmin, incn - inma); << 5242 inmax = min(inmax, incn - inmi); << 5243 << 5244 inmax = max(inmax, inmin); // In << 5245 << 5246 for (G4int iaimf = izimf + inmin; << 5247 { << 5248 aimf = G4double(iaimf); << 5249 if (aimf >= a || zimf >= zprf << 5250 { << 5251 width_imf = 0.0; << 5252 } << 5253 else << 5254 { << 5255 // Q-values << 5256 mglms(a - aimf, zprf - zi << 5257 mglms(aimf, zimf, opt->op << 5258 // Bass barrier << 5259 barrs(idnint(zprf - zimf) << 5260 sbimf = maimf + mares - m << 5261 // Rotation energy << 5262 defbetimf = ecld->beta2[i << 5263 ecld->beta2[i << 5264 << 5265 iinert = 0.40 * 931.490 * << 5266 (std::pow(ai << 5267 931.490 * 1.160 << 5268 (std::pow(ai << 5269 (std::pow(ai << 5270 << 5271 erot = jprf * jprf * 197. << 5272 // << 5273 // Width << 5274 if (densg == 0.0 || ee < << 5275 { << 5276 width_imf = 0.0; << 5277 } << 5278 else << 5279 { << 5280 // To take into accou << 5281 // BSIMF = ((A-A << 5282 // AIMF**(2.D0/3 << 5283 bsimf = bscn; << 5284 densniv( << 5285 a, zprf, ee, sbim << 5286 // << 5287 imfarg = (sbimf + ero << 5288 if (imfarg > 200.0) << 5289 imfarg = 200.0; << 5290 // << 5291 // For IMF - The avai << 5292 // densities in CN at << 5293 // G=WIDTH*ro_CN(E-SB << 5294 // approximation: ro( << 5295 // included to take i << 5296 // deformed. If (abov << 5297 // this ratio is equa << 5298 width_imf = 0.0; << 5299 width_imf = width(a, << 5300 qrcn; //* << 5301 } // << 5302 } // << 5303 gimf5 = gimf5 + width_imf; << 5304 } // for IAIMF << 5305 // It is assumed that GIMFi = A_I << 5306 // integrates Int(A_IMF*ZIMF**B_I << 5307 << 5308 if (gimf3 <= 0.0 || gimf5 <= 0.0) << 5309 { << 5310 gimf = 0.0; << 5311 b_imf = -100.0; << 5312 a_imf = 0.0; << 5313 } << 5314 else << 5315 { << 5316 // << 5317 b_imf = (std::log10(gimf3) - << 5318 // << 5319 if (b_imf >= -1.01) << 5320 b_imf = -1.01; << 5321 if (b_imf <= -100.0) << 5322 { << 5323 b_imf = -100.0; << 5324 a_imf = 0.0; << 5325 gimf = 0.0; << 5326 goto direct2007; << 5327 } << 5328 // << 5329 a_imf = gimf3 / std::pow(3.0, << 5330 gimf = a_imf * (std::pow(zprf << 5331 } << 5332 3677 5333 direct2007: << 3678 // LEVEL DENSITY AND TEMPERATURE IN THE PROTON DAUGHTER 5334 if (gimf < 1.e-10) << 3679 // 5335 gimf = 0.0; << 3680 // Reduction of angular momentum due to orbital angular momentum of emitted fragment 5336 } // if fimf_allowed << 3681 if (iz >= 2) { 5337 // << 3682 ind=idnint(a)-idnint(zprf); 5338 // c JLRS 2016 - Added this calcula << 3683 izd=idnint(zprf)-1; 5339 // C AK 2004 - Gamma width << 3684 if(jprf>0.10){ 5340 // C According to A. Ignatyuk, GG : << 3685 lorb(a,a-1.,jprf,ee-sbp,&dlout,&sdlout); 5341 // C Here BS=BK=1, as this was assume << 3686 djprf = gausshaz(1,dlout,sdlout); 5342 pa = (ald->av) * a + (ald->as) * std: << 3687 if(IDjprf==1) djprf = 0.0; 5343 gamma = 2.5 * pa * std::pow(a, -4. / << 3688 jprfp = jprf + djprf; 5344 gfactor = 1. + gamma * ecld->ecgnz[in << 3689 jprfp = dint(std::abs(jprfp)); // The nucleus just turns the other way around 5345 if (gfactor <= 0.) << 3690 } 5346 { << 3691 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; 5347 gfactor = 0.0; << 3692 defbet =ecld->beta2[ind][izd]; 5348 } << 3693 5349 // << 3694 iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-1.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet); 5350 gtemp = 17.60 / (std::pow(a, 0.699) * << 3695 erotp = jprfp * jprfp * 197.328 * 197.328 /(2. * iinert); 5351 // << 3696 5352 // C If one switches gammas off, one << 3697 bsbkbc(a-1.,zprf-1.,&bs,&bk,&bc); 5353 // through the fission barrier. << 3698 5354 gg = 0.624e-9 * std::pow(a, 1.6) * st << 3699 // level density and temperature in the proton daughter 5355 // gammaemission==1 << 3700 densniv(a-1.0,zprf-1.0,ee,sbp,&densp,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfp,0,&qr); 5356 // C For fission fragments, GG is ~ 2 << 3701 pt = temp; 5357 // c "oridnary" nuclei (A. Ignatyuk, << 3702 ecp = 0.; 5358 if (gammaemission == 1) << 3703 if(densp>0.){ 5359 { << 3704 G4int IS=0; 5360 gg = 2.0 * gg; << 3705 if(imaxwell == 1){ 5361 } << 3706 rpt = pt; 5362 ecg = 4.0 * gtemp; << 3707 dir1235: 5363 // << 3708 ecp=fvmaxhaz(rpt); 5364 // << 3709 IS++; 5365 gsum = ga + ghe + gd + gt + gp + gn + << 3710 if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl; >> 3711 goto exi1001; >> 3712 } >> 3713 if(ecp>(ee-sbp)){ >> 3714 if((ee-sbp)<rpt) >> 3715 ecp = ee-sbp; >> 3716 else >> 3717 goto dir1235; >> 3718 } >> 3719 if(ecp<=0.0) goto dir1235; >> 3720 ecp = ecp + bp; >> 3721 }else{ >> 3722 ecp = 2.0 * pt + bp; >> 3723 } >> 3724 } >> 3725 } >> 3726 else { >> 3727 densp = 0.0; >> 3728 ecp = 0.0; >> 3729 pt = 0.0; >> 3730 } >> 3731 exi1001: 5366 3732 5367 // std::cout << gn << " " << gd << " << 3733 // FINAL LEVEL DENSITY AND TEMPERATURE AFTER DEUTERON EMISSION >> 3734 // >> 3735 // Reduction of angular momentum due to orbital angular momentum of emitted fragment >> 3736 if ((in >= 2) && (iz >= 2)) { >> 3737 ind=idnint(a)-idnint(zprf)-1; >> 3738 izd=idnint(zprf)-1; >> 3739 if(jprf>0.10){ >> 3740 lorb(a,a-2.,jprf,ee-sbd,&dlout,&sdlout); >> 3741 djprf = gausshaz(1,dlout,sdlout); >> 3742 if(IDjprf==1) djprf = 0.0; >> 3743 jprfd = jprf + djprf; >> 3744 jprfd = dint(std::abs(jprfd)); // The nucleus just turns the other way around >> 3745 } >> 3746 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; >> 3747 defbet = ecld->beta2[ind][izd]; >> 3748 >> 3749 iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-2.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet); >> 3750 erotd = jprfd * jprfd * 197.328 * 197.328 /(2. * iinert); >> 3751 >> 3752 bsbkbc(a-2.,zprf-1.,&bs,&bk,&bc); >> 3753 >> 3754 // level density and temperature in the deuteron daughter >> 3755 densniv(a-2.0,zprf-1.0e0,ee,sbd,&densd,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfd,0,&qr); >> 3756 >> 3757 dt = temp; >> 3758 ecd = 0.0; >> 3759 if(densd>0.){ >> 3760 G4int IS=0; >> 3761 if(imaxwell == 1){ >> 3762 rdt = dt; >> 3763 dir1236: >> 3764 ecd=fvmaxhaz(rdt); >> 3765 IS++; >> 3766 if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl; >> 3767 goto exi1002; >> 3768 } >> 3769 if(ecd>(ee-sbd)){ >> 3770 if((ee-sbd)<rdt) >> 3771 ecd = ee-sbd; >> 3772 else >> 3773 goto dir1236; >> 3774 } >> 3775 if(ecd<=0.0) goto dir1236; >> 3776 ecd = ecd + bd; >> 3777 }else{ >> 3778 ecd = 2.0 * dt + bd; >> 3779 } >> 3780 } >> 3781 } >> 3782 else { >> 3783 densd = 0.0; >> 3784 ecd = 0.0; >> 3785 dt = 0.0; >> 3786 } >> 3787 exi1002: 5368 3788 5369 if (gsum > 0.0) << 3789 // FINAL LEVEL DENSITY AND TEMPERATURE AFTER TRITON EMISSION 5370 { << 3790 // 5371 ts1 = hbar / gsum; << 3791 // Reduction of angular momentum due to orbital angular momentum of emitted fragment 5372 } << 3792 if ((in >= 3) && (iz >= 2)) { 5373 else << 3793 ind=idnint(a)-idnint(zprf)-2; 5374 { << 3794 izd=idnint(zprf)-1; 5375 ts1 = 1.0e99; << 3795 if(jprf>0.10){ 5376 goto direct69; << 3796 lorb(a,a-3.,jprf,ee-sbt,&dlout,&sdlout); 5377 } << 3797 djprf = gausshaz(1,dlout,sdlout); 5378 // << 3798 if(IDjprf==1) djprf = 0.0; 5379 // Case of nuclei below Businaro-Gall << 3799 jprft = jprf + djprf; 5380 if (fiss->ifis == 0 || (zprf * zprf / << 3800 jprft = dint(std::abs(jprft)); // The nucleus just turns the other way around 5381 { << 3801 } 5382 goto direct69; << 3802 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; 5383 } << 3803 defbet = ecld->beta2[ind][izd]; 5384 // << 3804 5385 // Calculation of the fission decay w << 3805 iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-3.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet); 5386 // Deformation is calculated using th << 3806 erott = jprft * jprft * 197.328 * 197.328 /(2. * iinert); 5387 // << 3807 5388 defbet = y; << 3808 bsbkbc(a-3.,zprf-1.,&bs,&bk,&bc); 5389 fission_width(zprf, a, ee, bssp, bksp << 3809 5390 ft = temp; << 3810 // level density and temperature in the triton daughter 5391 // << 3811 densniv(a-3.0,zprf-1.0,ee,sbt,&denst,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprft,0,&qr); 5392 // Case of very heavy nuclei that hav << 3812 5393 // For them fission is the only decay << 3813 tt = temp; 5394 if (ef <= 0.0) << 3814 ect=0.; 5395 { << 3815 if(denst>0.){ 5396 probf = 1.0; << 3816 G4int IS=0; 5397 probp = 0.0; << 3817 if(imaxwell == 1){ 5398 probd = 0.0; << 3818 rtt = tt; 5399 probt = 0.0; << 3819 dir1237: 5400 probn = 0.0; << 3820 ect=fvmaxhaz(rtt); 5401 probhe = 0.0; << 3821 IS++; 5402 proba = 0.0; << 3822 if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl; 5403 probg = 0.0; << 3823 goto exi1003; 5404 probimf = 0.0; << 3824 } 5405 problamb0 = 0.0; << 3825 if(ect>(ee-sbt)){ 5406 goto direct70; << 3826 if((ee-sbt)<rtt) 5407 } << 3827 ect = ee-sbt; 5408 << 3828 else 5409 if (fiss->bet <= 0.) << 3829 goto dir1237; 5410 { << 3830 } 5411 gtotal = ga + ghe + gp + gd + gt << 3831 if(ect<=0.0) goto dir1237; 5412 if (gtotal <= 0.0) << 3832 ect = ect + bt; 5413 { << 3833 }else{ 5414 probf = 0.0; << 3834 ect = 2.0 * tt + bt; 5415 probp = 0.0; << 3835 } 5416 probd = 0.0; << 3836 } 5417 probt = 0.0; << 3837 } 5418 probn = 0.0; << 3838 else { 5419 probhe = 0.0; << 3839 denst = 0.0; 5420 proba = 0.0; << 3840 ect = 0.0; 5421 probg = 0.0; << 3841 tt = 0.0; 5422 probimf = 0.0; << 3842 } 5423 problamb0 = 0.0; << 3843 exi1003: 5424 goto direct70; << 5425 } << 5426 else << 5427 { << 5428 probf = gf / gtotal; << 5429 probn = gn / gtotal; << 5430 probp = gp / gtotal; << 5431 probd = gd / gtotal; << 5432 probt = gt / gtotal; << 5433 probhe = ghe / gtotal; << 5434 proba = ga / gtotal; << 5435 probg = gg / gtotal; << 5436 probimf = gimf / gtotal; << 5437 problamb0 = glamb0 / gtotal; << 5438 goto direct70; << 5439 } << 5440 } << 5441 } << 5442 else << 5443 { << 5444 goto direct69; << 5445 } << 5446 // << 5447 if (inum > ilast) << 5448 { // new event means reset the time scale << 5449 tsum = 0.; << 5450 } << 5451 // << 5452 // kramers factor for the dynamical hindr << 5453 fomega_sp(a, y, &mfcd, &omegasp, &homegas << 5454 cf = cram((NbLam0 > 0 ? fiss->bethyp : fi << 5455 // << 5456 // We calculate the transient time << 5457 fomega_gs(a, zprf, &k1, &omegags, &homega << 5458 tauc = tau((NbLam0 > 0 ? fiss->bethyp : f << 5459 gf = gf * cf; << 5460 // << 5461 /* << 5462 c The subroutine part_fiss calculates the << 5463 to the time c dependence of the probabili << 5464 the FOKKER-PLANCK eq c using a nucleus po << 5465 parabola. It also gives the c decay time << 5466 all particle decay channels and the c fis << 5467 the nucleus decays by particle evaporatio << 5468 CHOICE_FISSPART = 2 << 5469 */ << 5470 // << 5471 part_fiss((NbLam0 > 0 ? fiss->bethyp : fi << 5472 gf = gff; << 5473 // << 5474 // We accumulate in TSUM the mean decay f << 5475 // decay channels and fission << 5476 tsum = tsum + t_lapse; << 5477 << 5478 // If fission occurs << 5479 if (choice_fisspart == 2) << 5480 { << 5481 probf = 1.0; << 5482 probp = 0.0; << 5483 probd = 0.0; << 5484 probt = 0.0; << 5485 probn = 0.0; << 5486 probhe = 0.0; << 5487 proba = 0.0; << 5488 probg = 0.0; << 5489 probimf = 0.0; << 5490 problamb0 = 0.0; << 5491 goto direct70; << 5492 } << 5493 else << 5494 { << 5495 // If particle evaporation occurs << 5496 // The probabilities for the differen << 5497 // account the fission width GFF that << 5498 << 5499 gtotal = ga + ghe + gp + gd + gt + gn << 5500 if (gtotal <= 0.0) << 5501 { << 5502 probf = 0.0; << 5503 probp = 0.0; << 5504 probd = 0.0; << 5505 probt = 0.0; << 5506 probn = 0.0; << 5507 probhe = 0.0; << 5508 proba = 0.0; << 5509 probg = 0.0; << 5510 probimf = 0.0; << 5511 problamb0 = 0.0; << 5512 goto direct70; << 5513 } << 5514 else << 5515 { << 5516 probf = 0.0; << 5517 probn = gn / gtotal; << 5518 probp = gp / gtotal; << 5519 probd = gd / gtotal; << 5520 probt = gt / gtotal; << 5521 probhe = ghe / gtotal; << 5522 proba = ga / gtotal; << 5523 probg = gg / gtotal; << 5524 probimf = gimf / gtotal; << 5525 problamb0 = glamb0 / gtotal; << 5526 goto direct70; << 5527 } << 5528 } << 5529 // << 5530 direct69: << 5531 gtotal = ga + ghe + gp + gd + gt + gn + g << 5532 if (gtotal <= 0.0) << 5533 { << 5534 probf = 0.0; << 5535 probp = 0.0; << 5536 probd = 0.0; << 5537 probt = 0.0; << 5538 probn = 0.0; << 5539 probhe = 0.0; << 5540 proba = 0.0; << 5541 probg = 0.0; << 5542 probimf = 0.0; << 5543 problamb0 = 0.0; << 5544 } << 5545 else << 5546 { << 5547 probf = 0.0; << 5548 probn = gn / gtotal; << 5549 probp = gp / gtotal; << 5550 probd = gd / gtotal; << 5551 probt = gt / gtotal; << 5552 probhe = ghe / gtotal; << 5553 proba = ga / gtotal; << 5554 probg = gg / gtotal; << 5555 probimf = gimf / gtotal; << 5556 problamb0 = glamb0 / gtotal; << 5557 } << 5558 << 5559 direct70: << 5560 ptotl = probp + probd + probt + probn + p << 5561 // << 5562 ee = eer; << 5563 ilast = inum; << 5564 << 5565 // Return values: << 5566 (*probp_par) = probp; << 5567 (*probd_par) = probd; << 5568 (*probt_par) = probt; << 5569 (*probn_par) = probn; << 5570 (*probhe_par) = probhe; << 5571 (*proba_par) = proba; << 5572 (*probg_par) = probg; << 5573 (*probimf_par) = probimf; << 5574 (*problamb0_par) = problamb0; << 5575 (*probf_par) = probf; << 5576 (*ptotl_par) = ptotl; << 5577 (*sn_par) = sn; << 5578 (*sp_par) = sp; << 5579 (*sd_par) = sd; << 5580 (*st_par) = st; << 5581 (*she_par) = she; << 5582 (*sa_par) = sa; << 5583 (*slamb0_par) = slamb0; << 5584 (*sbp_par) = sbp; << 5585 (*sbd_par) = sbd; << 5586 (*sbt_par) = sbt; << 5587 (*sbhe_par) = sbhe; << 5588 (*sba_par) = sba; << 5589 (*ecn_par) = ecn; << 5590 (*ecp_par) = ecp; << 5591 (*ecd_par) = ecd; << 5592 (*ect_par) = ect; << 5593 (*eche_par) = eche; << 5594 (*eca_par) = eca; << 5595 (*ecg_par) = ecg; << 5596 (*eclamb0_par) = eclamb0; << 5597 (*bp_par) = bp; << 5598 (*bd_par) = bd; << 5599 (*bt_par) = bt; << 5600 (*bhe_par) = bhe; << 5601 (*ba_par) = ba; << 5602 (*tcn) = ftcn; << 5603 (*ts1_par) = ts1; << 5604 (*jprfn_par) = jprfn; << 5605 (*jprfp_par) = jprfp; << 5606 (*jprfd_par) = jprfd; << 5607 (*jprft_par) = jprft; << 5608 (*jprfhe_par) = jprfhe; << 5609 (*jprfa_par) = jprfa; << 5610 (*jprflamb0_par) = jprflamb0; << 5611 (*tsum_par) = tsum; << 5612 return; << 5613 } << 5614 3844 5615 void G4Abla::densniv(G4double a, << 3845 // LEVEL DENSITY AND TEMPERATURE IN THE ALPHA DAUGHTER 5616 G4double z, << 3846 // 5617 G4double ee, << 3847 // Reduction of angular momentum due to orbital angular momentum of emitted fragment 5618 G4double esous, << 3848 if ((in >= 3) && (iz >= 3)) { 5619 G4double* dens, << 3849 ind=idnint(a)-idnint(zprf)-2; 5620 G4double bshell, << 3850 izd=idnint(zprf)-2; 5621 G4double bsin, << 3851 if(jprf>0.10){ 5622 G4double bkin, << 3852 lorb(a,a-4.,jprf,ee-sba,&dlout,&sdlout); 5623 G4double* temp, << 3853 djprf = gausshaz(1,dlout,sdlout); 5624 G4int optshp, << 3854 if(IDjprf==1) djprf = 0.0; 5625 G4int optcol, << 3855 jprfa = jprf + djprf; 5626 G4double defbet, << 3856 jprfa = dint(std::abs(jprfa)); // The nucleus just turns the other way around 5627 G4double* ecor, << 3857 } 5628 G4double jprf, << 3858 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; 5629 G4int ifis, << 3859 defbet = ecld->beta2[ind][izd]; 5630 G4double* qr) << 3860 5631 { << 3861 iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-4.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet); 5632 // 1498 C << 3862 erota = jprfa * jprfa * 197.328 * 197.328 /(2. * iinert); 5633 // 1499 C INPUT: << 3863 5634 // 1500 C A,EE,ESOUS,OPTSHP << 3864 bsbkbc(a-4.,zprf-2.,&bs,&bk,&bc); 5635 // 1501 C << 3865 5636 // 1502 C LEVEL DENSITY PARAMETERS << 3866 // level density and temperature in the alpha daughter 5637 // 1503 C COMMON /ALD/ AV,AS,AK, << 3867 densniv(a-4.0,zprf-2.0,ee,sba,&densa,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfa,0,&qr); 5638 // 1504 C AV,AS,AK - VOLUME,SURFACE << 3868 5639 // 1505 C LEVEL DENSITY << 3869 at = temp; 5640 // 1506 C OPTAFAN - 0/1 AF/AN >=1 << 3870 eca = 0.0; 5641 // 1507 C RECOMMENDED IS << 3871 if(densa>0.){ 5642 // 1508 << 3872 G4int IS=0; 5643 // C----------------------------------- << 3873 if(imaxwell == 1){ 5644 // 1509 C OUTPUT: DENS,TEMP << 3874 rat = at; 5645 // 1510 C << 3875 dir1238: 5646 // 1511 C << 3876 eca=fvmaxhaz(rat); 5647 // ____________________________________ << 3877 IS++; 5648 // C / 1513 C / PROCEDURE FOR CALCU << 3878 if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl; 5649 // COMPOUND NUCLEUS 1514 C << 3879 goto exi1004; 5650 // /___________________________________ << 3880 } 5651 // 1515 C << 3881 if(eca>(ee-sba)){ 5652 // 1516 INTEGER AFP,IZ,OPTSHP,OPT << 3882 if((ee-sba)<rat) 5653 // 1517 REAL*8 << 3883 eca = ee-sba; 5654 // A,EE,ESOUS,DENS,E,Y0,Y1,Y2,Y01,Y11,Y << 3884 else 5655 // C=====INSERTED BY KUDYAEV=========== << 3885 goto dir1238; 5656 // 1519 COMMON /ALD/ AV,AS,AK,OPT << 3886 } 5657 // 1520 REAL*8 << 3887 if(eca<=0.0) goto dir1238; 5658 // ECR,ER,DELTAU,Z,DELTPP,PARA,PARZ,FE, << 3888 eca = eca + ba; 5659 // 1521 REAL*8 << 3889 }else{ 5660 // BSHELL,DELTA0,AV,AK,AS,PONNIV,PONFE, << 3890 eca = 2.0 * at + ba; 5661 // C=================================== << 3891 } 5662 // 1523 C << 3892 } 5663 // 1524 C << 3893 } 5664 // 1525 << 3894 else { 5665 // C----------------------------------- << 3895 densa = 0.0; 5666 // 1526 C A MASS NU << 3896 eca = 0.0; 5667 // 1527 C EE EXCITAT << 3897 at = 0.0; 5668 // 1528 C ESOUS SEPARAT << 3898 } 5669 // BARRIER << 3899 exi1004: 5670 // 1529 C DENS STATE D << 5671 // EE-ESOUS-EC 1530 C BSHELL << 5672 // NUCLEAR TEMPERATURE 1532 C E << 5673 // DAUGHTER NUCLEUS 1533 C E1 << 5674 // 1534 C Y0,Y1,Y2,Y01,Y11,Y21 << 5675 // 1535 C LOCAL HELP VA << 5676 // 1536 C PA LOCAL STATE-D << 5677 // 1537 C EC KINETIC << 5678 // WITHOUT 1538 C << 5679 // FAKTOR FOR SUBSTRACTING KINETIC ENER << 5680 // PAIRING GAP 12 FOR GROUND STATE 1541 << 5681 // SADDLE POINT 1542 C EITERA << 5682 // TEMPERATURE ITERATION 1543 << 5683 // C----------------------------------- << 5684 // 1544 C << 5685 // 1545 C << 5686 G4double delta0 = 0.0; << 5687 G4double deltau = 0.0; << 5688 G4double deltpp = 0.0; << 5689 G4double e = 0.0; << 5690 G4double e0 = 0.0; << 5691 G4double ecor1 = 0.0; << 5692 G4double ecr = 10.0; << 5693 G4double fe = 0.0; << 5694 G4double he = 0.0; << 5695 G4double pa = 0.0; << 5696 G4double para = 0.0; << 5697 G4double parz = 0.0; << 5698 G4double ponfe = 0.0; << 5699 G4double ponniv = 0.0; << 5700 G4double fqr = 1.0; << 5701 G4double y01 = 0.0; << 5702 G4double y11 = 0.0; << 5703 G4double y2 = 0.0; << 5704 G4double y21 = 0.0; << 5705 G4double y1 = 0.0; << 5706 G4double y0 = 0.0; << 5707 G4double fnorm = 0.0; << 5708 G4double fp_per = 0.; << 5709 G4double fp_par = 0.; << 5710 G4double sig_per = 0.; << 5711 G4double sig_par = 0.; << 5712 G4double sigma2; << 5713 G4double jfact = 1.; << 5714 G4double erot = 0.; << 5715 G4double fdens = 0.; << 5716 G4double fecor = 0.; << 5717 G4double BSHELLCT = 0.; << 5718 G4double gamma = 0.; << 5719 G4double ftemp = 0.0; << 5720 G4double tempct = 0.0; << 5721 G4double densfm = 0.0; << 5722 G4double densct = 0.0; << 5723 G4double ein = 0.; << 5724 G4double elim; << 5725 G4double tfm; << 5726 G4double bs = bsin; << 5727 G4double bk = bkin; << 5728 G4int IPARITE; << 5729 G4int IOPTCT = fiss->optct; << 5730 // << 5731 G4double pi6 = std::pow(3.1415926535, 2) << 5732 G4double pi = 3.1415926535; << 5733 // << 5734 G4int afp = idnint(a); << 5735 G4int iz = idnint(z); << 5736 G4int in = afp - iz; << 5737 // << 5738 if (ifis != 1) << 5739 { << 5740 BSHELLCT = ecld->ecgnz[in][iz]; << 5741 } << 5742 else << 5743 { << 5744 BSHELLCT = 0.0; << 5745 } << 5746 if (afp <= 20) << 5747 BSHELLCT = 0.0; << 5748 // << 5749 parite(a, ¶); << 5750 if (para < 0.0) << 5751 { << 5752 // Odd A << 5753 IPARITE = 1; << 5754 } << 5755 else << 5756 { << 5757 // Even A << 5758 parite(z, &parz); << 5759 if (parz > 0.0) << 5760 { << 5761 // Even Z, even N << 5762 IPARITE = 2; << 5763 } << 5764 else << 5765 { << 5766 // Odd Z, odd N << 5767 IPARITE = 0; << 5768 } << 5769 } << 5770 // << 5771 ein = ee - esous; << 5772 // << 5773 if (ein > 1.e30) << 5774 { << 5775 fdens = 0.0; << 5776 ftemp = 0.5; << 5777 goto densniv100; << 5778 } << 5779 // << 5780 e = ee - esous; << 5781 // << 5782 if (e < 0.0 && ifis != 1) << 5783 { // TUNNELING << 5784 fdens = 0.0; << 5785 densfm = 0.0; << 5786 densct = 0.0; << 5787 if (ald->optafan == 1) << 5788 { << 5789 pa = (ald->av) * a + (ald->as) * << 5790 } << 5791 else << 5792 { << 5793 pa = (ald->av) * a + (ald->as) * << 5794 (ald->ak) * bkin * std::pow( << 5795 } << 5796 gamma = 2.5 * pa * std::pow(a, -4.0 / << 5797 fecor = 0.0; << 5798 goto densniv100; << 5799 } << 5800 // << 5801 if (ifis == 0 && bs != 1.0) << 5802 { << 5803 // - With increasing excitation energ << 5804 // deformed: << 5805 G4double ponq = (e - 100.0) / 5.0; << 5806 if (ponq > 700.0) << 5807 ponq = 700.0; << 5808 bs = 1.0 / (1.0 + std::exp(-ponq)) + << 5809 bk = 1.0 / (1.0 + std::exp(-ponq)) + << 5810 } << 5811 // << 5812 // level density parameter << 5813 if (ald->optafan == 1) << 5814 { << 5815 pa = (ald->av) * a + (ald->as) * std: << 5816 } << 5817 else << 5818 { << 5819 pa = (ald->av) * a + (ald->as) * bs * << 5820 } << 5821 // << 5822 gamma = 2.5 * pa * std::pow(a, -4.0 / 3.0 << 5823 // << 5824 // AK - 2009 - trial, in order to have tr << 5825 // approach Idea - at the phase transitio << 5826 // TEMP, and this determines critical ene << 5827 if (a > 0.0) << 5828 { << 5829 ecr = pa * 17.60 / (std::pow(a, 0.699 << 5830 (std::pow(a, 0.699) * std::sqrt << 5831 } << 5832 << 5833 // pairing corrections << 5834 if (ifis == 1) << 5835 { << 5836 delta0 = 14; << 5837 } << 5838 else << 5839 { << 5840 delta0 = 12; << 5841 } << 5842 << 5843 // shell corrections << 5844 if (optshp > 0) << 5845 { << 5846 deltau = bshell; << 5847 if (optshp == 2) << 5848 { << 5849 deltau = 0.0; << 5850 } << 5851 if (optshp >= 2) << 5852 { << 5853 // pairing energy shift with cond << 5854 // deltpp = -0.25e0* (delta0/pow( << 5855 // + 2.e0*delta0/sqrt(a); << 5856 deltpp = -0.25e0 * std::pow((delt << 5857 // Odd A << 5858 if (IPARITE == 1) << 5859 { << 5860 // e = e - delta0/sqrt(a); << 5861 e = e - (0.285 + 11.17 * std: << 5862 } << 5863 // Even Z, even N << 5864 if (IPARITE == 2) << 5865 { << 5866 e = e - (22.34 * std::pow(a, << 5867 } << 5868 // Odd Z, odd N << 5869 if (IPARITE == 0) << 5870 { << 5871 if (in == iz) << 5872 { << 5873 // e = e; << 5874 } << 5875 else << 5876 { << 5877 // e = e-30./a; << 5878 } << 5879 } << 5880 } << 5881 else << 5882 { << 5883 deltpp = 0.0; << 5884 } << 5885 } << 5886 else << 5887 { << 5888 deltau = 0.0; << 5889 deltpp = 0.0; << 5890 } << 5891 << 5892 if (e < 0.0) << 5893 { << 5894 e = 0.0; << 5895 ftemp = 0.5; << 5896 } << 5897 << 5898 // washing out is made stronger << 5899 ponfe = -2.5 * pa * e * std::pow(a, (-4.0 << 5900 << 5901 if (ponfe < -700.0) << 5902 { << 5903 ponfe = -700.0; << 5904 } << 5905 fe = 1.0 - std::exp(ponfe); << 5906 if (e < ecr) << 5907 { << 5908 // priv. comm. k.-h. schmidt << 5909 he = 1.0 - std::pow((1.0 - e / ecr), << 5910 } << 5911 else << 5912 { << 5913 he = 1.0; << 5914 } << 5915 // Excitation energy corrected for pairin << 5916 // washing out with excitation energy is << 5917 fecor = e + deltau * fe + deltpp * he; << 5918 if (fecor <= 0.1) << 5919 { << 5920 fecor = 0.1; << 5921 } << 5922 // iterative procedure according to gross << 5923 // to avoid the singularity e = 0 << 5924 if (ee < 5.0) << 5925 { << 5926 y1 = std::sqrt(pa * fecor); << 5927 for (G4int j = 0; j < 5; j++) << 5928 { << 5929 y2 = pa * fecor * (1.e0 - std::ex << 5930 y1 = std::sqrt(y2); << 5931 } << 5932 y0 = pa / y1; << 5933 ftemp = 1.0 / y0; << 5934 fdens = std::exp(y0 * fecor) / << 5935 (std::pow((std::pow(fecor, 3) << 5936 std::exp(y1) * (1.0 - std::ex << 5937 if (fecor < 1.0) << 5938 { << 5939 ecor1 = 1.0; << 5940 y11 = std::sqrt(pa * ecor1); << 5941 for (G4int j = 0; j < 7; j++) << 5942 { << 5943 y21 = pa * ecor1 * (1.0 - std << 5944 y11 = std::sqrt(y21); << 5945 } << 5946 3900 5947 y01 = pa / y11; << 3901 // FINAL LEVEL DENSITY AND TEMPERATURE AFTER 3HE EMISSION 5948 fdens = fdens * std::pow((y01 / y << 3902 // 5949 ftemp = ftemp * std::pow((y01 / y << 3903 // Reduction of angular momentum due to orbital angular momentum of emitted fragment 5950 } << 3904 if ((in >= 2) && (iz >= 3)) { 5951 } << 3905 ind=idnint(a)-idnint(zprf)-1; 5952 else << 3906 izd=idnint(zprf)-2; 5953 { << 3907 if(jprf>0.10){ 5954 ponniv = 2.0 * std::sqrt(pa * fecor); << 3908 lorb(a,a-3.,jprf,ee-sbhe,&dlout,&sdlout); 5955 if (ponniv > 700.0) << 3909 djprf = gausshaz(1,dlout,sdlout); 5956 { << 3910 if(IDjprf==1) djprf = 0.0; 5957 ponniv = 700.0; << 3911 jprfhe = jprf + djprf; 5958 } << 3912 jprfhe = dint(std::abs(jprfhe)); // The nucleus just turns the other way around 5959 // fermi gas state density << 3913 } 5960 fdens = 0.1477045 * std::exp(ponniv) << 3914 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; 5961 ftemp = std::sqrt(fecor / pa); << 3915 defbet = ecld->beta2[ind][izd]; 5962 } << 3916 5963 // << 3917 iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-3.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet); 5964 densfm = fdens; << 3918 erothe = jprfhe * jprfhe * 197.328 * 197.328 /(2. * iinert); 5965 tfm = ftemp; << 3919 5966 // << 3920 bsbkbc(a-3.,zprf-2.,&bs,&bk,&bc); 5967 if (IOPTCT == 0) << 3921 5968 goto densniv100; << 3922 // level density and temperature in the he3 daughter 5969 tempct = 17.60 / (std::pow(a, 0.699) * st << 3923 densniv(a-3.0,zprf-2.0,ee,sbhe,&denshe,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfhe,0,&qr); 5970 // tempct = 1.0 / ( (0.0570 + 0.00193*BSH << 3924 5971 // PRC 80 (2009) 054310 << 3925 het = temp; 5972 << 3926 eche = 0.0; 5973 // - CONSTANT-TEMPERATURE LEVEL DENSITY P << 3927 if(denshe>0.){ 5974 if (e < 30.) << 3928 G4int IS=0; 5975 { << 3929 if(imaxwell == 1){ 5976 if (a > 0.0) << 3930 rhet = het; 5977 { << 3931 dir1239: 5978 if (optshp >= 2) << 3932 eche=fvmaxhaz(rhet); 5979 { << 3933 IS++; 5980 // Parametrization of CT mode << 3934 if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl; 5981 // correspond to pairing shif << 3935 goto exi1005; 5982 // shifted taking odd-odd nuc << 3936 } 5983 // as bassis) << 3937 if(eche>(ee-sbhe)){ 5984 // e-o, o-e << 3938 if((ee-sbhe)<rhet) 5985 if (IPARITE == 1) << 3939 eche = ee-sbhe; 5986 { << 3940 else 5987 e0 = 0.285 + 11.17 * std: << 3941 goto dir1239; 5988 } << 3942 } 5989 // e-e << 3943 if(eche<=0.0) goto dir1239; 5990 if (IPARITE == 2) << 3944 eche = eche + bhe; 5991 { << 3945 }else{ 5992 e0 = 22.34 * std::pow(a, << 3946 eche = 2.0 * het + bhe; 5993 } << 3947 } 5994 // o-o << 3948 } 5995 if (IPARITE == 0) << 3949 } 5996 { << 3950 else { 5997 e0 = 0.0; << 3951 denshe = 0.0; 5998 } << 3952 eche = 0.0; >> 3953 het = 0.0; >> 3954 } >> 3955 exi1005: 5999 3956 6000 ponniv = (ein - e0) / tempct; << 3957 // LEVEL DENSITY AND TEMPERATURE IN THE LAMBDA0 DAUGHTER 6001 if (ifis != 1) << 3958 // 6002 ponniv = max(0.0, (ein - << 3959 // - Reduction of angular momentum due to orbital angular momentum of emitted fragment 6003 if (ponniv > 700.0) << 3960 // JLRS Jun-2017 - Added these caculations in abla++ 6004 { << 6005 ponniv = 700.0; << 6006 } << 6007 densct = std::exp(ponniv) / t << 6008 3961 6009 elim = ein; << 3962 if (in >= 2 && NbLam0>0) { >> 3963 ind=idnint(a)-idnint(zprf)-1; >> 3964 izd=idnint(zprf); >> 3965 if(jprf>0.10){ >> 3966 lorb(a,a-1.,jprf,ee-slamb0,&dlout,&sdlout); >> 3967 djprf = gausshaz(1,dlout,sdlout); >> 3968 if(IDjprf==1) djprf = 0.0; >> 3969 jprflamb0 = jprf + djprf; >> 3970 jprflamb0 = dint(std::abs(jprflamb0)); // The nucleus just turns the other way around >> 3971 } >> 3972 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; >> 3973 defbet = ecld->beta2[ind][izd]; >> 3974 >> 3975 iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-1.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet); >> 3976 erotlamb0 = jprflamb0 * jprflamb0 * 197.328 * 197.328 /(2. * iinert); >> 3977 bsbkbc(a-1.,zprf,&bs,&bk,&bc); >> 3978 >> 3979 // level density and temperature in the neutron daughter >> 3980 densniv(a-1.0,zprf,ee,slamb0,&denslamb0,bshell, bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprflamb0,0,&qr); >> 3981 lamb0t = temp; >> 3982 eclamb0=0.0; >> 3983 if(denslamb0>0.){ >> 3984 G4int IS=0; >> 3985 if(imaxwell == 1){ >> 3986 rlamb0t = lamb0t; >> 3987 dir1240: >> 3988 eclamb0=fvmaxhaz_neut(rlamb0t); >> 3989 IS++; >> 3990 if(IS>100){std::cout << "WARNING: FVMAXHAZ_NEUT CALLED MORE THAN 100 TIMES" << std::endl; >> 3991 goto exi1006; >> 3992 } >> 3993 if(eclamb0>(ee-slamb0)){ >> 3994 if((ee-slamb0)<rlamb0t) >> 3995 eclamb0 = ee-slamb0; >> 3996 else >> 3997 goto dir1240; >> 3998 } >> 3999 if(eclamb0<=0.0) goto dir1240; >> 4000 }else{ >> 4001 eclamb0 = 2.0 * lamb0t; >> 4002 } >> 4003 } >> 4004 } >> 4005 else { >> 4006 denslamb0 = 0.0; >> 4007 eclamb0 = 0.0; >> 4008 lamb0t = 0.0; >> 4009 } >> 4010 exi1006: 6010 4011 6011 if (elim >= ecr && densfm <= << 6012 { << 6013 fdens = densfm; << 6014 // IREGCT = 0; << 6015 } << 6016 else << 6017 { << 6018 fdens = densct; << 6019 // IREGCT = 1; << 6020 // ecor = min(ein << 6021 } << 6022 if (elim >= ecr && tfm >= tem << 6023 { << 6024 ftemp = tfm; << 6025 } << 6026 else << 6027 { << 6028 ftemp = tempct; << 6029 } << 6030 } << 6031 else << 6032 { << 6033 // Case of no pairing conside << 6034 // ETEST = PA * TEMPCT << 6035 ponniv = (ein) / tempct; << 6036 if (ponniv > 700.0) << 6037 { << 6038 ponniv = 700.0; << 6039 } << 6040 densct = std::exp(ponniv) / t << 6041 4012 6042 if (ein >= ecr && densfm <= d << 6043 { << 6044 fdens = densfm; << 6045 ftemp = tfm; << 6046 // IREGCT = 0; << 6047 } << 6048 else << 6049 { << 6050 fdens = densct; << 6051 ftemp = tempct; << 6052 // ECOR = DMIN1( << 6053 } << 6054 4013 6055 if (ein >= ecr && tfm >= temp << 4014 // Decay widths for particles 6056 { << 4015 if ( densg > 0.) { 6057 ftemp = tfm; << 4016 // 6058 } << 4017 // CALCULATION OF THE PARTIAL DECAY WIDTH 6059 else << 4018 // USED FOR BOTH THE TIME SCALE AND THE EVAPORATION DECAY WIDTH 6060 { << 4019 // 6061 ftemp = tempct; << 4020 // AKAP = HBAR**2/(2* MN * R_0**2) = 10 MEV *** input param *** 6062 } << 4021 // 6063 } << 4022 // AK, KHS 2005 - Energy-dependen inverse cross sections included, influence of 6064 } << 4023 // Coulomb barrier for LCP, tunnelling for LCP 6065 } << 4024 // JLRS 2017 - Implementation in abla++ >> 4025 >> 4026 if(densn<=0.0){ >> 4027 gn = 0.0; >> 4028 }else{ >> 4029 gn = width(a,zprf,1.0,0.0,nt,0.0,sn,ee-erotn)* densn/densg; >> 4030 } >> 4031 if(densp<=0.0){ >> 4032 gp = 0.0; >> 4033 }else{ >> 4034 gp = width(a,zprf,1.0,1.0,pt,bp,sbp,ee-erotp)*densp/densg* pen(a, 1.0, omegap, pt); >> 4035 } >> 4036 if(densd<=0.0){ >> 4037 gd = 0.0; >> 4038 }else{ >> 4039 gd = width(a,zprf,2.0,1.0,dt,bd,sbd,ee-erotd)*densd/densg* pen(a, 2.0, omegad, dt); >> 4040 } >> 4041 if(denst<=0.0){ >> 4042 gt = 0.0; >> 4043 }else{ >> 4044 gt = width(a,zprf,3.0,1.0,tt,bt,sbt,ee-erott)*denst/densg* pen(a, 3.0, omegat, tt); >> 4045 } >> 4046 if(denshe<=0.0){ >> 4047 ghe = 0.0; >> 4048 }else{ >> 4049 ghe =width(a,zprf,3.0,2.0,het,bhe,sbhe,ee-erothe) * denshe/densg* pen(a, 3.0, omegahe, het); >> 4050 } >> 4051 if(densa<=0.0){ >> 4052 ga = 0.0; >> 4053 }else{ >> 4054 ga = width(a,zprf,4.0,2.0,at,ba,sba,ee-erota) * densa/densg* pen(a, 4.0, omegaa, at); >> 4055 } >> 4056 if(denslamb0<=0.0){ >> 4057 glamb0 = 0.0; >> 4058 }else{ >> 4059 glamb0 = width(a,zprf,1.0,-2.0,lamb0t,0.0,slamb0,ee-erotlamb0)* denslamb0/densg; >> 4060 } >> 4061 >> 4062 // ************************** >> 4063 // * Treatment of IMFs * >> 4064 // * KHS, AK, MVR 2005-2006 * >> 4065 // ************************** >> 4066 >> 4067 G4int izcn=0,incn=0,inmin=0,inmax=0,inmi=0,inma=0; >> 4068 G4double aimf,mares,maimf; >> 4069 >> 4070 if(fimf_allowed==0 || zprf<=5.0 || a<=7.0){ >> 4071 gimf = 0.0; >> 4072 }else{ >> 4073 // Estimate the total decay width for IMFs (Z >= 3) >> 4074 // By using the logarithmic slope between GIMF3 and GIMF5 >> 4075 >> 4076 mglms(a,zprf,opt->optshpimf,&mazz); >> 4077 >> 4078 gimf3 = 0.0; >> 4079 zimf = 3.0; >> 4080 izimf = 3; >> 4081 // *** Find the limits that both IMF and partner are bound : >> 4082 izcn = idnint(zprf); // Z of CN >> 4083 incn = idnint(a) - izcn; // N of CN >> 4084 >> 4085 isostab_lim(izimf,&inmin,&inmax); // Bound isotopes for IZIMF from INMIN to INIMFMA >> 4086 isostab_lim(izcn-izimf,&inmi,&inma); // Daughter nucleus after IMF emission, >> 4087 // limits of bound isotopes >> 4088 inmin = max(inmin,incn-inma); // Both IMF and daughter must be bound >> 4089 inmax = min(inmax,incn-inmi); // " >> 4090 >> 4091 inmax = max(inmax,inmin); // In order to keep the variables below >> 4092 >> 4093 for(G4int iaimf=izimf+inmin;iaimf<=izimf+inmax;iaimf++){ >> 4094 aimf=G4double(iaimf); >> 4095 if(aimf>=a || zimf>=zprf){ >> 4096 width_imf = 0.0; >> 4097 }else{ >> 4098 // Q-values >> 4099 mglms(a-aimf,zprf-zimf,opt->optshpimf,&mares); >> 4100 mglms(aimf,zimf,opt->optshpimf,&maimf); >> 4101 // Bass barrier >> 4102 barrs(idnint(zprf-zimf),idnint(a-aimf),izimf,idnint(aimf),&bimf,&omegaimf); >> 4103 sbimf = maimf+mares-mazz+bimf+getdeltabinding(a,NbLam0); >> 4104 // Rotation energy >> 4105 defbetimf = ecld->beta2[idnint(aimf-zimf)][idnint(zimf)]+ecld->beta2[idnint(a-aimf-zprf+zimf)][idnint(zprf-zimf)]; >> 4106 >> 4107 iinert= 0.40 * 931.490 * 1.160*1.160 * std::pow(a,5.0/3.0)*(std::pow(aimf,5.0/3.0) + std::pow(a - aimf,5.0/3.0)) + 931.490 * 1.160*1.160 * aimf * (a-aimf) / a *(std::pow(aimf,1.0/3.0) + std::pow(a - aimf,1.0/3.0))*(std::pow(aimf,1.0/3.0) + std::pow(a - aimf,1.0/3.0)); >> 4108 >> 4109 erot = jprf * jprf * 197.328 * 197.328 /(2.0 * iinert); >> 4110 >> 4111 // Width >> 4112 if(densg==0.0 || ee < (sbimf + erot)){ >> 4113 width_imf = 0.0; >> 4114 }else{ >> 4115 // To take into account that at the barrier the system is deformed: >> 4116 // BSIMF = ((A-AIMF)**(2.D0/3.D0) + AIMF**(2.D0/3.D0))/A**(2.D0/3.D0) >> 4117 bsimf = bscn; >> 4118 densniv(a,zprf,ee,sbimf,&densimf,0.0,bsimf,1.0,&timf,0,0,defbetimf,&ecor,jprf,2,&qr); >> 4119 >> 4120 imfarg = (sbimf+erotcn-erot)/timf; >> 4121 if(imfarg > 200.0) imfarg = 200.0; >> 4122 >> 4123 // For IMF - The available phase space is given by the level densities in CN at the >> 4124 // barrier; applaying MOrretto -> G=WIDTH*ro_CN(E-SBIMF)/ro_CN(E). >> 4125 // Constant temperature approximation: ro(E+dE)/ro(E)=exp(dE/T) >> 4126 // Ratio DENSIMF/DENSCN is included to take into account that at the barrier system >> 4127 // is deformed. If (above) BSIMF = 1 no deformation is considered and this ratio >> 4128 // is equal to 1. >> 4129 width_imf = 0.0; >> 4130 // >> 4131 width_imf = width(a,zprf,aimf,zimf,timf,bimf,sbimf,ee-erot)*std::exp(-imfarg)*qr/qrcn; >> 4132 }// if densg >> 4133 }// if aimf >> 4134 gimf3 = gimf3 + width_imf; >> 4135 }// for IAIMF >> 4136 >> 4137 // zimf = 5 >> 4138 gimf5 = 0.0; >> 4139 zimf = 5.0; >> 4140 izimf = 5; >> 4141 // *** Find the limits that both IMF and partner are bound : >> 4142 izcn = idnint(zprf); // Z of CN >> 4143 incn = idnint(a) - izcn; // N of CN >> 4144 >> 4145 isostab_lim(izimf,&inmin,&inmax); // Bound isotopes for IZIMF from INMIN to INIMFMA >> 4146 isostab_lim(izcn-izimf,&inmi,&inma); // Daughter nucleus after IMF emission, >> 4147 // limits of bound isotopes >> 4148 inmin = max(inmin,incn-inma); // Both IMF and daughter must be bound >> 4149 inmax = min(inmax,incn-inmi); // " >> 4150 >> 4151 inmax = max(inmax,inmin); // In order to keep the variables below >> 4152 >> 4153 for(G4int iaimf=izimf+inmin;iaimf<=izimf+inmax;iaimf++){ >> 4154 aimf=G4double(iaimf); >> 4155 if(aimf>=a || zimf>=zprf){ >> 4156 width_imf = 0.0; >> 4157 }else{ >> 4158 // Q-values >> 4159 mglms(a-aimf,zprf-zimf,opt->optshpimf,&mares); >> 4160 mglms(aimf,zimf,opt->optshpimf,&maimf); >> 4161 // Bass barrier >> 4162 barrs(idnint(zprf-zimf),idnint(a-aimf),izimf,idnint(aimf),&bimf,&omegaimf); >> 4163 sbimf = maimf+mares-mazz+bimf+getdeltabinding(a,NbLam0); >> 4164 // Rotation energy >> 4165 defbetimf = ecld->beta2[idnint(aimf-zimf)][idnint(zimf)]+ecld->beta2[idnint(a-aimf-zprf+zimf)][idnint(zprf-zimf)]; 6066 4166 6067 densniv100: << 4167 iinert= 0.40 * 931.490 * 1.160*1.160 * std::pow(a,5.0/3.0)*(std::pow(aimf,5.0/3.0) + std::pow(a - aimf,5.0/3.0)) + 931.490 * 1.160*1.160 * aimf * (a-aimf) / a *(std::pow(aimf,1.0/3.0) + std::pow(a - aimf,1.0/3.0))*(std::pow(aimf,1.0/3.0) + std::pow(a - aimf,1.0/3.0)); 6068 4168 6069 if (fdens == 0.0) << 4169 erot = jprf * jprf * 197.328 * 197.328 /(2.0 * iinert); 6070 { << 4170 // 6071 if (a > 0.0) << 4171 // Width 6072 { << 4172 if(densg==0.0 || ee < (sbimf + erot)){ 6073 // Parametrization of CT model by << 4173 width_imf = 0.0; 6074 ftemp = 17.60 / (std::pow(a, 0.69 << 4174 }else{ 6075 // ftemp = 1.0 / ( (0.0570 + 0.0 << 4175 // To take into account that at the barrier the system is deformed: 6076 // from PRC 80 (2009) 054310 << 4176 // BSIMF = ((A-AIMF)**(2.D0/3.D0) + AIMF**(2.D0/3.D0))/A**(2.D0/3.D0) 6077 } << 4177 bsimf = bscn; 6078 else << 4178 densniv(a,zprf,ee,sbimf,&densimf,0.0,bsimf,1.0,&timf,0,0,defbetimf,&ecor,jprf,2,&qr); 6079 { << 4179 // 6080 ftemp = 0.5; << 4180 imfarg = (sbimf+erotcn-erot)/timf; 6081 } << 4181 if(imfarg > 200.0) imfarg = 200.0; 6082 } << 4182 // 6083 // << 4183 // For IMF - The available phase space is given by the level densities in CN at the 6084 // spin cutoff parameter << 4184 // barrier; applaying MOrretto -> G=WIDTH*ro_CN(E-SBIMF)/ro_CN(E). 6085 /* << 4185 // Constant temperature approximation: ro(E+dE)/ro(E)=exp(dE/T) 6086 C PERPENDICULAR AND PARALLEL MOMENT OF IN << 4186 // Ratio DENSIMF/DENSCN is included to take into account that at the barrier system 6087 c fnorm = R0*M0/hbar**2 = 1.16fm*931.49Me << 4187 // is deformed. If (above) BSIMF = 1 no deformation is considered and this ratio 6088 c in units 1/MeV << 4188 // is equal to 1. 6089 */ << 4189 width_imf = 0.0; 6090 fnorm = std::pow(1.16, 2) * 931.49 * 1.e- << 4190 width_imf = width(a,zprf,aimf,zimf,timf,bimf,sbimf,ee-erot)*std::exp(-imfarg)*qr/qrcn;//*densimf/densg; 6091 << 4191 }// if densg 6092 if (ifis == 0 || ifis == 2) << 4192 }// if aimf 6093 { << 4193 gimf5 = gimf5 + width_imf; 6094 /* << 4194 }// for IAIMF 6095 C GROUND STATE: << 4195 // It is assumed that GIMFi = A_IMF*ZIMF**B_IMF; to get the total GIMF one integrates 6096 C FP_PER ~ 1+0.5*alpha2, FP_PAR ~ 1-a << 4196 // Int(A_IMF*ZIMF**B_IMF)(3->ZPRF) 6097 macr. nucl. phys.) C alpha2 = sqrt(5/ << 4197 6098 */ << 4198 if(gimf3<=0.0 || gimf5<=0.0){ 6099 fp_per = 0.4 * std::pow(a, 5.0 / 3.0) << 4199 gimf = 0.0; 6100 fp_par = 0.40 * std::pow(a, 5.0 / 3.0 << 4200 b_imf = -100.0; 6101 } << 4201 a_imf = 0.0; 6102 else << 4202 }else{ 6103 { << 4203 // 6104 if (ifis == 1) << 4204 b_imf = (std::log10(gimf3) - std::log10(gimf5))/(std::log10(3.0)-std::log10(5.0)); 6105 { << 4205 // 6106 /* << 4206 if(b_imf >= -1.01) b_imf = -1.01; 6107 C SADDLE POINT << 4207 if(b_imf <= -100.0) { 6108 C See Hasse&Myer, p. 100 << 4208 b_imf = -100.0; 6109 C Perpendicular moment of inertia << 4209 a_imf = 0.0; 6110 */ << 4210 gimf = 0.0; 6111 fp_per = 2.0 / 5.0 * std::pow(a, << 4211 goto direct2007; 6112 (1.0 + 7.0 / 6.0 * defbe << 4212 } 6113 // Parallel moment of inertia << 4213 // 6114 fp_par = 2.0 / 5.0 * std::pow(a, << 4214 a_imf = gimf3 / std::pow(3.0,b_imf); 6115 (1.0 - 7.0 / 3.0 * defbe << 4215 gimf = a_imf * ( std::pow(zprf,b_imf+1.0) - std::pow(3.0,b_imf+1.0)) /(b_imf + 1.0); 6116 } << 6117 else << 6118 { << 6119 if (ifis == 20) << 6120 { << 6121 // IMF - two fragments in con << 6122 // See Hasse&Myers, p.106 << 6123 // Here, DEFBET = R1/R2, wher << 6124 // partner Perpendicular mome << 6125 fp_per = 0.4 * std::pow(a, 5. << 6126 std::pow(1.0 + defbe << 6127 fp_par = 0.4 * std::pow(a, 5. << 6128 std::pow(1.0 + defbe << 6129 } << 6130 } 4216 } 6131 } << 6132 if (fp_par < 0.0) << 6133 fp_par = 0.0; << 6134 if (fp_per < 0.0) << 6135 fp_per = 0.0; << 6136 // << 6137 sig_per = std::sqrt(fp_per * ftemp); << 6138 sig_par = std::sqrt(fp_par * ftemp); << 6139 // << 6140 sigma2 = sig_per * sig_per + sig_par * si << 6141 jfact = (2. * jprf + 1.) * std::exp(-1. * << 6142 (std::sqrt(8.0 * 3.1415) * std::p << 6143 erot = jprf * jprf / (2.0 * std::sqrt(fp_ << 6144 // << 6145 // collective enhancement << 6146 if (optcol == 1) << 6147 { << 6148 qrot(z, a, defbet, sig_per, fecor - e << 6149 } << 6150 else << 6151 { << 6152 fqr = 1.0; << 6153 } << 6154 // << 6155 fdens = fdens * fqr * jfact; << 6156 // << 6157 if (fdens < 1e-300) << 6158 fdens = 0.0; << 6159 // << 6160 *dens = fdens; << 6161 *ecor = fecor; << 6162 *temp = ftemp; << 6163 *qr = fqr; << 6164 } << 6165 << 6166 void G4Abla::qrot(G4double z, G4double a, G4d << 6167 { << 6168 /* << 6169 C QROT INCLUDING DAMPING << 6170 C << 6171 C INPUT: Z,A,DEFBET,SIG,U << 6172 C << 6173 C OUTPUT: QR - COLLECTIVE ENHANCEMENT FAC << 6174 C << 6175 C SEE JUNGHANS ET AL., NUCL. PHYS. A 629 << 6176 C << 6177 C << 6178 C FR(U) EXPONENTIAL FUNCTION TO DEFI << 6179 C UCR CRITICAL ENERGY FOR DAMPING << 6180 C DCR WIDTH OF DAMPING << 6181 C DEFBET BETA-DEFORMATION ! << 6182 C SIG PERPENDICULAR SPIN CUTOFF FA << 6183 C U ENERGY << 6184 C QR COEFFICIENT OF COLLECTIVE EN << 6185 C A MASS NUMBER << 6186 C Z CHARGE NUMBER << 6187 C << 6188 */ << 6189 // JLRS: July 2016: new values for the co << 6190 // << 6191 << 6192 G4double ucr = fiss->ucr; // Critical ene << 6193 G4double dcr = fiss->dcr; // Width of dam << 6194 G4double ponq = 0.0, dn = 0.0, n = 0.0, d << 6195 G4int distn, distz, ndist, zdist; << 6196 G4int nmn[8] = { 2, 8, 14, 20, 28, 50, 82 << 6197 G4int nmz[8] = { 2, 8, 14, 20, 28, 50, 82 << 6198 // << 6199 sig = sig * sig; << 6200 // << 6201 if (std::abs(bet) <= 0.15) << 6202 { << 6203 goto qrot10; << 6204 } << 6205 else << 6206 { << 6207 goto qrot11; << 6208 } << 6209 // << 6210 qrot10: << 6211 n = a - z; << 6212 distn = 10000000; << 6213 distz = 10000000; << 6214 << 6215 for (G4int i = 0; i < 8; i++) << 6216 { << 6217 ndist = std::fabs(idnint(n) - nmn[i]) << 6218 if (ndist < distn) << 6219 distn = ndist; << 6220 zdist = std::fabs(idnint(z) - nmz[i]) << 6221 if (zdist < distz) << 6222 distz = zdist; << 6223 } << 6224 << 6225 dz = G4float(distz); << 6226 dn = G4float(distn); << 6227 << 6228 bet = 0.022 + 0.003 * dn + 0.002 * dz; << 6229 << 6230 sig = 75.0 * std::pow(bet, 2.) * sig; << 6231 << 6232 // NO VIBRATIONAL ENHANCEMENT << 6233 qrot11: << 6234 ponq = (u - ucr) / dcr; << 6235 << 6236 if (ponq > 700.0) << 6237 { << 6238 ponq = 700.0; << 6239 } << 6240 if (sig < 1.0) << 6241 { << 6242 sig = 1.0; << 6243 } << 6244 (*qr) = 1.0 / (1.0 + std::exp(ponq)) * (s << 6245 << 6246 if ((*qr) < 1.0) << 6247 { << 6248 (*qr) = 1.0; << 6249 } << 6250 << 6251 return; << 6252 } << 6253 << 6254 void G4Abla::lpoly(G4double x, G4int n, G4dou << 6255 { << 6256 // THIS SUBROUTINE CALCULATES THE ORDINAR << 6257 // ORDER 0 TO N-1 OF ARGUMENT X AND STORE << 6258 // THEY ARE CALCULATED BY RECURSION RELAT << 6259 // POLYNOMIALS. << 6260 // WRITTEN BY A.J.SIERK LANL T-9 FEBRU << 6261 // NOTE: PL AND X MUST BE DOUBLE PRECISIO << 6262 << 6263 pl[0] = 1.0; << 6264 pl[1] = x; << 6265 << 6266 for (G4int i = 2; i < n; i++) << 6267 { << 6268 pl[i] = ((2 * G4double(i + 1) - 3.0) << 6269 (G4double(i + 1) - 1.0); << 6270 } << 6271 } << 6272 4217 6273 G4double G4Abla::eflmac(G4int ia, G4int iz, G << 4218 direct2007: 6274 { << 4219 if(gimf < 1.e-10) gimf = 0.0; 6275 // CHANGED TO CALCULATE TOTAL BINDING ENE << 4220 }// if fimf_allowed 6276 // SWITCH FOR PAIRING INCLUDED AS WELL. << 4221 // 6277 // BINDING = EFLMAC(IA,IZ,0,OPTSHP) << 4222 //c JLRS 2016 - Added this calculation 6278 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EE << 4223 //C AK 2004 - Gamma width 6279 // A.J. 15.07.96 << 4224 //C According to A. Ignatyuk, GG : 6280 << 4225 //C Here BS=BK=1, as this was assumed in the parameterization 6281 // this function will calculate the liqui << 4226 pa = (ald->av)*a + (ald->as)*std::pow(a,2./3.) + (ald->ak)*std::pow(a,1./3.); 6282 // configuration according to the preprin << 4227 gamma = 2.5 * pa * std::pow(a,-4./3.); 6283 // MASSES and DEFORMATIONS by P. M"oller << 4228 gfactor = 1.+gamma*ecld->ecgnz[in][iz]; 6284 // All constants are taken from this publ << 4229 if(gfactor<=0.){ 6285 << 4230 gfactor = 0.0; 6286 // Parameters: << 4231 } 6287 // a: nuclear mass number << 4232 // 6288 // z: nuclear charge << 4233 gtemp = 17.60/(std::pow(a,0.699) * std::sqrt(gfactor)); 6289 // flag: 0 - return mass excess << 4234 // 6290 // otherwise - return pairing (= << 4235 //C If one switches gammas off, one should also switch off tunneling through the fission barrier. 6291 << 4236 gg = 0.624e-9*std::pow(a,1.6)*std::pow(gtemp,5.); 6292 G4double eflmacResult = 0.0; << 4237 //gammaemission==1 6293 << 4238 //C For fission fragments, GG is ~ 2 times larger than for 6294 if (ia == 0) << 4239 //c "oridnary" nuclei (A. Ignatyuk, private communication). 6295 return eflmacResult; << 4240 if(gammaemission==1){ 6296 << 4241 gg = 2.0 * gg; 6297 G4int in = 0; << 4242 } 6298 G4double z = 0.0, n = 0.0, a = 0.0, av = << 4243 ecg = 4.0 * gtemp; 6299 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 << 4244 // 6300 G4double ff = 0.0, ca = 0.0, w = 0.0, efl << 4245 // 6301 G4double r0 = 0.0, kf = 0.0, ks = 0.0; << 4246 gsum = ga + ghe + gd + gt + gp + gn + gimf + gg + glamb0; 6302 G4double kv = 0.0, rp = 0.0, ay = 0.0, ad << 6303 G4double esq = 0.0, ael = 0.0, i = 0.0, e << 6304 G4double pi = 3.141592653589793238e0; << 6305 << 6306 // fundamental constants << 6307 // electronic charge squared << 6308 esq = 1.4399764; << 6309 << 6310 // constants from considerations other th << 6311 // electronic binding << 6312 ael = 1.433e-5; << 6313 << 6314 // proton rms radius << 6315 rp = 0.8; << 6316 << 6317 // nuclear radius constant << 6318 r0 = 1.16; << 6319 << 6320 // range of yukawa-plus-expon. potential << 6321 ay = 0.68; << 6322 << 6323 // range of yukawa function used to gener << 6324 // nuclear charge distribution << 6325 aden = 0.70; << 6326 << 6327 // wigner constant << 6328 w = 30.0; << 6329 << 6330 // adjusted parameters << 6331 // volume energy << 6332 av = 16.00126; << 6333 << 6334 // volume asymmetry << 6335 kv = 1.92240; << 6336 << 6337 // surface energy << 6338 as = 21.18466; << 6339 << 6340 // surface asymmetry << 6341 ks = 2.345; << 6342 // a^0 constant << 6343 a0 = 2.615; << 6344 << 6345 // charge asymmetry << 6346 ca = 0.10289; << 6347 4247 6348 z = G4double(iz); << 4248 //std::cout << gn << " " << gd << " " << gp << std::endl; 6349 a = G4double(ia); << 6350 in = ia - iz; << 6351 n = G4double(in); << 6352 4249 6353 if (flag == 1) << 4250 if (gsum > 0.0) { 6354 { << 4251 ts1 = hbar / gsum; 6355 goto eflmac311; << 4252 } >> 4253 else { >> 4254 ts1 = 1.0e99; >> 4255 goto direct69; >> 4256 } >> 4257 // >> 4258 //Case of nuclei below Businaro-Gallone mass asymmetry point >> 4259 if(fiss->ifis==0 || (zprf*zprf/a<=22.74 && zprf<60.)){ >> 4260 goto direct69; 6356 } 4261 } >> 4262 // >> 4263 // Calculation of the fission decay width >> 4264 // Deformation is calculated using the fissility >> 4265 // >> 4266 defbet = y; >> 4267 fission_width(zprf,a,ee,bssp,bksp,ef,y,&gf,&temp,jprf,0,1,fiss->optcol,fiss->optshp,densg); >> 4268 ft=temp; >> 4269 // >> 4270 // Case of very heavy nuclei that have no fission barrier >> 4271 // For them fission is the only decay channel available >> 4272 if(ef<=0.0){ >> 4273 probf = 1.0; >> 4274 probp = 0.0; >> 4275 probd = 0.0; >> 4276 probt = 0.0; >> 4277 probn = 0.0; >> 4278 probhe = 0.0; >> 4279 proba = 0.0; >> 4280 probg = 0.0; >> 4281 probimf = 0.0; >> 4282 problamb0 = 0.0; >> 4283 goto direct70; >> 4284 } >> 4285 >> 4286 if(fiss->bet<=0.){ >> 4287 gtotal = ga + ghe + gp + gd + gt + gn + gg +gimf + gf + glamb0; >> 4288 if(gtotal<=0.0){ >> 4289 probf = 0.0; >> 4290 probp = 0.0; >> 4291 probd = 0.0; >> 4292 probt = 0.0; >> 4293 probn = 0.0; >> 4294 probhe = 0.0; >> 4295 proba = 0.0; >> 4296 probg = 0.0; >> 4297 probimf = 0.0; >> 4298 problamb0 = 0.0; >> 4299 goto direct70; >> 4300 }else{ >> 4301 probf = gf/gtotal; >> 4302 probn = gn/gtotal; >> 4303 probp = gp/gtotal; >> 4304 probd = gd/gtotal; >> 4305 probt = gt/gtotal; >> 4306 probhe = ghe/gtotal; >> 4307 proba = ga/gtotal; >> 4308 probg = gg/gtotal; >> 4309 probimf = gimf/gtotal; >> 4310 problamb0 = glamb0/gtotal; >> 4311 goto direct70; >> 4312 } >> 4313 } >> 4314 }else{ >> 4315 goto direct69; >> 4316 } >> 4317 // >> 4318 if (inum > ilast) { // new event means reset the time scale >> 4319 tsum = 0.; >> 4320 } >> 4321 // >> 4322 // kramers factor for the dynamical hindrances of fission >> 4323 fomega_sp(a,y,&mfcd,&omegasp,&homegasp); >> 4324 cf = cram(fiss->bet,homegasp); >> 4325 // >> 4326 // We calculate the transient time >> 4327 fomega_gs(a,zprf,&k1,&omegags,&homegags); >> 4328 tauc=tau(fiss->bet,homegags,ef,ft); >> 4329 gf=gf*cf; >> 4330 // >> 4331 /* >> 4332 c The subroutine part_fiss calculates the fission width GFF that corresponds to the time >> 4333 c dependence of the probability distribution obtained by solving the FOKKER-PLANCK eq >> 4334 c using a nucleus potential that is approximated by a parabola. It also gives the >> 4335 c decay time for this step T_LAPSE that includes all particle decay channels and the >> 4336 c fission channel. And it decides whether the nucleus decays by particle evaporation >> 4337 c CHOICE_FISSPART = 1 or fission CHOICE_FISSPART = 2 >> 4338 */ >> 4339 // >> 4340 part_fiss(fiss->bet,gsum,gf,y,tauc,ts1,tsum, &choice_fisspart,zprf,a,ft,&t_lapse,&gff); >> 4341 gf = gff; >> 4342 // >> 4343 // We accumulate in TSUM the mean decay for this step including all particle decay channels and fission >> 4344 tsum = tsum + t_lapse; 6357 4345 6358 if (iz < 13 && in < 3) << 4346 // If fission occurs 6359 { << 4347 if(choice_fisspart==2){ 6360 if (masses->mexpiop[in][iz] == 1) << 4348 probf = 1.0; 6361 { << 4349 probp = 0.0; 6362 return masses->bind[in][iz]; << 4350 probd = 0.0; >> 4351 probt = 0.0; >> 4352 probn = 0.0; >> 4353 probhe = 0.0; >> 4354 proba = 0.0; >> 4355 probg = 0.0; >> 4356 probimf = 0.0; >> 4357 problamb0 = 0.0; >> 4358 goto direct70; >> 4359 }else{ >> 4360 // If particle evaporation occurs >> 4361 // The probabilities for the different decays are calculated taking into account the fission width GFF that corresponds to this step >> 4362 >> 4363 gtotal=ga + ghe + gp + gd + gt + gn + gimf + gg + glamb0; >> 4364 if(gtotal<=0.0){ >> 4365 probf = 0.0; >> 4366 probp = 0.0; >> 4367 probd = 0.0; >> 4368 probt = 0.0; >> 4369 probn = 0.0; >> 4370 probhe = 0.0; >> 4371 proba = 0.0; >> 4372 probg = 0.0; >> 4373 probimf = 0.0; >> 4374 problamb0 = 0.0; >> 4375 goto direct70; >> 4376 }else{ >> 4377 probf = 0.0; >> 4378 probn = gn/gtotal; >> 4379 probp = gp/gtotal; >> 4380 probd = gd/gtotal; >> 4381 probt = gt/gtotal; >> 4382 probhe = ghe/gtotal; >> 4383 proba = ga/gtotal; >> 4384 probg = gg/gtotal; >> 4385 probimf = gimf/gtotal; >> 4386 problamb0 = glamb0/gtotal; >> 4387 goto direct70; 6363 } 4388 } 6364 } 4389 } 6365 << 4390 // 6366 eflmac311: << 4391 direct69: 6367 << 4392 gtotal = ga + ghe + gp + gd + gt + gn + gg + gimf + glamb0; 6368 c1 = 3.0 / 5.0 * esq / r0; << 4393 if(gtotal<=0.0){ 6369 c4 = 5.0 / 4.0 * std::pow((3.0 / (2.0 * p << 4394 probf = 0.0; 6370 kf = std::pow((9.0 * pi * z / (4.0 * a)), << 4395 probp = 0.0; 6371 << 4396 probd = 0.0; 6372 ff = -1.0 / 8.0 * rp * rp * esq / std::po << 4397 probt = 0.0; 6373 (145.0 / 48.0 - 327.0 / 2880.0 * std << 4398 probn = 0.0; 6374 1527.0 / 1209600.0 * std::pow(kf, 4 << 4399 probhe = 0.0; 6375 i = (n - z) / a; << 4400 proba = 0.0; 6376 << 4401 probg = 0.0; 6377 x0 = r0 * std::pow(a, (1.0 / 3.0)) / ay; << 4402 probimf = 0.0; 6378 y0 = r0 * std::pow(a, (1.0 / 3.0)) / aden << 4403 problamb0 = 0.0; 6379 << 4404 }else{ 6380 b1 = 1.0 - 3.0 / (std::pow(x0, 2)) + (1.0 << 4405 probf = 0.0; 6381 << 4406 probn = gn/gtotal; 6382 b3 = 1.0 - 5.0 / std::pow(y0, 2) * << 4407 probp = gp/gtotal; 6383 (1.0 - 15.0 / (8.0 * y0) + << 4408 probd = gd/gtotal; 6384 3.0 / 4.0 * (1.0 + 9.0 / << 4409 probt = gt/gtotal; 6385 std::exp(-2.0 * y0)); << 4410 probhe = ghe/gtotal; 6386 << 4411 proba = ga/gtotal; 6387 // now calculation of total binding energ << 4412 probg = gg/gtotal; 6388 << 4413 probimf = gimf/gtotal; 6389 efl = -1.0 * av * (1.0 - kv * i * i) * a << 4414 problamb0 = glamb0/gtotal; 6390 c1 * z * z * b3 / std::pow(a, (1.0 << 4415 } 6391 ff * std::pow(z, 2) / a - ca * (n - << 4416 6392 << 4417 direct70: 6393 efl = efl + w * std::abs(i); << 4418 ptotl = probp+probd+probt+probn+probhe+proba+probg+probimf+probf+problamb0; 6394 << 4419 // 6395 // pairing is made optional << 4420 ee = eer; 6396 if (optshp >= 2) << 4421 ilast = inum; 6397 { << 4422 6398 // average pairing << 4423 // Return values: 6399 if (in == iz && (mod(in, 2) == 1) && << 4424 (*probp_par) = probp; 6400 { << 4425 (*probd_par) = probd; 6401 efl = efl + w / a; << 4426 (*probt_par) = probt; 6402 } << 4427 (*probn_par) = probn; 6403 << 4428 (*probhe_par) = probhe; 6404 // AK 2008 - Parametrization of CT mo << 4429 (*proba_par) = proba; 6405 // The following part has been introd << 4430 (*probg_par) = probg; 6406 // between pairing in masses and leve << 4431 (*probimf_par) = probimf; 6407 // AK 2010 note that E0 is shifted t << 4432 (*problamb0_par) = problamb0; 6408 // Fermi-gas model (there, energy is << 4433 (*probf_par) = probf; 6409 // as bassis) << 4434 (*ptotl_par) = ptotl; 6410 << 4435 (*sn_par) = sn; 6411 G4double para = 0.; << 4436 (*sp_par) = sp; 6412 parite(a, ¶); << 4437 (*sd_par) = sd; 6413 << 4438 (*st_par) = st; 6414 if (para < 0.0) << 4439 (*she_par) = she; 6415 { << 4440 (*sa_par) = sa; 6416 // e-o, o-e << 4441 (*slamb0_par) = slamb0; 6417 e0 = 0.285 + 11.17 * std::pow(a, << 4442 (*sbp_par) = sbp; >> 4443 (*sbd_par) = sbd; >> 4444 (*sbt_par) = sbt; >> 4445 (*sbhe_par) = sbhe; >> 4446 (*sba_par) = sba; >> 4447 (*ecn_par) = ecn; >> 4448 (*ecp_par) = ecp; >> 4449 (*ecd_par) = ecd; >> 4450 (*ect_par) = ect; >> 4451 (*eche_par) = eche; >> 4452 (*eca_par) = eca; >> 4453 (*ecg_par) = ecg; >> 4454 (*eclamb0_par) = eclamb0; >> 4455 (*bp_par) = bp; >> 4456 (*bd_par) = bd; >> 4457 (*bt_par) = bt; >> 4458 (*bhe_par) = bhe; >> 4459 (*ba_par) = ba; >> 4460 (*tcn) = ftcn; >> 4461 (*ts1_par) = ts1; >> 4462 (*jprfn_par) = jprfn; >> 4463 (*jprfp_par) = jprfp; >> 4464 (*jprfd_par) = jprfd; >> 4465 (*jprft_par) = jprft; >> 4466 (*jprfhe_par) = jprfhe; >> 4467 (*jprfa_par) = jprfa; >> 4468 (*jprflamb0_par) = jprflamb0; >> 4469 (*tsum_par) = tsum; >> 4470 return; >> 4471 } >> 4472 >> 4473 void G4Abla::densniv(G4double a, G4double z, G4double ee, G4double esous, G4double *dens, G4double bshell, G4double bsin, G4double bkin, G4double *temp, G4int optshp, G4int optcol, G4double defbet, G4double *ecor, G4double jprf, G4int ifis,G4double *qr) >> 4474 { >> 4475 // 1498 C >> 4476 // 1499 C INPUT: >> 4477 // 1500 C A,EE,ESOUS,OPTSHP,BS,BK,BSHELL,DEFBET >> 4478 // 1501 C >> 4479 // 1502 C LEVEL DENSITY PARAMETERS >> 4480 // 1503 C COMMON /ALD/ AV,AS,AK,OPTAFAN >> 4481 // 1504 C AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE >> 4482 // 1505 C LEVEL DENSITY PARAMETER >> 4483 // 1506 C OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1 >> 4484 // 1507 C RECOMMENDED IS OPTAFAN = 0 >> 4485 // 1508 C--------------------------------------------------------------------- >> 4486 // 1509 C OUTPUT: DENS,TEMP >> 4487 // 1510 C >> 4488 // 1511 C ____________________________________________________________________ >> 4489 // 1512 C / >> 4490 // 1513 C / PROCEDURE FOR CALCULATING THE STATE DENSITY OF A COMPOUND NUCLEUS >> 4491 // 1514 C /____________________________________________________________________ >> 4492 // 1515 C >> 4493 // 1516 INTEGER AFP,IZ,OPTSHP,OPTCOL,J,OPTAFAN >> 4494 // 1517 REAL*8 A,EE,ESOUS,DENS,E,Y0,Y1,Y2,Y01,Y11,Y21,PA,BS,BK,TEMP >> 4495 // 1518 C=====INSERTED BY KUDYAEV=============================================== >> 4496 // 1519 COMMON /ALD/ AV,AS,AK,OPTAFAN >> 4497 // 1520 REAL*8 ECR,ER,DELTAU,Z,DELTPP,PARA,PARZ,FE,HE,ECOR,ECOR1,Pi6 >> 4498 // 1521 REAL*8 BSHELL,DELTA0,AV,AK,AS,PONNIV,PONFE,DEFBET,QR,SIG,FP >> 4499 // 1522 C======================================================================= >> 4500 // 1523 C >> 4501 // 1524 C >> 4502 // 1525 C----------------------------------------------------------------------- >> 4503 // 1526 C A MASS NUMBER OF THE DAUGHTER NUCLEUS >> 4504 // 1527 C EE EXCITATION ENERGY OF THE MOTHER NUCLEUS >> 4505 // 1528 C ESOUS SEPARATION ENERGY PLUS EFFECTIVE COULOMB BARRIER >> 4506 // 1529 C DENS STATE DENSITY OF DAUGHTER NUCLEUS AT EE-ESOUS-EC >> 4507 // 1530 C BSHELL SHELL CORRECTION >> 4508 // 1531 C TEMP NUCLEAR TEMPERATURE >> 4509 // 1532 C E LOCAL EXCITATION ENERGY OF THE DAUGHTER NUCLEUS >> 4510 // 1533 C E1 LOCAL HELP VARIABLE >> 4511 // 1534 C Y0,Y1,Y2,Y01,Y11,Y21 >> 4512 // 1535 C LOCAL HELP VARIABLES >> 4513 // 1536 C PA LOCAL STATE-DENSITY PARAMETER >> 4514 // 1537 C EC KINETIC ENERGY OF EMITTED PARTICLE WITHOUT >> 4515 // 1538 C COULOMB REPULSION >> 4516 // 1539 C IDEN FAKTOR FOR SUBSTRACTING KINETIC ENERGY IDEN*TEMP >> 4517 // 1540 C DELTA0 PAIRING GAP 12 FOR GROUND STATE >> 4518 // 1541 C 14 FOR SADDLE POINT >> 4519 // 1542 C EITERA HELP VARIABLE FOR TEMPERATURE ITERATION >> 4520 // 1543 C----------------------------------------------------------------------- >> 4521 // 1544 C >> 4522 // 1545 C >> 4523 G4double delta0 = 0.0; >> 4524 G4double deltau = 0.0; >> 4525 G4double deltpp = 0.0; >> 4526 G4double e = 0.0; >> 4527 G4double e0 = 0.0; >> 4528 G4double ecor1 = 0.0; >> 4529 G4double ecr = 10.0; >> 4530 G4double fe = 0.0; >> 4531 G4double he = 0.0; >> 4532 G4double pa = 0.0; >> 4533 G4double para = 0.0; >> 4534 G4double parz = 0.0; >> 4535 G4double ponfe = 0.0; >> 4536 G4double ponniv = 0.0; >> 4537 G4double fqr = 1.0; >> 4538 G4double y01 = 0.0; >> 4539 G4double y11 = 0.0; >> 4540 G4double y2 = 0.0; >> 4541 G4double y21 = 0.0; >> 4542 G4double y1 = 0.0; >> 4543 G4double y0 = 0.0; >> 4544 G4double fnorm=0.0; >> 4545 G4double fp_per=0.; >> 4546 G4double fp_par=0.; >> 4547 G4double sig_per=0.; >> 4548 G4double sig_par=0.; >> 4549 G4double sigma2; >> 4550 G4double jfact=1.; >> 4551 G4double erot=0.; >> 4552 G4double fdens=0.; >> 4553 G4double fecor=0.; >> 4554 G4double BSHELLCT=0.; >> 4555 G4double gamma=0.; >> 4556 G4double ftemp=0.0; >> 4557 G4double tempct=0.0; >> 4558 G4double densfm = 0.0; >> 4559 G4double densct = 0.0; >> 4560 G4double ein=0.; >> 4561 G4double elim; >> 4562 G4double tfm; >> 4563 G4double bs=bsin; >> 4564 G4double bk=bkin; >> 4565 G4int IPARITE; >> 4566 G4int IOPTCT=fiss->optct; >> 4567 // >> 4568 G4double pi6 = std::pow(3.1415926535,2) / 6.0; >> 4569 G4double pi = 3.1415926535; >> 4570 // >> 4571 G4int afp=idnint(a); >> 4572 G4int iz=idnint(z); >> 4573 G4int in=afp-iz; >> 4574 // >> 4575 if(ifis!=1){ >> 4576 BSHELLCT = ecld->ecgnz[in][iz]; >> 4577 }else{ >> 4578 BSHELLCT = 0.0; >> 4579 } >> 4580 if(afp<=20) BSHELLCT = 0.0; >> 4581 // >> 4582 parite(a,¶); >> 4583 if (para < 0.0){ >> 4584 // Odd A >> 4585 IPARITE=1; >> 4586 }else{ >> 4587 // Even A >> 4588 parite(z,&parz); >> 4589 if(parz > 0.0){ >> 4590 // Even Z, even N >> 4591 IPARITE=2; >> 4592 }else{ >> 4593 // Odd Z, odd N >> 4594 IPARITE=0; >> 4595 } >> 4596 } >> 4597 // >> 4598 ein = ee - esous; >> 4599 // >> 4600 if(ein>1.e30){ >> 4601 fdens = 0.0; >> 4602 ftemp = 0.5; >> 4603 goto densniv100; >> 4604 } >> 4605 // >> 4606 e = ee - esous; >> 4607 // >> 4608 if(e<0.0&&ifis!=1){ // TUNNELING >> 4609 fdens = 0.0; >> 4610 densfm = 0.0; >> 4611 densct = 0.0; >> 4612 if(ald->optafan == 1) { >> 4613 pa = (ald->av)*a + (ald->as)*std::pow(a,(2.e0/3.e0)) + (ald->ak)*std::pow(a,(1.e0/3.e0)); >> 4614 }else { >> 4615 pa = (ald->av)*a + (ald->as)*bsin*std::pow(a,(2.e0/3.e0)) + (ald->ak)*bkin*std::pow(a,(1.e0/3.e0)); 6418 } 4616 } 6419 else << 4617 gamma = 2.5 * pa * std::pow(a,-4.0/3.0); 6420 { << 4618 fecor=0.0; 6421 G4double parz = 0.; << 4619 goto densniv100; 6422 parite(z, &parz); << 4620 } 6423 if (parz > 0.0) << 4621 // 6424 { << 4622 if(ifis==0&&bs!=1.0){ 6425 // e-e << 4623 // - With increasing excitation energy system in getting less and less deformed: 6426 e0 = 22.34 * std::pow(a, -0.4 << 4624 G4double ponq = (e-100.0)/5.0; 6427 } << 4625 if(ponq>700.0) ponq = 700.0; 6428 else << 4626 bs = 1.0/(1.0+std::exp(-ponq)) + 1.0/(1.0+std::exp(ponq)) * bsin; 6429 { << 4627 bk = 1.0/(1.0+std::exp(-ponq)) + 1.0/(1.0+std::exp(ponq)) * bkin; 6430 // o-o << 4628 } 6431 e0 = 0.0; << 4629 // 6432 } << 4630 // level density parameter >> 4631 if(ald->optafan == 1) { >> 4632 pa = (ald->av)*a + (ald->as)*std::pow(a,(2.e0/3.e0)) + (ald->ak)*std::pow(a,(1.e0/3.e0)); >> 4633 } >> 4634 else { >> 4635 pa = (ald->av)*a + (ald->as)*bs*std::pow(a,(2.e0/3.e0)) + (ald->ak)*bk*std::pow(a,(1.e0/3.e0)); >> 4636 } >> 4637 // >> 4638 gamma = 2.5 * pa * std::pow(a,-4.0/3.0); >> 4639 // >> 4640 // AK - 2009 - trial, in order to have transition to constant-temperature approach >> 4641 // Idea - at the phase transition superfluid-normal fluid, TCT = TEMP, and this >> 4642 // determines critical energy for pairing. >> 4643 if(a>0.0){ >> 4644 ecr = pa*17.60/(std::pow(a,0.699) * std::sqrt(1.0+gamma*BSHELLCT))*17.60/(std::pow(a,0.699) * std::sqrt(1.0+gamma*BSHELLCT)); >> 4645 } >> 4646 >> 4647 // pairing corrections >> 4648 if (ifis == 1) { >> 4649 delta0 = 14; >> 4650 } >> 4651 else { >> 4652 delta0 = 12; >> 4653 } >> 4654 >> 4655 // shell corrections >> 4656 if (optshp > 0) { >> 4657 deltau = bshell; >> 4658 if (optshp == 2) { >> 4659 deltau = 0.0; >> 4660 } >> 4661 if (optshp >= 2) { >> 4662 // pairing energy shift with condensation energy a.r.j. 10.03.97 >> 4663 //deltpp = -0.25e0* (delta0/pow(sqrt(a),2)) * pa /pi6 + 2.e0*delta0/sqrt(a); >> 4664 deltpp = -0.25e0* std::pow((delta0/std::sqrt(a)),2) * pa /pi6 + 22.34e0*std::pow(a,-0.464)-0.235; >> 4665 // Odd A >> 4666 if (IPARITE == 1) { >> 4667 //e = e - delta0/sqrt(a); >> 4668 e=e-(0.285+11.17*std::pow(a,-0.464)-0.390-0.00058*a);//-30./a;//FIXME >> 4669 } >> 4670 // Even Z, even N >> 4671 if(IPARITE==2){ >> 4672 e=e-(22.34*std::pow(a,-0.464)-0.235);//-30./a;//FIXME >> 4673 } >> 4674 // Odd Z, odd N >> 4675 if(IPARITE==0){ >> 4676 if(in==iz){ >> 4677 // e = e; >> 4678 }else{ >> 4679 // e = e-30./a; 6433 } 4680 } 6434 efl = efl - e0; << 4681 } 6435 // end if for pairing term << 4682 } else { >> 4683 deltpp = 0.0; 6436 } 4684 } >> 4685 }else { >> 4686 deltau = 0.0; >> 4687 deltpp = 0.0; >> 4688 } >> 4689 >> 4690 if(e < 0.0){ >> 4691 e = 0.0; >> 4692 ftemp = 0.5; >> 4693 } >> 4694 >> 4695 // washing out is made stronger >> 4696 ponfe = -2.5*pa*e*std::pow(a,(-4.0/3.0)); >> 4697 >> 4698 if (ponfe < -700.0) { >> 4699 ponfe = -700.0; >> 4700 } >> 4701 fe = 1.0 - std::exp(ponfe); >> 4702 if (e < ecr) { >> 4703 // priv. comm. k.-h. schmidt >> 4704 he = 1.0 - std::pow((1.0 - e/ecr),2); >> 4705 } >> 4706 else { >> 4707 he = 1.0; >> 4708 } >> 4709 // Excitation energy corrected for pairing and shell effects >> 4710 // washing out with excitation energy is included. >> 4711 fecor = e + deltau*fe + deltpp*he; >> 4712 if (fecor <= 0.1) { >> 4713 fecor = 0.1; >> 4714 } >> 4715 // iterative procedure according to grossjean and feldmeier >> 4716 // to avoid the singularity e = 0 >> 4717 if (ee < 5.0) { >> 4718 y1 = std::sqrt(pa*fecor); >> 4719 for(G4int j = 0; j < 5; j++) { >> 4720 y2 = pa*fecor*(1.e0-std::exp(-y1)); >> 4721 y1 = std::sqrt(y2); >> 4722 } >> 4723 y0 = pa/y1; >> 4724 ftemp=1.0/y0; >> 4725 fdens = std::exp(y0*fecor)/ (std::pow((std::pow(fecor,3)*y0),0.5)*std::pow((1.0-0.5*y0*fecor*std::exp(-y1)),0.5))* std::exp(y1)*(1.0-std::exp(-y1))*0.1477045; >> 4726 if (fecor < 1.0) { >> 4727 ecor1=1.0; >> 4728 y11 = std::sqrt(pa*ecor1); >> 4729 for(G4int j = 0; j < 7; j++) { >> 4730 y21 = pa*ecor1*(1.0-std::exp(-y11)); >> 4731 y11 = std::sqrt(y21); >> 4732 } 6437 4733 6438 eflmacResult = efl; << 4734 y01 = pa/y11; >> 4735 fdens = fdens*std::pow((y01/y0),1.5); >> 4736 ftemp = ftemp*std::pow((y01/y0),1.5); >> 4737 } >> 4738 } >> 4739 else { >> 4740 ponniv = 2.0*std::sqrt(pa*fecor); >> 4741 if (ponniv > 700.0) { >> 4742 ponniv = 700.0; >> 4743 } >> 4744 // fermi gas state density >> 4745 fdens = 0.1477045 * std::exp(ponniv)/(std::pow(pa,0.25)*std::pow(fecor,1.25)); >> 4746 ftemp = std::sqrt(fecor/pa); >> 4747 } >> 4748 // >> 4749 densfm = fdens; >> 4750 tfm = ftemp; >> 4751 // >> 4752 if(IOPTCT==0) goto densniv100; >> 4753 tempct = 17.60/( std::pow(a,0.699) * std::sqrt(1.+gamma*BSHELLCT)); >> 4754 //tempct = 1.0 / ( (0.0570 + 0.00193*BSHELLCT) * pow(a,0.6666667)); // from PRC 80 (2009) 054310 >> 4755 >> 4756 // - CONSTANT-TEMPERATURE LEVEL DENSITY PARAMETER (ONLY AT LOW ENERGIES) >> 4757 if(e<30.){ >> 4758 if(a>0.0){ >> 4759 if(optshp>=2){ >> 4760 // Parametrization of CT model by Ignatyuk; note that E0 is shifted to correspond >> 4761 // to pairing shift in Fermi-gas model (there, energy is shifted taking odd-odd nuclei >> 4762 // as bassis) >> 4763 // e-o, o-e >> 4764 if (IPARITE == 1) { e0 = 0.285+11.17*std::pow(a,-0.464) - 0.390-0.00058*a;} >> 4765 // e-e >> 4766 if (IPARITE == 2) { e0 = 22.34*std::pow(a,-0.464)-0.235;} >> 4767 // o-o >> 4768 if (IPARITE == 0){ e0 = 0.0;} >> 4769 >> 4770 ponniv = (ein-e0)/tempct; >> 4771 if(ifis!=1) ponniv = max(0.0,(ein-e0)/tempct); >> 4772 if(ponniv>700.0){ ponniv = 700.0;} >> 4773 densct = std::exp(ponniv)/tempct*std::exp(0.079*BSHELLCT/tempct); >> 4774 >> 4775 elim = ein; >> 4776 >> 4777 if(elim>=ecr&&densfm<=densct){ >> 4778 fdens = densfm; >> 4779 // IREGCT = 0; >> 4780 }else{ >> 4781 fdens = densct; >> 4782 // IREGCT = 1; >> 4783 // ecor = min(ein-e0,0.10); >> 4784 } >> 4785 if(elim>=ecr&&tfm>=tempct){ >> 4786 ftemp = tfm; >> 4787 }else{ >> 4788 ftemp = tempct; >> 4789 } >> 4790 }else{ >> 4791 // Case of no pairing considered >> 4792 // ETEST = PA * TEMPCT**2 >> 4793 ponniv = (ein)/tempct; >> 4794 if(ponniv>700.0){ ponniv = 700.0;} >> 4795 densct = std::exp(ponniv)/tempct; >> 4796 >> 4797 if(ein>=ecr && densfm<=densct){ >> 4798 fdens = densfm; >> 4799 ftemp = tfm; >> 4800 // IREGCT = 0; >> 4801 }else{ >> 4802 fdens = densct; >> 4803 ftemp = tempct; >> 4804 // ECOR = DMIN1(EIN,0.1D0) >> 4805 } >> 4806 >> 4807 if(ein>=ecr && tfm>=tempct){ >> 4808 ftemp = tfm; >> 4809 }else{ >> 4810 ftemp = tempct; >> 4811 } >> 4812 } >> 4813 } >> 4814 } >> 4815 >> 4816 >> 4817 densniv100: >> 4818 >> 4819 if(fdens==0.0){ >> 4820 if(a>0.0){ >> 4821 // Parametrization of CT model by Ignatyuk done for masses > 20 >> 4822 ftemp = 17.60/( std::pow(a,0.699) * std::sqrt(1.0+gamma*BSHELLCT)); >> 4823 // ftemp = 1.0 / ( (0.0570 + 0.00193*BSHELLCT) * pow(a,0.6666667)); // from PRC 80 (2009) 054310 >> 4824 }else{ >> 4825 ftemp = 0.5; >> 4826 } >> 4827 } >> 4828 // >> 4829 // spin cutoff parameter >> 4830 /* >> 4831 C PERPENDICULAR AND PARALLEL MOMENT OF INERTIA >> 4832 c fnorm = R0*M0/hbar**2 = 1.16fm*931.49MeV/c**2 /(6.582122e-22 MeVs)**2 and is >> 4833 c in units 1/MeV >> 4834 */ >> 4835 fnorm = std::pow(1.16,2)*931.49*1.e-2/(9.0* std::pow(6.582122,2)); >> 4836 >> 4837 if(ifis==0 || ifis==2){ >> 4838 /* >> 4839 C GROUND STATE: >> 4840 C FP_PER ~ 1+0.5*alpha2, FP_PAR ~ 1-alpha2 (Hasse & Myers, Geom. relat. macr. nucl. phys.) >> 4841 C alpha2 = sqrt(5/(4*pi))*beta2 >> 4842 */ >> 4843 fp_per = 0.4*std::pow(a,5.0/3.0)*fnorm*(1.0+0.50*defbet*std::sqrt(5.0/(4.0*pi))); >> 4844 fp_par = 0.40*std::pow(a,5.0/3.0)*fnorm*(1.0-defbet*std::sqrt(5.0/(4.0*pi))); >> 4845 >> 4846 }else{ >> 4847 if(ifis==1){ >> 4848 /* >> 4849 C SADDLE POINT >> 4850 C See Hasse&Myer, p. 100 >> 4851 C Perpendicular moment of inertia >> 4852 */ >> 4853 fp_per = 2.0/5.0*std::pow(a,5.0/3.0)*fnorm*(1.0+7.0/6.0*defbet*(1.0+1396.0/255.0*defbet)); >> 4854 // Parallel moment of inertia >> 4855 fp_par = 2.0/5.0*std::pow(a,5.0/3.0)*fnorm*(1.0-7.0/3.0*defbet*(1.0-389.0/255.0*defbet)); >> 4856 }else{ >> 4857 if(ifis==20){ >> 4858 // IMF - two fragments in contact; it is asumed that both are spherical. >> 4859 // See Hasse&Myers, p.106 >> 4860 // Here, DEFBET = R1/R2, where R1 and R2 are radii of IMF and its partner >> 4861 // Perpendicular moment of inertia >> 4862 fp_per = 0.4*std::pow(a,5.0/3.0)*fnorm*3.50*(1.0 + std::pow(defbet,5.))/std::pow(1.0 + defbet*defbet*defbet,5.0/3.0); >> 4863 fp_par = 0.4*std::pow(a,5.0/3.0)*fnorm*(1.0 + std::pow(defbet,5.0))/std::pow(1.0 + defbet*defbet*defbet,5.0/3.0); >> 4864 } >> 4865 } >> 4866 } >> 4867 if(fp_par<0.0)fp_par=0.0; >> 4868 if(fp_per<0.0)fp_per=0.0; >> 4869 // >> 4870 sig_per = std::sqrt(fp_per * ftemp); >> 4871 sig_par = std::sqrt(fp_par * ftemp); >> 4872 // >> 4873 sigma2 = sig_per*sig_per + sig_par*sig_par; >> 4874 jfact = (2.*jprf+1.)*std::exp(-1.*jprf*(jprf+1.0)/(2.0*sigma2))/(std::sqrt(8.0*3.1415)*std::pow(sigma2,1.5)); >> 4875 erot = jprf*jprf/(2.0*std::sqrt(fp_par*fp_par+fp_per*fp_per)); >> 4876 // >> 4877 // collective enhancement >> 4878 if (optcol == 1) { >> 4879 qrot(z,a,defbet,sig_per,fecor-erot,&fqr); >> 4880 } >> 4881 else { >> 4882 fqr = 1.0; >> 4883 } >> 4884 // >> 4885 fdens = fdens * fqr *jfact; >> 4886 // >> 4887 if(fdens<1e-300)fdens=0.0; >> 4888 // >> 4889 *dens =fdens; >> 4890 *ecor=fecor; >> 4891 *temp=ftemp; >> 4892 *qr=fqr; >> 4893 } >> 4894 >> 4895 void G4Abla::qrot(G4double z, G4double a, G4double bet, G4double sig, G4double u, G4double *qr) >> 4896 { >> 4897 /* >> 4898 C QROT INCLUDING DAMPING >> 4899 C >> 4900 C INPUT: Z,A,DEFBET,SIG,U >> 4901 C >> 4902 C OUTPUT: QR - COLLECTIVE ENHANCEMENT FACTOR >> 4903 C >> 4904 C SEE JUNGHANS ET AL., NUCL. PHYS. A 629 (1998) 635 >> 4905 C >> 4906 C >> 4907 C FR(U) EXPONENTIAL FUNCTION TO DEFINE DAMPING >> 4908 C UCR CRITICAL ENERGY FOR DAMPING >> 4909 C DCR WIDTH OF DAMPING >> 4910 C DEFBET BETA-DEFORMATION ! >> 4911 C SIG PERPENDICULAR SPIN CUTOFF FACTOR >> 4912 C U ENERGY >> 4913 C QR COEFFICIENT OF COLLECTIVE ENHANCEMENT >> 4914 C A MASS NUMBER >> 4915 C Z CHARGE NUMBER >> 4916 C >> 4917 */ >> 4918 // JLRS: July 2016: new values for the collective parameters >> 4919 // >> 4920 >> 4921 G4double ucr = fiss->ucr; // Critical energy for damping. >> 4922 G4double dcr = fiss->dcr; // Width of damping. >> 4923 G4double ponq = 0.0, dn = 0.0, n = 0.0, dz = 0.0; >> 4924 G4int distn,distz,ndist, zdist; >> 4925 G4int nmn[8]= {2, 8, 14, 20, 28, 50, 82, 126}; >> 4926 G4int nmz[8]= {2, 8, 14, 20, 28, 50, 82, 126}; >> 4927 // >> 4928 sig = sig*sig; >> 4929 // >> 4930 if(std::abs(bet)<=0.15){ >> 4931 goto qrot10; >> 4932 }else{ >> 4933 goto qrot11; >> 4934 } >> 4935 // >> 4936 qrot10: >> 4937 n = a - z; >> 4938 distn = 10000000; >> 4939 distz = 10000000; >> 4940 >> 4941 for(G4int i =0;i<8;i++){ >> 4942 ndist = std::fabs(idnint(n) - nmn[i]); >> 4943 if(ndist < distn) distn = ndist; >> 4944 zdist = std::fabs(idnint(z) - nmz[i]); >> 4945 if(zdist < distz) distz = zdist; >> 4946 } >> 4947 >> 4948 dz = G4float(distz); >> 4949 dn = G4float(distn); >> 4950 >> 4951 bet = 0.022 + 0.003*dn + 0.002*dz; >> 4952 >> 4953 sig = 75.0*std::pow(bet,2.) * sig; >> 4954 >> 4955 // NO VIBRATIONAL ENHANCEMENT >> 4956 qrot11: >> 4957 ponq = (u - ucr)/dcr; >> 4958 >> 4959 if (ponq > 700.0) { >> 4960 ponq = 700.0; >> 4961 } >> 4962 if (sig < 1.0) { >> 4963 sig = 1.0; >> 4964 } >> 4965 (*qr) = 1.0/(1.0 + std::exp(ponq)) * (sig - 1.0) + 1.0; >> 4966 >> 4967 if ((*qr) < 1.0) { >> 4968 (*qr) = 1.0; >> 4969 } 6439 4970 6440 return eflmacResult; << 4971 return; 6441 } 4972 } 6442 4973 6443 void G4Abla::appariem(G4double a, G4double z, << 4974 void G4Abla::lpoly(G4double x, G4int n, G4double pl[]) 6444 { 4975 { 6445 // CALCUL DE LA CORRECTION, DUE A L'APPAR << 4976 // THIS SUBROUTINE CALCULATES THE ORDINARY LEGENDRE POLYNOMIALS OF 6446 // LIAISON D'UN NOYAU << 4977 // ORDER 0 TO N-1 OF ARGUMENT X AND STORES THEM IN THE VECTOR PL. 6447 // PROCEDURE FOR CALCULATING THE PAIRING << 4978 // THEY ARE CALCULATED BY RECURSION RELATION FROM THE FIRST TWO 6448 // ENERGY OF A SPECIFIC NUCLEUS << 4979 // POLYNOMIALS. 6449 << 4980 // WRITTEN BY A.J.SIERK LANL T-9 FEBRUARY, 1984 6450 G4double para = 0.0, parz = 0.0; << 4981 // NOTE: PL AND X MUST BE DOUBLE PRECISION ON 32-BIT COMPUTERS! 6451 // A MASS NUMBER << 4982 6452 // Z NUCLEAR CHARGE << 4983 pl[0] = 1.0; 6453 // PARA HELP VARIABLE FOR PA << 4984 pl[1] = x; 6454 // PARZ HELP VARIABLE FOR PA << 4985 6455 // DEL PAIRING CORRECTION << 4986 for(G4int i = 2; i < n; i++) { 6456 << 4987 pl[i] = ((2*G4double(i+1) - 3.0)*x*pl[i-1] - (G4double(i+1) - 2.0)*pl[i-2])/(G4double(i+1)-1.0); 6457 parite(a, ¶); << 4988 } 6458 << 6459 if (para < 0.0) << 6460 { << 6461 (*del) = 0.0; << 6462 } << 6463 else << 6464 { << 6465 parite(z, &parz); << 6466 if (parz > 0.0) << 6467 { << 6468 (*del) = -12.0 / std::sqrt(a); << 6469 } << 6470 else << 6471 { << 6472 (*del) = 12.0 / std::sqrt(a); << 6473 } << 6474 } << 6475 } 4989 } 6476 4990 6477 void G4Abla::parite(G4double n, G4double* par << 4991 G4double G4Abla::eflmac(G4int ia, G4int iz, G4int flag, G4int optshp) 6478 { 4992 { 6479 // CALCUL DE LA PARITE DU NOMBRE N << 4993 // CHANGED TO CALCULATE TOTAL BINDING ENERGY INSTEAD OF MASS EXCESS. 6480 // << 4994 // SWITCH FOR PAIRING INCLUDED AS WELL. 6481 // PROCEDURE FOR CALCULATING THE PARITY O << 4995 // BINDING = EFLMAC(IA,IZ,0,OPTSHP) 6482 // RETURNS -1 IF N IS ODD AND +1 IF N IS << 4996 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EEX/FRLDM.C 6483 << 4997 // A.J. 15.07.96 6484 G4double n1 = 0.0, n2 = 0.0, n3 = 0.0; << 4998 6485 << 4999 // this function will calculate the liquid-drop nuclear mass for spheri 6486 // N NUMBER TO BE TESTED << 5000 // configuration according to the preprint NUCLEAR GROUND-STATE 6487 // N1,N2 HELP VARIABLES << 5001 // MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p. 6488 // PAR HELP VARIABLE FOR PA << 5002 // All constants are taken from this publication for consistency. 6489 << 5003 6490 n3 = G4double(idnint(n)); << 5004 // Parameters: 6491 n1 = n3 / 2.0; << 5005 // a: nuclear mass number 6492 n2 = n1 - dint(n1); << 5006 // z: nuclear charge 6493 << 5007 // flag: 0 - return mass excess 6494 if (n2 > 0.0) << 5008 // otherwise - return pairing (= -1/2 dpn + 1/2 (Dp + Dn)) 6495 { << 5009 6496 (*par) = -1.0; << 5010 G4double eflmacResult = 0.0; 6497 } << 5011 6498 else << 5012 if(ia==0)return eflmacResult; 6499 { << 5013 6500 (*par) = 1.0; << 5014 G4int in = 0; 6501 } << 5015 G4double z = 0.0, n = 0.0, a = 0.0, av = 0.0, as = 0.0; >> 5016 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 = 0.0, b3 = 0.0; >> 5017 G4double ff = 0.0, ca = 0.0, w = 0.0, efl = 0.0; >> 5018 G4double r0 = 0.0, kf = 0.0, ks = 0.0; >> 5019 G4double kv = 0.0, rp = 0.0, ay = 0.0, aden = 0.0, x0 = 0.0, y0 = 0.0; >> 5020 G4double esq = 0.0, ael = 0.0, i = 0.0, e0 = 0.0; >> 5021 G4double pi = 3.141592653589793238e0; >> 5022 >> 5023 // fundamental constants >> 5024 // electronic charge squared >> 5025 esq = 1.4399764; >> 5026 >> 5027 // constants from considerations other than nucl. masses >> 5028 // electronic binding >> 5029 ael = 1.433e-5; >> 5030 >> 5031 // proton rms radius >> 5032 rp = 0.8; >> 5033 >> 5034 // nuclear radius constant >> 5035 r0 = 1.16; >> 5036 >> 5037 // range of yukawa-plus-expon. potential >> 5038 ay = 0.68; >> 5039 >> 5040 // range of yukawa function used to generate >> 5041 // nuclear charge distribution >> 5042 aden= 0.70; >> 5043 >> 5044 // wigner constant >> 5045 w = 30.0; >> 5046 >> 5047 // adjusted parameters >> 5048 // volume energy >> 5049 av = 16.00126; >> 5050 >> 5051 // volume asymmetry >> 5052 kv = 1.92240; >> 5053 >> 5054 // surface energy >> 5055 as = 21.18466; >> 5056 >> 5057 // surface asymmetry >> 5058 ks = 2.345; >> 5059 // a^0 constant >> 5060 a0 = 2.615; >> 5061 >> 5062 // charge asymmetry >> 5063 ca = 0.10289; >> 5064 >> 5065 z = G4double(iz); >> 5066 a = G4double(ia); >> 5067 in = ia - iz; >> 5068 n = G4double(in); >> 5069 >> 5070 if(flag==1){goto eflmac311;} >> 5071 >> 5072 if(iz<13&&in<3){ >> 5073 if(masses->mexpiop[in][iz]==1){ >> 5074 return masses->bind[in][iz]; >> 5075 } >> 5076 } >> 5077 >> 5078 eflmac311: >> 5079 >> 5080 c1 = 3.0/5.0*esq/r0; >> 5081 c4 = 5.0/4.0*std::pow((3.0/(2.0*pi)),(2.0/3.0)) * c1; >> 5082 kf = std::pow((9.0*pi*z/(4.0*a)),(1.0/3.0))/r0; >> 5083 >> 5084 ff = -1.0/8.0*rp*rp*esq/std::pow(r0,3) * (145.0/48.0 - 327.0/2880.0*std::pow(kf,2) * std::pow(rp,2) + 1527.0/1209600.0*std::pow(kf,4) * std::pow(rp,4)); >> 5085 i = (n-z)/a; >> 5086 >> 5087 x0 = r0 * std::pow(a,(1.0/3.0)) / ay; >> 5088 y0 = r0 * std::pow(a,(1.0/3.0)) / aden; >> 5089 >> 5090 b1 = 1.0 - 3.0/(std::pow(x0,2)) + (1.0 + x0) * (2.0 + 3.0/x0 + 3.0/std::pow(x0,2)) * std::exp(-2.0*x0); >> 5091 >> 5092 b3 = 1.0 - 5.0/std::pow(y0,2) * (1.0 - 15.0/(8.0*y0) + 21.0/(8.0 * std::pow(y0,3)) >> 5093 - 3.0/4.0 * (1.0 + 9.0/(2.0*y0) + 7.0/std::pow(y0,2) >> 5094 + 7.0/(2.0 * std::pow(y0,3))) * std::exp(-2.0*y0)); >> 5095 >> 5096 // now calulation of total binding energy a.j. 16.7.96 >> 5097 >> 5098 efl = -1.0 * av*(1.0 - kv*i*i)*a + as*(1.0 - ks*i*i)*b1 * std::pow(a,(2.0/3.0)) + a0 >> 5099 + c1*z*z*b3/std::pow(a,(1.0/3.0)) - c4*std::pow(z,(4.0/3.0))/std::pow(a,(1.e0/3.e0)) >> 5100 + ff*std::pow(z,2)/a -ca*(n-z) - ael * std::pow(z,(2.39e0)); >> 5101 >> 5102 efl = efl + w*std::abs(i); >> 5103 >> 5104 // pairing is made optional >> 5105 if (optshp >= 2) { >> 5106 // average pairing >> 5107 if (in==iz && (mod(in,2) == 1) && (mod(iz,2) == 1) && in>0.) { >> 5108 efl = efl + w/a; >> 5109 } >> 5110 >> 5111 // AK 2008 - Parametrization of CT model by Ignatyuk; >> 5112 // The following part has been introduced in order to have correspondance >> 5113 // between pairing in masses and level densities; >> 5114 // AK 2010 note that E0 is shifted to correspond to pairing shift in >> 5115 // Fermi-gas model (there, energy is shifted taking odd-odd nuclei >> 5116 // as bassis) >> 5117 >> 5118 G4double para=0.; >> 5119 parite(a,¶); >> 5120 >> 5121 if(para<0.0){ >> 5122 // e-o, o-e >> 5123 e0 = 0.285+11.17*std::pow(a,-0.464) -0.390-0.00058*(a); >> 5124 }else{ >> 5125 G4double parz=0.; >> 5126 parite(z,&parz); >> 5127 if (parz>0.0){ >> 5128 // e-e >> 5129 e0 = 22.34*std::pow(a,-0.464)-0.235; >> 5130 }else{ >> 5131 // o-o >> 5132 e0 = 0.0; >> 5133 } >> 5134 } >> 5135 efl = efl - e0; >> 5136 // end if for pairing term >> 5137 } >> 5138 >> 5139 eflmacResult = efl; >> 5140 >> 5141 return eflmacResult; >> 5142 } >> 5143 >> 5144 void G4Abla::appariem(G4double a, G4double z, G4double *del) >> 5145 { >> 5146 // CALCUL DE LA CORRECTION, DUE A L'APPARIEMENT, DE L'ENERGIE DE >> 5147 // LIAISON D'UN NOYAU >> 5148 // PROCEDURE FOR CALCULATING THE PAIRING CORRECTION TO THE BINDING >> 5149 // ENERGY OF A SPECIFIC NUCLEUS >> 5150 >> 5151 G4double para = 0.0, parz = 0.0; >> 5152 // A MASS NUMBER >> 5153 // Z NUCLEAR CHARGE >> 5154 // PARA HELP VARIABLE FOR PARITY OF A >> 5155 // PARZ HELP VARIABLE FOR PARITY OF Z >> 5156 // DEL PAIRING CORRECTION >> 5157 >> 5158 parite(a, ¶); >> 5159 >> 5160 if (para < 0.0) { >> 5161 (*del) = 0.0; >> 5162 } >> 5163 else { >> 5164 parite(z, &parz); >> 5165 if (parz > 0.0) { >> 5166 (*del) = -12.0/std::sqrt(a); >> 5167 } >> 5168 else { >> 5169 (*del) = 12.0/std::sqrt(a); >> 5170 } >> 5171 } >> 5172 } >> 5173 >> 5174 void G4Abla::parite(G4double n, G4double *par) >> 5175 { >> 5176 // CALCUL DE LA PARITE DU NOMBRE N >> 5177 // >> 5178 // PROCEDURE FOR CALCULATING THE PARITY OF THE NUMBER N. >> 5179 // RETURNS -1 IF N IS ODD AND +1 IF N IS EVEN >> 5180 >> 5181 G4double n1 = 0.0, n2 = 0.0, n3 = 0.0; >> 5182 >> 5183 // N NUMBER TO BE TESTED >> 5184 // N1,N2 HELP VARIABLES >> 5185 // PAR HELP VARIABLE FOR PARITY OF N >> 5186 >> 5187 n3 = G4double(idnint(n)); >> 5188 n1 = n3/2.0; >> 5189 n2 = n1 - dint(n1); >> 5190 >> 5191 if (n2 > 0.0) { >> 5192 (*par) = -1.0; >> 5193 } >> 5194 else { >> 5195 (*par) = 1.0; >> 5196 } 6502 } 5197 } 6503 5198 6504 G4double G4Abla::tau(G4double bet, G4double h 5199 G4double G4Abla::tau(G4double bet, G4double homega, G4double ef, G4double t) 6505 { 5200 { 6506 // INPUT : BET, HOMEGA, EF, T << 5201 // INPUT : BET, HOMEGA, EF, T 6507 // OUTPUT: TAU - RISE TIME IN WHICH THE F << 5202 // OUTPUT: TAU - RISE TIME IN WHICH THE FISSION WIDTH HAS REACHED 6508 // 90 PERCENT OF ITS FINAL << 5203 // 90 PERCENT OF ITS FINAL VALUE 6509 // << 5204 // 6510 // BETA - NUCLEAR VISCOSITY << 5205 // BETA - NUCLEAR VISCOSITY 6511 // HOMEGA - CURVATURE OF POTENTIAL << 5206 // HOMEGA - CURVATURE OF POTENTIAL 6512 // EF - FISSION BARRIER << 5207 // EF - FISSION BARRIER 6513 // T - NUCLEAR TEMPERATURE << 5208 // T - NUCLEAR TEMPERATURE 6514 << 5209 6515 G4double tauResult = 0.0; << 5210 G4double tauResult = 0.0; 6516 << 5211 6517 G4double tlim = 8.e0 * ef; << 5212 G4double tlim = 8.e0 * ef; 6518 if (t > tlim) << 5213 if (t > tlim) { 6519 { << 5214 t = tlim; 6520 t = tlim; << 5215 } 6521 } << 5216 // 6522 // << 5217 if (bet/(std::sqrt(2.0)*10.0*(homega/6.582122)) <= 1.0) { 6523 if (bet / (std::sqrt(2.0) * 10.0 * (homeg << 5218 tauResult = std::log(10.0*ef/t)/(bet*1.0e21); 6524 { << 5219 } 6525 tauResult = std::log(10.0 * ef / t) / << 5220 else { 6526 } << 5221 tauResult = std::log(10.0*ef/t)/ (2.0*std::pow((10.0*homega/6.582122),2))*(bet*1.0e-21); 6527 else << 5222 } //end if 6528 { << 6529 tauResult = std::log(10.0 * ef / t) / << 6530 } // end if << 6531 5223 6532 return tauResult; << 5224 return tauResult; 6533 } 5225 } 6534 5226 6535 G4double G4Abla::cram(G4double bet, G4double 5227 G4double G4Abla::cram(G4double bet, G4double homega) 6536 { 5228 { 6537 // INPUT : BET, HOMEGA NUCLEAR VISCOSITY << 5229 // INPUT : BET, HOMEGA NUCLEAR VISCOSITY + CURVATURE OF POTENTIAL 6538 // OUTPUT: KRAMERS FAKTOR - REDUCTION OF << 5230 // OUTPUT: KRAMERS FAKTOR - REDUCTION OF THE FISSION PROBABILITY 6539 // INDEPENDENT << 5231 // INDEPENDENT OF EXCITATION ENERGY 6540 << 5232 6541 G4double rel = bet / (20.0 * homega / 6.5 << 5233 G4double rel = bet/(20.0*homega/6.582122); 6542 G4double cramResult = std::sqrt(1.0 + std << 5234 G4double cramResult = std::sqrt(1.0 + std::pow(rel,2)) - rel; 6543 // limitation introduced 6.1.2000 by << 5235 // limitation introduced 6.1.2000 by khs 6544 << 5236 6545 if (cramResult > 1.0) << 5237 if (cramResult > 1.0) { 6546 { << 5238 cramResult = 1.0; 6547 cramResult = 1.0; << 5239 } 6548 } << 6549 5240 6550 return cramResult; << 5241 return cramResult; 6551 } 5242 } 6552 5243 6553 G4double G4Abla::bipol(G4int iflag, G4double 5244 G4double G4Abla::bipol(G4int iflag, G4double y) 6554 { 5245 { 6555 // CALCULATION OF THE SURFACE BS OR CURVA << 5246 // CALCULATION OF THE SURFACE BS OR CURVATURE BK OF A NUCLEUS 6556 // RELATIVE TO THE SPHERICAL CONFIGURATIO << 5247 // RELATIVE TO THE SPHERICAL CONFIGURATION 6557 // BASED ON MYERS, DROPLET MODEL FOR ARB << 5248 // BASED ON MYERS, DROPLET MODEL FOR ARBITRARY SHAPES 6558 << 5249 6559 // INPUT: IFLAG - 0/1 BK/BS CALCULATION << 5250 // INPUT: IFLAG - 0/1 BK/BS CALCULATION 6560 // Y - (1 - X) COMPLEMENT OF T << 5251 // Y - (1 - X) COMPLEMENT OF THE FISSILITY 6561 << 5252 6562 // LINEAR INTERPOLATION OF BS BK TABLE << 5253 // LINEAR INTERPOLATION OF BS BK TABLE 6563 << 5254 6564 G4int i = 0; << 5255 G4int i = 0; 6565 << 5256 6566 G4double bipolResult = 0.0; << 5257 G4double bipolResult = 0.0; 6567 << 5258 6568 const G4int bsbkSize = 54; << 5259 const G4int bsbkSize = 54; 6569 << 5260 6570 G4double bk[bsbkSize] = { << 5261 G4double bk[bsbkSize] = {0.0, 1.00000,1.00087,1.00352,1.00799,1.01433,1.02265,1.03306, 6571 0.0, 1.00000, 1.00087, 1.00352, 1 << 5262 1.04576,1.06099,1.07910,1.10056,1.12603,1.15651,1.19348, 6572 1.10056, 1.12603, 1.15651, 1.19348, 1 << 5263 1.23915,1.29590,1.35951,1.41013,1.44103,1.46026,1.47339, 6573 1.48308, 1.49068, 1.49692, 1.50226, 1 << 5264 1.48308,1.49068,1.49692,1.50226,1.50694,1.51114,1.51502, 6574 1.53177, 1.53490, 1.53803, 1.54117, 1 << 5265 1.51864,1.52208,1.52539,1.52861,1.53177,1.53490,1.53803, 6575 1.56980, 1.57413, 1.57860, 1.58301, 1 << 5266 1.54117,1.54473,1.54762,1.55096,1.55440,1.55798,1.56173, 6576 }; // Zeroes at bk[0], and at << 5267 1.56567,1.56980,1.57413,1.57860,1.58301,1.58688,1.58688, 6577 // the end added by PK << 5268 1.58688,1.58740,1.58740, 0.0}; //Zeroes at bk[0], and at the end added by PK 6578 << 5269 6579 G4double bs[bsbkSize] = { 0.0, 1.0000 << 5270 G4double bs[bsbkSize] = {0.0, 1.00000,1.00086,1.00338,1.00750,1.01319, 6580 1.05195, 1.0660 << 5271 1.02044,1.02927,1.03974, 6581 1.26532, 1.2761 << 5272 1.05195,1.06604,1.08224,1.10085,1.12229,1.14717,1.17623,1.20963, 6582 1.28235, 1.2814 << 5273 1.24296,1.26532,1.27619,1.28126,1.28362,1.28458,1.28477,1.28450, 6583 1.27314, 1.2721 << 5274 1.28394,1.28320,1.28235,1.28141,1.28042,1.27941,1.27837,1.27732, 6584 1.26418, 1.2632 << 5275 1.27627,1.27522,1.27418,1.27314,1.27210,1.27108,1.27006,1.26906, 6585 << 5276 1.26806,1.26707,1.26610,1.26514,1.26418,1.26325,1.26233,1.26147, 6586 i = idint(y / (2.0e-02)) + 1; << 5277 1.26147,1.26147,1.25992,1.25992, 0.0}; 6587 << 5278 6588 if ((i + 1) >= bsbkSize) << 5279 i = idint(y/(2.0e-02)) + 1; 6589 { << 5280 6590 if (verboseLevel > 2) << 5281 if((i + 1) >= bsbkSize) { 6591 { << 5282 if(verboseLevel > 2) { 6592 // G4cout <<"G4Abla error: index << 5283 // G4cout <<"G4Abla error: index " << i + 1 << " is greater than array size permits." << G4endl; 6593 // size permits." << G4endl; << 5284 } 6594 } << 5285 bipolResult = 0.0; 6595 bipolResult = 0.0; << 5286 } 6596 } << 5287 else { 6597 else << 5288 if (iflag == 1) { 6598 { << 5289 bipolResult = bs[i] + (bs[i+1] - bs[i])/2.0e-02 * (y - 2.0e-02*(i - 1)); 6599 if (iflag == 1) << 5290 } 6600 { << 5291 else { 6601 bipolResult = bs[i] + (bs[i + 1] << 5292 bipolResult = bk[i] + (bk[i+1] - bk[i])/2.0e-02 * (y - 2.0e-02*(i - 1)); 6602 } << 5293 } 6603 else << 5294 } 6604 { << 5295 6605 bipolResult = bk[i] + (bk[i + 1] << 5296 return bipolResult; 6606 } << 5297 } 6607 } << 5298 6608 << 5299 void G4Abla::fomega_sp(G4double AF,G4double Y,G4double *MFCD,G4double *sOMEGA,G4double *sHOMEGA) 6609 return bipolResult; << 5300 { >> 5301 /* >> 5302 c Y 1 - Fissility >> 5303 c OMEGA Frequency at the ground state, in units 1.e-21 s >> 5304 */ >> 5305 G4double OMEGA,HOMEGA,ES0,MR02; >> 5306 >> 5307 ES0 = 20.760*std::pow(AF,2.0/3.0); >> 5308 // In units 1.e-42 MeVs**2; r0 = 1.175e-15 m, u=931.49MeV/c**2=103.4MeV*s**2/m**2 >> 5309 // divided by 1.e-4 to go from 1.e-46 to 1.e-42 >> 5310 MR02 = std::pow(AF,5.0/3.0)*1.0340*0.010*1.175*1.175; >> 5311 // Determination of the inertia of the fission collective degree of freedom >> 5312 (*MFCD) = MR02 * 3.0/10.0*(1.0+3.0*Y); >> 5313 // Omega at saddle >> 5314 OMEGA = std::sqrt(ES0/MR02)*std::sqrt(8.0/3.0*Y*(1.0+304.0*Y/255.0)); >> 5315 // >> 5316 HOMEGA = 6.58122*OMEGA/10.0; >> 5317 // >> 5318 (*sOMEGA)=OMEGA; >> 5319 (*sHOMEGA)=HOMEGA; >> 5320 // >> 5321 return; 6610 } 5322 } 6611 5323 6612 void G4Abla::fomega_sp(G4double AF, G4double << 6613 { << 6614 /* << 6615 c Y 1 - Fissility << 6616 c OMEGA Frequency at the gro << 6617 */ << 6618 G4double OMEGA, HOMEGA, ES0, MR02; << 6619 << 6620 ES0 = 20.760 * std::pow(AF, 2.0 / 3.0); << 6621 // In units 1.e-42 MeVs**2; r0 = 1.175e-1 << 6622 // u=931.49MeV/c**2=103.4MeV*s**2/m**2 di << 6623 // to 1.e-42 << 6624 MR02 = std::pow(AF, 5.0 / 3.0) * 1.0340 * << 6625 // Determination of the inertia of the fi << 6626 (*MFCD) = MR02 * 3.0 / 10.0 * (1.0 + 3.0 << 6627 // Omega at saddle << 6628 OMEGA = std::sqrt(ES0 / MR02) * std::sqrt << 6629 // << 6630 HOMEGA = 6.58122 * OMEGA / 10.0; << 6631 // << 6632 (*sOMEGA) = OMEGA; << 6633 (*sHOMEGA) = HOMEGA; << 6634 // << 6635 return; << 6636 } << 6637 5324 6638 void G4Abla::fomega_gs(G4double AF, G4double << 5325 void G4Abla::fomega_gs(G4double AF,G4double ZF,G4double *K1,G4double *sOMEGA,G4double *sHOMEGA) 6639 { 5326 { 6640 /* << 5327 /* 6641 c Y 1 - Fissility << 5328 c Y 1 - Fissility 6642 c OMEGA Frequency at the gro << 5329 c OMEGA Frequency at the ground state, in units 1.e-21 s 6643 */ << 5330 */ 6644 G4double OMEGA, HOMEGA, MR02, MINERT, C, << 5331 G4double OMEGA,HOMEGA,MR02,MINERT,C,fk1; 6645 // << 5332 // 6646 MR02 = std::pow(AF, 5.0 / 3.0) * 1.0340 * << 5333 MR02 = std::pow(AF,5.0/3.0)*1.0340*0.01*1.175*1.175; 6647 MINERT = 3. * MR02 / 10.0; << 5334 MINERT = 3.*MR02/10.0; 6648 C = 17.9439 * (1. - 1.7826 * std::pow((AF << 5335 C = 17.9439*(1.-1.7826*std::pow((AF-2.0*ZF)/AF,2)); 6649 fk1 = 0.4 * C * std::pow(AF, 2.0 / 3.0) - << 5336 fk1 = 0.4*C*std::pow(AF,2.0/3.0)-0.1464*std::pow(ZF,2)/std::pow(AF,1./3.); 6650 OMEGA = std::sqrt(fk1 / MINERT); << 5337 OMEGA = std::sqrt(fk1/MINERT); 6651 HOMEGA = 6.58122 * OMEGA / 10.0; << 5338 HOMEGA = 6.58122*OMEGA/10.0; 6652 // << 5339 // 6653 (*K1) = fk1; << 5340 (*K1)=fk1; 6654 (*sOMEGA) = OMEGA; << 5341 (*sOMEGA)=OMEGA; 6655 (*sHOMEGA) = HOMEGA; << 5342 (*sHOMEGA)=HOMEGA; 6656 // << 5343 // 6657 return; << 5344 return; 6658 } 5345 } 6659 5346 6660 void G4Abla::barrs(G4int Z1, G4int A1, G4int << 5347 void G4Abla::barrs(G4int Z1,G4int A1,G4int Z2,G4int A2,G4double *sBARR,G4double *sOMEGA) 6661 { /* << 5348 {/* 6662 C AK 2004 - Barriers for LCP and IMF are cal << 5349 C AK 2004 - Barriers for LCP and IMF are calculated now according to the 6663 according to the C Bass model (Nuc << 5350 C Bass model (Nucl. Phys. A (1974)) 6664 C KHS 2007 - To speed up, barriers are read << 5351 C KHS 2007 - To speed up, barriers are read from tabels; in case thermal 6665 case thermal C expansion is consi << 5352 C expansion is considered, barriers are calculated. 6666 are calculated. C INPUT: C EA - Excitatio << 5353 C INPUT: 6667 nucleon C Z11, A11 - Charge and mass of daug << 5354 C EA - Excitation energy per nucleon 6668 Z22, A22 - Charge and mass of LCP or IMF << 5355 C Z11, A11 - Charge and mass of daughter nucleus 6669 C << 5356 C Z22, A22 - Charge and mass of LCP or IMF 6670 C OUTPUT: << 5357 C 6671 C BARR - Barrier << 5358 C OUTPUT: 6672 C OMEGA - Curvature of the potential << 5359 C BARR - Barrier 6673 C << 5360 C OMEGA - Curvature of the potential 6674 C BASS MODEL NPA 1974 - used only if expansi << 5361 C 6675 (OPTEXP=1) C or one w << 5362 C BASS MODEL NPA 1974 - used only if expansion is considered (OPTEXP=1) 6676 explicitly (OPTBAR=1) C October 2011 - AK - << 5363 C or one wants this model explicitely (OPTBAR=1) 6677 parametrization of the barrier and its posit << 5364 C October 2011 - AK - new parametrization of the barrier and its position, 6678 et al., NPA 868 (2011) 1; this is now C defa << 5365 C see W.W. Qu et al., NPA 868 (2011) 1; this is now 6679 (OPTBAR=0) << 5366 C default option (OPTBAR=0) 6680 c << 5367 c 6681 c November 2016 - JLRS - Added this function << 5368 c November 2016 - JLRS - Added this function from abla07v4 6682 c << 5369 c 6683 */ << 5370 */ 6684 G4double BARR, OMEGA, RMAX; << 5371 G4double BARR, OMEGA, RMAX; 6685 RMAX = 1.1 * (ecld->rms[A1 - Z1][Z1] + ec << 5372 RMAX = 1.1 * (ecld->rms[A1-Z1][Z1]+ecld->rms[A2-Z2][Z2]) + 2.8; 6686 BARR = 1.345 * Z1 * Z2 / RMAX; << 5373 BARR = 1.345 * Z1 * Z2 / RMAX; 6687 // C Omega according to Avishai: << 5374 //C Omega according to Avishai: 6688 OMEGA = 4.5 / 197.3287; << 5375 OMEGA = 4.5 / 197.3287; 6689 5376 6690 // if(Z1<60){ 5377 // if(Z1<60){ 6691 // if(Z2==1 && A2==2) BARR = BARR * 1.1; 5378 // if(Z2==1 && A2==2) BARR = BARR * 1.1; 6692 // if(Z2==1 && A2==3) BARR = BARR * 1.1; 5379 // if(Z2==1 && A2==3) BARR = BARR * 1.1; 6693 // if(Z2==2 && A2==3) BARR = BARR * 1.3 << 5380 // if(Z2==2 && A2==3) BARR = BARR * 1.3; 6694 // if(Z2==2 && A2==4) BARR = BARR * 1.1; 5381 // if(Z2==2 && A2==4) BARR = BARR * 1.1; 6695 // } 5382 // } 6696 5383 6697 (*sOMEGA) = OMEGA; << 5384 (*sOMEGA)=OMEGA; 6698 (*sBARR) = BARR; << 5385 (*sBARR)=BARR; 6699 // << 5386 // 6700 return; << 5387 return; 6701 } 5388 } 6702 5389 6703 void G4Abla::barfit(G4int iz, G4int ia, G4int << 5390 void G4Abla::barfit(G4int iz, G4int ia, G4int il, G4double *sbfis, G4double *segs, G4double *selmax) 6704 { 5391 { 6705 // 2223 C VERSION FOR 32BIT COMPUTE << 5392 // 2223 C VERSION FOR 32BIT COMPUTER 6706 // 2224 C THIS SUBROUTINE RETURNS T << 5393 // 2224 C THIS SUBROUTINE RETURNS THE BARRIER HEIGHT BFIS, THE 6707 // 2225 C GROUND-STATE ENERGY SEGS, << 5394 // 2225 C GROUND-STATE ENERGY SEGS, IN MEV, AND THE ANGULAR MOMENTUM 6708 // 2226 C AT WHICH THE FISSION BARR << 5395 // 2226 C AT WHICH THE FISSION BARRIER DISAPPEARS, LMAX, IN UNITS OF 6709 // 2227 C H-BAR, WHEN CALLED WITH I << 5396 // 2227 C H-BAR, WHEN CALLED WITH INTEGER AGUMENTS IZ, THE ATOMIC 6710 // 2228 C NUMBER, IA, THE ATOMIC MA << 5397 // 2228 C NUMBER, IA, THE ATOMIC MASS NUMBER, AND IL, THE ANGULAR 6711 // 2229 C MOMENTUM IN UNITS OF H-BA << 5398 // 2229 C MOMENTUM IN UNITS OF H-BAR. (PLANCK'S CONSTANT DIVIDED BY 6712 // 2230 C 2*PI). << 5399 // 2230 C 2*PI). 6713 // 2231 C << 5400 // 2231 C 6714 // 2232 C THE FISSION BARRIER FO << 5401 // 2232 C THE FISSION BARRIER FO IL = 0 IS CALCULATED FROM A 7TH 6715 // 2233 C ORDER FIT IN TWO VARIABLE << 5402 // 2233 C ORDER FIT IN TWO VARIABLES TO 638 CALCULATED FISSION 6716 // 2234 C BARRIERS FOR Z VALUES FRO << 5403 // 2234 C BARRIERS FOR Z VALUES FROM 20 TO 110. THESE 638 BARRIERS ARE 6717 // ARE 2235 C FIT WITH AN RMS DEVIA << 5404 // 2235 C FIT WITH AN RMS DEVIATION OF 0.10 MEV BY THIS 49-PARAMETER 6718 // 2236 C FUNCTION. << 5405 // 2236 C FUNCTION. 6719 // 2237 C IF BARFIT IS CALLED WITH << 5406 // 2237 C IF BARFIT IS CALLED WITH (IZ,IA) VALUES OUTSIDE THE RANGE OF 6720 // OF 2238 C THE BARRIER HEIGHT IS << 5407 // 2238 C THE BARRIER HEIGHT IS SET TO 0.0, AND A MESSAGE IS PRINTED 6721 // 2239 C ON THE DEFAULT OUTPUT FIL << 5408 // 2239 C ON THE DEFAULT OUTPUT FILE. 6722 // 2240 C << 5409 // 2240 C 6723 // 2241 C FOR IL VALUES NOT EQUA << 5410 // 2241 C FOR IL VALUES NOT EQUAL TO ZERO, THE VALUES OF L AT WHICH 6724 // WHICH 2242 C THE BARRIER IS 80% << 5411 // 2242 C THE BARRIER IS 80% AND 20% OF THE L=0 VALUE ARE RESPECTIVELY 6725 // RESPECTIVELY << 5412 // 2243 C FIT TO 20-PARAMETER FUNCTIONS OF Z AND A, OVER A MORE 6726 // 2243 C FIT TO 20-PARAMETER FUNCT << 5413 // 2244 C RESTRICTED RANGE OF A VALUES, THAN IS THE CASE FOR L = 0. 6727 // 2244 C RESTRICTED RANGE OF A VAL << 5414 // 2245 C THE VALUE OF L WHERE THE BARRIER DISAPPEARS, LMAX IS FIT TO 6728 // 2245 C THE VALUE OF L WHERE THE << 5415 // 2246 C A 24-PARAMETER FUNCTION OF Z AND A, WITH THE SAME RANGE OF 6729 // TO 2246 C A 24-PARAMETER FUNCTI << 5416 // 2247 C Z AND A VALUES AS L-80 AND L-20. 6730 // 2247 C Z AND A VALUES AS L-80 AN << 5417 // 2248 C ONCE AGAIN, IF AN (IZ,IA) PAIR IS OUTSIDE OF THE RANGE OF 6731 // 2248 C ONCE AGAIN, IF AN (IZ, << 5418 // 2249 C VALIDITY OF THE FIT, THE BARRIER VALUE IS SET TO 0.0 AND A 6732 // OF 2249 C VALIDITY OF THE FIT, << 5419 // 2250 C MESSAGE IS PRINTED. THESE THREE VALUES (BFIS(L=0),L-80, AND 6733 // 2250 C MESSAGE IS PRINTED. THESE << 5420 // 2251 C L-20) AND THE CONSTRINTS OF BFIS = 0 AND D(BFIS)/DL = 0 AT 6734 // AND 2251 C L-20) AND THE CONSTRI << 5421 // 2252 C L = LMAX AND L=0 LEAD TO A FIFTH-ORDER FIT TO BFIS(L) FOR 6735 // 2252 C L = LMAX AND L=0 LEAD TO << 5422 // 2253 C L>L-20. THE FIRST THREE CONSTRAINTS LEAD TO A THIRD-ORDER FIT 6736 // 2253 C L>L-20. THE FIRST THREE C << 5423 // 2254 C FOR THE REGION L < L-20. 6737 // FIT 2254 C FOR THE REGION L < L- << 5424 // 2255 C 6738 // GROUND STATE ENERGIES ARE CALCULATED << 5425 // 2256 C THE GROUND STATE ENERGIES ARE CALCULATED FROM A 6739 // IN Z, A, AND L TO 214 GROUND-STATE E << 5426 // 2257 C 120-PARAMETER FIT IN Z, A, AND L TO 214 GROUND-STATE ENERGIES 6740 // AND A VALUES. << 5427 // 2258 C FOR 36 DIFFERENT Z AND A VALUES. 6741 // 2259 C (THE RANGE OF Z AND A IS << 5428 // 2259 C (THE RANGE OF Z AND A IS THE SAME AS FOR L-80, L-20, AND 6742 // 2260 C L-MAX) << 5429 // 2260 C L-MAX) 6743 // 2261 C << 5430 // 2261 C 6744 // 2262 C THE CALCULATED BARRIER << 5431 // 2262 C THE CALCULATED BARRIERS FROM WHICH THE FITS WERE MADE WERE 6745 // WERE 2263 C CALCULATED IN 1983- << 5432 // 2263 C CALCULATED IN 1983-1984 BY A. J. SIERK OF LOS ALAMOS 6746 // ALAMOS 2264 C NATIONAL LABORATO << 5433 // 2264 C NATIONAL LABORATORY GROUP T-9, USING YUKAWA-PLUS-EXPONENTIAL 6747 // YUKAWA-PLUS-EXPONENTIAL << 5434 // 2265 C G4DOUBLE FOLDED NUCLEAR ENERGY, EXACT COULOMB DIFFUSENESS 6748 // 2265 C G4DOUBLE FOLDED NUCLEAR E << 5435 // 2266 C CORRECTIONS, AND DIFFUSE-MATTER MOMENTS OF INERTIA. 6749 // 2266 C CORRECTIONS, AND DIFFUSE- << 5436 // 2267 C THE PARAMETERS OF THE MODEL R-0 = 1.16 FM, AS 21.13 MEV, 6750 // 2267 C THE PARAMETERS OF THE MOD << 5437 // 2268 C KAPPA-S = 2.3, A = 0.68 FM. 6751 // 2268 C KAPPA-S = 2.3, A = 0.68 F << 5438 // 2269 C THE DIFFUSENESS OF THE MATTER AND CHARGE DISTRIBUTIONS USED 6752 // 2269 C THE DIFFUSENESS OF THE MA << 5439 // 2270 C CORRESPONDS TO A SURFACE DIFFUSENESS PARAMETER (DEFINED BY 6753 // USED 2270 C CORRESPONDS TO A SU << 5440 // 2271 C MYERS) OF 0.99 FM. THE CALCULATED BARRIERS FOR L = 0 ARE 6754 // (DEFINED BY 2271 C MYERS) OF 0.9 << 5441 // 2272 C ACCURATE TO A LITTLE LESS THAN 0.1 MEV; THE OUTPUT FROM 6755 // 0 ARE 2272 C ACCURATE TO A LITTL << 5442 // 2273 C THIS SUBROUTINE IS A LITTLE LESS ACCURATE. WORST ERRORS MAY BE 6756 // FROM 2273 C THIS SUBROUTINE IS << 5443 // 2274 C AS LARGE AS 0.5 MEV; CHARACTERISTIC UNCERTAINY IS IN THE RANGE 6757 // ERRORS MAY BE << 5444 // 2275 C OF 0.1-0.2 MEV. THE RMS DEVIATION OF THE GROUND-STATE FIT 6758 // 2274 C AS LARGE AS 0.5 MEV; CHAR << 5445 // 2276 C FROM THE 214 INPUT VALUES IS 0.20 MEV. THE MAXIMUM ERROR 6759 // RANGE << 5446 // 2277 C OCCURS FOR LIGHT NUCLEI IN THE REGION WHERE THE GROUND STATE 6760 // 2275 C OF 0.1-0.2 MEV. THE RMS D << 5447 // 2278 C IS PROLATE, AND MAY BE GREATER THAN 1.0 MEV FOR VERY NEUTRON 6761 // 2276 C FROM THE 214 INPUT VALUES << 5448 // 2279 C DEFICIENT NUCLEI, WITH L NEAR LMAX. FOR MOST NUCLEI LIKELY TO 6762 // 2277 C OCCURS FOR LIGHT NUCLEI I << 5449 // 2280 C BE ENCOUNTERED IN REAL EXPERIMENTS, THE MAXIMUM ERROR IS 6763 // STATE << 5450 // 2281 C CLOSER TO 0.5 MEV, AGAIN FOR LIGHT NUCLEI AND L NEAR LMAX. 6764 // 2278 C IS PROLATE, AND MAY BE GR << 5451 // 2282 C 6765 // NEUTRON << 5452 // 2283 C WRITTEN BY A. J. SIERK, LANL T-9 6766 // 2279 C DEFICIENT NUCLEI, WITH L << 5453 // 2284 C VERSION 1.0 FEBRUARY, 1984 6767 // TO 2280 C BE ENCOUNTERED IN REA << 5454 // 2285 C 6768 // 2281 C CLOSER TO 0.5 MEV, AGAIN << 5455 // 2286 C THE FOLLOWING IS NECESSARY FOR 32-BIT MACHINES LIKE DEC VAX, 6769 // 2282 C << 5456 // 2287 C IBM, ETC 6770 // 2283 C WRITTEN BY A. J. SIERK, L << 5457 6771 // 2284 C VERSION 1.0 FEBRUARY, 198 << 5458 G4double pa[7],pz[7],pl[10]; 6772 // 2285 C << 5459 for(G4int init_i = 0; init_i < 7; init_i++) { 6773 // 2286 C THE FOLLOWING IS NECESSAR << 5460 pa[init_i] = 0.0; 6774 // VAX, 2287 C IBM, ETC << 5461 pz[init_i] = 0.0; 6775 << 5462 } 6776 G4double pa[7], pz[7], pl[10]; << 5463 for(G4int init_i = 0; init_i < 10; init_i++) { 6777 for (G4int init_i = 0; init_i < 7; init_i << 5464 pl[init_i] = 0.0; 6778 { << 5465 } 6779 pa[init_i] = 0.0; << 5466 6780 pz[init_i] = 0.0; << 5467 G4double a = 0.0, z = 0.0, amin = 0.0, amax = 0.0, amin2 = 0.0; 6781 } << 5468 G4double amax2 = 0.0, aa = 0.0, zz = 0.0, bfis = 0.0; 6782 for (G4int init_i = 0; init_i < 10; init_ << 5469 G4double bfis0 = 0.0, ell = 0.0, el = 0.0, egs = 0.0, el80 = 0.0, el20 = 0.0; 6783 { << 5470 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; 6784 pl[init_i] = 0.0; << 5471 G4double aj = 0.0, ak = 0.0, a1 = 0.0, a2 = 0.0; 6785 } << 5472 6786 << 5473 G4int i = 0, j = 0, k = 0, m = 0; 6787 G4double a = 0.0, z = 0.0, amin = 0.0, am << 5474 G4int l = 0; 6788 G4double amax2 = 0.0, aa = 0.0, zz = 0.0, << 5475 6789 G4double bfis0 = 0.0, ell = 0.0, el = 0.0 << 5476 G4double emncof[4][5] = {{-9.01100e+2,-1.40818e+3, 2.77000e+3,-7.06695e+2, 8.89867e+2}, 6790 G4double elmax = 0.0, sel80 = 0.0, sel20 << 5477 {1.35355e+4,-2.03847e+4, 1.09384e+4,-4.86297e+3,-6.18603e+2}, 6791 G4double aj = 0.0, ak = 0.0, a1 = 0.0, a2 << 5478 {-3.26367e+3, 1.62447e+3, 1.36856e+3, 1.31731e+3, 1.53372e+2}, 6792 << 5479 {7.48863e+3,-1.21581e+4, 5.50281e+3,-1.33630e+3, 5.05367e-2}}; 6793 G4int i = 0, j = 0, k = 0, m = 0; << 5480 6794 G4int l = 0; << 5481 G4double elmcof[4][5] = {{1.84542e+3,-5.64002e+3, 5.66730e+3,-3.15150e+3, 9.54160e+2}, 6795 << 5482 {-2.24577e+3, 8.56133e+3,-9.67348e+3, 5.81744e+3,-1.86997e+3}, 6796 G4double emncof[4][5] = { { -9.01100e+2, << 5483 {2.79772e+3,-8.73073e+3, 9.19706e+3,-4.91900e+3, 1.37283e+3}, 6797 { 1.35355e+4, - << 5484 {-3.01866e+1, 1.41161e+3,-2.85919e+3, 2.13016e+3,-6.49072e+2}}; 6798 { -3.26367e+3, << 5485 6799 { 7.48863e+3, - << 5486 G4double emxcof[4][6] = {{9.43596e4,-2.241997e5,2.223237e5,-1.324408e5,4.68922e4,-8.83568e3}, 6800 << 5487 {-1.655827e5,4.062365e5,-4.236128e5,2.66837e5,-9.93242e4,1.90644e4}, 6801 G4double elmcof[4][5] = { { 1.84542e+3, - << 5488 {1.705447e5,-4.032e5,3.970312e5,-2.313704e5,7.81147e4,-1.322775e4}, 6802 { -2.24577e+3, << 5489 {-9.274555e4,2.278093e5,-2.422225e5,1.55431e5,-5.78742e4,9.97505e3}}; 6803 { 2.79772e+3, - << 5490 6804 { -3.01866e+1, << 5491 G4double elzcof[7][7] = {{5.11819909e+5,-1.30303186e+6, 1.90119870e+6,-1.20628242e+6, 5.68208488e+5, 5.48346483e+4,-2.45883052e+4}, 6805 << 5492 {-1.13269453e+6, 2.97764590e+6,-4.54326326e+6, 3.00464870e+6, -1.44989274e+6,-1.02026610e+5, 6.27959815e+4}, 6806 G4double emxcof[4][6] = { { 9.43596e4, -2 << 5493 {1.37543304e+6,-3.65808988e+6, 5.47798999e+6,-3.78109283e+6, 1.84131765e+6, 1.53669695e+4,-6.96817834e+4}, 6807 { -1.655827e5, << 5494 {-8.56559835e+5, 2.48872266e+6,-4.07349128e+6, 3.12835899e+6, -1.62394090e+6, 1.19797378e+5, 4.25737058e+4}, 6808 { 1.705447e5, - << 5495 {3.28723311e+5,-1.09892175e+6, 2.03997269e+6,-1.77185718e+6, 9.96051545e+5,-1.53305699e+5,-1.12982954e+4}, 6809 { -9.274555e4, << 5496 {4.15850238e+4, 7.29653408e+4,-4.93776346e+5, 6.01254680e+5, -4.01308292e+5, 9.65968391e+4,-3.49596027e+3}, 6810 << 5497 {-1.82751044e+5, 3.91386300e+5,-3.03639248e+5, 1.15782417e+5, -4.24399280e+3,-6.11477247e+3, 3.66982647e+2}}; 6811 G4double elzcof[7][7] = { << 5498 6812 { 5.11819909e+5, -1.30303186e+6, 1.90 << 5499 const G4int sizex = 5; 6813 { -1.13269453e+6, 2.97764590e+6, -4.5 << 5500 const G4int sizey = 6; 6814 { 1.37543304e+6, -3.65808988e+6, 5.47 << 5501 const G4int sizez = 4; 6815 { -8.56559835e+5, 2.48872266e+6, -4.0 << 5502 6816 { 3.28723311e+5, -1.09892175e+6, 2.03 << 5503 G4double egscof[sizey][sizey][sizez]; 6817 { 4.15850238e+4, 7.29653408e+4, -4.93 << 5504 6818 { -1.82751044e+5, 3.91386300e+5, -3.0 << 5505 G4double egs1[sizey][sizex] = {{1.927813e5, 7.666859e5, 6.628436e5, 1.586504e5,-7.786476e3}, 6819 }; << 5506 {-4.499687e5,-1.784644e6,-1.546968e6,-4.020658e5,-3.929522e3}, 6820 << 5507 {4.667741e5, 1.849838e6, 1.641313e6, 5.229787e5, 5.928137e4}, 6821 const G4int sizex = 5; << 5508 {-3.017927e5,-1.206483e6,-1.124685e6,-4.478641e5,-8.682323e4}, 6822 const G4int sizey = 6; << 5509 {1.226517e5, 5.015667e5, 5.032605e5, 2.404477e5, 5.603301e4}, 6823 const G4int sizez = 4; << 5510 {-1.752824e4,-7.411621e4,-7.989019e4,-4.175486e4,-1.024194e4}}; 6824 << 5511 6825 G4double egscof[sizey][sizey][sizez]; << 5512 G4double egs2[sizey][sizex] = {{-6.459162e5,-2.903581e6,-3.048551e6,-1.004411e6,-6.558220e4}, 6826 << 5513 {1.469853e6, 6.564615e6, 6.843078e6, 2.280839e6, 1.802023e5}, 6827 G4double egs1[sizey][sizex] = { { 1.92781 << 5514 {-1.435116e6,-6.322470e6,-6.531834e6,-2.298744e6,-2.639612e5}, 6828 { -4.4996 << 5515 {8.665296e5, 3.769159e6, 3.899685e6, 1.520520e6, 2.498728e5}, 6829 { 4.66774 << 5516 {-3.302885e5,-1.429313e6,-1.512075e6,-6.744828e5,-1.398771e5}, 6830 { -3.0179 << 5517 {4.958167e4, 2.178202e5, 2.400617e5, 1.167815e5, 2.663901e4}}; 6831 { 1.22651 << 5518 6832 { -1.7528 << 5519 G4double egs3[sizey][sizex] = {{3.117030e5, 1.195474e6, 9.036289e5, 6.876190e4,-6.814556e4}, 6833 << 5520 {-7.394913e5,-2.826468e6,-2.152757e6,-2.459553e5, 1.101414e5}, 6834 G4double egs2[sizey][sizex] = { { -6.4591 << 5521 {7.918994e5, 3.030439e6, 2.412611e6, 5.228065e5, 8.542465e3}, 6835 { 1.46985 << 5522 {-5.421004e5,-2.102672e6,-1.813959e6,-6.251700e5,-1.184348e5}, 6836 { -1.4351 << 5523 {2.370771e5, 9.459043e5, 9.026235e5, 4.116799e5, 1.001348e5}, 6837 { 8.66529 << 5524 {-4.227664e4,-1.738756e5,-1.795906e5,-9.292141e4,-2.397528e4}}; 6838 { -3.3028 << 5525 6839 { 4.95816 << 5526 G4double egs4[sizey][sizex] = {{-1.072763e5,-5.973532e5,-6.151814e5, 7.371898e4, 1.255490e5}, 6840 << 5527 {2.298769e5, 1.265001e6, 1.252798e6,-2.306276e5,-2.845824e5}, 6841 G4double egs3[sizey][sizex] = { { 3.11703 << 5528 {-2.093664e5,-1.100874e6,-1.009313e6, 2.705945e5, 2.506562e5}, 6842 { -7.3949 << 5529 {1.274613e5, 6.190307e5, 5.262822e5,-1.336039e5,-1.115865e5}, 6843 { 7.91899 << 5530 {-5.715764e4,-2.560989e5,-2.228781e5,-3.222789e3, 1.575670e4}, 6844 { -5.4210 << 5531 {1.189447e4, 5.161815e4, 4.870290e4, 1.266808e4, 2.069603e3}}; 6845 { 2.37077 << 5532 6846 { -4.2276 << 5533 for(i = 0; i < sizey; i++) { 6847 << 5534 for(j = 0; j < sizex; j++) { 6848 G4double egs4[sizey][sizex] = { { -1.0727 << 5535 egscof[i][j][0] = egs1[i][j]; 6849 { 2.29876 << 5536 egscof[i][j][1] = egs2[i][j]; 6850 { -2.0936 << 5537 egscof[i][j][2] = egs3[i][j]; 6851 { 1.27461 << 5538 egscof[i][j][3] = egs4[i][j]; 6852 { -5.7157 << 5539 } 6853 { 1.18944 << 5540 } 6854 << 5541 6855 for (i = 0; i < sizey; i++) << 5542 // the program starts here 6856 { << 5543 if (iz < 19 || iz > 111) { 6857 for (j = 0; j < sizex; j++) << 5544 goto barfit900; 6858 { << 5545 } 6859 egscof[i][j][0] = egs1[i][j]; << 5546 6860 egscof[i][j][1] = egs2[i][j]; << 5547 if(iz > 102 && il > 0) { 6861 egscof[i][j][2] = egs3[i][j]; << 5548 goto barfit902; 6862 egscof[i][j][3] = egs4[i][j]; << 5549 } 6863 } << 5550 6864 } << 5551 z=G4double(iz); 6865 << 5552 a=G4double(ia); 6866 // the program starts here << 5553 el=G4double(il); 6867 if (iz < 19 || iz > 122) << 5554 amin= 1.2e0*z + 0.01e0*z*z; 6868 { << 5555 amax= 5.8e0*z - 0.024e0*z*z; 6869 goto barfit900; << 5556 6870 } << 5557 if(a < amin || a > amax) { 6871 << 5558 goto barfit910; 6872 if (iz > 122 && il > 0) << 5559 } 6873 { << 5560 6874 goto barfit902; << 5561 // angul.mom.zero barrier 6875 } << 5562 aa=2.5e-3*a; 6876 << 5563 zz=1.0e-2*z; 6877 z = G4double(iz); << 5564 ell=1.0e-2*el; 6878 a = G4double(ia); << 5565 bfis0 = 0.0; 6879 el = G4double(il); << 5566 lpoly(zz,7,pz); 6880 amin = 1.2e0 * z + 0.01e0 * z * z; << 5567 lpoly(aa,7,pa); 6881 amax = 5.8e0 * z - 0.024e0 * z * z; << 5568 6882 << 5569 for(i = 0; i < 7; i++) { //do 10 i=1,7 6883 if (a < amin || a > amax) << 5570 for(j = 0; j < 7; j++) { //do 10 j=1,7 6884 { << 5571 bfis0=bfis0+elzcof[j][i]*pz[i]*pa[j]; 6885 goto barfit910; << 5572 } 6886 } << 5573 } 6887 << 5574 6888 // angul.mom.zero barrier << 5575 bfis=bfis0; 6889 aa = 2.5e-3 * a; << 5576 6890 zz = 1.0e-2 * z; << 5577 (*sbfis)=bfis; 6891 ell = 1.0e-2 * el; << 5578 egs=0.0; 6892 bfis0 = 0.0; << 5579 (*segs)=egs; 6893 lpoly(zz, 7, pz); << 5580 6894 lpoly(aa, 7, pa); << 5581 // values of l at which the barrier 6895 << 5582 // is 20%(el20) and 80%(el80) of l=0 value 6896 for (i = 0; i < 7; i++) << 5583 amin2 = 1.4e0*z + 0.009e0*z*z; 6897 { // do 10 i=1,7 << 5584 amax2 = 20.e0 + 3.0e0*z; 6898 for (j = 0; j < 7; j++) << 5585 6899 { // do 10 j=1,7 << 5586 if((a < amin2-5.e0 || a > amax2+10.e0) && il > 0) { 6900 bfis0 = bfis0 + elzcof[j][i] * pz << 5587 goto barfit920; 6901 } << 5588 } 6902 } << 5589 6903 << 5590 lpoly(zz,5,pz); 6904 bfis = bfis0; << 5591 lpoly(aa,4,pa); 6905 << 5592 el80=0.0; 6906 (*sbfis) = bfis; << 5593 el20=0.0; 6907 egs = 0.0; << 5594 elmax=0.0; 6908 (*segs) = egs; << 5595 6909 << 5596 for(i = 0; i < 4; i++) { 6910 // values of l at which the barrier << 5597 for(j = 0; j < 5; j++) { 6911 // is 20%(el20) and 80%(el80) of l=0 valu << 5598 el80 = el80 + elmcof[i][j]*pz[j]*pa[i]; 6912 amin2 = 1.4e0 * z + 0.009e0 * z * z; << 5599 el20 = el20 + emncof[i][j]*pz[j]*pa[i]; 6913 amax2 = 20.e0 + 3.0e0 * z; << 5600 } 6914 << 5601 } 6915 if ((a < amin2 - 5.e0 || a > amax2 + 10.e << 5602 6916 { << 5603 sel80 = el80; 6917 goto barfit920; << 5604 sel20 = el20; 6918 } << 5605 6919 << 5606 // value of l (elmax) where barrier disapp. 6920 lpoly(zz, 5, pz); << 5607 lpoly(zz,6,pz); 6921 lpoly(aa, 4, pa); << 5608 lpoly(ell,9,pl); 6922 el80 = 0.0; << 5609 6923 el20 = 0.0; << 5610 for(i = 0; i < 4; i++) { //do 30 i= 1,4 6924 elmax = 0.0; << 5611 for(j = 0; j < 6; j++) { //do 30 j=1,6 6925 << 5612 elmax = elmax + emxcof[i][j]*pz[j]*pa[i]; 6926 for (i = 0; i < 4; i++) << 5613 } 6927 { << 5614 } 6928 for (j = 0; j < 5; j++) << 5615 6929 { << 5616 (*selmax)=elmax; 6930 el80 = el80 + elmcof[i][j] * pz[j << 5617 6931 el20 = el20 + emncof[i][j] * pz[j << 5618 // value of barrier at ang.mom. l 6932 } << 5619 if(il < 1){ 6933 } << 5620 return; 6934 << 5621 } 6935 sel80 = el80; << 5622 6936 sel20 = el20; << 5623 x = sel20/(*selmax); 6937 << 5624 y = sel80/(*selmax); 6938 // value of l (elmax) where barrier disap << 5625 6939 lpoly(zz, 6, pz); << 5626 if(el <= sel20) { 6940 lpoly(ell, 9, pl); << 5627 // low l 6941 << 5628 q = 0.2/(std::pow(sel20,2)*std::pow(sel80,2)*(sel20-sel80)); 6942 for (i = 0; i < 4; i++) << 5629 qa = q*(4.0*std::pow(sel80,3) - std::pow(sel20,3)); 6943 { // do 30 i= 1,4 << 5630 qb = -q*(4.0*std::pow(sel80,2) - std::pow(sel20,2)); 6944 for (j = 0; j < 6; j++) << 5631 bfis = bfis*(1.0 + qa*std::pow(el,2) + qb*std::pow(el,3)); 6945 { // do 30 j=1,6 << 5632 } 6946 elmax = elmax + emxcof[i][j] * pz << 5633 else { 6947 } << 5634 // high l 6948 } << 5635 aj = (-20.0*std::pow(x,5) + 25.e0*std::pow(x,4) - 4.0)*std::pow((y-1.0),2)*y*y; 6949 << 5636 ak = (-20.0*std::pow(y,5) + 25.0*std::pow(y,4) - 1.0) * std::pow((x-1.0),2)*x*x; 6950 (*selmax) = elmax; << 5637 q = 0.2/(std::pow((y-x)*((1.0-x)*(1.0-y)*x*y),2)); 6951 << 5638 qa = q*(aj*y - ak*x); 6952 // value of barrier at ang.mom. l << 5639 qb = -q*(aj*(2.0*y + 1.0) - ak*(2.0*x + 1.0)); 6953 if (il < 1) << 5640 z = el/(*selmax); 6954 { << 5641 a1 = 4.0*std::pow(z,5) - 5.0*std::pow(z,4) + 1.0; 6955 return; << 5642 a2 = qa*(2.e0*z + 1.e0); 6956 } << 5643 bfis=bfis*(a1 + (z - 1.e0)*(a2 + qb*z)*z*z*(z - 1.e0)); 6957 << 5644 } 6958 x = sel20 / (*selmax); << 5645 6959 y = sel80 / (*selmax); << 5646 if(bfis <= 0.0) { 6960 << 5647 bfis=0.0; 6961 if (el <= sel20) << 5648 } 6962 { << 5649 6963 // low l << 5650 if(el > (*selmax)) { 6964 q = 0.2 / (std::pow(sel20, 2) * std:: << 5651 bfis=0.0; 6965 qa = q * (4.0 * std::pow(sel80, 3) - << 5652 } 6966 qb = -q * (4.0 * std::pow(sel80, 2) - << 5653 (*sbfis)=bfis; 6967 bfis = bfis * (1.0 + qa * std::pow(el << 5654 6968 } << 5655 // now calculate rotating ground state energy 6969 else << 5656 if(el > (*selmax)) { 6970 { << 5657 return; 6971 // high l << 5658 } 6972 aj = (-20.0 * std::pow(x, 5) + 25.e0 << 5659 6973 ak = (-20.0 * std::pow(y, 5) + 25.0 * << 5660 for(k = 0; k < 4; k++) { 6974 q = 0.2 / (std::pow((y - x) * ((1.0 - << 5661 for(l = 0; l < 6; l++) { 6975 qa = q * (aj * y - ak * x); << 5662 for(m = 0; m < 5; m++) { 6976 qb = -q * (aj * (2.0 * y + 1.0) - ak << 5663 egs = egs + egscof[l][m][k]*pz[l]*pa[k]*pl[2*m]; 6977 z = el / (*selmax); << 5664 } 6978 a1 = 4.0 * std::pow(z, 5) - 5.0 * std << 6979 a2 = qa * (2.e0 * z + 1.e0); << 6980 bfis = bfis * (a1 + (z - 1.e0) * (a2 << 6981 } << 6982 << 6983 if (bfis <= 0.0) << 6984 { << 6985 bfis = 0.0; << 6986 } << 6987 << 6988 if (el > (*selmax)) << 6989 { << 6990 bfis = 0.0; << 6991 } << 6992 (*sbfis) = bfis; << 6993 << 6994 // now calculate rotating ground state en << 6995 if (el > (*selmax)) << 6996 { << 6997 return; << 6998 } << 6999 << 7000 for (k = 0; k < 4; k++) << 7001 { << 7002 for (l = 0; l < 6; l++) << 7003 { << 7004 for (m = 0; m < 5; m++) << 7005 { << 7006 egs = egs + egscof[l][m][k] * << 7007 } << 7008 } << 7009 } << 7010 << 7011 (*segs) = egs; << 7012 if ((*segs) < 0.0) << 7013 { << 7014 (*segs) = 0.0; << 7015 } << 7016 << 7017 return; << 7018 << 7019 barfit900: // continue << 7020 (*sbfis) = 0.0; << 7021 // for z<19 sbfis set to 1.0e3 << 7022 if (iz < 19) << 7023 { << 7024 (*sbfis) = 1.0e3; << 7025 } 5665 } 7026 (*segs) = 0.0; << 5666 } 7027 (*selmax) = 0.0; << 7028 return; << 7029 << 7030 barfit902: << 7031 (*sbfis) = 0.0; << 7032 (*segs) = 0.0; << 7033 (*selmax) = 0.0; << 7034 return; << 7035 5667 7036 barfit910: << 5668 (*segs)=egs; 7037 (*sbfis) = 0.0; << 5669 if((*segs) < 0.0) { 7038 (*segs) = 0.0; << 5670 (*segs)=0.0; 7039 (*selmax) = 0.0; << 5671 } 7040 return; << 5672 7041 << 5673 return; 7042 barfit920: << 5674 7043 (*sbfis) = 0.0; << 5675 barfit900: //continue 7044 (*segs) = 0.0; << 5676 (*sbfis)=0.0; 7045 (*selmax) = 0.0; << 5677 // for z<19 sbfis set to 1.0e3 7046 return; << 5678 if (iz < 19) { >> 5679 (*sbfis) = 1.0e3; >> 5680 } >> 5681 (*segs)=0.0; >> 5682 (*selmax)=0.0; >> 5683 return; >> 5684 >> 5685 barfit902: >> 5686 (*sbfis)=0.0; >> 5687 (*segs)=0.0; >> 5688 (*selmax)=0.0; >> 5689 return; >> 5690 >> 5691 barfit910: >> 5692 (*sbfis)=0.0; >> 5693 (*segs)=0.0; >> 5694 (*selmax)=0.0; >> 5695 return; >> 5696 >> 5697 barfit920: >> 5698 (*sbfis)=0.0; >> 5699 (*segs)=0.0; >> 5700 (*selmax)=0.0; >> 5701 return; 7047 } 5702 } 7048 5703 7049 G4double G4Abla::erf(G4double x) 5704 G4double G4Abla::erf(G4double x) 7050 { 5705 { 7051 G4double ferf; << 5706 G4double ferf; 7052 5707 7053 if (x < 0.) << 5708 if(x<0.){ 7054 { << 5709 ferf=-gammp(0.5,x*x); 7055 ferf = -gammp(0.5, x * x); << 5710 }else{ 7056 } << 5711 ferf=gammp(0.5,x*x);; 7057 else << 5712 } 7058 { << 5713 return ferf; 7059 ferf = gammp(0.5, x * x); << 7060 ; << 7061 } << 7062 return ferf; << 7063 } 5714 } 7064 5715 7065 G4double G4Abla::gammp(G4double a, G4double x 5716 G4double G4Abla::gammp(G4double a, G4double x) 7066 { 5717 { 7067 G4double fgammp; << 5718 G4double fgammp; 7068 G4double gammcf, gamser, gln = 0.; << 5719 G4double gammcf,gamser,gln=0.; 7069 << 7070 if (x < 0.0 || a <= 0.0) << 7071 std::cout << "G4Abla::gammp = bad arg << 7072 if (x < a + 1.) << 7073 { << 7074 gser(&gamser, a, x, gln); << 7075 fgammp = gamser; << 7076 } << 7077 else << 7078 { << 7079 gcf(&gammcf, a, x, gln); << 7080 fgammp = 1. - gammcf; << 7081 } << 7082 return fgammp; << 7083 } << 7084 << 7085 void G4Abla::gcf(G4double* gammcf, G4double a << 7086 { << 7087 G4double fgammcf, del; << 7088 G4double eps = 3e-7; << 7089 G4double fpmin = 1e-30; << 7090 G4int itmax = 100; << 7091 G4double an, b, c, d, h; << 7092 << 7093 gln = gammln(a); << 7094 b = x + 1. - a; << 7095 c = 1. / fpmin; << 7096 d = 1. / b; << 7097 h = d; << 7098 for (G4int i = 1; i <= itmax; i++) << 7099 { << 7100 an = -i * (i - a); << 7101 b = b + 2.; << 7102 d = an * d + b; << 7103 if (std::fabs(d) < fpmin) << 7104 d = fpmin; << 7105 c = b + an / c; << 7106 if (std::fabs(c) < fpmin) << 7107 c = fpmin; << 7108 d = 1.0 / d; << 7109 del = d * c; << 7110 h = h * del; << 7111 if (std::fabs(del - 1.) < eps) << 7112 goto dir1; << 7113 } << 7114 std::cout << "a too large, ITMAX too smal << 7115 dir1: << 7116 fgammcf = std::exp(-x + a * std::log(x) - << 7117 (*gammcf) = fgammcf; << 7118 return; << 7119 } << 7120 5720 7121 void G4Abla::gser(G4double* gamser, G4double << 5721 if(x<0.0 || a<=0.0)std::cout << "G4Abla::gammp = bad arguments in gammp" << std::endl; 7122 { << 5722 if(x<a+1.){ 7123 G4double fgamser, ap, sum, del; << 5723 gser(&gamser,a,x,gln); 7124 G4double eps = 3e-7; << 5724 fgammp=gamser; 7125 G4int itmax = 100; << 5725 }else{ 7126 << 5726 gcf(&gammcf,a,x,gln); 7127 gln = gammln(a); << 5727 fgammp=1.-gammcf; 7128 if (x <= 0.) << 5728 } 7129 { << 5729 return fgammp; 7130 if (x < 0.) << 5730 } 7131 std::cout << "G4Abla::gser = x < << 5731 7132 (*gamser) = 0.0; << 5732 void G4Abla::gcf(G4double *gammcf,G4double a,G4double x,G4double gln) 7133 return; << 5733 { 7134 } << 5734 G4double fgammcf,del; 7135 ap = a; << 5735 G4double eps=3e-7; 7136 sum = 1. / a; << 5736 G4double fpmin=1e-30; 7137 del = sum; << 5737 G4int itmax=100; 7138 for (G4int n = 0; n < itmax; n++) << 5738 G4double an,b,c,d,h; 7139 { << 5739 7140 ap = ap + 1.; << 5740 gln=gammln(a); 7141 del = del * x / ap; << 5741 b=x+1.-a; 7142 sum = sum + del; << 5742 c=1./fpmin; 7143 if (std::fabs(del) < std::fabs(sum) * << 5743 d=1./b; 7144 goto dir1; << 5744 h=d; 7145 } << 5745 for(G4int i=1;i<=itmax;i++){ 7146 std::cout << "a too large, ITMAX too smal << 5746 an=-i*(i-a); 7147 dir1: << 5747 b=b+2.; 7148 fgamser = sum * std::exp(-x + a * std::lo << 5748 d=an*d+b; 7149 (*gamser) = fgamser; << 5749 if(std::fabs(d)<fpmin)d=fpmin; 7150 return; << 5750 c=b+an/c; >> 5751 if(std::fabs(c)<fpmin)c=fpmin; >> 5752 d=1.0/d; >> 5753 del=d*c; >> 5754 h=h*del; >> 5755 if(std::fabs(del-1.)<eps)goto dir1; >> 5756 } >> 5757 std::cout << "a too large, ITMAX too small in gcf" << std::endl; >> 5758 dir1: >> 5759 fgammcf=std::exp(-x+a*std::log(x)-gln)*h; >> 5760 (*gammcf)=fgammcf; >> 5761 return; >> 5762 } >> 5763 >> 5764 void G4Abla::gser(G4double *gamser,G4double a,G4double x,G4double gln) >> 5765 { >> 5766 G4double fgamser,ap,sum,del; >> 5767 G4double eps=3e-7; >> 5768 G4int itmax=100; >> 5769 >> 5770 gln=gammln(a); >> 5771 if(x<=0.){ >> 5772 if(x<0.)std::cout << "G4Abla::gser = x < 0 in gser" << std::endl; >> 5773 (*gamser)=0.0; >> 5774 return; >> 5775 } >> 5776 ap=a; >> 5777 sum=1./a; >> 5778 del=sum; >> 5779 for(G4int n=0;n<itmax;n++){ >> 5780 ap=ap+1.; >> 5781 del=del*x/ap; >> 5782 sum=sum+del; >> 5783 if(std::fabs(del)<std::fabs(sum)*eps)goto dir1; >> 5784 } >> 5785 std::cout << "a too large, ITMAX too small in gser" << std::endl; >> 5786 dir1: >> 5787 fgamser=sum*std::exp(-x+a*std::log(x)-gln); >> 5788 (*gamser)=fgamser; >> 5789 return; 7151 } 5790 } 7152 5791 7153 G4double G4Abla::gammln(G4double xx) 5792 G4double G4Abla::gammln(G4double xx) 7154 { 5793 { 7155 G4double fgammln, x, ser, tmp, y; << 5794 G4double fgammln,x,ser,tmp,y; 7156 G4double cof[6] = { 76.18009172947146, - << 5795 G4double cof[6]={76.18009172947146,-86.50532032941677,24.01409824083091, 7157 -1.231739572450155, 0 << 5796 -1.231739572450155,0.1208650973866179e-2,-0.5395239384953e-5}; 7158 G4double stp = 2.5066282746310005; << 5797 G4double stp=2.5066282746310005; 7159 << 5798 7160 x = xx; << 5799 x=xx; 7161 y = x; << 5800 y=x; 7162 tmp = x + 5.5; << 5801 tmp=x+5.5; 7163 tmp = (x + 0.5) * std::log(tmp) - tmp; << 5802 tmp=(x+0.5)*std::log(tmp)-tmp; 7164 ser = 1.000000000190015; << 5803 ser=1.000000000190015; 7165 for (G4int j = 0; j < 6; j++) << 5804 for(G4int j=0;j<6;j++){ 7166 { << 5805 y=y+1.; 7167 y = y + 1.; << 5806 ser=ser+cof[j]/y; 7168 ser = ser + cof[j] / y; << 5807 } 7169 } << 7170 5808 7171 return fgammln = tmp + std::log(stp * ser << 5809 return fgammln=tmp+std::log(stp*ser/x); 7172 } 5810 } 7173 5811 >> 5812 7174 G4double G4Abla::fd(G4double E) 5813 G4double G4Abla::fd(G4double E) 7175 { 5814 { 7176 // DISTRIBUTION DE MAXWELL << 5815 // DISTRIBUTION DE MAXWELL 7177 5816 7178 return (E * std::exp(-E)); << 5817 return (E*std::exp(-E)); 7179 } 5818 } 7180 5819 7181 G4double G4Abla::f(G4double E) 5820 G4double G4Abla::f(G4double E) 7182 { 5821 { 7183 // FONCTION INTEGRALE DE FD(E) << 5822 // FONCTION INTEGRALE DE FD(E) 7184 return (1.0 - (E + 1.0) * std::exp(-E)); << 5823 return (1.0 - (E + 1.0) * std::exp(-E)); 7185 } 5824 } 7186 5825 7187 G4double G4Abla::fmaxhaz(G4double x) 5826 G4double G4Abla::fmaxhaz(G4double x) 7188 { 5827 { 7189 return (-x * std::log(G4AblaRandom::flat( << 5828 return ( -x*std::log(G4AblaRandom::flat()) -x*std::log(G4AblaRandom::flat()) -x*std::log(G4AblaRandom::flat()) ) ; 7190 x * std::log(G4AblaRandom::flat() << 7191 } 5829 } 7192 5830 7193 G4double G4Abla::fmaxhaz_old(G4double T) 5831 G4double G4Abla::fmaxhaz_old(G4double T) 7194 { 5832 { 7195 // tirage aleatoire dans une maxwellienne << 5833 // tirage aleatoire dans une maxwellienne 7196 // t : temperature << 5834 // t : temperature 7197 // << 5835 // 7198 // declaration des variables << 5836 // declaration des variables 7199 // << 5837 // 7200 << 5838 7201 const G4int pSize = 101; << 5839 const G4int pSize = 101; 7202 G4double p[pSize]; << 5840 G4double p[pSize]; 7203 << 5841 7204 // ial generateur pour le cascade (et les << 5842 // ial generateur pour le cascade (et les iy pour eviter les correlations) 7205 G4int i = 0; << 5843 G4int i = 0; 7206 G4int itest = 0; << 5844 G4int itest = 0; 7207 // programme principal << 5845 // programme principal 7208 << 5846 7209 // calcul des p(i) par approximation de n << 5847 // calcul des p(i) par approximation de newton 7210 p[pSize - 1] = 8.0; << 5848 p[pSize-1] = 8.0; 7211 G4double x = 0.1; << 5849 G4double x = 0.1; 7212 G4double x1 = 0.0; << 5850 G4double x1 = 0.0; 7213 G4double y = 0.0; << 5851 G4double y = 0.0; 7214 << 5852 7215 if (itest == 1) << 5853 if (itest == 1) { 7216 { << 5854 goto fmaxhaz120; 7217 goto fmaxhaz120; << 5855 } 7218 } << 5856 7219 << 5857 for(i = 1; i <= 99; i++) { 7220 for (i = 1; i <= 99; i++) << 5858 fmaxhaz20: 7221 { << 5859 x1 = x - (f(x) - G4double(i)/100.0)/fd(x); 7222 fmaxhaz20: << 5860 x = x1; 7223 x1 = x - (f(x) - G4double(i) / 100.0) << 5861 if (std::fabs(f(x) - G4double(i)/100.0) < 1e-5) { 7224 x = x1; << 5862 goto fmaxhaz100; 7225 if (std::fabs(f(x) - G4double(i) / 10 << 5863 } 7226 { << 5864 goto fmaxhaz20; 7227 goto fmaxhaz100; << 5865 fmaxhaz100: 7228 } << 5866 p[i] = x; 7229 goto fmaxhaz20; << 5867 } //end do 7230 fmaxhaz100: << 5868 7231 p[i] = x; << 5869 // itest = 1; 7232 } // end do << 5870 itest = 0; 7233 << 5871 // tirage aleatoire et calcul du x correspondant 7234 // itest = 1; << 5872 // par regression lineaire 7235 itest = 0; << 5873 fmaxhaz120: 7236 // tirage aleatoire et calcul du x corres << 7237 // par regression lineaire << 7238 fmaxhaz120: << 7239 y = G4AblaRandom::flat(); 5874 y = G4AblaRandom::flat(); 7240 i = nint(y * 100); << 5875 i = nint(y*100); 7241 5876 7242 // 2590 c ici on evite froidement les d << 5877 // 2590 c ici on evite froidement les depassements de tableaux....(a.b. 3/9/99) 7243 // 3/9/99) << 5878 if(i == 0) { 7244 if (i == 0) << 5879 goto fmaxhaz120; 7245 { << 5880 } 7246 goto fmaxhaz120; << 5881 7247 } << 5882 if (i == 1) { 7248 << 5883 x = p[i]*y*100; 7249 if (i == 1) << 5884 } 7250 { << 5885 else { 7251 x = p[i] * y * 100; << 5886 x = (p[i] - p[i-1])*(y*100 - i) + p[i]; 7252 } << 5887 } 7253 else << 5888 7254 { << 5889 return(x*T); 7255 x = (p[i] - p[i - 1]) * (y * 100 - i) << 5890 } 7256 } << 5891 7257 << 5892 G4double G4Abla::pace2(G4double a, G4double z) 7258 return (x * T); << 5893 { 7259 } << 5894 // PACE2 7260 << 5895 // Cette fonction retourne le defaut de masse du noyau A,Z en MeV 7261 void G4Abla::guet(G4double* x_par, G4double* << 5896 // Revisee pour a, z flottants 25/4/2002 = 7262 { << 5897 7263 // TABLE DE MASSES ET FORMULE DE MASSE TI << 5898 G4double fpace2 = 0.0; 7264 // Gives the theoritical value for mass e << 5899 7265 // Revisee pour x, z flottants 25/4/2002 << 5900 G4int ii = idint(a+0.5); 7266 << 5901 G4int jj = idint(z+0.5); 7267 // real*8 x,z << 5902 7268 // dimension q(0:50,0:70) << 5903 if(ii <= 0 || jj < 0) { 7269 G4double x = (*x_par); << 5904 fpace2=0.; 7270 G4double z = (*z_par); << 5905 return fpace2; 7271 G4double find = (*find_par); << 5906 } 7272 << 5907 7273 const G4int qrows = 50; << 5908 if(jj > 300) { 7274 const G4int qcols = 70; << 5909 fpace2=0.0; 7275 G4double q[qrows][qcols]; << 5910 } 7276 for (G4int init_i = 0; init_i < qrows; in << 5911 else { 7277 { << 5912 fpace2=pace->dm[ii][jj]; 7278 for (G4int init_j = 0; init_j < qcols << 5913 } 7279 { << 5914 fpace2=fpace2/1000.; 7280 q[init_i][init_j] = 0.0; << 5915 7281 } << 5916 if(pace->dm[ii][jj] == 0.) { 7282 } << 5917 if(ii < 12) { 7283 << 5918 fpace2=-500.; 7284 G4int ix = G4int(std::floor(x + 0.5)); << 5919 } 7285 G4int iz = G4int(std::floor(z + 0.5)); << 5920 else { 7286 G4double zz = iz; << 5921 guet(&a, &z, &fpace2); 7287 G4double xx = ix; << 5922 fpace2=fpace2-ii*931.5; 7288 find = 0.0; << 5923 fpace2=fpace2/1000.; 7289 G4double avol = 15.776; << 5924 } 7290 G4double asur = -17.22; << 5925 } 7291 G4double ac = -10.24; << 5926 7292 G4double azer = 8.0; << 5927 return fpace2; 7293 G4double xjj = -30.03; << 5928 } 7294 G4double qq = -35.4; << 5929 7295 G4double c1 = -0.737; << 5930 void G4Abla::guet(G4double *x_par, G4double *z_par, G4double *find_par) 7296 G4double c2 = 1.28; << 5931 { 7297 << 5932 // TABLE DE MASSES ET FORMULE DE MASSE TIRE DU PAPIER DE BRACK-GUET 7298 if (ix <= 7) << 5933 // Gives the theoritical value for mass excess... 7299 { << 5934 // Revisee pour x, z flottants 25/4/2002 7300 q[0][1] = 939.50; << 5935 7301 q[1][1] = 938.21; << 5936 //real*8 x,z 7302 q[1][2] = 1876.1; << 5937 // dimension q(0:50,0:70) 7303 q[1][3] = 2809.39; << 5938 G4double x = (*x_par); 7304 q[2][4] = 3728.34; << 5939 G4double z = (*z_par); 7305 q[2][3] = 2809.4; << 5940 G4double find = (*find_par); 7306 q[2][5] = 4668.8; << 5941 7307 q[2][6] = 5606.5; << 5942 const G4int qrows = 50; 7308 q[3][5] = 4669.1; << 5943 const G4int qcols = 70; 7309 q[3][6] = 5602.9; << 5944 G4double q[qrows][qcols]; 7310 q[3][7] = 6535.27; << 5945 for(G4int init_i = 0; init_i < qrows; init_i++) { 7311 q[4][6] = 5607.3; << 5946 for(G4int init_j = 0; init_j < qcols; init_j++) { 7312 q[4][7] = 6536.1; << 5947 q[init_i][init_j] = 0.0; 7313 q[5][7] = 6548.3; << 5948 } 7314 find = q[iz][ix]; << 5949 } 7315 } << 5950 7316 else << 5951 G4int ix=G4int(std::floor(x+0.5)); 7317 { << 5952 G4int iz=G4int(std::floor(z+0.5)); 7318 G4double xneu = xx - zz; << 5953 G4double zz = iz; 7319 G4double si = (xneu - zz) / xx; << 5954 G4double xx = ix; 7320 G4double x13 = std::pow(xx, .333); << 5955 find = 0.0; 7321 G4double ee1 = c1 * zz * zz / x13; << 5956 G4double avol = 15.776; 7322 G4double ee2 = c2 * zz * zz / xx; << 5957 G4double asur = -17.22; 7323 G4double aux = 1. + (9. * xjj / 4. / << 5958 G4double ac = -10.24; 7324 G4double ee3 = xjj * xx * si * si / a << 5959 G4double azer = 8.0; 7325 G4double ee4 = avol * xx + asur * (st << 5960 G4double xjj = -30.03; 7326 G4double tota = ee1 + ee2 + ee3 + ee4 << 5961 G4double qq = -35.4; 7327 find = 939.55 * xneu + 938.77 * zz - << 5962 G4double c1 = -0.737; 7328 } << 5963 G4double c2 = 1.28; 7329 << 5964 7330 (*x_par) = x; << 5965 if(ix <= 7) { 7331 (*z_par) = z; << 5966 q[0][1]=939.50; 7332 (*find_par) = find; << 5967 q[1][1]=938.21; >> 5968 q[1][2]=1876.1; >> 5969 q[1][3]=2809.39; >> 5970 q[2][4]=3728.34; >> 5971 q[2][3]=2809.4; >> 5972 q[2][5]=4668.8; >> 5973 q[2][6]=5606.5; >> 5974 q[3][5]=4669.1; >> 5975 q[3][6]=5602.9; >> 5976 q[3][7]=6535.27; >> 5977 q[4][6]=5607.3; >> 5978 q[4][7]=6536.1; >> 5979 q[5][7]=6548.3; >> 5980 find=q[iz][ix]; >> 5981 } >> 5982 else { >> 5983 G4double xneu=xx-zz; >> 5984 G4double si=(xneu-zz)/xx; >> 5985 G4double x13=std::pow(xx,.333); >> 5986 G4double ee1=c1*zz*zz/x13; >> 5987 G4double ee2=c2*zz*zz/xx; >> 5988 G4double aux=1.+(9.*xjj/4./qq/x13); >> 5989 G4double ee3=xjj*xx*si*si/aux; >> 5990 G4double ee4=avol*xx+asur*(std::pow(xx,.666))+ac*x13+azer; >> 5991 G4double tota = ee1 + ee2 + ee3 + ee4; >> 5992 find = 939.55*xneu+938.77*zz - tota; >> 5993 } >> 5994 >> 5995 (*x_par) = x; >> 5996 (*z_par) = z; >> 5997 (*find_par) = find; 7333 } 5998 } 7334 // 5999 // 7335 6000 7336 void G4Abla::FillData(G4int IMULTBU, G4int IE << 6001 void G4Abla::FillData(G4int IMULTBU,G4int IEV_TAB){ 7337 { << 7338 6002 7339 const G4double c = 29.9792458; 6003 const G4double c = 29.9792458; 7340 const G4double fmp = 938.27231, fmn = 939 << 6004 const G4double fmp = 938.27231,fmn=939.56563,fml=1115.683; 7341 6005 7342 varntp->ntrack = IMULTBU + IEV_TAB; 6006 varntp->ntrack = IMULTBU + IEV_TAB; 7343 6007 7344 for (G4int i = 0; i < IMULTBU; i++) << 6008 G4int intp=0; 7345 { << 7346 6009 7347 G4int iz = nint(BU_TAB[i][7]); << 6010 for(G4int i=0;i<IMULTBU;i++){ 7348 G4int ia = nint(BU_TAB[i][8]); << 6011 7349 G4int is = nint(BU_TAB[i][11]); << 6012 G4int iz = nint(BU_TAB[i][7]); 7350 << 6013 G4int ia = nint(BU_TAB[i][8]); 7351 Ainit = Ainit + ia; << 6014 G4int is = nint(BU_TAB[i][11]); 7352 Zinit = Zinit + iz; << 6015 7353 Sinit = Sinit - is; << 6016 Ainit = Ainit + ia; 7354 << 6017 Zinit = Zinit + iz; 7355 varntp->zvv.push_back(iz); << 6018 Sinit = Sinit - is; 7356 varntp->avv.push_back(ia); << 6019 7357 varntp->svv.push_back(-1 * is); << 6020 varntp->zvv[intp] = iz; 7358 varntp->itypcasc.push_back(0); << 6021 varntp->avv[intp] = ia; 7359 << 6022 varntp->svv[intp] = -1*is; 7360 G4double v2 = BU_TAB[i][4] * BU_TAB[i << 6023 varntp->itypcasc[intp] = 0; 7361 G4double gamma = std::sqrt(1.0 - v2 / << 6024 7362 G4double avvmass = iz * fmp + (ia - i << 6025 G4double v2 = BU_TAB[i][4]*BU_TAB[i][4]+BU_TAB[i][5]*BU_TAB[i][5]+BU_TAB[i][6]*BU_TAB[i][6]; 7363 G4double etot = avvmass / gamma; << 6026 G4double gamma = std::sqrt(1.0 - v2 / (c*c)); 7364 varntp->pxlab.push_back(etot * BU_TAB << 6027 G4double avvmass = iz*fmp + (ia-iz-is)*fmn + is*fml + eflmac(ia,iz,0,3); 7365 varntp->pylab.push_back(etot * BU_TAB << 6028 G4double etot = avvmass / gamma; 7366 varntp->pzlab.push_back(etot * BU_TAB << 6029 varntp->pxlab[intp] = etot * BU_TAB[i][4] / c; 7367 varntp->enerj.push_back(etot - avvmas << 6030 varntp->pylab[intp] = etot * BU_TAB[i][5] / c; 7368 } << 6031 varntp->pzlab[intp] = etot * BU_TAB[i][6] / c; 7369 << 6032 varntp->enerj[intp] = etot - avvmass; 7370 for (G4int i = 0; i < IEV_TAB; i++) << 6033 intp++; 7371 { << 6034 } 7372 << 6035 7373 G4int iz = nint(EV_TAB[i][0]); << 6036 7374 G4int ia = nint(EV_TAB[i][1]); << 6037 for(G4int i=0;i<IEV_TAB;i++){ 7375 G4int is = EV_TAB[i][5]; << 6038 7376 << 6039 G4int iz = nint(EV_TAB[i][0]); 7377 varntp->itypcasc.push_back(0); << 6040 G4int ia = nint(EV_TAB[i][1]); 7378 << 6041 G4int is = EV_TAB[i][5]; 7379 if (ia > 0) << 6042 7380 { // normal particles << 6043 varntp->itypcasc[intp] = 0; 7381 varntp->zvv.push_back(iz); << 6044 7382 varntp->avv.push_back(ia); << 6045 if(ia>0){// normal particles 7383 varntp->svv.push_back(-1 * is); << 6046 varntp->zvv[intp] = iz; 7384 Ainit = Ainit + ia; << 6047 varntp->avv[intp] = ia; 7385 Zinit = Zinit + iz; << 6048 varntp->svv[intp] = -1*is; 7386 Sinit = Sinit - is; << 6049 Ainit = Ainit + ia; 7387 G4double v2 = EV_TAB[i][2] * EV_T << 6050 Zinit = Zinit + iz; 7388 G4double gamma = std::sqrt(1.0 - << 6051 Sinit = Sinit - is; 7389 G4double avvmass = iz * fmp + (ia << 6052 G4double v2 = EV_TAB[i][2]*EV_TAB[i][2]+EV_TAB[i][3]*EV_TAB[i][3]+EV_TAB[i][4]*EV_TAB[i][4]; 7390 G4double etot = avvmass / gamma; << 6053 G4double gamma = std::sqrt(1.0 - v2 / (c*c)); 7391 varntp->pxlab.push_back(etot * EV << 6054 G4double avvmass = iz*fmp + (ia-iz-is)*fmn + is*fml + eflmac(ia,iz,0,3); 7392 varntp->pylab.push_back(etot * EV << 6055 G4double etot = avvmass / gamma; 7393 varntp->pzlab.push_back(etot * EV << 6056 varntp->pxlab[intp] = etot * EV_TAB[i][2] / c; 7394 varntp->enerj.push_back(etot - av << 6057 varntp->pylab[intp] = etot * EV_TAB[i][3] / c; 7395 } << 6058 varntp->pzlab[intp] = etot * EV_TAB[i][4] / c; 7396 else if (ia == -2) << 6059 varntp->enerj[intp] = etot - avvmass; 7397 { // lambda0 << 6060 }else if(ia==-2){// lambda0 7398 varntp->zvv.push_back(0); << 6061 varntp->zvv[intp] = 0; 7399 varntp->avv.push_back(1); << 6062 varntp->avv[intp] = 1; 7400 varntp->svv.push_back(-1); << 6063 varntp->svv[intp] = -1; 7401 Ainit = Ainit + 1; << 6064 Ainit = Ainit + 1; 7402 Sinit = Sinit - 1; << 6065 Sinit = Sinit - 1; 7403 G4double v2 = EV_TAB[i][2] * EV_T << 6066 G4double v2 = EV_TAB[i][2]*EV_TAB[i][2]+EV_TAB[i][3]*EV_TAB[i][3]+EV_TAB[i][4]*EV_TAB[i][4]; 7404 G4double gamma = std::sqrt(1.0 - << 6067 G4double gamma = std::sqrt(1.0 - v2 / (c*c)); 7405 G4double avvmass = fml; << 6068 G4double avvmass = fml; 7406 G4double etot = avvmass / gamma; << 6069 G4double etot = avvmass / gamma; 7407 varntp->pxlab.push_back(etot * EV << 6070 varntp->pxlab[intp] = etot * EV_TAB[i][2] / c; 7408 varntp->pylab.push_back(etot * EV << 6071 varntp->pylab[intp] = etot * EV_TAB[i][3] / c; 7409 varntp->pzlab.push_back(etot * EV << 6072 varntp->pzlab[intp] = etot * EV_TAB[i][4] / c; 7410 varntp->enerj.push_back(etot - av << 6073 varntp->enerj[intp] = etot - avvmass; 7411 } << 6074 }else{// photons 7412 else << 6075 varntp->zvv[intp] = iz; 7413 { // photons << 6076 varntp->avv[intp] = ia; 7414 varntp->zvv.push_back(iz); << 6077 varntp->svv[intp] = 0; 7415 varntp->avv.push_back(ia); << 6078 Ainit = Ainit + ia; 7416 varntp->svv.push_back(0); << 6079 Zinit = Zinit + iz; 7417 Ainit = Ainit + ia; << 6080 Sinit = Sinit - is; 7418 Zinit = Zinit + iz; << 6081 varntp->pxlab[intp] = EV_TAB[i][2]; 7419 Sinit = Sinit - is; << 6082 varntp->pylab[intp] = EV_TAB[i][3]; 7420 varntp->pxlab.push_back(EV_TAB[i] << 6083 varntp->pzlab[intp] = EV_TAB[i][4]; 7421 varntp->pylab.push_back(EV_TAB[i] << 6084 varntp->enerj[intp] = std::sqrt(EV_TAB[i][2]*EV_TAB[i][2]+EV_TAB[i][3]*EV_TAB[i][3]+EV_TAB[i][4]*EV_TAB[i][4]); 7422 varntp->pzlab.push_back(EV_TAB[i] << 6085 } 7423 varntp->enerj.push_back( << 6086 intp++; 7424 std::sqrt(EV_TAB[i][2] * EV_T << 7425 } << 7426 } 6087 } 7427 // << 6088 // 7428 return; << 6089 return; 7429 } 6090 } 7430 6091 7431 // Utilities 6092 // Utilities 7432 6093 7433 G4double G4Abla::min(G4double a, G4double b) 6094 G4double G4Abla::min(G4double a, G4double b) 7434 { 6095 { 7435 if (a < b) << 6096 if(a < b) { 7436 { << 6097 return a; 7437 return a; << 6098 } 7438 } << 6099 else { 7439 else << 6100 return b; 7440 { << 6101 } 7441 return b; << 7442 } << 7443 } 6102 } 7444 6103 7445 G4int G4Abla::min(G4int a, G4int b) 6104 G4int G4Abla::min(G4int a, G4int b) 7446 { 6105 { 7447 if (a < b) << 6106 if(a < b) { 7448 { << 6107 return a; 7449 return a; << 6108 } 7450 } << 6109 else { 7451 else << 6110 return b; 7452 { << 6111 } 7453 return b; << 7454 } << 7455 } 6112 } 7456 6113 7457 G4double G4Abla::max(G4double a, G4double b) 6114 G4double G4Abla::max(G4double a, G4double b) 7458 { 6115 { 7459 if (a > b) << 6116 if(a > b) { 7460 { << 6117 return a; 7461 return a; << 6118 } 7462 } << 6119 else { 7463 else << 6120 return b; 7464 { << 6121 } 7465 return b; << 7466 } << 7467 } 6122 } 7468 6123 7469 G4int G4Abla::max(G4int a, G4int b) 6124 G4int G4Abla::max(G4int a, G4int b) 7470 { 6125 { 7471 if (a > b) << 6126 if(a > b) { 7472 { << 6127 return a; 7473 return a; << 6128 } 7474 } << 6129 else { 7475 else << 6130 return b; 7476 { << 6131 } 7477 return b; << 6132 } 7478 } << 6133 >> 6134 G4double G4Abla::DSIGN(G4double a, G4double b){ >> 6135 // A function that assigns the sign of the second argument to the >> 6136 // absolute value of the first >> 6137 >> 6138 if(b>=0){ >> 6139 return std::abs(a); >> 6140 }else{ >> 6141 return -1.0*std::abs(a); >> 6142 } >> 6143 return 0; >> 6144 } >> 6145 >> 6146 G4int G4Abla::ISIGN(G4int a, G4int b){ >> 6147 // A function that assigns the sign of the second argument to the >> 6148 // absolute value of the first >> 6149 >> 6150 if(b>=0){ >> 6151 return std::abs(a); >> 6152 }else{ >> 6153 return -1*std::abs(a); >> 6154 } >> 6155 return 0; 7479 } 6156 } 7480 6157 7481 G4double G4Abla::DSIGN(G4double a, G4double b << 6158 G4int G4Abla::nint(G4double number) 7482 { 6159 { 7483 // A function that assigns the sign of th << 6160 G4double intpart = 0.0; 7484 // absolute value of the first << 6161 G4double fractpart = 0.0; 7485 << 6162 fractpart = std::modf(number, &intpart); 7486 if (b >= 0) << 6163 if(number == 0) { 7487 { << 7488 return std::abs(a); << 7489 } << 7490 else << 7491 { << 7492 return -1.0 * std::abs(a); << 7493 } << 7494 return 0; 6164 return 0; 7495 } << 6165 } 7496 << 6166 if(number > 0) { 7497 G4int G4Abla::ISIGN(G4int a, G4int b) << 6167 if(fractpart < 0.5) { 7498 { << 6168 return G4int(std::floor(number)); 7499 // A function that assigns the sign of th << 7500 // absolute value of the first << 7501 << 7502 if (b >= 0) << 7503 { << 7504 return std::abs(a); << 7505 } << 7506 else << 7507 { << 7508 return -1 * std::abs(a); << 7509 } 6169 } 7510 return 0; << 6170 else { 7511 } << 6171 return G4int(std::ceil(number)); 7512 << 7513 G4int G4Abla::nint(G4double number) << 7514 { << 7515 G4double intpart = 0.0; << 7516 G4double fractpart = 0.0; << 7517 fractpart = std::modf(number, &intpart); << 7518 if (number == 0) << 7519 { << 7520 return 0; << 7521 } << 7522 if (number > 0) << 7523 { << 7524 if (fractpart < 0.5) << 7525 { << 7526 return G4int(std::floor(number)); << 7527 } << 7528 else << 7529 { << 7530 return G4int(std::ceil(number)); << 7531 } << 7532 } 6172 } 7533 if (number < 0) << 6173 } 7534 { << 6174 if(number < 0) { 7535 if (fractpart < -0.5) << 6175 if(fractpart < -0.5) { 7536 { << 6176 return G4int(std::floor(number)); 7537 return G4int(std::floor(number)); << 6177 } 7538 } << 6178 else { 7539 else << 6179 return G4int(std::ceil(number)); 7540 { << 7541 return G4int(std::ceil(number)); << 7542 } << 7543 } 6180 } >> 6181 } 7544 6182 7545 return G4int(std::floor(number)); << 6183 return G4int(std::floor(number)); 7546 } 6184 } 7547 6185 7548 G4int G4Abla::secnds(G4int x) 6186 G4int G4Abla::secnds(G4int x) 7549 { 6187 { 7550 time_t mytime; << 6188 time_t mytime; 7551 tm* mylocaltime; << 6189 tm *mylocaltime; 7552 6190 7553 time(&mytime); << 6191 time(&mytime); 7554 mylocaltime = localtime(&mytime); << 6192 mylocaltime = localtime(&mytime); 7555 6193 7556 if (x == 0) << 6194 if(x == 0) { 7557 { << 6195 return(mylocaltime->tm_hour*60*60 + mylocaltime->tm_min*60 + mylocaltime->tm_sec); 7558 return (mylocaltime->tm_hour * 60 * 6 << 6196 } 7559 } << 6197 else { 7560 else << 6198 return(mytime - x); 7561 { << 6199 } 7562 return G4int(mytime - x); << 7563 } << 7564 } 6200 } 7565 6201 7566 G4int G4Abla::mod(G4int a, G4int b) 6202 G4int G4Abla::mod(G4int a, G4int b) 7567 { 6203 { 7568 if (b != 0) << 6204 if(b != 0) { 7569 { << 6205 return a%b; 7570 return a % b; << 6206 } 7571 } << 6207 else { 7572 else << 6208 return 0; 7573 { << 6209 } 7574 return 0; << 7575 } << 7576 } 6210 } 7577 6211 7578 G4double G4Abla::dint(G4double x) 6212 G4double G4Abla::dint(G4double x) 7579 { 6213 { 7580 G4double value = 0.0; << 6214 G4double value = 0.0; 7581 /* << 6215 /* 7582 if(a < 0.0) { << 6216 if(a < 0.0) { 7583 value = double(std::ceil(a)); << 6217 value = double(std::ceil(a)); 7584 } << 6218 } 7585 else { << 6219 else { 7586 value = double(std::floor(a)); << 6220 value = double(std::floor(a)); 7587 } << 6221 } 7588 */ << 6222 */ 7589 if (x - std::floor(x) <= std::ceil(x) - x << 6223 if(x-std::floor(x) <= std::ceil(x)-x) 7590 value = G4double(std::floor(x)); << 6224 value = G4double(std::floor(x)); 7591 else << 6225 else 7592 value = G4double(std::ceil(x)); << 6226 value = G4double(std::ceil(x)); 7593 6227 7594 return value; << 6228 return value; 7595 } 6229 } 7596 6230 7597 G4int G4Abla::idint(G4double x) 6231 G4int G4Abla::idint(G4double x) 7598 { 6232 { 7599 G4int value = 0; << 6233 G4int value = 0; 7600 if (x - std::floor(x) <= std::ceil(x) - x << 6234 if(x-std::floor(x) <= std::ceil(x)-x) 7601 value = G4int(std::floor(x)); << 6235 value = G4int(std::floor(x)); 7602 else << 6236 else 7603 value = G4int(std::ceil(x)); << 6237 value = G4int(std::ceil(x)); 7604 6238 7605 return value; << 6239 return value; 7606 } 6240 } 7607 6241 7608 G4int G4Abla::idnint(G4double x) 6242 G4int G4Abla::idnint(G4double x) 7609 { 6243 { 7610 if (x - std::floor(x) <= std::ceil(x) - x << 6244 if(x-std::floor(x) <= std::ceil(x)-x) 7611 return G4int(std::floor(x)); << 6245 return G4int(std::floor(x)); 7612 else << 6246 else 7613 return G4int(std::ceil(x)); << 6247 return G4int(std::ceil(x)); 7614 } 6248 } 7615 6249 7616 G4double G4Abla::dmin1(G4double a, G4double b 6250 G4double G4Abla::dmin1(G4double a, G4double b, G4double c) 7617 { 6251 { 7618 if (a < b && a < c) << 6252 if(a < b && a < c) { 7619 { << 7620 return a; << 7621 } << 7622 if (b < a && b < c) << 7623 { << 7624 return b; << 7625 } << 7626 if (c < a && c < b) << 7627 { << 7628 return c; << 7629 } << 7630 return a; 6253 return a; >> 6254 } >> 6255 if(b < a && b < c) { >> 6256 return b; >> 6257 } >> 6258 if(c < a && c < b) { >> 6259 return c; >> 6260 } >> 6261 return a; >> 6262 } >> 6263 >> 6264 G4double G4Abla::utilabs(G4double a) >> 6265 { >> 6266 return std::abs(a); 7631 } 6267 } 7632 6268 7633 G4double G4Abla::utilabs(G4double a) { return << 7634 6269 7635 G4double G4Abla::width(G4double AMOTHER, << 6270 G4double G4Abla::width(G4double AMOTHER,G4double ZMOTHER,G4double APART,G4double ZPART,G4double TEMP,G4double B1,G4double SB1,G4double EXC) 7636 G4double ZMOTHER, << 6271 { 7637 G4double APART, << 6272 /* 7638 G4double ZPART, << 6273 * Implemented by JLRS for Abla c++: 06/11/2016 7639 G4double TEMP, << 6274 * 7640 G4double B1, << 6275 C Last update: 7641 G4double SB1, << 6276 C 28/10/13 - JLRS - from abrablav4 (AK) 7642 G4double EXC) << 6277 */ 7643 { << 6278 G4int IZPART,IAPART,NMOTHER; 7644 /* << 6279 G4double B,HBAR,PI,RGEOM,MPART,SB; 7645 * Implemented by JLRS for Abla c++: 06/11 << 6280 G4double BKONST,C,C2,G,APARTNER,MU; 7646 * << 6281 G4double INT1,INT2,INT3,AKONST,EARG,R0,MPARTNER; 7647 C Last update: << 6282 G4double AEXP; 7648 C 28/10/13 - JLRS - from abrablav4 << 6283 G4double ARG; 7649 */ << 6284 G4double PAR_A1=0.,PAR_B1=0.,FACT=1.; 7650 G4int IZPART, IAPART, NMOTHER; << 6285 G4double fwidth=0.; 7651 G4double B, HBAR, PI, RGEOM, MPART, SB; << 6286 G4int idlamb0=0; 7652 G4double BKONST, C, C2, G, APARTNER, MU; << 6287 PI=3.141592654; 7653 G4double INT1, INT2, INT3, AKONST, EARG, << 6288 7654 G4double AEXP; << 6289 if(ZPART==-2.){ 7655 G4double ARG; << 6290 ZPART=0.; 7656 G4double PAR_A1 = 0., PAR_B1 = 0., FACT = << 6291 idlamb0=1; 7657 G4double fwidth = 0.; << 6292 } 7658 G4int idlamb0 = 0; << 6293 7659 PI = 3.141592654; << 6294 IZPART = idnint(ZPART); 7660 << 6295 IAPART = idnint(APART); 7661 if (ZPART == -2.) << 6296 7662 { << 6297 B = B1; 7663 ZPART = 0.; << 6298 SB = SB1; 7664 idlamb0 = 1; << 6299 NMOTHER = idnint(AMOTHER-ZMOTHER); 7665 } << 6300 7666 << 6301 PAR_A1 = 0.0; 7667 IZPART = idnint(ZPART); << 6302 PAR_B1 = 0.0; 7668 IAPART = idnint(APART); << 6303 7669 << 6304 if(SB>EXC){ 7670 B = B1; << 6305 return fwidth=0.0; 7671 SB = SB1; << 6306 }else{ 7672 NMOTHER = idnint(AMOTHER - ZMOTHER); << 6307 // in MeV*s 7673 << 6308 HBAR = 6.582122e-22; 7674 PAR_A1 = 0.0; << 6309 // HBAR2 = HBAR * HBAR 7675 PAR_B1 = 0.0; << 6310 // in m/s 7676 << 6311 C = 2.99792458e8; 7677 if (SB > EXC) << 6312 C2 = C * C; 7678 { << 6313 APARTNER = AMOTHER - APART; 7679 return fwidth = 0.0; << 6314 MPARTNER = APARTNER * 931.49 / C2; 7680 } << 6315 7681 else << 6316 // g=(2s+1) 7682 { << 6317 if(IAPART==1&&IZPART==0){ 7683 // in MeV*s << 6318 G = 2.0; 7684 HBAR = 6.582122e-22; << 6319 MPART = 939.56 / C2; 7685 // HBAR2 = HBAR * HBAR << 6320 if(idlamb0==1)MPART = 1115.683 / C2; 7686 // in m/s << 6321 }else{ 7687 C = 2.99792458e8; << 6322 if(IAPART==1&&IZPART==1){ 7688 C2 = C * C; << 6323 G = 2.0; 7689 APARTNER = AMOTHER - APART; << 6324 MPART = 938.27 / C2; 7690 MPARTNER = APARTNER * 931.49 / C2; << 6325 } 7691 << 6326 else{ 7692 // g=(2s+1) << 6327 if(IAPART==2&&IZPART==0){ 7693 if (IAPART == 1 && IZPART == 0) << 6328 G = 1.0; 7694 { << 6329 MPART = 2.*939.56 / C2; >> 6330 }else{ >> 6331 if(IAPART==2&&IZPART==1){ >> 6332 G = 3.0; >> 6333 MPART = 1876.10 / C2; >> 6334 }else{ >> 6335 if(IAPART==3&&IZPART==1){ >> 6336 G = 2.0; >> 6337 MPART = 2809.39 / C2; >> 6338 }else{ >> 6339 if(IAPART==3&&IZPART==2){ 7695 G = 2.0; 6340 G = 2.0; 7696 MPART = 939.56 / C2; << 6341 MPART = 2809.37 / C2; 7697 if (idlamb0 == 1) << 6342 }else{ 7698 MPART = 1115.683 / C2; << 6343 if(IAPART==4&&IZPART==2){ 7699 } << 6344 G = 1.0; 7700 else << 6345 MPART = 3728.35 / C2; 7701 { << 6346 }else{ 7702 if (IAPART == 1 && IZPART == 1) << 6347 // IMF 7703 { << 6348 G = 1.0; 7704 G = 2.0; << 6349 MPART = APART * 931.49 / C2; 7705 MPART = 938.27 / C2; << 6350 } 7706 } << 6351 } 7707 else << 6352 } 7708 { << 6353 } 7709 if (IAPART == 2 && IZPART == << 6354 } 7710 { << 6355 } 7711 G = 1.0; << 6356 }//end g 7712 MPART = 2. * 939.56 / C2; << 6357 7713 } << 6358 // Relative mass in MeV*s^2/m^2 7714 else << 6359 MU = MPARTNER * MPART / (MPARTNER + MPART); 7715 { << 6360 // in m 7716 if (IAPART == 2 && IZPART << 6361 R0 = 1.16e-15; 7717 { << 7718 G = 3.0; << 7719 MPART = 1876.10 / C2; << 7720 } << 7721 else << 7722 { << 7723 if (IAPART == 3 && IZ << 7724 { << 7725 G = 2.0; << 7726 MPART = 2809.39 / << 7727 } << 7728 else << 7729 { << 7730 if (IAPART == 3 & << 7731 { << 7732 G = 2.0; << 7733 MPART = 2809. << 7734 } << 7735 else << 7736 { << 7737 if (IAPART == << 7738 { << 7739 G = 1.0; << 7740 MPART = 3 << 7741 } << 7742 else << 7743 { << 7744 // IMF << 7745 G = 1.0; << 7746 MPART = A << 7747 } << 7748 } << 7749 } << 7750 } << 7751 } << 7752 } << 7753 } // end g << 7754 6362 7755 // Relative mass in MeV*s^2/m^2 << 6363 RGEOM = R0 * (std::pow(APART,1.0/3.0)+std::pow(AMOTHER-APART,1.0/3.0)); 7756 MU = MPARTNER * MPART / (MPARTNER + M << 7757 // in m << 7758 R0 = 1.16e-15; << 7759 6364 7760 RGEOM = R0 * (std::pow(APART, 1.0 / 3 << 6365 // in m*sqrt(MeV) >> 6366 AKONST = HBAR*std::sqrt(1.0 / MU); 7761 6367 7762 // in m*sqrt(MeV) << 6368 // in 1/(MeV*m^2) 7763 AKONST = HBAR * std::sqrt(1.0 / MU); << 6369 BKONST = MPART / ( PI * PI * HBAR * HBAR); >> 6370 // >> 6371 // USING ANALYTICAL APPROXIMATION 7764 6372 7765 // in 1/(MeV*m^2) << 6373 INT1 = 2.0 * std::pow(TEMP,3.) / (2.0 * TEMP + B); 7766 BKONST = MPART / (PI * PI * HBAR * HB << 7767 // << 7768 // USING ANALYTICAL APPROXIMATION << 7769 6374 7770 INT1 = 2.0 * std::pow(TEMP, 3.) / (2. << 6375 ARG = std::sqrt(B/TEMP); >> 6376 EARG = (erf(ARG) - 1.0); >> 6377 if(std::abs(EARG)<1.e-9) EARG = 0.0; >> 6378 if(B==0.0){ >> 6379 INT2 = 0.5 * std::sqrt(PI) * std::pow(TEMP,3.0/2.0); >> 6380 }else{ >> 6381 AEXP = B/TEMP; >> 6382 if(AEXP>700.0) AEXP = 700.0; >> 6383 INT2 = (2.0*B*B +TEMP*B)/std::sqrt(B) + std::exp(AEXP) * std::sqrt(PI/(4.0*TEMP))*(4.0*B*B+4.0*B*TEMP - TEMP*TEMP) *EARG; >> 6384 if(INT2<0.0) INT2 = 0.0; >> 6385 // For very low temperatures when EARG=0, INT2 get unreasonably high values >> 6386 // comming from the first term. Therefore, for these cases INT2 is set to 0. >> 6387 if(EARG==0.0) INT2 = 0.0; >> 6388 }//if B >> 6389 >> 6390 INT3 = 2.0*TEMP*TEMP*TEMP / (2.0*TEMP*TEMP + 4.0*B*TEMP + B*B); >> 6391 >> 6392 if(IZPART<-1.0&&ZMOTHER<151.0){ >> 6393 // IF(IZPART.LT.1)THEN >> 6394 // For neutrons, the width is given by a mean value between geometrical and QM values; >> 6395 // Only QM contribution (Rgeom -> Rgeom + Rlamda) seems to be too strong for neutrons >> 6396 fwidth = PI * BKONST * G * std::sqrt((RGEOM * RGEOM * INT1 + 2.0 * AKONST * RGEOM * INT2 + AKONST * AKONST * INT3) * RGEOM * RGEOM * INT1); 7771 6397 7772 ARG = std::sqrt(B / TEMP); << 6398 }else{ 7773 EARG = (erf(ARG) - 1.0); << 6399 fwidth = PI * BKONST * G *(RGEOM * RGEOM * INT1 + 2.0 * AKONST * RGEOM * INT2 + AKONST * AKONST * INT3); 7774 if (std::abs(EARG) < 1.e-9) << 6400 } 7775 EARG = 0.0; << 7776 if (B == 0.0) << 7777 { << 7778 INT2 = 0.5 * std::sqrt(PI) * std: << 7779 } << 7780 else << 7781 { << 7782 AEXP = B / TEMP; << 7783 if (AEXP > 700.0) << 7784 AEXP = 700.0; << 7785 INT2 = (2.0 * B * B + TEMP * B) / << 7786 std::exp(AEXP) * std::sqrt << 7787 if (INT2 < 0.0) << 7788 INT2 = 0.0; << 7789 // For very low temperatures when << 7790 // values comming from the first << 7791 // set to 0. << 7792 if (EARG == 0.0) << 7793 INT2 = 0.0; << 7794 } // if B << 7795 << 7796 INT3 = 2.0 * TEMP * TEMP * TEMP / (2. << 7797 << 7798 if (IZPART < -1.0 && ZMOTHER < 151.0) << 7799 { << 7800 // IF(IZPART.LT.1)THEN << 7801 // For neutrons, the width is giv << 7802 // and QM values; Only QM contrib << 7803 // be too strong for neutrons << 7804 fwidth = PI * BKONST * G * << 7805 std::sqrt((RGEOM * RGEOM << 7806 RGEOM * INT1); << 7807 } << 7808 else << 7809 { << 7810 fwidth = PI * BKONST * G * (RGEOM << 7811 } << 7812 6401 7813 // To correct for too high values of << 7814 // numerical solution for energies cl << 7815 if (IZPART < 3.0) << 7816 { << 7817 if (AMOTHER < 155.0) << 7818 { << 7819 PAR_A1 = std::exp(2.302585 * << 7820 PAR_B1 = 0.59939389 + 0.00915 << 7821 } << 7822 else << 7823 { << 7824 if (AMOTHER > 154.0 && AMOTHE << 7825 { << 7826 PAR_A1 = 1.0086961 - 8.62 << 7827 PAR_B1 = 1.5329331 + 0.00 << 7828 } << 7829 else << 7830 { << 7831 if (AMOTHER > 194.0 && AM << 7832 { << 7833 PAR_A1 = 9.8356347 - << 7834 PAR_B1 = 7.7701987 - << 7835 } << 7836 else << 7837 { << 7838 if (AMOTHER > 207.0 & << 7839 { << 7840 PAR_A1 = 15.10738 << 7841 PAR_B1 = -64.0780 << 7842 } << 7843 else << 7844 { << 7845 if (AMOTHER > 227 << 7846 { << 7847 if (mod(NMOTH << 7848 { << 7849 PAR_A1 = << 7850 } << 7851 else << 7852 { << 7853 if (mod(N << 7854 PAR_A << 7855 } << 7856 PAR_B1 = 2.15 << 7857 } << 7858 } << 7859 } << 7860 } << 7861 } << 7862 FACT = std::exp((2.302585 * PAR_A << 7863 if (FACT < 1.0) << 7864 FACT = 1.0; << 7865 if (IZPART < -1. && ZMOTHER < 151 << 7866 { << 7867 // IF(IZPART.LT.1)THEN << 7868 fwidth = fwidth / std::sqrt(F << 7869 } << 7870 else << 7871 { << 7872 fwidth = fwidth / FACT; << 7873 } << 7874 } // if IZPART<3.0 << 7875 6402 7876 if (fwidth <= 0.0) << 6403 // To correct for too high values of analytical width compared to 7877 { << 6404 // numerical solution for energies close to the particle threshold: 7878 std::cout << "LOOK IN PARTICLE_WI << 6405 if(IZPART<3.0){ 7879 std::cout << "ACN,APART :" << AMO << 6406 if(AMOTHER<155.0){ 7880 std::cout << "EXC,TEMP,B,SB :" << << 6407 PAR_A1=std::exp(2.302585*0.2083*std::exp(-0.01548472*AMOTHER))-0.05; 7881 std::cout << "INTi, i=1-3 :" << I << 6408 PAR_B1 = 0.59939389 + 0.00915657 * AMOTHER; 7882 std::cout << " " << std::endl; << 6409 }else{ 7883 } << 6410 if(AMOTHER>154.0&&AMOTHER<195.0){ >> 6411 PAR_A1=1.0086961-8.629e-5*AMOTHER; >> 6412 PAR_B1 = 1.5329331 + 0.00302074 * AMOTHER; >> 6413 }else{ >> 6414 if(AMOTHER>194.0&&AMOTHER<208.0){ >> 6415 PAR_A1=9.8356347-0.09294663*AMOTHER+2.441e-4*AMOTHER*AMOTHER; >> 6416 PAR_B1 = 7.7701987 - 0.02897401 * AMOTHER; >> 6417 }else{ >> 6418 if(AMOTHER>207.0&&AMOTHER<228.0){ >> 6419 PAR_A1=15.107385-0.12414415*AMOTHER+2.7222e-4*AMOTHER*AMOTHER; >> 6420 PAR_B1=-64.078009+0.56813179*AMOTHER-0.00121078*AMOTHER*AMOTHER; >> 6421 }else{ >> 6422 if(AMOTHER>227.0){ >> 6423 if(mod(NMOTHER,2)==0&&NMOTHER>147.){ >> 6424 PAR_A1 = 2.0*(0.9389118 + 6.4559e-5 * AMOTHER); >> 6425 }else{ >> 6426 if(mod(NMOTHER,2)==1)PAR_A1 = 3.0*(0.9389118 + 6.4559e-5 * AMOTHER); >> 6427 } >> 6428 PAR_B1 = 2.1507177 + 0.00146119 * AMOTHER; >> 6429 } >> 6430 } >> 6431 } >> 6432 } >> 6433 } >> 6434 FACT = std::exp((2.302585*PAR_A1*std::exp(-PAR_B1*(EXC-SB)))); >> 6435 if(FACT<1.0) FACT = 1.0; >> 6436 if(IZPART<-1.&&ZMOTHER<151.0){ >> 6437 // IF(IZPART.LT.1)THEN >> 6438 fwidth = fwidth / std::sqrt(FACT); >> 6439 }else{ >> 6440 fwidth = fwidth / FACT; >> 6441 } >> 6442 }//if IZPART<3.0 >> 6443 >> 6444 if(fwidth<=0.0){ >> 6445 std::cout <<"LOOK IN PARTICLE_WIDTH!" << std::endl; >> 6446 std::cout <<"ACN,APART :"<< AMOTHER << APART << std::endl; >> 6447 std::cout <<"EXC,TEMP,B,SB :" << EXC << " " << TEMP << " " << B << " " << SB << std::endl; >> 6448 std::cout <<"INTi, i=1-3 :" << INT1 << " " << INT2 << " " << INT3 << std::endl; >> 6449 std::cout <<" " << std::endl; >> 6450 } 7884 6451 7885 } // if SB>EXC << 6452 }//if SB>EXC 7886 return fwidth; << 6453 return fwidth; 7887 } 6454 } 7888 6455 7889 G4double G4Abla::pen(G4double A, G4double ap, 6456 G4double G4Abla::pen(G4double A, G4double ap, G4double omega, G4double T) 7890 { 6457 { 7891 // JLRS: 06/11/2016 << 6458 // JLRS: 06/11/2016 7892 // CORRECTIONS FOR BARRIER PENETRATION << 6459 // CORRECTIONS FOR BARRIER PENETRATION 7893 // AK, KHS 2005 - Energy-dependen inverse << 6460 // AK, KHS 2005 - Energy-dependen inverse cross sections included, influence of 7894 // of << 6461 // Coulomb barrier for LCP, tunnelling for LCP 7895 // Coulomb barrier for LCP << 7896 6462 7897 G4double fpen = 0., MU, HO; << 6463 G4double fpen=0., MU, HO; 7898 6464 7899 // REDUCED MASSES (IN MeV/C**2) << 6465 // REDUCED MASSES (IN MeV/C**2) 7900 MU = (A - ap) * ap / A; << 6466 MU = (A - ap) * ap / A; 7901 6467 7902 // ENERGY OF THE INVERSE PARABOLA AT THE << 6468 // ENERGY OF THE INVERSE PARABOLA AT THE POTENTIAL BARRIER (hbar*omega); 7903 // HERE hbar = 197.3287 fm*MeV/c, omega i << 6469 // HERE hbar = 197.3287 fm*MeV/c, omega is in c/fm 7904 HO = 197.3287 * omega; << 6470 HO = 197.3287 * omega; 7905 6471 7906 if (T <= 0.0) << 6472 if(T<=0.0){ 7907 { << 6473 fpen = 0.0; 7908 fpen = 0.0; << 6474 }else{ 7909 } << 6475 fpen=std::pow(10.0,4.e-4*std::pow(T/(HO*HO*std::pow(MU,0.25)),-4.3/2.3026)); 7910 else << 6476 } 7911 { << 7912 fpen = std::pow(10.0, 4.e-4 * std::po << 7913 } << 7914 6477 7915 return fpen; << 6478 return fpen; 7916 } 6479 } 7917 6480 7918 void G4Abla::bsbkbc(G4double A, G4double Z, G << 6481 void G4Abla::bsbkbc(G4double A,G4double Z,G4double *BS,G4double *BK,G4double *BC) 7919 { 6482 { 7920 // Calculate BS and BK needed for a level << 6483 // Calculate BS and BK needed for a level-density parameter: 7921 // BETA2 and BETA4 = quadrupole and hexad << 6484 // BETA2 and BETA4 = quadrupole and hexadecapole deformation 7922 6485 7923 G4double PI = 3.14159265; << 6486 G4double PI = 3.14159265; 7924 G4int IZ = idnint(Z); << 6487 G4int IZ = idnint(Z); 7925 G4int IN = idnint(A - Z); << 6488 G4int IN = idnint(A - Z); 7926 // alphaN = sqrt(2*N/(4*pi))*BetaN << 6489 // alphaN = sqrt(2*N/(4*pi))*BetaN 7927 G4double ALPHA2 = std::sqrt(5.0 / (4.0 * << 6490 G4double ALPHA2 = std::sqrt(5.0/(4.0*PI))*ecld->beta2[IN][IZ]; 7928 G4double ALPHA4 = std::sqrt(9.0 / (4.0 * << 6491 G4double ALPHA4 = std::sqrt(9.0/(4.0*PI))*ecld->beta4[IN][IZ]; 7929 6492 7930 (*BS) = 1.0 + 0.4 * ALPHA2 * ALPHA2 - 4.0 << 6493 (*BS) = 1.0 + 0.4*ALPHA2*ALPHA2 - 4.0/105.0*ALPHA2*ALPHA2*ALPHA2 - 66.0/175.0*ALPHA2*ALPHA2*ALPHA2*ALPHA2 - 4.0/35.0*ALPHA2*ALPHA2*ALPHA4 + ALPHA4*ALPHA4; 7931 66.0 / 175.0 * ALPHA2 * ALPHA2 * << 7932 6494 7933 (*BK) = 1.0 + 0.4 * ALPHA2 * ALPHA2 + 16. << 6495 (*BK) = 1.0 + 0.4*ALPHA2*ALPHA2 + 16.0/105.0*ALPHA2*ALPHA2*ALPHA2 - 82.0/175.0*ALPHA2*ALPHA2*ALPHA2*ALPHA2 + 2.0/35.0*ALPHA2*ALPHA2*ALPHA4 + ALPHA4*ALPHA4; 7934 82.0 / 175.0 * ALPHA2 * ALPHA2 * << 7935 6496 7936 (*BC) = 0.0; << 6497 (*BC)=0.0; 7937 6498 7938 return; << 6499 return; 7939 } 6500 } 7940 6501 7941 G4double G4Abla::fvmaxhaz(G4double T) << 6502 G4double G4Abla::fvmaxhaz( G4double T) 7942 { 6503 { 7943 // Random generator according to a distri << 6504 // Random generator according to a distribution similar to a 7944 // Maxwell distribution with quantum-mech << 6505 // Maxwell distribution with quantum-mech. x-section for charged particles according to KHS 7945 // according to KHS << 6506 // Y = X**(1.5E0) / (B+X) * EXP(-X/T) (approximation:) 7946 // Y = X**(1.5E0) / (B+X) * EXP(-X/T << 6507 7947 << 6508 return (3.0 * T * std::pow(-1.*std::log(G4AblaRandom::flat()) * std::log(G4AblaRandom::flat())*std::log(G4AblaRandom::flat()),0.333333)); 7948 return ( << 6509 } 7949 3.0 * T * << 6510 7950 std::pow(-1. * std::log(G4AblaRandom: << 6511 G4double G4Abla::func_trans(G4double TIME,G4double ZF,G4double AF,G4double bet,G4double Y,G4double FT,G4double T_0) 7951 0.333333)); << 6512 { 7952 } << 6513 /* 7953 << 6514 c This function determines the fission width as a function o time 7954 G4double << 6515 c according to the analytical solution of the FPE for the probability distribution 7955 G4Abla::func_trans(G4double TIME, G4doubl << 6516 c at the barrier when the nucleus potential is aproximated by a parabolic 7956 { << 6517 c potential. It is taken from S. Chandrasekhar, Rev. Mod. Phys. 15 (1943) 1 7957 /* << 6518 c 7958 c This function determines the fission << 6519 c***********************INPUT PARAMETERS********************************* 7959 c according to the analytical solution << 6520 c Time Time at which we evaluate the fission width 7960 distribution c at the barrier when the << 6521 c ZF Z of nucleus 7961 parabolic c potential. It is taken from << 6522 C AF A of nucleus 7962 (1943) 1 << 6523 c BET Reduced dissipation coefficient 7963 c << 6524 c FT Nuclear temperature 7964 c***********************INPUT PARAMETERS* << 6525 C************************************************************************** 7965 c Time Time at which we ev << 6526 C********************************OUTPUT*********************************** 7966 c ZF Z of nucleus << 6527 C Fission decay width at the corresponding time of the decay cascade 7967 C AF A of nucleus << 6528 C************************************************************************* 7968 c BET Reduced dissipation << 6529 c****************************OTHER VARIABLES****************************** 7969 c FT Nuclear temperature << 6530 C SIGMA_SQR Square of the width of the prob. distribution 7970 C**************************************** << 6531 C XB Deformation of the nucleus at the saddle point 7971 C********************************OUTPUT** << 6532 c NORM Normalization factor of the probability distribution 7972 C Fission decay width at the correspond << 6533 c W Probability distribution at the saddle deformation XB 7973 C**************************************** << 6534 c W_INFIN Probability distr. at XB at infinite time 7974 c****************************OTHER VARIAB << 6535 c MFCD Mass of the fission collective degree of freedom 7975 C SIGMA_SQR Square of the width << 6536 C************************************************************************* 7976 C XB Deformation of the n << 6537 */ 7977 c NORM Normalization factor << 6538 G4double PI = 3.14159; 7978 c W Probability distribu << 6539 G4double DEFO_INIT,OMEGA,HOMEGA,OMEGA_GS,HOMEGA_GS,K1,MFCD; 7979 c W_INFIN Probability distr. a << 6540 G4double BET1,XACT,SIGMA_SQR,W_EXP,XB,NORM,SIGMA_SQR_INF,W_INFIN,W; 7980 c MFCD Mass of the fission << 6541 G4double FUNC_TRANS,LOG_SLOPE_INF,LOG_SLOPE_ABS; 7981 C**************************************** << 6542 // 7982 */ << 6543 // Influence of initial deformation 7983 G4double PI = 3.14159; << 6544 // Initial alpha2 deformation (GS) 7984 G4double DEFO_INIT, OMEGA, HOMEGA, OMEGA_ << 6545 DEFO_INIT = std::sqrt(5.0/(4.0*PI))*ecld->beta2[fiss->at-fiss->zt][fiss->zt]; 7985 G4double BET1, XACT, SIGMA_SQR, W_EXP, XB << 6546 // 7986 G4double FUNC_TRANS, LOG_SLOPE_INF, LOG_S << 6547 fomega_sp(AF,Y,&MFCD,&OMEGA,&HOMEGA); 7987 // << 6548 fomega_gs(AF,ZF,&K1,&OMEGA_GS,&HOMEGA_GS); 7988 // Influence of initial deformation << 6549 // 7989 // Initial alpha2 deformation (GS) << 6550 // Determination of the square of the width of the probability distribution 7990 DEFO_INIT = std::sqrt(5.0 / (4.0 * PI)) * << 6551 // For the overdamped regime BET**2 > 4*OMEGA**2 7991 // << 6552 if((bet*bet)>4.0*OMEGA_GS*OMEGA_GS){ 7992 fomega_sp(AF, Y, &MFCD, &OMEGA, &HOMEGA); << 6553 BET1=std::sqrt(bet*bet-4.0*OMEGA_GS*OMEGA_GS); 7993 fomega_gs(AF, ZF, &K1, &OMEGA_GS, &HOMEGA << 6554 // 7994 // << 6555 // REMEMBER THAT HOMEGA IS ACTUALLY HBAR*HOMEGA1=1MeV 7995 // Determination of the square of the wid << 6556 // SO THAT HOMEGA1 = HOMEGA/HBAR 7996 // For the overdamped regime BET**2 > 4*O << 6557 // 7997 if ((bet * bet) > 4.0 * OMEGA_GS * OMEGA_ << 6558 SIGMA_SQR = (FT/K1)*(1.0 -((2.0*bet*bet/(BET1*BET1)* (0.5 * (std::exp(0.50*(BET1-bet)*1.e21*TIME) - std::exp(0.5*(-BET1-bet)*1.e21*TIME)))*(0.5 * (std::exp(0.50*(BET1-bet)*1.e21*TIME) - std::exp(0.5*(-BET1-bet)*1.e21*TIME)))) + (bet/BET1*0.50 * (std::exp((BET1-bet)*1.e21*TIME)-std::exp((-BET1-bet)*1.e21*TIME))) + 1. * std::exp(-bet*1.e21*TIME))); 7998 { << 6559 // 7999 BET1 = std::sqrt(bet * bet - 4.0 * OM << 6560 // Evolution of the mean x-value (KHS March 2006) 8000 // << 6561 XACT = DEFO_INIT *std::exp(-0.5*(bet-BET1)*1.e21*(TIME-T_0)); 8001 // REMEMBER THAT HOMEGA IS ACTUALLY H << 6562 // 8002 // SO THAT HOMEGA1 = HOMEGA/HBAR << 6563 }else{ 8003 // << 6564 // For the underdamped regime BET**2 < 4*HOMEGA**2 BET1 becomes a complex number 8004 SIGMA_SQR = << 6565 // and the expression with sinh and cosh can be transformed in one with sin and cos 8005 (FT / K1) * << 6566 BET1=std::sqrt(4.0*OMEGA_GS*OMEGA_GS-bet*bet); 8006 (1.0 - << 6567 SIGMA_SQR = FT/K1*(1.-std::exp(-1.0*bet*1.e21*TIME)*(bet*bet/(BET1*BET1)*(1.-std::cos(BET1*1.e21*TIME)) + bet/BET1*std::sin(BET1*1.e21*TIME) + 1.0)); 8007 ((2.0 * bet * bet / (BET1 * BET1 << 6568 XACT = DEFO_INIT*std::cos(0.5*BET1*1.e21*(TIME-T_0))*std::exp(-bet*1.e21*(TIME-T_0)); 8008 (0.5 * (std::exp(0.50 * (BET1 << 6569 } 8009 (0.5 * (std::exp(0.50 * (BET1 << 6570 8010 (bet / BET1 * 0.50 * (std::exp( << 6571 // Determination of the deformation at the saddle point according to 8011 1. * std::exp(-bet * 1.e21 * TI << 6572 // "Geometrical relationships of Macroscopic Nucl. Phys." from Hass and Myers page 100 8012 // << 6573 // This corresponds to alpha2 deformation. 8013 // Evolution of the mean x-value (KHS << 6574 XB = 7./3.*Y-938./765.*Y*Y+9.499768*Y*Y*Y-8.050944*Y*Y*Y*Y; 8014 XACT = DEFO_INIT * std::exp(-0.5 * (b << 6575 // 8015 // << 6576 // Determination of the probability distribution at the saddle deformation 8016 } << 6577 // 8017 else << 6578 if(SIGMA_SQR>0.0){ 8018 { << 6579 NORM = 1./std::sqrt(2.*PI*SIGMA_SQR); 8019 // For the underdamped regime BET**2 << 6580 // 8020 // number and the expression with sin << 6581 W_EXP = -1.*(XB - XACT)*(XB - XACT)/(2.0 * SIGMA_SQR); 8021 // with sin and cos << 6582 if(W_EXP<(-708.0) ) W_EXP = -708.0; 8022 BET1 = std::sqrt(4.0 * OMEGA_GS * OME << 6583 W = NORM * std::exp( W_EXP ) * FT / (K1 * SIGMA_SQR); 8023 SIGMA_SQR = FT / K1 * << 6584 }else{ 8024 (1. - std::exp(-1.0 * bet << 6585 W = 0.0; 8025 (bet * bet / (B << 6586 } 8026 bet / BET1 * s << 6587 // 8027 XACT = DEFO_INIT * std::cos(0.5 * BET << 6588 // Determination of the fission decay width, we assume we are in the overdamped regime 8028 } << 6589 // 8029 << 6590 SIGMA_SQR_INF = FT/K1; 8030 // Determination of the deformation at th << 6591 W_EXP = -XB*XB/(2.0 * SIGMA_SQR_INF); 8031 // "Geometrical relationships of Macrosco << 6592 if(W_EXP<(-708.0))W_EXP = -708.0; 8032 // page 100 This corresponds to alpha2 de << 6593 W_INFIN = std::exp(W_EXP)/std::sqrt(2.0*PI*SIGMA_SQR_INF); 8033 XB = 7. / 3. * Y - 938. / 765. * Y * Y + << 6594 FUNC_TRANS = W / W_INFIN; 8034 // << 6595 // 8035 // Determination of the probability distr << 6596 // Correction for the variation of the mean velocity at the fission barrier 8036 // << 6597 // (see B. Jurado et al, Nucl. Phys. A747, p. 14) 8037 if (SIGMA_SQR > 0.0) << 6598 // 8038 { << 6599 LOG_SLOPE_INF = cram(bet,HOMEGA)*bet*MFCD*OMEGA/FT; 8039 NORM = 1. / std::sqrt(2. * PI * SIGMA << 6600 LOG_SLOPE_ABS = (XB-XACT)/SIGMA_SQR-XB/SIGMA_SQR_INF+cram(bet,HOMEGA)*bet*MFCD*OMEGA/FT; 8040 // << 6601 // 8041 W_EXP = -1. * (XB - XACT) * (XB - XAC << 6602 FUNC_TRANS = FUNC_TRANS * LOG_SLOPE_ABS/LOG_SLOPE_INF; 8042 if (W_EXP < (-708.0)) << 6603 // 8043 W_EXP = -708.0; << 6604 return FUNC_TRANS; 8044 W = NORM * std::exp(W_EXP) * FT / (K1 << 6605 } 8045 } << 6606 8046 else << 6607 8047 { << 6608 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) 8048 W = 0.0; << 6609 { 8049 } << 6610 /* 8050 // << 6611 C THIS SUBROUTINE IS AIMED TO CHOOSE BETWEEN PARTICLE EMISSION 8051 // Determination of the fission decay wid << 6612 C AND FISSION 8052 // overdamped regime << 6613 C WE USE MONTE-CARLO METHODS AND SAMPLE TIME BETWEEN T=0 AND T=1.5*TAUF 8053 // << 6614 c TO SIMULATE THE TRANSIENT TIME WITH 30 STEPS (0.05*TAUF EACH) 8054 SIGMA_SQR_INF = FT / K1; << 6615 C FOR t>1.5*TAUF , GF=CONSTANT=ASYMPTOTICAL VALUE (INCLUDING KRAMERS FACTOR) 8055 W_EXP = -XB * XB / (2.0 * SIGMA_SQR_INF); << 6616 c------------------------------------------------------------------------ 8056 if (W_EXP < (-708.0)) << 6617 c Modifications introduced by BEATRIZ JURADO 18/10/01: 8057 W_EXP = -708.0; << 6618 c 1. Now this subrutine is included in the rutine direct 8058 W_INFIN = std::exp(W_EXP) / std::sqrt(2.0 << 6619 c 2. TSUM does not include the current particle decay time 8059 FUNC_TRANS = W / W_INFIN; << 6620 C 3. T_LAPSE is the time until decay, taken as an output variable 8060 // << 6621 C 4. GF_LOC is also taken as an output variable 8061 // Correction for the variation of the me << 6622 C 5. BET (Diss. Coeff.) and HOMEGA (Frequency at the ground state 8062 // (see B. Jurado et al, Nucl. Phys. A74 << 6623 c are included as input variables because they are needed for FUNC_TRANS 8063 // << 6624 C----------------------------------------------------------------------- 8064 LOG_SLOPE_INF = cram(bet, HOMEGA) * bet * << 6625 C ON INPUT: 8065 LOG_SLOPE_ABS = (XB - XACT) / SIGMA_SQR - << 6626 C GP Partial particle decay width 8066 // << 6627 C GF Asymptotic value of Gamma-f, including Kramers factor 8067 FUNC_TRANS = FUNC_TRANS * LOG_SLOPE_ABS / << 6628 C AF Mass number of nucleus 8068 // << 6629 C TAUF Transient time 8069 return FUNC_TRANS; << 6630 C TS1 Partial particle decay time for the next step 8070 } << 6631 C TSUM Total sum of partial particle decay times, including 8071 << 6632 C the next expected one, which is in competition 8072 void G4Abla::part_fiss(G4double BET, << 6633 C with fission now 8073 G4double GP, << 6634 C ZF Z of nucleus 8074 G4double GF, << 6635 C AF A of nucleus 8075 G4double Y, << 6636 C----------------------------------------------------------------------- 8076 G4double TAUF, << 6637 C ON OUTPUT: 8077 G4double TS1, << 6638 C CHOICE Key for decay mode: 0 = no decay (only internal) 8078 G4double TSUM, << 6639 C 1 = evaporation 8079 G4int* CHOICE, << 6640 C 2 = fission 8080 G4double ZF, << 6641 C----------------------------------------------------------------------- 8081 G4double AF, << 6642 C VARIABLES: 8082 G4double FT, << 6643 C GP Partial particle decay width 8083 G4double* T_LAPSE, << 6644 C GF Asymptotic value of Gamma-f, including Kramers factor 8084 G4double* GF_LOC) << 6645 C TAUF Transient time 8085 { << 6646 C TS1 Partial particle decay time 8086 /* << 6647 C TSUM Total sum of partial particle decay times 8087 C THIS SUBROUTINE IS AIMED TO CHOOSE << 6648 C CHOICE Key for decay mode 8088 C AND FISSION << 6649 C ZF Z of nucleus 8089 C WE USE MONTE-CARLO METHODS AND SAMP << 6650 C AF A of nucleus 8090 c TO SIMULATE THE TRANSIENT TIME WITH 30 << 6651 C FT Used for Fermi function in FUNC_TRANS 8091 C FOR t>1.5*TAUF , GF=CONSTANT=ASYMPT << 6652 C STEP_LENGTH Step in time to sample different decays 8092 FACTOR) << 6653 C BEGIN_TIME Total sum of partial particle decay times, excluding 8093 c---------------------------------------- << 6654 C the next expected one, which is in competition 8094 c Modifications introduced by BEATRIZ << 6655 C with fission now 8095 c 1. Now this subrutine is included in << 6656 C LOC_TIME_BEGIN Begin of time interval considered in one step 8096 c 2. TSUM does not include the current << 6657 C LOC_TIME_END End of time interval considered in one step 8097 C 3. T_LAPSE is the time until decay, << 6658 C GF_LOC In-grow function for fission width, 8098 C 4. GF_LOC is also taken as an output << 6659 c normalized to asymptotic value 8099 C 5. BET (Diss. Coeff.) and HOMEGA (Fr << 6660 C TS2 Effective partial fission decay time in one time step 8100 c are included as input variables b << 6661 C HBAR hbar 8101 C---------------------------------------- << 6662 C T_LAPSE Effective decay time in one time step 8102 C ON INPUT: << 6663 C REAC_PROB Reaction probability in one time step 8103 C GP Partial partic << 6664 C X Help variable for random generator 8104 C GF Asymptotic val << 6665 C------------------------------------------------------------------------ 8105 factor C AF Mass nu << 6666 */ 8106 Transient time C TS1 << 6667 G4double K1,OMEGA,HOMEGA,t_0,STEP_LENGTH,LOC_TIME_BEGIN,LOC_TIME_END=0.,BEGIN_TIME=0.,FISS_PROB,X,TS2,LAMBDA,REAC_PROB; 8107 next step C TSUM Tota << 6668 G4double HBAR=6.582122e-22; 8108 times, including C << 6669 G4int fchoice=0; 8109 is in competition C << 6670 G4double fGF_LOC=0.,fT_LAPSE=0.; 8110 Z of nucleus C AF A << 6671 // 8111 C---------------------------------------- << 6672 if(GF<=0.0){ 8112 C ON OUTPUT: << 6673 *CHOICE = 1; 8113 C CHOICE Key for decay << 6674 *T_LAPSE=TS1; 8114 C << 6675 *GF_LOC = 0.0; 8115 C << 6676 goto direct107; 8116 C---------------------------------------- << 6677 } 8117 C VARIABLES: << 6678 // 8118 C GP Partial partic << 6679 fomega_gs(AF,ZF,&K1,&OMEGA,&HOMEGA); 8119 C GF Asymptotic val << 6680 // 8120 factor C TAUF Transie << 6681 // **************************************************************** 8121 decay time C TSUM Tot << 6682 // Calculation of the shift in time due to the initial conditions 8122 times C CHOICE Key for << 6683 // 8123 C AF A of nucleus << 6684 // Overdamped regime 8124 C FT Used for Fermi << 6685 if(BET*BET>4.0*OMEGA*OMEGA){ 8125 C STEP_LENGTH Step in time t << 6686 // REMEMBER THAT HOMEGA IS ACTUALLY HBAR*HOMEGA1=1MeV 8126 C BEGIN_TIME Total sum of p << 6687 // SO THAT HOMEGA1 = HOMEGA/HBAR 8127 excluding C << 6688 // Additional factor 1/16 proposed by KHS on 14/7/2010. Takes into 8128 competition C << 6689 // account the fact that the curvature of the potential is ~16 times 8129 Begin of time interval considered in one << 6690 // larger than what predicted by the liquid drop model, because of 8130 of time interval considered in one step C << 6691 // shell effects. 8131 function for fission width, c << 6692 t_0 = BET*1.e21*HBAR*HBAR/(4.*HOMEGA*FT)/16.; 8132 asymptotic value C TS2 << 6693 }else{ 8133 time in one time step C HBAR << 6694 // Underdamped regime 8134 Effective decay time in one time step C << 6695 if(((2.*FT-HOMEGA/16.)>0.000001) && BET>0.0){ 8135 probability in one time step C X << 6696 // Additional factor 1/16 proposed by KHS on 14/7/2010. Takes into 8136 random generator << 6697 // account the fact that the curvature of the potential is ~16 times 8137 C---------------------------------------- << 6698 // larger than what predicted by the liquid drop model, because of 8138 */ << 6699 // shell effects. 8139 G4double K1, OMEGA, HOMEGA, t_0, STEP_LEN << 6700 t_0 = (std::log(2.*FT/(2.*FT-HOMEGA/16.)))/(BET*1.e21); 8140 << 6701 }else{ 8141 G4double HBAR = 6.582122e-22; << 6702 // Neglect fission transients if the time shift t_0 is too 8142 G4int fchoice = 0; << 6703 // large. Suppresses large, spurious fission cross section at very 8143 G4double fGF_LOC = 0., fT_LAPSE = 0.; << 6704 // low excitation energy in p+Ta. 8144 // << 6705 // 8145 if (GF <= 0.0) << 6706 fchoice = 0; 8146 { << 6707 goto direct106; 8147 *CHOICE = 1; << 6708 } 8148 *T_LAPSE = TS1; << 6709 } 8149 *GF_LOC = 0.0; << 6710 // ********************************************************************+ 8150 goto direct107; << 6711 fchoice = 0; 8151 } << 6712 STEP_LENGTH = 1.5*TAUF/50.; 8152 // << 6713 // 8153 fomega_gs(AF, ZF, &K1, &OMEGA, &HOMEGA); << 6714 // AT FIRST WE CACULATE THE REAL CURRENT TIME 8154 // << 6715 // TSUM includes only the time elapsed in the previous steps 8155 // ************************************** << 6716 // 8156 // Calculation of the shift in time du << 6717 BEGIN_TIME = TSUM + t_0; 8157 // << 6718 // 8158 // Overdamped regime << 6719 if(BEGIN_TIME<0.0) std::cout << "CURRENT TIME < 0" << BEGIN_TIME << std::endl; 8159 if (BET * BET > 4.0 * OMEGA * OMEGA) << 6720 // 8160 { << 6721 if(BEGIN_TIME<1.50*TAUF){ 8161 // REMEMBER THAT HOMEGA IS AC << 8162 // SO THAT HOMEGA1 = HOMEGA/H << 8163 // Additional factor 1/16 propose << 8164 // account the fact that the curv << 8165 // larger than what predicted by << 8166 // shell effects. << 8167 t_0 = BET * 1.e21 * HBAR * HBAR / (4. << 8168 } << 8169 else << 8170 { << 8171 // Underdamped regime << 8172 if (((2. * FT - HOMEGA / 16.) > 0.000 << 8173 { << 8174 // Additional factor 1/16 pro << 8175 // account the fact that the << 8176 // larger than what predicted << 8177 // shell effects. << 8178 t_0 = (std::log(2. * FT / (2. * F << 8179 } << 8180 else << 8181 { << 8182 // Neglect fission transients << 8183 // large. Suppresses large, s << 8184 // low excitation energy in p << 8185 // << 8186 fchoice = 0; << 8187 goto direct106; << 8188 } << 8189 } << 8190 // ************************************** << 8191 fchoice = 0; << 8192 STEP_LENGTH = 1.5 * TAUF / 50.; << 8193 // << 8194 // AT FIRST WE CACULATE THE REAL CURRENT << 8195 // TSUM includes only the time elapsed i << 8196 // << 8197 BEGIN_TIME = TSUM + t_0; << 8198 // << 8199 if (BEGIN_TIME < 0.0) << 8200 std::cout << "CURRENT TIME < 0" << BE << 8201 // << 8202 if (BEGIN_TIME < 1.50 * TAUF) << 8203 { << 8204 LOC_TIME_BEGIN = BEGIN_TIME; 6722 LOC_TIME_BEGIN = BEGIN_TIME; 8205 // << 6723 // 8206 while ((LOC_TIME_BEGIN < 1.5 * TAUF) << 6724 while((LOC_TIME_BEGIN<1.5*TAUF)&&fchoice==0){ 8207 { << 8208 6725 8209 LOC_TIME_END = LOC_TIME_BEGIN + S << 6726 LOC_TIME_END = LOC_TIME_BEGIN + STEP_LENGTH; 8210 // << 6727 // 8211 // NOW WE ESTIMATE THE MEAN VALUE << 6728 // NOW WE ESTIMATE THE MEAN VALUE OF THE FISSION WIDTH WITHIN THE SMALL INTERVAL 8212 // INTERVAL << 6729 fGF_LOC=(func_trans(LOC_TIME_BEGIN,ZF,AF,BET,Y,FT,t_0)+func_trans(LOC_TIME_END,ZF,AF,BET,Y,FT,t_0))/2.0; 8213 fGF_LOC = (func_trans(LOC_TIME_BE << 6730 // 8214 func_trans(LOC_TIME_EN << 6731 fGF_LOC = fGF_LOC * GF; 8215 2.0; << 6732 8216 // << 6733 // TS2 IS THE MEAN DECAY TIME OF THE FISSION CHANNEL 8217 fGF_LOC = fGF_LOC * GF; << 6734 if(fGF_LOC>0.0){ 8218 << 6735 TS2 = HBAR/fGF_LOC; 8219 // TS2 IS THE MEAN DECAY TIME OF << 6736 }else{ 8220 if (fGF_LOC > 0.0) << 6737 TS2 = 0.0; 8221 { << 6738 } 8222 TS2 = HBAR / fGF_LOC; << 6739 // 8223 } << 6740 if(TS2>0.0){ 8224 else << 6741 LAMBDA = 1.0/TS1 + 1.0/TS2; 8225 { << 6742 }else{ 8226 TS2 = 0.0; << 6743 LAMBDA = 1.0/TS1; 8227 } << 6744 } 8228 // << 6745 // 8229 if (TS2 > 0.0) << 6746 // This is the probability to survive the decay at this step 8230 { << 6747 REAC_PROB = std::exp(-1.0*STEP_LENGTH*LAMBDA); 8231 LAMBDA = 1.0 / TS1 + 1.0 / TS << 6748 // I GENERATE A RANDOM NUMBER 8232 } << 6749 X = G4AblaRandom::flat(); 8233 else << 6750 if(X>REAC_PROB){ 8234 { << 6751 // THEN THE EVAPORATION OR FISSION HAS OCCURED 8235 LAMBDA = 1.0 / TS1; << 6752 FISS_PROB = fGF_LOC / (fGF_LOC+GP); >> 6753 X = G4AblaRandom::flat(); >> 6754 // WRITE(6,*)'X=',X >> 6755 if(X<FISS_PROB){ >> 6756 // FISSION OCCURED >> 6757 fchoice = 2; >> 6758 }else{ >> 6759 // EVAPORATION OCCURED >> 6760 fchoice = 1; >> 6761 } >> 6762 }// if x >> 6763 LOC_TIME_BEGIN = LOC_TIME_END; >> 6764 }// while >> 6765 // Take the real decay time of this decay step >> 6766 fT_LAPSE = LOC_TIME_END - BEGIN_TIME; >> 6767 }// if BEGIN_TIME >> 6768 // >> 6769 // NOW, IF NOTHING HAPPENED DURING TRANSIENT TIME >> 6770 direct106: >> 6771 if(fchoice==0){ >> 6772 fGF_LOC=GF; >> 6773 FISS_PROB = GF / (GF+GP); >> 6774 >> 6775 // Added for cases where already at the beginning BEGIN_TIME > 1.5d0*TAUF >> 6776 if(GF>0.0){ >> 6777 TS2 = HBAR/GF; >> 6778 }else{ >> 6779 TS2 = 0.0; >> 6780 } >> 6781 >> 6782 if(TS2>0.0){ >> 6783 LAMBDA = 1./TS1 + 1./TS2; >> 6784 }else{ >> 6785 LAMBDA = 1./TS1; 8236 } 6786 } 8237 // << 6787 // 8238 // This is the probability to sur << 8239 REAC_PROB = std::exp(-1.0 * STEP_ << 8240 // I GENERATE A RANDOM NUMBER << 8241 X = G4AblaRandom::flat(); 6788 X = G4AblaRandom::flat(); 8242 if (X > REAC_PROB) << 8243 { << 8244 // THEN THE EVAPORATION OR FI << 8245 FISS_PROB = fGF_LOC / (fGF_LO << 8246 X = G4AblaRandom::flat(); << 8247 // WRIT << 8248 if (X < FISS_PROB) << 8249 { << 8250 // FISSION OCCURED << 8251 fchoice = 2; << 8252 } << 8253 else << 8254 { << 8255 // EVAPORATION OCCURED << 8256 fchoice = 1; << 8257 } << 8258 } // if x << 8259 LOC_TIME_BEGIN = LOC_TIME_END; << 8260 } // while << 8261 // Take the real decay time of this << 8262 fT_LAPSE = LOC_TIME_END - BEGIN_TIME; << 8263 } // if BEGIN_TIME << 8264 // << 8265 // NOW, IF NOTHING HAPPENED DURING TRAN << 8266 direct106: << 8267 if (fchoice == 0) << 8268 { << 8269 fGF_LOC = GF; << 8270 FISS_PROB = GF / (GF + GP); << 8271 << 8272 // Added for cases where already at t << 8273 if (GF > 0.0) << 8274 { << 8275 TS2 = HBAR / GF; << 8276 } << 8277 else << 8278 { << 8279 TS2 = 0.0; << 8280 } << 8281 6789 8282 if (TS2 > 0.0) << 6790 if(X<FISS_PROB){ 8283 { << 6791 // FISSION OCCURED 8284 LAMBDA = 1. / TS1 + 1. / TS2; << 6792 fchoice = 2; 8285 } << 6793 }else{ 8286 else << 6794 // EVAPORATION OCCURED 8287 { << 6795 fchoice = 1; 8288 LAMBDA = 1. / TS1; << 6796 } 8289 } << 6797 // 8290 // << 6798 //TIRAGE ALEATOIRE DANS UNE EXPONENTIELLLE : Y=EXP(-X/T) 8291 X = G4AblaRandom::flat(); << 6799 // EXPOHAZ=-T*LOG(HAZ(K)) >> 6800 fT_LAPSE = fT_LAPSE -1.0/LAMBDA*std::log(G4AblaRandom::flat()); >> 6801 } >> 6802 // >> 6803 direct107: 8292 6804 8293 if (X < FISS_PROB) << 6805 (*T_LAPSE)=fT_LAPSE; 8294 { << 6806 (*GF_LOC)=fGF_LOC; 8295 // FISSION OCCURED << 6807 (*CHOICE)=fchoice; 8296 fchoice = 2; << 6808 return; 8297 } << 8298 else << 8299 { << 8300 // EVAPORATION OCCURED << 8301 fchoice = 1; << 8302 } << 8303 // << 8304 // TIRAGE ALEATOIRE DANS UNE EXPONENT << 8305 // EXPOHAZ=-T*LOG(HAZ(K)) << 8306 fT_LAPSE = fT_LAPSE - 1.0 / LAMBDA * << 8307 } << 8308 // << 8309 direct107: << 8310 << 8311 (*T_LAPSE) = fT_LAPSE; << 8312 (*GF_LOC) = fGF_LOC; << 8313 (*CHOICE) = fchoice; << 8314 return; << 8315 } 6809 } 8316 6810 8317 G4double G4Abla::tunnelling(G4double A, << 6811 G4double G4Abla::tunnelling(G4double A,G4double ZPRF,G4double Y,G4double EE,G4double EF,G4double TEMP,G4double DENSG,G4double DENSF,G4double ENH_FACT) 8318 G4double ZPRF, << 6812 { 8319 G4double Y, << 6813 // Subroutine to caluclate fission width with included effects 8320 G4double EE, << 6814 // of tunnelling through the fission barrier 8321 G4double EF, << 6815 8322 G4double TEMP, << 6816 G4double PI = 3.14159; 8323 G4double DENSG, << 6817 G4int IZ, IN; 8324 G4double DENSF, << 6818 G4double MFCD,OMEGA,HOMEGA1,HOMEGA2=0.,GFTUN; 8325 G4double ENH_FACT << 6819 G4double E1,E2,EXP_FACT,CORR_FUNCT,FACT1,FACT2,FACT3; 8326 { << 6820 8327 // Subroutine to caluclate fission width << 6821 IZ = idnint(ZPRF); 8328 // of tunnelling through the fission barr << 6822 IN = idnint(A-ZPRF); 8329 << 6823 8330 G4double PI = 3.14159; << 6824 // For low energies system "sees" LD barrier 8331 G4int IZ, IN; << 6825 fomega_sp(A,Y,&MFCD,&OMEGA,&HOMEGA1); 8332 G4double MFCD, OMEGA, HOMEGA1, HOMEGA2 = << 6826 8333 G4double E1, E2, EXP_FACT, CORR_FUNCT, FA << 6827 if(mod(IN,2)==0&&mod(IZ,2)==0){ // e-e 8334 << 6828 // Due to pairing gap, even-even nuclei cannot tunnel for excitation energy lower 8335 IZ = idnint(ZPRF); << 6829 // than pairing gap (no levels at which system can be) 8336 IN = idnint(A - ZPRF); << 6830 EE = EE - 12.0/std::sqrt(A); 8337 << 6831 HOMEGA2 = 1.04; 8338 // For low energies system "sees" LD barr << 6832 } 8339 fomega_sp(A, Y, &MFCD, &OMEGA, &HOMEGA1); << 6833 8340 << 6834 if(mod(IN,2)==1&&mod(IZ,2)==1){ // o-o 8341 if (mod(IN, 2) == 0 && mod(IZ, 2) == 0) << 6835 HOMEGA2 = 0.65; 8342 { // e-e << 6836 } 8343 // Due to pairing gap, even-even nucl << 6837 8344 // lower than pairing gap (no levels << 6838 if(mod(IN,2)==1&&mod(IZ,2)==0){ // o-e 8345 EE = EE - 12.0 / std::sqrt(A); << 6839 HOMEGA2 = 0.8; 8346 HOMEGA2 = 1.04; << 6840 } 8347 } << 6841 8348 << 6842 if(mod(IN,2)==0&&mod(IZ,2)==1){ // e-0 8349 if (mod(IN, 2) == 1 && mod(IZ, 2) == 1) << 6843 HOMEGA2 = 0.8; 8350 { // o-o << 6844 } 8351 HOMEGA2 = 0.65; << 6845 8352 } << 6846 E1 = EF + HOMEGA1/2.0/PI*std::log(HOMEGA1*(2.0*PI+HOMEGA2)/4.0/PI/PI); 8353 << 6847 8354 if (mod(IN, 2) == 1 && mod(IZ, 2) == 0) << 6848 E2 = EF + HOMEGA2/(2.0*PI)*std::log(1.0+2.0*PI/HOMEGA2); 8355 { // o-e << 6849 8356 HOMEGA2 = 0.8; << 6850 // AKH May 2013 - Due to approximations in the analytical integration, at energies 8357 } << 6851 // just above barrier Pf was to low, at energies below 8358 << 6852 // barrier it was somewhat higher. LInes below are supposed to correct for this. 8359 if (mod(IN, 2) == 0 && mod(IZ, 2) == 1) << 6853 // Factor 0.20 in EXP_FACT comes from the slope of the Pf(Eexc) (Gavron's data) 8360 { // e-0 << 6854 // around fission barrier. 8361 HOMEGA2 = 0.8; << 6855 EXP_FACT = (EE-EF)/(HOMEGA2/(2.0*PI)); 8362 } << 6856 if(EXP_FACT>700.0) EXP_FACT = 700.0; 8363 << 6857 CORR_FUNCT = HOMEGA1 * (1.0-1.0/(1.0+std::exp(EXP_FACT))); 8364 E1 = EF + HOMEGA1 / 2.0 / PI * std::log(H << 6858 if(mod(IN,2)==0&&mod(IZ,2)==0){ 8365 << 6859 CORR_FUNCT = HOMEGA1 * (1.0-1.0/(1.0+std::exp(EXP_FACT))); 8366 E2 = EF + HOMEGA2 / (2.0 * PI) * std::log << 6860 } 8367 << 6861 8368 // AKH May 2013 - Due to approximations i << 6862 FACT1 = HOMEGA1/(2.0*PI*TEMP+HOMEGA1); 8369 // energies just above barrier Pf was to << 6863 FACT2 = (2.0*PI/(2.0*PI+HOMEGA2)-HOMEGA1*(2.0*PI+HOMEGA2)/4.0/PI/PI)/(E2-E1); 8370 // somewhat higher. LInes below are suppo << 6864 FACT3 = HOMEGA2/(2.0*PI*TEMP-HOMEGA2); 8371 // in EXP_FACT comes from the slope of th << 6865 8372 // fission barrier. << 6866 if(EE<E1){ 8373 EXP_FACT = (EE - EF) / (HOMEGA2 / (2.0 * << 6867 GFTUN = FACT1*(std::exp(EE/TEMP)*std::exp(2.0*PI*(EE-EF)/HOMEGA1)-std::exp(-2.0*PI*EF/HOMEGA1)); 8374 if (EXP_FACT > 700.0) << 6868 }else{ 8375 EXP_FACT = 700.0; << 6869 if(EE>=E1&&EE<E2){ 8376 CORR_FUNCT = HOMEGA1 * (1.0 - 1.0 / (1.0 << 6870 GFTUN = std::exp(EE/TEMP)*(0.50+FACT2*(EE-EF-TEMP))-std::exp(E1/TEMP)*(0.5+FACT2*(E1-EF-TEMP))+FACT1*(std::exp(E1/TEMP)*std::exp(2.0*PI*(E1-EF)/HOMEGA1)-std::exp(-2.0*PI*EF/HOMEGA1)); 8377 if (mod(IN, 2) == 0 && mod(IZ, 2) == 0) << 6871 }else{ 8378 { << 6872 GFTUN = std::exp(EE/TEMP)*(1.0+FACT3*std::exp(-2.0*PI*(EE-EF)/HOMEGA2))-std::exp(E2/TEMP)*(1.0+FACT3*std::exp(-2.0*PI*(E2-EF)/HOMEGA2))+std::exp(E2/TEMP)*(0.5+FACT2*(E2-EF-TEMP))-std::exp(E1/TEMP)*(0.5+FACT2*(E1-EF-TEMP))+FACT1*(std::exp(E1/TEMP)*std::exp(2.0*PI*(E1-EF)/HOMEGA1)-std::exp(-2.0*PI*EF/HOMEGA1)); 8379 CORR_FUNCT = HOMEGA1 * (1.0 - 1.0 / ( << 8380 } << 8381 << 8382 FACT1 = HOMEGA1 / (2.0 * PI * TEMP + HOME << 8383 FACT2 = (2.0 * PI / (2.0 * PI + HOMEGA2) << 8384 FACT3 = HOMEGA2 / (2.0 * PI * TEMP - HOME << 8385 << 8386 if (EE < E1) << 8387 { << 8388 GFTUN = FACT1 * << 8389 (std::exp(EE / TEMP) * std::e << 8390 } << 8391 else << 8392 { << 8393 if (EE >= E1 && EE < E2) << 8394 { << 8395 GFTUN = std::exp(EE / TEMP) * (0. << 8396 std::exp(E1 / TEMP) * (0. << 8397 FACT1 * (std::exp(E1 / TE << 8398 std::exp(-2.0 * << 8399 } 6873 } 8400 else << 6874 } 8401 { << 6875 GFTUN = GFTUN/std::exp(EE/TEMP)*DENSF*ENH_FACT/DENSG/2.0/PI; 8402 GFTUN = std::exp(EE / TEMP) * (1. << 6876 GFTUN = GFTUN * CORR_FUNCT; 8403 std::exp(E2 / TEMP) * (1. << 6877 return GFTUN; 8404 std::exp(E2 / TEMP) * (0. << 6878 } 8405 std::exp(E1 / TEMP) * (0. << 6879 8406 FACT1 * (std::exp(E1 / TE << 6880 8407 std::exp(-2.0 * << 6881 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) 8408 } << 6882 { 8409 } << 6883 // 8410 GFTUN = GFTUN / std::exp(EE / TEMP) * DEN << 6884 G4double FNORM,MASS_ASYM_SADD_B,FP_PER,FP_PAR,SIG_PER_SP,SIG_PAR_SP; 8411 GFTUN = GFTUN * CORR_FUNCT; << 6885 G4double Z2OVERA,ftemp,fgf,DENSF,ECOR,EROT,qr; 8412 return GFTUN; << 6886 G4double DCR,UCR,ENH_FACTA,ENH_FACTB,ENH_FACT,PONFE; 8413 } << 6887 G4double PI = 3.14159; 8414 << 6888 8415 void G4Abla::fission_width(G4double ZPRF, << 6889 DCR = fiss->dcr; 8416 G4double A, << 6890 UCR = fiss->ucr; 8417 G4double EE, << 6891 Z2OVERA = ZPRF * ZPRF / A; 8418 G4double BS, << 6892 8419 G4double BK, << 6893 // Nuclei below Businaro-Gallone point do not go through fission 8420 G4double EF, << 6894 if((ZPRF<=55.0) || (FF_ALLOWED==0)){ 8421 G4double Y, << 8422 G4double* GF, << 8423 G4double* TEMP, << 8424 G4double JPR, << 8425 G4int IEROT, << 8426 G4int FF_ALLOWED, << 8427 G4int OPTCOL, << 8428 G4int OPTSHP, << 8429 G4double DENSG) << 8430 { << 8431 // << 8432 G4double FNORM, MASS_ASYM_SADD_B, FP_PER, << 8433 G4double Z2OVERA, ftemp, fgf, DENSF, ECOR << 8434 G4double DCR, UCR, ENH_FACTA, ENH_FACTB, << 8435 G4double PI = 3.14159; << 8436 << 8437 DCR = fiss->dcr; << 8438 UCR = fiss->ucr; << 8439 Z2OVERA = ZPRF * ZPRF / A; << 8440 << 8441 // Nuclei below Businaro-Gallone point do << 8442 if ((ZPRF <= 55.0) || (FF_ALLOWED == 0)) << 8443 { << 8444 (*GF) = 0.0; 6895 (*GF) = 0.0; 8445 (*TEMP) = 0.5; 6896 (*TEMP) = 0.5; 8446 return; 6897 return; 8447 } << 6898 } 8448 6899 8449 // Level density above SP << 6900 // Level density above SP 8450 // Saddle-point deformation is defbet as << 6901 // Saddle-point deformation is defbet as above. But, FP_PER and FP_PAR 8451 // are calculated for fission in DENSNIV << 6902 // are calculated for fission in DENSNIV acc to Myers and Hasse, and their 8452 // parametrization is done as function of << 6903 // parametrization is done as function of y 8453 densniv(A, ZPRF, EE, EF, &DENSF, 0.0, BS, << 6904 densniv(A,ZPRF,EE,EF,&DENSF,0.0,BS,BK,&ftemp,OPTSHP,0,Y,&ECOR,JPR,1,&qr); 8454 << 6905 8455 if (OPTCOL == 0) << 6906 if(OPTCOL==0){ 8456 { << 6907 fgf= DENSF/DENSG/PI/2.0*ftemp; 8457 fgf = DENSF / DENSG / PI / 2.0 * ftem << 6908 (*TEMP)=ftemp; 8458 (*TEMP) = ftemp; << 6909 (*GF)= fgf; 8459 (*GF) = fgf; << 6910 return; 8460 return; << 6911 } 8461 } << 8462 6912 8463 // FP = 2/5*M0*R0**2/HBAR**2 * A**(5/3) * << 6913 // FP = 2/5*M0*R0**2/HBAR**2 * A**(5/3) * (1 + DEFBET/3) 8464 // FP is used to calculate the spin-cutof << 6914 // FP is used to calculate the spin-cutoff parameter SIG=FP*TEMP/hbar**2; hbar**2 8465 // hbar**2 is, therefore, included in FP << 6915 // is, therefore, included in FP in order to avoid problems with large exponents 8466 // exponents The factor fnorm inlcudes th << 6916 // The factor fnorm inlcudes then R0, M0 and hbar**2 - 8467 // R0*M0/hbar**2 = 1.2fm*931.49MeV/c**2 / << 6917 // fnorm = R0*M0/hbar**2 = 1.2fm*931.49MeV/c**2 /(6.582122e-22 MeVs)**2 and is 8468 // units 1/MeV << 6918 // in units 1/MeV 8469 FNORM = 1.2 * 1.2 * 931.49 * 1.e-2 / (9.0 << 6919 FNORM = 1.2*1.2 * 931.49 * 1.e-2 / (9.0 * 6.582122*6.582122); 8470 // FP_PER ~ 1+7*y/6, FP_PAR ~ 1-7*y/3 (Ha << 6920 // FP_PER ~ 1+7*y/6, FP_PAR ~ 1-7*y/3 (Hasse & Myers, Geom. relat. macr. nucl. phys.) 8471 // phys.) Perpendicular moment of inertia << 6921 // Perpendicular moment of inertia 8472 FP_PER = 2.0 / 5.0 * std::pow(A, 5.0 / 3. << 6922 FP_PER = 2.0/5.0*std::pow(A,5.0/3.0)*FNORM*(1. + 7.0/6.0*Y*(1.0+1396.0/255.*Y)); 8473 << 6923 8474 // AK - Jan 2011 - following line is need << 6924 // AK - Jan 2011 - following line is needed, as for these nuclei it seems that 8475 // FP_PER calculated according to above f << 6925 // FP_PER calculated according to above formula has too large values, leading to too 8476 // to too large ENH_FACT << 6926 // large ENH_FACT 8477 if (Z2OVERA <= 30.0) << 6927 if(Z2OVERA<=30.0) FP_PER = 6.50; 8478 FP_PER = 6.50; << 6928 8479 << 6929 // Parallel moment of inertia 8480 // Parallel moment of inertia << 6930 FP_PAR = 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)); 8481 FP_PAR = 2.0 / 5.0 * std::pow(A, 5.0 / 3. << 6931 if(FP_PAR<0.0) FP_PAR = 0.0; 8482 if (FP_PAR < 0.0) << 6932 8483 FP_PAR = 0.0; << 6933 EROT = JPR * JPR / (2.0 * std::sqrt(FP_PAR*FP_PAR + FP_PER*FP_PER)); 8484 << 6934 if(IEROT==1) EROT = 0.0; 8485 EROT = JPR * JPR / (2.0 * std::sqrt(FP_PA << 6935 8486 if (IEROT == 1) << 6936 // Perpendicular spin cut-off parameter 8487 EROT = 0.0; << 6937 SIG_PER_SP = std::sqrt(FP_PER * ftemp); 8488 << 6938 8489 // Perpendicular spin cut-off parameter << 6939 if(SIG_PER_SP<1.0) SIG_PER_SP = 1.0; 8490 SIG_PER_SP = std::sqrt(FP_PER * ftemp); << 6940 8491 << 6941 // Parallel spin cut-off parameter 8492 if (SIG_PER_SP < 1.0) << 6942 SIG_PAR_SP = std::sqrt(FP_PAR * ftemp); 8493 SIG_PER_SP = 1.0; << 6943 ENH_FACT = 1.0; 8494 << 6944 // 8495 // Parallel spin cut-off parameter << 6945 if(A>223.0){ 8496 SIG_PAR_SP = std::sqrt(FP_PAR * ftemp); << 6946 MASS_ASYM_SADD_B = 2.0; 8497 ENH_FACT = 1.0; << 6947 }else{ 8498 // << 6948 MASS_ASYM_SADD_B = 1.0; 8499 if (A > 223.0) << 8500 { << 8501 MASS_ASYM_SADD_B = 2.0; << 8502 } << 8503 else << 8504 { << 8505 MASS_ASYM_SADD_B = 1.0; << 8506 } << 8507 << 8508 // actinides with low barriers << 8509 if (Z2OVERA > 35. && Z2OVERA <= (110. * 1 << 8510 { << 8511 // Barrier A is axial asymmetric << 8512 ENH_FACTA = std::sqrt(8.0 * PI) * SIG << 8513 // Barrier B is axial symmetric << 8514 ENH_FACTB = MASS_ASYM_SADD_B * SIG_PE << 8515 // Total enhancement << 8516 ENH_FACT = ENH_FACTA * ENH_FACTB / (E << 8517 } << 8518 else << 8519 { << 8520 // nuclei with high fission barriers << 8521 // symmetric) << 8522 if (Z2OVERA <= 35.) << 8523 { << 8524 ENH_FACT = MASS_ASYM_SADD_B * SIG << 8525 } 6949 } 8526 else << 6950 8527 { << 6951 // actinides with low barriers 8528 // super-heavy nuclei (only barr << 6952 if(Z2OVERA>35.&&Z2OVERA<=(110.*110./298.0)){ 8529 ENH_FACT = std::sqrt(8.0 * PI) * << 6953 // Barrier A is axial asymmetric >> 6954 ENH_FACTA = std::sqrt(8.0*PI) * SIG_PER_SP*SIG_PER_SP * SIG_PAR_SP; >> 6955 // Barrier B is axial symmetric >> 6956 ENH_FACTB = MASS_ASYM_SADD_B * SIG_PER_SP*SIG_PER_SP; >> 6957 // Total enhancement >> 6958 ENH_FACT = ENH_FACTA * ENH_FACTB / (ENH_FACTA + ENH_FACTB); >> 6959 }else{ >> 6960 // nuclei with high fission barriers (only barrier B plays a role, axial symmetric) >> 6961 if(Z2OVERA<=35.){ >> 6962 ENH_FACT = MASS_ASYM_SADD_B*SIG_PER_SP*SIG_PER_SP; >> 6963 }else{ >> 6964 // super-heavy nuclei (only barrier A plays a role, axial asymmetric) >> 6965 ENH_FACT = std::sqrt(8.0*PI) * SIG_PER_SP*SIG_PER_SP* SIG_PAR_SP; 8530 } 6966 } 8531 } << 6967 } 8532 6968 8533 // Fading-out with excitation energy abov << 6969 // Fading-out with excitation energy above the saddle point: 8534 PONFE = (ECOR - UCR - EROT) / DCR; << 6970 PONFE = (ECOR-UCR-EROT)/DCR; 8535 if (PONFE > 700.) << 6971 if(PONFE>700.) PONFE = 700.0; 8536 PONFE = 700.0; << 6972 // Fading-out according to Junghans: 8537 // Fading-out according to Junghans: << 6973 ENH_FACT = 1.0/(1.0+std::exp(PONFE))*ENH_FACT+1.0; 8538 ENH_FACT = 1.0 / (1.0 + std::exp(PONFE)) << 6974 8539 << 6975 if(ENH_FACT<1.0)ENH_FACT = 1.0; 8540 if (ENH_FACT < 1.0) << 6976 fgf= DENSF/DENSG/PI/2.0*ftemp*ENH_FACT; 8541 ENH_FACT = 1.0; << 6977 8542 fgf = DENSF / DENSG / PI / 2.0 * ftemp * << 6978 // Tunneling 8543 << 6979 if(EE<EF+1.){ 8544 // Tunneling << 6980 fgf=tunnelling(A,ZPRF,Y,EE,EF,ftemp,DENSG,DENSF,ENH_FACT); 8545 if (EE < EF) << 6981 } 8546 { << 6982 // 8547 fgf = tunnelling(A, ZPRF, Y, EE, EF, << 6983 (*GF)= fgf; 8548 } << 6984 (*TEMP)=ftemp; 8549 // << 6985 return; 8550 (*GF) = fgf; << 8551 (*TEMP) = ftemp; << 8552 return; << 8553 } 6986 } 8554 6987 8555 void G4Abla::lorb(G4double AMOTHER, << 8556 G4double ADAUGHTER, << 8557 G4double LMOTHER, << 8558 G4double EEFINAL, << 8559 G4double* LORBITAL, << 8560 G4double* SIGMA_LORBITAL) << 8561 { << 8562 << 8563 G4double AFRAGMENT, S4FINAL, ALEVDENS; << 8564 G4double THETA_MOTHER, THETA_ORBITAL; << 8565 << 8566 /* << 8567 C Values on input: << 8568 C AMOTHER mass of mother n << 8569 C ADAUGHTER mass of daughter << 8570 C LMOTHER angular momentum << 8571 C EEFINAL excitation energ << 8572 C (sum of daught << 8573 C << 8574 C Values on output: << 8575 C LORBITAL mean value of or << 8576 C (assumed to b << 8577 C SIGMA_LORBITAL standard deviati << 8578 */ << 8579 if (EEFINAL <= 0.01) << 8580 EEFINAL = 0.01; << 8581 AFRAGMENT = AMOTHER - ADAUGHTER; << 8582 ALEVDENS = 0.073 * AMOTHER + 0.095 * std: << 8583 S4FINAL = ALEVDENS * EEFINAL; << 8584 if (S4FINAL <= 0.0 || S4FINAL > 100000.) << 8585 { << 8586 std::cout << "S4FINAL:" << S4FINAL << << 8587 } << 8588 THETA_MOTHER = 0.0111 * std::pow(AMOTHER, << 8589 THETA_ORBITAL = 0.0323 / std::pow(AMOTHER << 8590 std::pow(std::pow(AFRAGME << 8591 (AFRAGMENT + ADAUGHTER); << 8592 6988 8593 *LORBITAL = -1. * THETA_ORBITAL * (LMOTHE << 6989 void G4Abla::lorb(G4double AMOTHER,G4double ADAUGHTER,G4double LMOTHER,G4double EEFINAL,G4double *LORBITAL,G4double *SIGMA_LORBITAL) >> 6990 { >> 6991 >> 6992 G4double AFRAGMENT,S4FINAL,ALEVDENS; >> 6993 G4double THETA_MOTHER,THETA_ORBITAL; >> 6994 >> 6995 /* >> 6996 C Values on input: >> 6997 C AMOTHER mass of mother nucleus >> 6998 C ADAUGHTER mass of daughter fragment >> 6999 C LMOTHER angular momentum of mother (may be real) >> 7000 C EEFINAL excitation energy after emission >> 7001 C (sum of daughter and fragment) >> 7002 C >> 7003 C Values on output: >> 7004 C LORBITAL mean value of orbital angular momentum >> 7005 C (assumed to be fully aligned with LMOTHER) >> 7006 C SIGMA_LORBITAL standard deviation of the orbital angular momentum >> 7007 */ >> 7008 if (EEFINAL<=0.01) EEFINAL = 0.01; >> 7009 AFRAGMENT = AMOTHER - ADAUGHTER; >> 7010 ALEVDENS = 0.073*AMOTHER + 0.095*std::pow(AMOTHER,2.0/3.0); >> 7011 S4FINAL = ALEVDENS * EEFINAL; >> 7012 if(S4FINAL <= 0.0 || S4FINAL > 100000.){ >> 7013 std::cout<< "S4FINAL:" << S4FINAL << ALEVDENS << EEFINAL << idnint(AMOTHER) << idnint(AFRAGMENT) << std::endl; >> 7014 } >> 7015 THETA_MOTHER = 0.0111 * std::pow(AMOTHER,1.66667); >> 7016 THETA_ORBITAL = 0.0323 / std::pow(AMOTHER,2.) *std::pow(std::pow(AFRAGMENT,0.33333) + std::pow(ADAUGHTER,0.33333),2.) * AFRAGMENT*ADAUGHTER*(AFRAGMENT+ADAUGHTER); 8594 7017 8595 *SIGMA_LORBITAL = std::sqrt(std::sqrt(S4F << 7018 *LORBITAL = -1.* THETA_ORBITAL * (LMOTHER / THETA_MOTHER + std::sqrt(S4FINAL) /(ALEVDENS*LMOTHER)); 8596 7019 8597 return; << 7020 *SIGMA_LORBITAL = std::sqrt(std::sqrt(S4FINAL) * THETA_ORBITAL / ALEVDENS); >> 7021 >> 7022 return; 8598 } 7023 } 8599 7024 8600 // Random generator according to a distributi 7025 // Random generator according to a distribution similar to a 8601 // Maxwell distribution with quantum-mech. x- << 7026 // Maxwell distribution with quantum-mech. x-section for neutrons according to KHS 8602 // KHS << 8603 // Y = SQRT(X) * EXP(-X/T) (approximatio 7027 // Y = SQRT(X) * EXP(-X/T) (approximation:) 8604 G4double G4Abla::fvmaxhaz_neut(G4double x) << 7028 G4double G4Abla::fvmaxhaz_neut(G4double x){ 8605 { << 8606 7029 8607 return (2.0 * x * std::sqrt(std::log(G4Ab << 7030 return (2.0 * x * std::sqrt(std::log(G4AblaRandom::flat()) * std::log(G4AblaRandom::flat()))); 8608 } 7031 } 8609 7032 8610 void G4Abla::imf(G4double ACN, << 7033 void G4Abla::imf(G4double ACN,G4double ZCN,G4double TEMP,G4double EE,G4double *ZIMF,G4double *AIMF,G4double *BIMF,G4double *SBIMF,G4double *TIMF,G4double JPRF) 8611 G4double ZCN, << 7034 { 8612 G4double TEMP, << 7035 // input variables (compound nucleus) Acn, Zcn, Temp, EE 8613 G4double EE, << 7036 // output variable (IMF) Zimf,Aimf,Bimf,Sbimf,IRNDM 8614 G4double* ZIMF, << 7037 // 8615 G4double* AIMF, << 7038 // SBIMF = separation energy + coulomb barrier 8616 G4double* BIMF, << 7039 // 8617 G4double* SBIMF, << 7040 // SDW(Z) is the sum over all isotopes for a given Z of the decay widths 8618 G4double* TIMF, << 7041 // DW(Z,A) is the decay width of a certain nuclide 8619 G4double JPRF) << 7042 // 8620 { << 7043 // Last update: 8621 // input variables (compound nucleus) << 7044 // 28/10/13 - JLRS - from abrablav4 (AK) 8622 // output variable (IMF) Zimf,Aimf,Bi << 7045 // 13/11/16 - JLRS - Included this function in Abla++ 8623 // << 7046 8624 // SBIMF = separation energy + coulom << 7047 G4int IZIMFMAX=0; 8625 // << 7048 G4int iz=0,in=0,IZIMF=0,INMI=0,INMA=0,IZCN=0,INCN=0,INIMFMI=0,INIMFMA=0,ILIMMAX=0,INNMAX=0,INMIN=0,IAIMF=0,IZSTOP=3,IZMEM=0,IA=0,INMINMEM=0,INMAXMEM=0,IIA=0; 8626 // SDW(Z) is the sum over all isotope << 7049 G4double BS=0,BK=0,BC=0,BSHELL=0,DEFBET=0,DEFBETIMF=0,EROT=0,MAIMF=0,MAZ=0,MARES=0,AIMF_1,OMEGAP=0,fBIMF=0.0,BSIMF=0,A1PAR=0,A2PAR=0,SUM_A,EEDAUG; 8627 // DW(Z,A) is the decay width of a ce << 7050 G4double DENSCN=0,TEMPCN=0,ECOR=0,IINERT=0,EROTCN=0,WIDTH_IMF=0.0,WIDTH1=0,IMFARG=0,QR=0,QRCN=0,DENSIMF=0,fTIMF=0,fZIMF=0,fAIMF=0.0,NIMF=0,fSBIMF=0; 8628 // << 7051 G4double PI = 3.141592653589793238; 8629 // Last update: << 7052 G4double ZIMF_1=0.0; 8630 // 28/10/13 - JLRS - from abr << 7053 G4double SDWprevious=0,SUMDW_TOT=0,SUM_Z=0,X=0,SUMDW_N_TOT=0,XX=0; 8631 // 13/11/16 - JLRS - Included << 7054 G4double SDW[98]; 8632 << 7055 G4double DW[98][251]; 8633 G4int IZIMFMAX = 0; << 7056 G4double BBIMF[98][251]; 8634 G4int iz = 0, in = 0, IZIMF = 0, INMI = 0 << 7057 G4double SSBIMF[98][251]; 8635 INNMAX = 0, INMIN = 0, IAIMF = 0, I << 7058 G4int OPTSHPIMF=opt->optshpimf; 8636 G4double BS = 0, BK = 0, BC = 0, BSHELL = << 7059 8637 AIMF_1, OMEGAP = 0, fBIMF = 0.0, << 7060 // take the half of the CN and transform it in integer (floor it) 8638 G4double DENSCN = 0, TEMPCN = 0, ECOR = 0 << 7061 IZIMFMAX = idnint(ZCN / 2.0); 8639 QRCN = 0, DENSIMF = 0, fTIMF = 0 << 7062 8640 G4double PI = 3.141592653589793238; << 7063 if(IZIMFMAX<3){ 8641 G4double ZIMF_1 = 0.0; << 7064 std::cout << "CHARGE_IMF line 46" << std::endl; 8642 G4double SDWprevious = 0, SUMDW_TOT = 0, << 7065 std::cout << "Problem: IZIMFMAX < 3 " << std::endl; 8643 G4double SDW[98]; << 7066 std::cout << "ZCN,IZIMFMAX," << ZCN << "," << IZIMFMAX << std::endl; 8644 G4double DW[98][251]; << 7067 } 8645 G4double BBIMF[98][251]; << 7068 8646 G4double SSBIMF[98][251]; << 7069 iz = idnint(ZCN); 8647 G4int OPTSHPIMF = opt->optshpimf; << 7070 in = idnint(ACN) - iz; 8648 << 7071 BSHELL = ecld->ecgnz[in][iz]- ecld->vgsld[in][iz]; 8649 // Initialization << 7072 DEFBET = ecld->beta2[in][iz]; 8650 for (G4int ia = 0; ia < 98; ia++) << 8651 for (G4int ib = 0; ib < 251; ib++) << 8652 { << 8653 BBIMF[ia][ib] = 0.0; << 8654 SSBIMF[ia][ib] = 0.0; << 8655 } << 8656 << 8657 // take the half of the CN and transform << 8658 IZIMFMAX = idnint(ZCN / 2.0); << 8659 << 8660 if (IZIMFMAX < 3) << 8661 { << 8662 std::cout << "CHARGE_IMF line 46" << << 8663 std::cout << "Problem: IZIMFMAX < 3 " << 8664 std::cout << "ZCN,IZIMFMAX," << ZCN < << 8665 } << 8666 << 8667 iz = idnint(ZCN); << 8668 in = idnint(ACN) - iz; << 8669 BSHELL = ecld->ecgnz[in][iz] - ecld->vgsl << 8670 DEFBET = ecld->beta2[in][iz]; << 8671 << 8672 bsbkbc(ACN, ZCN, &BS, &BK, &BC); << 8673 << 8674 densniv(ACN, ZCN, EE, 0.0, &DENSCN, BSHEL << 8675 << 8676 IINERT = 0.4 * 931.49 * 1.16 * 1.16 * std << 8677 EROTCN = JPRF * JPRF * 197.328 * 197.328 << 8678 // << 8679 for (IZIMF = 3; IZIMF <= IZIMFMAX; IZIMF+ << 8680 { << 8681 << 8682 SDW[IZIMF] = 0.0; << 8683 ZIMF_1 = 1.0 * IZIMF; << 8684 << 8685 // *** Find the limits that both << 8686 << 8687 isostab_lim(IZIMF, &INIMFMI, << 8688 &INIMFMA); // Bound isoto << 8689 // Idea - very proton-rich nuclei can << 8690 // before decaying: << 8691 INIMFMI = max(1, INIMFMI - 2); << 8692 << 8693 IZCN = idnint(ZCN); // Z of C << 8694 INCN = idnint(ACN) - IZCN; // N of C << 8695 << 8696 isostab_lim(IZCN - IZIMF, << 8697 &INMI, << 8698 &INMA); // Daughter nucle << 8699 // limits of boun << 8700 INMI = max(1, INMI - 2); << 8701 INMIN = max(INIMFMI, INCN - INMA); / << 8702 INNMAX = min(INIMFMA, INCN - INMI); / << 8703 << 8704 ILIMMAX = max(INNMAX, INMIN); // In o << 8705 // << 8706 << 8707 for (G4int INIMF = INMIN; INIMF <= IL << 8708 { // Range of possible IMF isotopes << 8709 IAIMF = IZIMF + INIMF; << 8710 DW[IZIMF][IAIMF] = 0.0; << 8711 AIMF_1 = 1.0 * (IAIMF); << 8712 << 8713 // Q-values << 8714 mglms(ACN - AIMF_1, ZCN - ZIMF_1, << 8715 mglms(AIMF_1, ZIMF_1, OPTSHPIMF, << 8716 mglms(ACN, ZCN, OPTSHPIMF, &MAZ); << 8717 << 8718 // Barrier << 8719 if (ACN <= AIMF_1) << 8720 { << 8721 SSBIMF[IZIMF][IAIMF] = 1.e37; << 8722 } << 8723 else << 8724 { << 8725 barrs(idnint(ZCN - ZIMF_1), i << 8726 SSBIMF[IZIMF][IAIMF] = MAIMF << 8727 BBIMF[IZIMF][IAIMF] = fBIMF; << 8728 } << 8729 << 8730 // ***** Width ***************** << 8731 DEFBETIMF = ecld->beta2[idnint(AI << 8732 ecld->beta2[idnint(AC << 8733 << 8734 IINERT = 0.40 * 931.490 * 1.160 * << 8735 (std::pow(AIMF_1, 5. << 8736 931.490 * 1.160 * 1.160 << 8737 (std::pow(AIMF_1, 1. << 8738 (std::pow(AIMF_1, 1. << 8739 << 8740 EROT = JPRF * JPRF * 197.328 * 19 << 8741 << 8742 // IF(IEROT.EQ.1) EROT = 0.D << 8743 if (EE < (SSBIMF[IZIMF][IAIMF] + << 8744 { << 8745 WIDTH_IMF = 0.0; << 8746 // PRINT*,IDNINT(ACN << 8747 } << 8748 else << 8749 { << 8750 // here the temperat << 8751 // Increase of the level dens << 8752 // comment in ABLA << 8753 // BSIMF = ((ACN-AIM << 8754 // & ACN** << 8755 BSIMF = BS; << 8756 densniv(ACN, << 8757 ZCN, << 8758 EE, << 8759 SSBIMF[IZIMF][IAIMF], << 8760 &DENSIMF, << 8761 0.0, << 8762 BSIMF, << 8763 1.0, << 8764 &fTIMF, << 8765 0, << 8766 0, << 8767 DEFBETIMF, << 8768 &ECOR, << 8769 JPRF, << 8770 2, << 8771 &QR); << 8772 IMFARG = (SSBIMF[IZIMF][IAIMF << 8773 if (IMFARG > 200.0) << 8774 IMFARG = 200.0; << 8775 << 8776 WIDTH1 = width(ACN, ZCN, AIMF << 8777 << 8778 WIDTH_IMF = WIDTH1 * std::exp << 8779 << 8780 if (WIDTH_IMF <= 0.0) << 8781 { << 8782 std::cout << "GAMMA_IMF=0 << 8783 std::cout << "ACN,ZCN,AIM << 8784 << "," << idnin << 8785 std::cout << "SSBIMF,TIMF << 8786 std::cout << "DEXP(-IMFAR << 8787 std::cout << "WIDTH1 =" < << 8788 } << 8789 } // if ee << 8790 << 8791 SDW[IZIMF] = SDW[IZIMF] + WIDTH_I << 8792 7073 8793 DW[IZIMF][IAIMF] = WIDTH_IMF; << 7074 bsbkbc(ACN,ZCN,&BS,&BK,&BC); 8794 7075 8795 } // for INIMF << 7076 densniv(ACN,ZCN,EE,0.0,&DENSCN,BSHELL,BS,BK,&TEMPCN,0,0,DEFBET,&ECOR,JPRF,0,&QRCN); 8796 } // for IZIMF << 8797 // End loop to calculate the decay << 8798 // ******************************** << 8799 7077 8800 // Loop to calculate where the gamma << 7078 IINERT = 0.4 * 931.49 * 1.16*1.16 * std::pow(ACN,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*PI))*DEFBET); 8801 SDWprevious = 1.e20; << 7079 EROTCN = JPRF * JPRF * 197.328 * 197.328 /(2. * IINERT); 8802 IZSTOP = 0; << 7080 // >> 7081 for(IZIMF=3;IZIMF<=IZIMFMAX;IZIMF++){ >> 7082 >> 7083 SDW[IZIMF] = 0.0; >> 7084 ZIMF_1 = 1.0*IZIMF; >> 7085 >> 7086 // *** Find the limits that both IMF and partner are bound : >> 7087 >> 7088 isostab_lim(IZIMF,&INIMFMI,&INIMFMA);// Bound isotopes for IZIMF from INMIN to INIMFMA >> 7089 // Idea - very proton-rich nuclei can live long enough to evaporate IMF before decaying: >> 7090 INIMFMI = max(1,INIMFMI-2); >> 7091 >> 7092 IZCN = idnint(ZCN); // Z of CN >> 7093 INCN = idnint(ACN) - IZCN; // N of CN >> 7094 >> 7095 isostab_lim(IZCN-IZIMF,&INMI,&INMA); // Daughter nucleus after IMF emission, >> 7096 // limits of bound isotopes >> 7097 INMI = max(1,INMI-2); >> 7098 INMIN = max(INIMFMI,INCN-INMA); // Both IMF and daughter must be bound >> 7099 INNMAX = min(INIMFMA,INCN-INMI); // " >> 7100 >> 7101 ILIMMAX = max(INNMAX,INMIN); // In order to keep the variables below >> 7102 // *** >> 7103 >> 7104 for(G4int INIMF=INMIN;INIMF<=ILIMMAX;INIMF++){ // Range of possible IMF isotopes >> 7105 IAIMF = IZIMF + INIMF; >> 7106 DW[IZIMF][IAIMF] = 0.0; >> 7107 AIMF_1 = 1.0*(IAIMF); >> 7108 >> 7109 // Q-values >> 7110 mglms(ACN-AIMF_1,ZCN-ZIMF_1,OPTSHPIMF,&MARES); >> 7111 mglms(AIMF_1,ZIMF_1,OPTSHPIMF,&MAIMF); >> 7112 mglms(ACN,ZCN,OPTSHPIMF,&MAZ); >> 7113 >> 7114 // Barrier >> 7115 if(ACN<=AIMF_1){ >> 7116 SSBIMF[IZIMF][IAIMF] = 1.e37; >> 7117 }else{ >> 7118 barrs(idnint(ZCN-ZIMF_1),idnint(ACN-AIMF_1),idnint(ZIMF_1),idnint(AIMF_1),&fBIMF,&OMEGAP); >> 7119 SSBIMF[IZIMF][IAIMF] = MAIMF + MARES - MAZ + fBIMF; >> 7120 BBIMF[IZIMF][IAIMF] = fBIMF; >> 7121 } >> 7122 >> 7123 // ***** Width ********************* >> 7124 DEFBETIMF = ecld->beta2[idnint(AIMF_1-ZIMF_1)][idnint(ZIMF_1)]+ecld->beta2[idnint(ACN-AIMF_1-ZCN+ZIMF_1)][idnint(ZCN-ZIMF_1)]; >> 7125 >> 7126 IINERT = 0.40 * 931.490 * 1.160*1.160 * std::pow(ACN,5.0/3.0)*(std::pow(AIMF_1,5.0/3.0) + std::pow(ACN - AIMF_1,5.0/3.0)) + 931.490 * 1.160*1.160 * AIMF_1 * (ACN-AIMF_1) / ACN *(std::pow(AIMF_1,1.0/3.0) + std::pow(ACN - AIMF_1,1.0/3.0))*(std::pow(AIMF_1,1.0/3.0) + std::pow(ACN - AIMF_1,1.0/3.0)); >> 7127 >> 7128 EROT = JPRF * JPRF * 197.328 * 197.328 /(2.0 * IINERT); >> 7129 >> 7130 // IF(IEROT.EQ.1) EROT = 0.D0 >> 7131 if (EE<(SSBIMF[IZIMF][IAIMF]+EROT) || DENSCN<=0.0){ >> 7132 WIDTH_IMF = 0.0; >> 7133 // PRINT*,IDNINT(ACN),IDNINT(ZCN),IZIMF,IAIMF >> 7134 }else{ >> 7135 // here the temperature at "saddle point" is used >> 7136 // Increase of the level densitiy at the barrier due to deformation; see comment in ABLA >> 7137 // BSIMF = ((ACN-AIMF_1)**(2.D0/3.D0) + AIMF_1**(2.D0/3.D0))/ >> 7138 // & ACN**(2.D0/3.D0) >> 7139 BSIMF = BS; >> 7140 densniv(ACN,ZCN,EE,SSBIMF[IZIMF][IAIMF],&DENSIMF,0.0,BSIMF,1.0,&fTIMF,0,0,DEFBETIMF,&ECOR,JPRF,2,&QR); >> 7141 IMFARG = (SSBIMF[IZIMF][IAIMF]+EROTCN-EROT)/fTIMF; >> 7142 if(IMFARG>200.0) IMFARG = 200.0; >> 7143 >> 7144 WIDTH1 = width(ACN,ZCN,AIMF_1,ZIMF_1,fTIMF,fBIMF,SSBIMF[IZIMF][IAIMF],EE-EROT); >> 7145 >> 7146 WIDTH_IMF = WIDTH1 * std::exp(-IMFARG) * QR / QRCN; >> 7147 >> 7148 if(WIDTH_IMF<=0.0){ >> 7149 std::cout << "GAMMA_IMF=0 -> LOOK IN GAMMA_IMF CALCULATIONS!" << std::endl; >> 7150 std::cout << "ACN,ZCN,AIMF,ZIMF:" << idnint(ACN) << "," << idnint(ZCN) << "," << idnint(AIMF_1) << "," << idnint(ZIMF_1) << std::endl; >> 7151 std::cout << "SSBIMF,TIMF :" << SSBIMF[IZIMF][IAIMF] << "," << fTIMF << std::endl; >> 7152 std::cout << "DEXP(-IMFARG) = " << std::exp(-IMFARG) << std::endl; >> 7153 std::cout << "WIDTH1 =" << WIDTH1 << std::endl; >> 7154 } >> 7155 }// if ee >> 7156 >> 7157 SDW[IZIMF] = SDW[IZIMF] + WIDTH_IMF; >> 7158 >> 7159 DW[IZIMF][IAIMF] = WIDTH_IMF; >> 7160 >> 7161 }// for INIMF >> 7162 }// for IZIMF >> 7163 // End loop to calculate the decay widths ************************ >> 7164 // *************************************************************** >> 7165 >> 7166 // Loop to calculate where the gamma of IMF has the minimum ****** >> 7167 SDWprevious = 1.e20; >> 7168 IZSTOP = 0; 8803 7169 8804 for (G4int III_ZIMF = 3; III_ZIMF <= IZIM << 7170 for(G4int III_ZIMF=3;III_ZIMF<=IZIMFMAX;III_ZIMF++){ 8805 { << 8806 7171 8807 if (SDW[III_ZIMF] == 0.0) << 7172 if(SDW[III_ZIMF]==0.0){ 8808 { << 7173 IZSTOP = III_ZIMF - 1; 8809 IZSTOP = III_ZIMF - 1; << 8810 goto imfs30; 7174 goto imfs30; 8811 } 7175 } 8812 7176 8813 if (SDW[III_ZIMF] > SDWprevious) << 7177 if(SDW[III_ZIMF]>SDWprevious){ 8814 { << 8815 IZSTOP = III_ZIMF - 1; 7178 IZSTOP = III_ZIMF - 1; 8816 goto imfs30; 7179 goto imfs30; 8817 } << 7180 }else{ 8818 else << 8819 { << 8820 SDWprevious = SDW[III_ZIMF]; 7181 SDWprevious = SDW[III_ZIMF]; 8821 } 7182 } 8822 7183 8823 } // for III_ZIMF << 7184 }// for III_ZIMF 8824 << 8825 imfs30: << 8826 << 8827 if (IZSTOP <= 6) << 8828 { << 8829 IZSTOP = IZIMFMAX; << 8830 goto imfs15; << 8831 } << 8832 7185 8833 A1PAR = std::log10(SDW[IZSTOP] / SDW[IZST << 7186 imfs30: 8834 A2PAR = std::log10(SDW[IZSTOP]) - A1PAR * << 8835 if (A2PAR > 0.) << 8836 A2PAR = -1. * A2PAR; << 8837 if (A1PAR > 0.) << 8838 A1PAR = -1. * A1PAR; << 8839 7187 8840 // End loop to calculate where gamma << 7188 if(IZSTOP<=6){ >> 7189 IZSTOP = IZIMFMAX; >> 7190 goto imfs15; >> 7191 } 8841 7192 8842 for (G4int II_ZIMF = IZSTOP; II_ZIMF <= I << 7193 A1PAR = std::log10(SDW[IZSTOP]/SDW[IZSTOP-2])/std::log10((1.0*IZSTOP)/(1.0*IZSTOP-2.0)); 8843 { << 7194 A2PAR = std::log10(SDW[IZSTOP]) - A1PAR * std::log10(1.0*(IZSTOP)); 8844 SDW[II_ZIMF] = std::pow(10.0, A2PAR) << 7195 if(A2PAR>0.)A2PAR=-1.*A2PAR; 8845 if (SDW[II_ZIMF] < 0.0) << 7196 if(A1PAR>0.)A1PAR=-1.*A1PAR; 8846 SDW[II_ZIMF] = 0.0; << 7197 8847 } << 7198 // End loop to calculate where gamma of IMF has the minimum >> 7199 >> 7200 for(G4int II_ZIMF = IZSTOP;II_ZIMF<=IZIMFMAX;II_ZIMF++){ >> 7201 SDW[II_ZIMF] = std::pow(10.0,A2PAR) * std::pow(1.0*II_ZIMF,A1PAR); // Power-low >> 7202 if(SDW[II_ZIMF]<0.0) SDW[II_ZIMF] = 0.0; >> 7203 } 8848 7204 8849 imfs15: << 7205 imfs15: 8850 7206 8851 // Sum of all decay widths (for normal << 7207 // Sum of all decay widths (for normalisation) 8852 SUMDW_TOT = 0.0; << 7208 SUMDW_TOT = 0.0; 8853 for (G4int I_ZIMF = 3; I_ZIMF <= IZIMFMAX << 7209 for(G4int I_ZIMF = 3;I_ZIMF<=IZIMFMAX;I_ZIMF++){ 8854 { << 8855 SUMDW_TOT = SUMDW_TOT + SDW[I_ZIMF]; 7210 SUMDW_TOT = SUMDW_TOT + SDW[I_ZIMF]; 8856 } << 7211 } 8857 if (SUMDW_TOT <= 0.0) << 7212 if(SUMDW_TOT<=0.0){ 8858 { << 8859 std::cout << "*********************" 7213 std::cout << "*********************" << std::endl; 8860 std::cout << "IMF function" << std::e << 7214 std::cout << "IMF function" << std::endl; 8861 std::cout << "SUM of decay widths = " << 7215 std::cout << "SUM of decay widths = " << SUMDW_TOT << " IZIMFMAX = " << IZIMFMAX << std::endl; 8862 std::cout << "IZSTOP = " << IZSTOP << << 7216 std::cout << "IZSTOP = " << IZSTOP << std::endl; 8863 } << 7217 } 8864 << 7218 8865 // End of Sum of all decay widths (for << 7219 // End of Sum of all decay widths (for normalisation) 8866 << 7220 8867 // Loop to sample the nuclide that is << 7221 // Loop to sample the nuclide that is emitted ******************** 8868 // ------- sample Z ----------- << 7222 // ------- sample Z ----------- 8869 imfs10: << 7223 imfs10: 8870 X = haz(1) * SUMDW_TOT; << 7224 X = haz(1)*SUMDW_TOT; 8871 << 7225 8872 // IF(X.EQ.0.D0) PRINT*,'WARNING: X= << 7226 // IF(X.EQ.0.D0) PRINT*,'WARNING: X=0',XRNDM,SUMDW_TOT 8873 SUM_Z = 0.0; << 7227 SUM_Z = 0.0; 8874 fZIMF = 0.0; << 7228 fZIMF = 0.0; 8875 IZMEM = 0; << 7229 IZMEM = 0; 8876 << 7230 8877 for (G4int IZ = 3; IZ <= IZIMFMAX; IZ++) << 7231 for(G4int IZ = 3;IZ<=IZIMFMAX;IZ++){ 8878 { << 7232 SUM_Z = SUM_Z + SDW[IZ]; 8879 SUM_Z = SUM_Z + SDW[IZ]; << 7233 if(X<SUM_Z){ 8880 if (X < SUM_Z) << 7234 fZIMF = 1.0*IZ; 8881 { << 8882 fZIMF = 1.0 * IZ; << 8883 IZMEM = IZ; 7235 IZMEM = IZ; 8884 goto imfs20; 7236 goto imfs20; 8885 } << 7237 } 8886 } // for IZ << 7238 }//for IZ 8887 << 8888 imfs20: << 8889 7239 8890 // ------- sample N ----------- << 7240 imfs20: 8891 7241 8892 isostab_lim(IZMEM, &INMINMEM, &INMAXMEM); << 7242 // ------- sample N ----------- 8893 INMINMEM = max(1, INMINMEM - 2); << 8894 7243 8895 isostab_lim(IZCN - IZMEM, &INMI, << 7244 isostab_lim(IZMEM,&INMINMEM,&INMAXMEM); 8896 &INMA); // Daughter nucleus a << 7245 INMINMEM = max(1,INMINMEM-2); 8897 INMI = max(1, INMI - 2); << 7246 8898 // limits of bound isotopes << 7247 isostab_lim(IZCN-IZMEM,&INMI,&INMA); // Daughter nucleus after IMF emission, 8899 << 7248 INMI = max(1,INMI-2); 8900 INMINMEM = max(INMINMEM, INCN - INMA); // << 7249 // limits of bound isotopes 8901 INMAXMEM = min(INMAXMEM, INCN - INMI); // << 7250 8902 << 7251 INMINMEM = max(INMINMEM,INCN-INMA); // Both IMF and daughter must be bound 8903 INMAXMEM = max(INMINMEM, INMAXMEM); << 7252 INMAXMEM = min(INMAXMEM,INCN-INMI); // " 8904 << 7253 8905 IA = 0; << 7254 INMAXMEM = max(INMINMEM,INMAXMEM); 8906 SUMDW_N_TOT = 0.0; << 7255 8907 for (G4int IIINIMF = INMINMEM; IIINIMF <= << 7256 IA = 0; 8908 { << 7257 SUMDW_N_TOT = 0.0; 8909 IA = IZMEM + IIINIMF; << 7258 for(G4int IIINIMF = INMINMEM;IIINIMF<=INMAXMEM;IIINIMF++){ 8910 if (IZMEM >= 3 && IZMEM <= 95 && IA > << 7259 IA = IZMEM + IIINIMF; 8911 { << 7260 if(IZMEM>=3&&IZMEM<=95&&IA>=4&&IA<=250){ 8912 SUMDW_N_TOT = SUMDW_N_TOT + DW[IZ << 7261 SUMDW_N_TOT = SUMDW_N_TOT + DW[IZMEM][IA]; 8913 } << 7262 }else{ 8914 else << 7263 std::cout << "CHARGE IMF OUT OF RANGE" << IZMEM << ", " << IA << ", " << idnint(ACN) << ", " << idnint(ZCN) << ", " << TEMP << std::endl; 8915 { << 7264 } 8916 std::cout << "CHARGE IMF OUT OF R << 7265 } 8917 << ", " << TEMP << std: << 8918 } << 8919 } << 8920 7266 8921 XX = haz(1) * SUMDW_N_TOT; << 7267 XX = haz(1)*SUMDW_N_TOT; 8922 IIA = 0; << 7268 IIA = 0; 8923 SUM_A = 0.0; << 7269 SUM_A = 0.0; 8924 for (G4int IINIMF = INMINMEM; IINIMF <= I << 7270 for(G4int IINIMF = INMINMEM;IINIMF<=INMAXMEM; IINIMF++){ 8925 { << 8926 IIA = IZMEM + IINIMF; 7271 IIA = IZMEM + IINIMF; 8927 // SUM_A = SUM_A + DW[IZ][IIA]; << 7272 // SUM_A = SUM_A + DW[IZ][IIA]; //FIXME 8928 SUM_A = SUM_A + DW[IZMEM][IIA]; 7273 SUM_A = SUM_A + DW[IZMEM][IIA]; 8929 if (XX < SUM_A) << 7274 if(XX<SUM_A){ 8930 { << 7275 fAIMF = G4double(IIA); 8931 fAIMF = G4double(IIA); << 7276 goto imfs25; 8932 goto imfs25; << 8933 } 7277 } 8934 } << 7278 } 8935 7279 8936 imfs25: << 7280 imfs25: 8937 // CHECK POINT 1 << 7281 // CHECK POINT 1 8938 NIMF = fAIMF - fZIMF; << 7282 NIMF = fAIMF - fZIMF; 8939 << 7283 8940 if ((ACN - ZCN - NIMF) <= 0.0 || (ZCN - f << 7284 if((ACN-ZCN-NIMF)<=0.0 || (ZCN-fZIMF) <= 0.0){ 8941 { << 7285 std::cout << "IMF Partner unstable:" << std::endl; 8942 std::cout << "IMF Partner unstable:" << 7286 std::cout << "System: Acn,Zcn,NCN:" << std::endl; 8943 std::cout << "System: Acn,Zcn,NCN:" < << 7287 std::cout << idnint(ACN) << ", " << idnint(ZCN) << ", " << idnint(ACN-ZCN) << std::endl; 8944 std::cout << idnint(ACN) << ", " << i << 7288 std::cout << "IMF: A,Z,N:" << std::endl; 8945 std::cout << "IMF: A,Z,N:" << std::en << 7289 std::cout << idnint(fAIMF) << ", " << idnint(fZIMF) << ", " << idnint(fAIMF-fZIMF) << std::endl; 8946 std::cout << idnint(fAIMF) << ", " << << 7290 std::cout << "Partner: A,Z,N:" << std::endl; 8947 std::cout << "Partner: A,Z,N:" << std << 7291 std::cout << idnint(ACN-fAIMF) << ", " << idnint(ZCN-fZIMF) << ", " << idnint(ACN-ZCN-NIMF) << std::endl; 8948 std::cout << idnint(ACN - fAIMF) << " << 8949 << std::endl; << 8950 std::cout << "----nmin,nmax" << INMIN 7292 std::cout << "----nmin,nmax" << INMINMEM << ", " << INMAXMEM << std::endl; 8951 std::cout << "----- warning: Zimf=" < 7293 std::cout << "----- warning: Zimf=" << fZIMF << " Aimf=" << fAIMF << std::endl; 8952 std::cout << "----- look in subroutin 7294 std::cout << "----- look in subroutine IMF" << std::endl; 8953 std::cout << "ACN,ZCN,ZIMF,AIMF,temp, << 7295 std::cout << "ACN,ZCN,ZIMF,AIMF,temp,EE,JPRF::" << ACN << ", " << ZCN << ", " << fZIMF << ", " << fAIMF << ", " << TEMP << ", " << EE << ", " << JPRF << std::endl; 8954 << TEMP << ", " << EE << ", << 7296 std::cout << "-IZSTOP,IZIMFMAX:" << IZSTOP << ", " << IZIMFMAX << std::endl; 8955 std::cout << "-IZSTOP,IZIMFMAX:" << I << 7297 std::cout << "----X,SUM_Z,SUMDW_TOT:" << X << ", " << SUM_Z << ", " << SUMDW_TOT << std::endl; 8956 std::cout << "----X,SUM_Z,SUMDW_TOT:" << 7298 //for(int III_ZIMF=3;III_ZIMF<=IZIMFMAX;III_ZIMF++) 8957 // for(int III_ZIMF=3;III_ZIMF<=IZIMF << 7299 // std::cout << "-**Z,SDW:" << III_ZIMF << ", " << SDW[III_ZIMF] << std::endl; 8958 // std::cout << "-**Z,SDW:" << II << 8959 // std::endl; << 8960 7300 8961 goto imfs10; << 7301 goto imfs10; 8962 } << 7302 } 8963 if (fZIMF >= ZCN || fAIMF >= ACN || fZIMF << 7303 if(fZIMF>=ZCN || fAIMF>=ACN || fZIMF<=2 || fAIMF<=3){ 8964 { << 8965 std::cout << "----nmin,nmax" << INMIN 7304 std::cout << "----nmin,nmax" << INMINMEM << ", " << INMAXMEM << std::endl; 8966 std::cout << "----- warning: Zimf=" < 7305 std::cout << "----- warning: Zimf=" << fZIMF << " Aimf=" << fAIMF << std::endl; 8967 std::cout << "----- look in subroutin 7306 std::cout << "----- look in subroutine IMF" << std::endl; 8968 std::cout << "ACN,ZCN,ZIMF,AIMF,temp, << 7307 std::cout << "ACN,ZCN,ZIMF,AIMF,temp,EE,JPRF:" << ACN << ", " << ZCN << ", " << fZIMF << ", " << fAIMF << ", " << TEMP << ", " << EE << ", " << JPRF << std::endl; 8969 << TEMP << ", " << EE << ", << 7308 std::cout << "-IZSTOP,IZIMFMAX:" << IZSTOP << ", " << IZIMFMAX << std::endl; 8970 std::cout << "-IZSTOP,IZIMFMAX:" << I << 7309 std::cout << "----X,SUM_Z,SUMDW_TOT:" << X << ", " << SUM_Z << ", " << SUMDW_TOT << std::endl; 8971 std::cout << "----X,SUM_Z,SUMDW_TOT:" << 7310 for(int III_ZIMF=3;III_ZIMF<=IZIMFMAX;III_ZIMF++) 8972 for (int III_ZIMF = 3; III_ZIMF <= IZ << 7311 std::cout << "-**Z,SDW:" << III_ZIMF << ", " << SDW[III_ZIMF] << std::endl; 8973 std::cout << "-**Z,SDW:" << III_Z << 8974 7312 8975 fZIMF = 3.0; // provisorisch AK << 7313 fZIMF = 3.0; // provisorisch AK 8976 fAIMF = 4.0; 7314 fAIMF = 4.0; 8977 } << 7315 } >> 7316 >> 7317 // Characteristics of selected IMF (AIMF, ZIMF, BIMF, SBIMF, TIMF) >> 7318 fSBIMF = SSBIMF[idnint(fZIMF)][idnint(fAIMF)]; >> 7319 fBIMF = BBIMF[idnint(fZIMF)][idnint(fAIMF)]; >> 7320 >> 7321 if((ZCN-fZIMF)<=0.0)std::cout << "CHARGE_IMF ZIMF > ZCN" << std::endl; >> 7322 if((ACN-fAIMF)<=0.0)std::cout << "CHARGE_IMF AIMF > ACN" << std::endl; >> 7323 >> 7324 BSHELL = ecld->ecgnz[idnint(ACN-ZCN-NIMF)][idnint(ZCN-fZIMF)] -ecld->vgsld[idnint(ACN-ZCN-NIMF)][idnint(ZCN-fZIMF)]; >> 7325 >> 7326 DEFBET = ecld->beta2[idnint(ACN-ZCN-NIMF)][idnint(ZCN-fZIMF)]; >> 7327 EEDAUG = (EE - fSBIMF) * (ACN - fAIMF) / ACN; >> 7328 bsbkbc(ACN - fAIMF,ZCN-fZIMF,&BS,&BK,&BC); >> 7329 densniv(ACN-fAIMF,ZCN-fZIMF,EEDAUG,0.0,&DENSIMF,BSHELL,BS,BK,&fTIMF,0,0,DEFBET,&ECOR,0.0,0,&QR); 8978 7330 8979 // Characteristics of selected IMF (AIMF, << 7331 if(fSBIMF>EE){ 8980 fSBIMF = SSBIMF[idnint(fZIMF)][idnint(fAI << 7332 std::cout << "----- warning: EE=" << EE << "," << " S+Bimf=" << fSBIMF << std::endl; 8981 fBIMF = BBIMF[idnint(fZIMF)][idnint(fAIMF << 8982 << 8983 if ((ZCN - fZIMF) <= 0.0) << 8984 std::cout << "CHARGE_IMF ZIMF > ZCN" << 8985 if ((ACN - fAIMF) <= 0.0) << 8986 std::cout << "CHARGE_IMF AIMF > ACN" << 8987 << 8988 BSHELL = ecld->ecgnz[idnint(ACN - ZCN - N << 8989 ecld->vgsld[idnint(ACN - ZCN - N << 8990 << 8991 DEFBET = ecld->beta2[idnint(ACN - ZCN - N << 8992 EEDAUG = (EE - fSBIMF) * (ACN - fAIMF) / << 8993 bsbkbc(ACN - fAIMF, ZCN - fZIMF, &BS, &BK << 8994 densniv(ACN - fAIMF, ZCN - fZIMF, EEDAUG, << 8995 << 8996 if (fSBIMF > EE) << 8997 { << 8998 std::cout << "----- warning: EE=" << << 8999 << " S+Bimf=" << fSBIMF << << 9000 std::cout << "----- look in subroutin 7333 std::cout << "----- look in subroutine IMF" << std::endl; 9001 std::cout << "IMF will be resampled" 7334 std::cout << "IMF will be resampled" << std::endl; 9002 goto imfs10; << 7335 goto imfs10; 9003 } << 7336 } 9004 (*ZIMF) = fZIMF; << 7337 (*ZIMF) = fZIMF; 9005 (*AIMF) = fAIMF; << 7338 (*AIMF) = fAIMF; 9006 (*SBIMF) = fSBIMF; << 7339 (*SBIMF) = fSBIMF; 9007 (*BIMF) = fBIMF; << 7340 (*BIMF) = fBIMF; 9008 (*TIMF) = fTIMF; << 7341 (*TIMF) = fTIMF; 9009 return; << 7342 return; 9010 } << 7343 } 9011 << 7344 9012 void G4Abla::isostab_lim(G4int z, G4int* nmin << 7345 void G4Abla::isostab_lim(G4int z, G4int *nmin, G4int *nmax) 9013 { << 7346 { 9014 << 7347 9015 G4int VISOSTAB[191][2] = { << 7348 G4int VISOSTAB[191][2]={ 9016 { 0, 7 }, { 1, 8 }, { 1, 9 }, << 7349 {0 , 7 }, 9017 { 6, 22 }, { 6, 28 }, { 7, 28 } << 7350 {1 , 8 }, 9018 { 11, 38 }, { 10, 42 }, { 13, 50 << 7351 {1 , 9 }, 9019 { 19, 60 }, { 19, 62 }, { 21, 64 << 7352 {2 , 12 }, 9020 { 27, 78 }, { 29, 82 }, { 33, 82 << 7353 {2 , 14 }, 9021 { 40, 92 }, { 38, 96 }, { 42, 102 << 7354 {2 , 16 }, 9022 { 49, 116 }, { 46, 118 }, { 52, 120 << 7355 {3 , 18 }, 9023 { 60, 126 }, { 58, 130 }, { 62, 132 << 7356 {4 , 22 }, 9024 { 70, 148 }, { 70, 152 }, { 73, 152 << 7357 {6 , 22 }, 9025 { 82, 166 }, { 80, 166 }, { 85, 168 << 7358 {6 , 28 }, 9026 { 96, 184 }, { 95, 184 }, { 99, 184 << 7359 {7 , 28 }, 9027 { 115, 204 }, { 110, 206 }, { 119, 21 << 7360 {7 , 30 }, 9028 }; << 7361 {8 , 28 }, >> 7362 {8 , 36 }, >> 7363 {10 , 38 }, >> 7364 {10 , 40 }, >> 7365 {11 , 38 }, >> 7366 {10 , 42 }, >> 7367 {13 , 50 }, >> 7368 {14 , 50 }, >> 7369 {15 , 52 }, >> 7370 {16 , 52 }, >> 7371 {17 , 54 }, >> 7372 {18 , 54 }, >> 7373 {19 , 60 }, >> 7374 {19 , 62 }, >> 7375 {21 , 64 }, >> 7376 {20 , 66 }, >> 7377 {23 , 66 }, >> 7378 {24 , 70 }, >> 7379 {25 , 70 }, >> 7380 {26 , 74 }, >> 7381 {27 , 78 }, >> 7382 {29 , 82 }, >> 7383 {33 , 82 }, >> 7384 {31 , 82 }, >> 7385 {35 , 82 }, >> 7386 {34 , 84 }, >> 7387 {40 , 84 }, >> 7388 {36 , 86 }, >> 7389 {40 , 92 }, >> 7390 {38 , 96 }, >> 7391 {42 , 102 }, >> 7392 {42 , 102 }, >> 7393 {44 , 102 }, >> 7394 {42 , 106 }, >> 7395 {47 , 112 }, >> 7396 {44 , 114 }, >> 7397 {49 , 116 }, >> 7398 {46 , 118 }, >> 7399 {52 , 120 }, >> 7400 {52 , 124 }, >> 7401 {55 , 126 }, >> 7402 {54 , 126 }, >> 7403 {57 , 126 }, >> 7404 {57 , 126 }, >> 7405 {60 , 126 }, >> 7406 {58 , 130 }, >> 7407 { 62 , 132 }, >> 7408 { 60 , 140 }, >> 7409 { 67 , 138 }, >> 7410 { 64 , 142 }, >> 7411 { 67 , 144 }, >> 7412 { 68 , 146 }, >> 7413 { 70 , 148 }, >> 7414 { 70 , 152 }, >> 7415 { 73 , 152 }, >> 7416 { 72 , 154 }, >> 7417 { 75 , 156 }, >> 7418 { 77 , 162 }, >> 7419 { 79 , 164 }, >> 7420 { 78 , 164 }, >> 7421 { 82 , 166 }, >> 7422 { 80 , 166 }, >> 7423 { 85 , 168 }, >> 7424 { 83 , 176 }, >> 7425 { 87 , 178 }, >> 7426 { 88 , 178 }, >> 7427 { 91 , 182 }, >> 7428 { 90 , 184 }, >> 7429 { 96 , 184 }, >> 7430 { 95 , 184 }, >> 7431 { 99 , 184 }, >> 7432 { 98 , 184 }, >> 7433 { 105 , 194 }, >> 7434 { 102 , 194 }, >> 7435 { 108 , 196 }, >> 7436 { 106 , 198 }, >> 7437 { 115 , 204 }, >> 7438 { 110 , 206 }, >> 7439 { 119 , 210 }, >> 7440 { 114 , 210 }, >> 7441 { 124 , 210 }, >> 7442 { 117 , 212 }, >> 7443 { 130 , 212 } >> 7444 }; 9029 7445 9030 if (z < 0) << 7446 if (z<0){ 9031 { << 9032 *nmin = 0; 7447 *nmin = 0; 9033 *nmax = 0; 7448 *nmax = 0; 9034 } << 7449 }else{ 9035 else << 7450 if(z==0){ 9036 { << 7451 *nmin = 1; 9037 if (z == 0) << 7452 *nmax = 1; 9038 { << 7453 // AK (Dez2010) - Just to avoid numerical problems 9039 *nmin = 1; << 7454 }else{ 9040 *nmax = 1; << 7455 if(z>95){ 9041 // AK (Dez2010) - Just to avoid n << 7456 *nmin = 130; 9042 } << 7457 *nmax = 200; 9043 else << 7458 }else{ 9044 { << 7459 *nmin = VISOSTAB[z-1][0]; 9045 if (z > 95) << 7460 *nmax = VISOSTAB[z-1][1]; 9046 { << 7461 } 9047 *nmin = 130; << 9048 *nmax = 200; << 9049 } << 9050 else << 9051 { << 9052 *nmin = VISOSTAB[z - 1][0]; << 9053 *nmax = VISOSTAB[z - 1][1]; << 9054 } << 9055 } 7462 } 9056 } << 7463 } 9057 7464 9058 return; << 7465 return; 9059 } 7466 } 9060 7467 9061 void G4Abla::evap_postsaddle(G4double A, << 9062 G4double Z, << 9063 G4double EXC, << 9064 G4double* E_scis << 9065 G4double* A_scis << 9066 G4double* Z_scis << 9067 G4double& vx_eva << 9068 G4double& vy_eva << 9069 G4double& vz_eva << 9070 G4int* NbLam0_pa << 9071 { << 9072 << 9073 // AK 2006 - Now in case of fission deex << 9074 // is explicitly calculated. L << 9075 // Nadtochy used to parametris << 9076 << 9077 G4double af, zf, ee; << 9078 G4double epsiln = 0.0, probp = 0.0, probd << 9079 probimf = 0.0, problamb0 = 0.0, << 9080 G4double sn = 0.0, sbp = 0.0, sbd = 0.0, << 9081 sp = 0.0, sd = 0.0, st = 0.0, sh << 9082 G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, << 9083 bd = 0.0, bt = 0.0, bhe = 0.0, b << 9084 << 9085 G4double xcv = 0., ycv = 0., zcv = 0., VX << 9086 << 9087 G4double jprfn = 0.0, jprfp = 0.0, jprfd << 9088 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = << 9089 G4double rnd = 0.0; << 9090 << 9091 G4int itest = 0, sortie = 0; << 9092 G4double probf = 0.0; << 9093 << 9094 G4double ef = 0.0; << 9095 G4double pc = 0.0; << 9096 << 9097 G4double time, tauf, tau0, a0, a1, emin, << 9098 G4int inttype = 0, inum = 0, gammadecay = << 9099 G4double pleva = 0.0; << 9100 G4double pxeva = 0.0; << 9101 G4double pyeva = 0.0; << 9102 G4double pteva = 0.0; << 9103 G4double etot = 0.0; << 9104 G4int NbLam0 = (*NbLam0_par); << 9105 7468 9106 const G4double c = 29.9792458; << 7469 void G4Abla::evap_postsaddle(G4double A, G4double Z, G4double EXC, G4double *E_scission_post, G4double *A_scission, G4double *Z_scission,G4double &vx_eva,G4double &vy_eva,G4double &vz_eva,G4int *NbLam0_par){ 9107 const G4double mu = 931.494; << 9108 const G4double mu2 = 931.494 * 931.494; << 9109 7470 9110 vx_eva = 0.; << 7471 // AK 2006 - Now in case of fission deexcitation between saddle and scission 9111 vy_eva = 0.; << 7472 // is explicitely calculated. Langevin calculations made by P. Nadtochy 9112 vz_eva = 0.; << 7473 // used to parametrise saddle-to-scission time 9113 IEV_TAB_SSC = 0; << 7474 9114 << 7475 G4double af,zf,ee; 9115 af = dint(A); << 7476 G4double epsiln = 0.0, probp = 0.0, probd = 0.0, probt = 0.0, probn = 0.0, probhe = 0.0, proba = 0.0, probg = 0.0, probimf=0.0, problamb0=0.0, ptotl = 0.0, tcn = 0.0; 9116 zf = dint(Z); << 7477 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, zmoins = 0.0,sp= 0.0,sd= 0.0,st= 0.0,she= 0.0,sa= 0.0, slamb0 = 0.0; 9117 ee = EXC; << 7478 G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, ect = 0.0,eche = 0.0,eca = 0.0, ecg = 0.0, eclamb0 = 0.0, bp = 0.0, bd = 0.0, bt = 0.0, bhe = 0.0, ba = 0.0; 9118 << 7479 9119 fiss->ifis = 0; << 7480 G4double xcv=0.,ycv=0.,zcv=0.,VXOUT=0.,VYOUT=0.,VZOUT=0.; 9120 opt->optimfallowed = 0; << 7481 9121 gammaemission = 0; << 7482 G4double jprfn=0.0, jprfp=0.0, jprfd=0.0, jprft=0.0, jprfhe=0.0, jprfa=0.0, jprflamb0=0.0; 9122 // Initialsation << 7483 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = 0.0; 9123 time = 0.0; << 7484 G4double rnd = 0.0; 9124 << 7485 9125 // in sec << 7486 G4int itest = 0, sortie=0; 9126 tau0 = 1.0e-21; << 7487 G4double probf = 0.0; 9127 a0 = 0.66482503 - 3.4678935 * std::exp(-0 << 7488 9128 a1 = 5.6846e-04 + 0.00574515 * std::exp(- << 7489 G4double ef = 0.0; 9129 tauf = (a0 + a1 * zf * zf / std::pow(af, << 7490 G4double pc = 0.0; 9130 // << 7491 9131 post10: << 7492 G4double time,tauf,tau0,a0,a1,emin,ts1,tsum=0.; 9132 direct(zf, << 7493 G4int inttype=0,inum=0,gammadecay = 0, flamb0decay = 0; 9133 af, << 7494 G4double pleva = 0.0; 9134 ee, << 7495 G4double pxeva = 0.0; 9135 0., << 7496 G4double pyeva = 0.0; 9136 &probp, << 7497 G4double pteva = 0.0; 9137 &probd, << 7498 G4double etot = 0.0; 9138 &probt, << 7499 G4int NbLam0= (*NbLam0_par); 9139 &probn, << 7500 9140 &probhe, << 7501 const G4double c = 29.9792458; 9141 &proba, << 7502 const G4double mu = 931.494; 9142 &probg, << 7503 const G4double mu2 = 931.494*931.494; 9143 &probimf, << 7504 9144 &probf, << 7505 vx_eva=0.; 9145 &problamb0, << 7506 vy_eva=0.; 9146 &ptotl, << 7507 vz_eva=0.; 9147 &sn, << 7508 IEV_TAB_SSC = 0; 9148 &sbp, << 7509 9149 &sbd, << 7510 9150 &sbt, << 7511 af = dint(A); 9151 &sbhe, << 7512 zf = dint(Z); 9152 &sba, << 7513 ee = EXC; 9153 &slamb0, << 7514 9154 &ecn, << 7515 fiss->ifis = 0; 9155 &ecp, << 7516 opt->optimfallowed = 0; 9156 &ecd, << 7517 gammaemission=0; 9157 &ect, << 7518 // Initialsation 9158 &eche, << 7519 time = 0.0; 9159 &eca, << 7520 9160 &ecg, << 7521 // in sec 9161 &eclamb0, << 7522 tau0 = 1.0e-21; 9162 &bp, << 7523 a0 = 0.66482503 - 3.4678935 * std::exp(-0.0104002*ee); 9163 &bd, << 7524 a1 = 5.6846e-04 + 0.00574515 * std::exp(-0.01114307*ee); 9164 &bt, << 7525 tauf = (a0 + a1 * zf*zf/std::pow(af,0.3333333)) * tau0; 9165 &bhe, << 7526 // 9166 &ba, << 7527 post10: 9167 &sp, << 7528 direct(zf,af,ee,0.,&probp,&probd,&probt,&probn,&probhe,&proba,&probg,&probimf,&probf,&problamb0,&ptotl, 9168 &sd, << 7529 &sn,&sbp,&sbd,&sbt,&sbhe,&sba,&slamb0, 9169 &st, << 7530 &ecn,&ecp,&ecd,&ect,&eche,&eca,&ecg,&eclamb0, 9170 &she, << 7531 &bp,&bd,&bt,&bhe,&ba,&sp,&sd,&st,&she,&sa,&ef,&ts1,inttype,inum,itest,&sortie,&tcn, 9171 &sa, << 7532 &jprfn, &jprfp, &jprfd, &jprft, &jprfhe, &jprfa, &jprflamb0, &tsum, NbLam0); //:::FIXME::: Call 9172 &ef, << 7533 // 9173 &ts1, << 7534 // HERE THE FINAL STEPS OF THE EVAPORATION ARE CALCULATED 9174 inttype, << 7535 // 9175 inum, << 7536 if(ptotl<=0.)goto post100; 9176 itest, << 7537 9177 &sortie, << 7538 emin = dmin1(sba,sbhe,dmin1(sbt,sbhe,dmin1(sn,sbp,sbd))); 9178 &tcn, << 7539 9179 &jprfn, << 7540 if(emin>1e30)std::cout << "ERROR AT THE EXIT OF EVAPORA,E>1.D30,AF" << std::endl; 9180 &jprfp, << 7541 9181 &jprfd, << 7542 if(sortie==1){ 9182 &jprft, << 7543 if (probn!=0.0) { 9183 &jprfhe, << 7544 amoins = 1.0; 9184 &jprfa, << 7545 zmoins = 0.0; 9185 &jprflamb0, << 7546 epsiln = sn + ecn; 9186 &tsum, << 7547 pc = std::sqrt(std::pow((1.0 + ecn/9.3956e2),2.) - 1.0) * 9.3956e2; 9187 NbLam0); //:::FIXME::: Call << 7548 gammadecay = 0; 9188 // << 7549 flamb0decay = 0; 9189 // HERE THE FINAL STEPS OF THE EVAPORATIO << 7550 } 9190 // << 7551 else if(probp!=0.0){ 9191 if (ptotl <= 0.) << 7552 amoins = 1.0; 9192 goto post100; << 7553 zmoins = 1.0; 9193 << 7554 epsiln = sp + ecp; 9194 emin = dmin1(sba, sbhe, dmin1(sbt, sbhe, << 7555 pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2.) - 1.0) * 9.3827e2; 9195 << 7556 gammadecay = 0; 9196 if (emin > 1e30) << 7557 flamb0decay = 0; 9197 std::cout << "ERROR AT THE EXIT OF EV << 7558 } 9198 << 7559 else if(probd!=0.0){ 9199 if (sortie == 1) << 7560 amoins = 2.0; 9200 { << 7561 zmoins = 1.0; 9201 if (probn != 0.0) << 7562 epsiln = sd + ecd; 9202 { << 7563 pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3; 9203 amoins = 1.0; << 7564 gammadecay = 0; 9204 zmoins = 0.0; << 7565 flamb0decay = 0; 9205 epsiln = sn + ecn; << 7566 } 9206 pc = std::sqrt(std::pow((1.0 + ec << 7567 else if(probt!=0.0){ 9207 gammadecay = 0; << 7568 amoins = 3.0; 9208 flamb0decay = 0; << 7569 zmoins = 1.0; 9209 } << 7570 epsiln = st + ect; 9210 else if (probp != 0.0) << 7571 pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3; 9211 { << 7572 gammadecay = 0; 9212 amoins = 1.0; << 7573 flamb0decay = 0; 9213 zmoins = 1.0; << 7574 } 9214 epsiln = sp + ecp; << 7575 else if(probhe!=0.0){ 9215 pc = std::sqrt(std::pow((1.0 + ec << 7576 amoins = 3.0; 9216 gammadecay = 0; << 7577 zmoins = 2.0; 9217 flamb0decay = 0; << 7578 epsiln = she + eche; 9218 } << 7579 pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3; 9219 else if (probd != 0.0) << 7580 gammadecay = 0; 9220 { << 7581 flamb0decay = 0; 9221 amoins = 2.0; << 7582 } 9222 zmoins = 1.0; << 7583 else{ if(proba!=0.0){ 9223 epsiln = sd + ecd; << 7584 amoins = 4.0; 9224 pc = std::sqrt(std::pow((1.0 + ec << 7585 zmoins = 2.0; 9225 gammadecay = 0; << 7586 epsiln = sa + eca; 9226 flamb0decay = 0; << 7587 pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3; 9227 } << 7588 gammadecay = 0; 9228 else if (probt != 0.0) << 7589 flamb0decay = 0; 9229 { << 7590 } 9230 amoins = 3.0; << 7591 } 9231 zmoins = 1.0; << 7592 goto post99; 9232 epsiln = st + ect; << 7593 } 9233 pc = std::sqrt(std::pow((1.0 + ec << 7594 9234 gammadecay = 0; << 7595 // IRNDM = IRNDM+1; 9235 flamb0decay = 0; << 7596 // 9236 } << 7597 // HERE THE NORMAL EVAPORATION CASCADE STARTS 9237 else if (probhe != 0.0) << 7598 // RANDOM NUMBER FOR THE EVAPORATION 9238 { << 7599 9239 amoins = 3.0; << 7600 9240 zmoins = 2.0; << 7601 // random number for the evaporation 9241 epsiln = she + eche; << 7602 x = G4AblaRandom::flat() * ptotl; 9242 pc = std::sqrt(std::pow((1.0 + ec << 7603 9243 gammadecay = 0; << 7604 itest = 0; 9244 flamb0decay = 0; << 7605 if (x < proba) { 9245 } << 7606 // alpha evaporation 9246 else << 7607 amoins = 4.0; 9247 { << 7608 zmoins = 2.0; 9248 if (proba != 0.0) << 7609 epsiln = sa + eca; 9249 { << 7610 pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3; 9250 amoins = 4.0; << 7611 gammadecay = 0; 9251 zmoins = 2.0; << 7612 flamb0decay = 0; 9252 epsiln = sa + eca; << 7613 } 9253 pc = std::sqrt(std::pow((1.0 << 7614 else if (x < proba+probhe) { 9254 gammadecay = 0; << 7615 // He3 evaporation 9255 flamb0decay = 0; << 7616 amoins = 3.0; 9256 } << 7617 zmoins = 2.0; 9257 } << 7618 epsiln = she + eche; 9258 goto post99; << 7619 pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3; >> 7620 gammadecay = 0; >> 7621 flamb0decay = 0; >> 7622 } >> 7623 else if (x < proba+probhe+probt) { >> 7624 // triton evaporation >> 7625 amoins = 3.0; >> 7626 zmoins = 1.0; >> 7627 epsiln = st + ect; >> 7628 pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3; >> 7629 gammadecay = 0; >> 7630 flamb0decay = 0; >> 7631 } >> 7632 else if (x < proba+probhe+probt+probd) { >> 7633 // deuteron evaporation >> 7634 amoins = 2.0; >> 7635 zmoins = 1.0; >> 7636 epsiln = sd + ecd; >> 7637 pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3; >> 7638 gammadecay = 0; >> 7639 flamb0decay = 0; >> 7640 } >> 7641 else if (x < proba+probhe+probt+probd+probp) { >> 7642 // proton evaporation >> 7643 amoins = 1.0; >> 7644 zmoins = 1.0; >> 7645 epsiln = sp + ecp; >> 7646 pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2) - 1.0) * 9.3827e2; >> 7647 gammadecay = 0; >> 7648 flamb0decay = 0; >> 7649 } >> 7650 else if (x < proba+probhe+probt+probd+probp+probn) { >> 7651 // neutron evaporation >> 7652 amoins = 1.0; >> 7653 zmoins = 0.0; >> 7654 epsiln = sn + ecn; >> 7655 pc = std::sqrt(std::pow((1.0 + ecn/9.3956e2),2.) - 1.0) * 9.3956e2; >> 7656 gammadecay = 0; >> 7657 flamb0decay = 0; >> 7658 } >> 7659 else if (x < proba+probhe+probt+probd+probp+probn+problamb0) { >> 7660 // lambda0 evaporation >> 7661 amoins = 1.0; >> 7662 zmoins = 0.0; >> 7663 epsiln = slamb0 + eclamb0; >> 7664 pc = std::sqrt(std::pow((1.0 + (eclamb0)/11.1568e2),2.) - 1.0) * 11.1568e2; >> 7665 opt->nblan0 = opt->nblan0 -1; >> 7666 NbLam0 = NbLam0 -1; >> 7667 gammadecay = 0; >> 7668 flamb0decay = 1; >> 7669 } >> 7670 else if (x < proba+probhe+probt+probd+probp+probn+problamb0+probg) { >> 7671 // gamma evaporation >> 7672 amoins = 0.0; >> 7673 zmoins = 0.0; >> 7674 epsiln = ecg; >> 7675 pc = ecg; >> 7676 gammadecay = 1; >> 7677 flamb0decay = 0; >> 7678 if(probp==0.0 && probn==0.0 && probd==0.0 && probt==0.0 && proba==0.0 && probhe==0.0 && problamb0==0.0 && probimf==0.0 && probf==0.0){ >> 7679 //ee = ee-epsiln; >> 7680 //if(ee<=0.01) ee = 0.010; >> 7681 goto post100; 9259 } 7682 } >> 7683 } >> 7684 >> 7685 // CALCULATION OF THE DAUGHTER NUCLEUS >> 7686 // >> 7687 post99: >> 7688 >> 7689 if(gammadecay==1 && ee<=0.01+epsiln){ >> 7690 epsiln = ee-0.01; >> 7691 time = tauf + 1.; >> 7692 } >> 7693 >> 7694 af = af-amoins; >> 7695 zf = zf-zmoins; >> 7696 ee = ee-epsiln; >> 7697 >> 7698 if(ee<=0.01) ee = 0.010; >> 7699 >> 7700 if(af<2.5) goto post100; >> 7701 >> 7702 time = time + ts1; 9260 7703 9261 // IRNDM = IRNDM+1; << 7704 // Determination of x,y,z components of momentum from known emission momentum 9262 // << 7705 if(flamb0decay==1){ 9263 // HERE THE NORMAL EVAPORATION CASCADE ST << 9264 // RANDOM NUMBER FOR THE EVAPORATION << 9265 << 9266 // random number for the evaporation << 9267 x = G4AblaRandom::flat() * ptotl; << 9268 << 9269 itest = 0; << 9270 if (x < proba) << 9271 { << 9272 // alpha evaporation << 9273 amoins = 4.0; << 9274 zmoins = 2.0; << 9275 epsiln = sa + eca; << 9276 pc = std::sqrt(std::pow((1.0 + eca / << 9277 gammadecay = 0; << 9278 flamb0decay = 0; << 9279 } << 9280 else if (x < proba + probhe) << 9281 { << 9282 // He3 evaporation << 9283 amoins = 3.0; << 9284 zmoins = 2.0; << 9285 epsiln = she + eche; << 9286 pc = std::sqrt(std::pow((1.0 + eche / << 9287 gammadecay = 0; << 9288 flamb0decay = 0; << 9289 } << 9290 else if (x < proba + probhe + probt) << 9291 { << 9292 // triton evaporation << 9293 amoins = 3.0; << 9294 zmoins = 1.0; << 9295 epsiln = st + ect; << 9296 pc = std::sqrt(std::pow((1.0 + ect / << 9297 gammadecay = 0; << 9298 flamb0decay = 0; << 9299 } << 9300 else if (x < proba + probhe + probt + pro << 9301 { << 9302 // deuteron evaporation << 9303 amoins = 2.0; << 9304 zmoins = 1.0; << 9305 epsiln = sd + ecd; << 9306 pc = std::sqrt(std::pow((1.0 + ecd / << 9307 gammadecay = 0; << 9308 flamb0decay = 0; << 9309 } << 9310 else if (x < proba + probhe + probt + pro << 9311 { << 9312 // proton evaporation << 9313 amoins = 1.0; << 9314 zmoins = 1.0; << 9315 epsiln = sp + ecp; << 9316 pc = std::sqrt(std::pow((1.0 + ecp / << 9317 gammadecay = 0; << 9318 flamb0decay = 0; << 9319 } << 9320 else if (x < proba + probhe + probt + pro << 9321 { << 9322 // neutron evaporation << 9323 amoins = 1.0; << 9324 zmoins = 0.0; << 9325 epsiln = sn + ecn; << 9326 pc = std::sqrt(std::pow((1.0 + ecn / << 9327 gammadecay = 0; << 9328 flamb0decay = 0; << 9329 } << 9330 else if (x < proba + probhe + probt + pro << 9331 { << 9332 // lambda0 evaporation << 9333 amoins = 1.0; << 9334 zmoins = 0.0; << 9335 epsiln = slamb0 + eclamb0; << 9336 pc = std::sqrt(std::pow((1.0 + (eclam << 9337 opt->nblan0 = opt->nblan0 - 1; << 9338 NbLam0 = NbLam0 - 1; << 9339 gammadecay = 0; << 9340 flamb0decay = 1; << 9341 } << 9342 else if (x < proba + probhe + probt + pro << 9343 { << 9344 // gamma evaporation << 9345 amoins = 0.0; << 9346 zmoins = 0.0; << 9347 epsiln = ecg; << 9348 pc = ecg; << 9349 gammadecay = 1; << 9350 flamb0decay = 0; << 9351 if (probp == 0.0 && probn == 0.0 && p << 9352 problamb0 == 0.0 && probimf == 0. << 9353 { << 9354 // ee = ee-epsiln; << 9355 // if(ee<=0.01) ee = 0.010; << 9356 goto post100; << 9357 } << 9358 } << 9359 << 9360 // CALCULATION OF THE DAUGHTER NUCLEUS << 9361 // << 9362 post99: << 9363 << 9364 if (gammadecay == 1 && ee <= 0.01 + epsil << 9365 { << 9366 epsiln = ee - 0.01; << 9367 time = tauf + 1.; << 9368 } << 9369 << 9370 af = af - amoins; << 9371 zf = zf - zmoins; << 9372 ee = ee - epsiln; << 9373 << 9374 if (ee <= 0.01) << 9375 ee = 0.010; << 9376 << 9377 if (af < 2.5) << 9378 goto post100; << 9379 << 9380 time = time + ts1; << 9381 << 9382 // Determination of x,y,z components of m << 9383 if (flamb0decay == 1) << 9384 { << 9385 EV_TAB_SSC[IEV_TAB_SSC][0] = 0.; 7706 EV_TAB_SSC[IEV_TAB_SSC][0] = 0.; 9386 EV_TAB_SSC[IEV_TAB_SSC][1] = -2.; 7707 EV_TAB_SSC[IEV_TAB_SSC][1] = -2.; 9387 EV_TAB_SSC[IEV_TAB_SSC][5] = 1.; 7708 EV_TAB_SSC[IEV_TAB_SSC][5] = 1.; 9388 } << 7709 }else{ 9389 else << 9390 { << 9391 EV_TAB_SSC[IEV_TAB_SSC][0] = zmoins; 7710 EV_TAB_SSC[IEV_TAB_SSC][0] = zmoins; 9392 EV_TAB_SSC[IEV_TAB_SSC][1] = amoins; 7711 EV_TAB_SSC[IEV_TAB_SSC][1] = amoins; 9393 EV_TAB_SSC[IEV_TAB_SSC][5] = 0.; 7712 EV_TAB_SSC[IEV_TAB_SSC][5] = 0.; 9394 } << 7713 } 9395 7714 9396 rnd = G4AblaRandom::flat(); << 7715 rnd = G4AblaRandom::flat(); 9397 ctet1 = 2.0 * rnd - 1.0; << 7716 ctet1 = 2.0*rnd - 1.0; // z component: uniform probability between -1 and 1 9398 stet1 = std::sqrt(1.0 - std::pow(ctet1, 2 << 7717 stet1 = std::sqrt(1.0 - std::pow(ctet1,2));// component perpendicular to z 9399 rnd = G4AblaRandom::flat(); << 7718 rnd = G4AblaRandom::flat(); 9400 phi1 = rnd * 2.0 * 3.141592654; // angle << 7719 phi1 = rnd*2.0*3.141592654; // angle in x-y plane: uniform probability between 0 and 2*pi 9401 xcv = stet1 * std::cos(phi1); // x comp << 7720 xcv = stet1*std::cos(phi1); // x component 9402 ycv = stet1 * std::sin(phi1); // y comp << 7721 ycv = stet1*std::sin(phi1); // y component 9403 zcv = ctet1; // z comp << 7722 zcv = ctet1; // z component 9404 // In the << 7723 // In the CM system 9405 if (gammadecay == 0) << 7724 if(gammadecay==0){ 9406 { << 7725 // Light particle 9407 // Light particle << 7726 G4double ETOT_LP = std::sqrt(pc*pc + amoins*amoins * mu2); 9408 G4double ETOT_LP = std::sqrt(pc * pc << 7727 if(flamb0decay==1)ETOT_LP = std::sqrt(pc*pc + 1115.683*1115.683); 9409 if (flamb0decay == 1) << 7728 EV_TAB_SSC[IEV_TAB_SSC][2] = c * pc * xcv / ETOT_LP; 9410 ETOT_LP = std::sqrt(pc * pc + 111 << 7729 EV_TAB_SSC[IEV_TAB_SSC][3] = c * pc * ycv / ETOT_LP; 9411 EV_TAB_SSC[IEV_TAB_SSC][2] = c * pc * << 7730 EV_TAB_SSC[IEV_TAB_SSC][4] = c * pc * zcv / ETOT_LP; 9412 EV_TAB_SSC[IEV_TAB_SSC][3] = c * pc * << 7731 }else{ 9413 EV_TAB_SSC[IEV_TAB_SSC][4] = c * pc * << 7732 // gamma ray 9414 } << 7733 EV_TAB_SSC[IEV_TAB_SSC][2] = pc * xcv; 9415 else << 7734 EV_TAB_SSC[IEV_TAB_SSC][3] = pc * ycv; 9416 { << 7735 EV_TAB_SSC[IEV_TAB_SSC][4] = pc * zcv; 9417 // gamma ray << 7736 } 9418 EV_TAB_SSC[IEV_TAB_SSC][2] = pc * xcv << 7737 lorentz_boost(vx_eva,vy_eva,vz_eva, 9419 EV_TAB_SSC[IEV_TAB_SSC][3] = pc * ycv << 7738 EV_TAB_SSC[IEV_TAB_SSC][2],EV_TAB_SSC[IEV_TAB_SSC][3], 9420 EV_TAB_SSC[IEV_TAB_SSC][4] = pc * zcv << 7739 EV_TAB_SSC[IEV_TAB_SSC][4], 9421 } << 7740 &VXOUT,&VYOUT,&VZOUT); 9422 lorentz_boost(vx_eva, << 7741 EV_TAB_SSC[IEV_TAB_SSC][2] = VXOUT; 9423 vy_eva, << 7742 EV_TAB_SSC[IEV_TAB_SSC][3] = VYOUT; 9424 vz_eva, << 7743 EV_TAB_SSC[IEV_TAB_SSC][4] = VZOUT; 9425 EV_TAB_SSC[IEV_TAB_SSC][2], << 7744 9426 EV_TAB_SSC[IEV_TAB_SSC][3], << 7745 // Heavy residue 9427 EV_TAB_SSC[IEV_TAB_SSC][4], << 7746 if(gammadecay==0){ 9428 &VXOUT, << 7747 G4double v2 = std::pow(EV_TAB_SSC[IEV_TAB_SSC][2],2.) + 9429 &VYOUT, << 7748 std::pow(EV_TAB_SSC[IEV_TAB_SSC][3],2.) + 9430 &VZOUT); << 7749 std::pow(EV_TAB_SSC[IEV_TAB_SSC][4],2.); 9431 EV_TAB_SSC[IEV_TAB_SSC][2] = VXOUT; << 7750 G4double gamma = 1.0/std::sqrt(1.0 - v2 / (c*c)); 9432 EV_TAB_SSC[IEV_TAB_SSC][3] = VYOUT; << 7751 G4double etot_lp = amoins*mu * gamma; 9433 EV_TAB_SSC[IEV_TAB_SSC][4] = VZOUT; << 9434 << 9435 // Heavy residue << 9436 if (gammadecay == 0) << 9437 { << 9438 G4double v2 = std::pow(EV_TAB_SSC[IEV << 9439 std::pow(EV_TAB_SSC[IEV << 9440 G4double gamma = 1.0 / std::sqrt(1.0 << 9441 G4double etot_lp = amoins * mu * gamm << 9442 pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SS 7752 pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SSC][2] * etot_lp / c; 9443 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SS 7753 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SSC][3] * etot_lp / c; 9444 pleva = pleva - EV_TAB_SSC[IEV_TAB_SS 7754 pleva = pleva - EV_TAB_SSC[IEV_TAB_SSC][4] * etot_lp / c; 9445 } << 7755 }else{ 9446 else << 7756 // in case of gammas, EV_TEMP contains momentum components and not velocity 9447 { << 9448 // in case of gammas, EV_TEMP contain << 9449 pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SS 7757 pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SSC][2]; 9450 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SS 7758 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SSC][3]; 9451 pleva = pleva - EV_TAB_SSC[IEV_TAB_SS 7759 pleva = pleva - EV_TAB_SSC[IEV_TAB_SSC][4]; 9452 } << 7760 } 9453 pteva = std::sqrt(pxeva * pxeva + pyeva * << 7761 pteva = std::sqrt(pxeva*pxeva + pyeva*pyeva); 9454 // To be checked: << 7762 // To be checked: 9455 etot = std::sqrt(pleva * pleva + pteva * << 7763 etot = std::sqrt ( pleva*pleva + pteva*pteva + af*af * mu2 ); 9456 vx_eva = c * pxeva / etot; // recoil velo << 7764 vx_eva = c * pxeva / etot; // recoil velocity components of residue due to evaporation 9457 vy_eva = c * pyeva / etot; << 7765 vy_eva = c * pyeva / etot; 9458 vz_eva = c * pleva / etot; << 7766 vz_eva = c * pleva / etot; 9459 << 7767 9460 IEV_TAB_SSC = IEV_TAB_SSC + 1; << 7768 IEV_TAB_SSC = IEV_TAB_SSC +1; 9461 << 7769 9462 if (time < tauf) << 7770 if(time<tauf)goto post10; 9463 goto post10; << 7771 // 9464 // << 7772 post100: 9465 post100: << 7773 // 9466 // << 7774 *A_scission= af; 9467 *A_scission = af; << 7775 *Z_scission= zf; 9468 *Z_scission = zf; << 7776 *E_scission_post = ee; 9469 *E_scission_post = ee; << 7777 *NbLam0_par = NbLam0; 9470 *NbLam0_par = NbLam0; << 7778 return; 9471 return; << 7779 } >> 7780 >> 7781 G4double G4Abla::getdeltabinding(G4double A, G4int H){ >> 7782 if(A<1.)return (1.*H)/A*(10.68*A-21.27*std::pow(A,2./3.))*10.; >> 7783 return (1.*H)/A*(10.68*A-21.27*std::pow(A,2./3.)); 9472 } 7784 } 9473 7785 9474 G4double G4Abla::getdeltabinding(G4double A, << 9475 { << 9476 if (A < 1.) << 9477 return (1. * H) / A * (10.68 * A - 21 << 9478 return (1. * H) / A * (10.68 * A - 21.27 << 9479 } << 9480 << 9481 G4double G4Abla::gethyperseparation(G4double << 9482 { << 9483 if (A < 1.) << 9484 return 1.e38; << 9485 // For light nuclei we take experimental << 9486 // Journal of Physics G, Nucl Part Phys 3 << 9487 if (ny == 1) << 9488 { << 9489 if (Z == 1 && A == 4) << 9490 return 2.04; << 9491 else if (Z == 2 && A == 4) << 9492 return 2.39; << 9493 else if (Z == 2 && A == 5) << 9494 return 3.12; << 9495 else if (Z == 2 && A == 6) << 9496 return 4.18; << 9497 else if (Z == 2 && A == 7) << 9498 return 5.23; << 9499 else if (Z == 2 && A == 8) << 9500 return 7.16; << 9501 else if (Z == 3 && A == 6) << 9502 return 4.50; << 9503 else if (Z == 3 && A == 7) << 9504 return 5.58; << 9505 else if (Z == 3 && A == 8) << 9506 return 6.80; << 9507 else if (Z == 3 && A == 9) << 9508 return 8.50; << 9509 else if (Z == 4 && A == 7) << 9510 return 5.16; << 9511 else if (Z == 4 && A == 8) << 9512 return 6.84; << 9513 else if (Z == 4 && A == 9) << 9514 return 6.71; << 9515 else if (Z == 4 && A == 10) << 9516 return 9.11; << 9517 else if (Z == 5 && A == 9) << 9518 return 8.29; << 9519 else if (Z == 5 && A == 10) << 9520 return 9.01; << 9521 else if (Z == 5 && A == 11) << 9522 return 10.29; << 9523 else if (Z == 5 && A == 12) << 9524 return 11.43; << 9525 else if (Z == 6 && A == 12) << 9526 return 10.95; << 9527 else if (Z == 6 && A == 13) << 9528 return 11.81; << 9529 else if (Z == 6 && A == 14) << 9530 return 12.50; << 9531 else if (Z == 7 && A == 14) << 9532 return 12.17; << 9533 else if (Z == 7 && A == 15) << 9534 return 13.59; << 9535 else if (Z == 8 && A == 16) << 9536 return 12.50; << 9537 else if (Z == 8 && A == 17) << 9538 return 13.59; << 9539 else if (Z == 14 && A == 28) << 9540 return 16.0; << 9541 else if (Z == 39 && A == 89) << 9542 return 22.1; << 9543 else if (Z == 57 && A == 139) << 9544 return 23.8; << 9545 else if (Z == 82 && A == 208) << 9546 return 26.5; << 9547 } // ny==1 << 9548 // For other nuclei we take Bethe-Weizsac << 9549 return gethyperbinding(A, Z, ny) - gethyp << 9550 } << 9551 << 9552 G4double G4Abla::gethyperbinding(G4double A, << 9553 { << 9554 // << 9555 // Bethe-Weizsacker mass formula << 9556 // Journal of Physics G, Nucl Part Phys 3 << 9557 // << 9558 if (A < 2 || Z < 2) << 9559 return 0.; << 9560 G4double N = A - Z - 1. * ny; << 9561 G4double be = 0., my = 1115.683, av = 15. << 9562 if (mod(N, 2) == 1 && mod(Z, 2) == 1) << 9563 D = -12. / std::sqrt(A); << 9564 if (mod(N, 2) == 0 && mod(Z, 2) == 0) << 9565 D = 12. / std::sqrt(A); << 9566 // << 9567 G4double deltanew = (1. - std::exp(-1. * << 9568 // << 9569 be = av * A - as * std::pow(A, 2. / 3.) - << 9570 asym * (N - Z) * (N - Z) / ((1. + st << 9571 ny * (0.0335 * my - 26.7 - 48.7 / st << 9572 return be; << 9573 } << 9574 << 9575 void G4Abla::unbound(G4double SN, << 9576 G4double SP, << 9577 G4double SD, << 9578 G4double ST, << 9579 G4double SHE, << 9580 G4double SA, << 9581 G4double BP, << 9582 G4double BD, << 9583 G4double BT, << 9584 G4double BHE, << 9585 G4double BA, << 9586 G4double* PROBF, << 9587 G4double* PROBN, << 9588 G4double* PROBP, << 9589 G4double* PROBD, << 9590 G4double* PROBT, << 9591 G4double* PROBHE, << 9592 G4double* PROBA, << 9593 G4double* PROBIMF, << 9594 G4double* PROBG, << 9595 G4double* ECN, << 9596 G4double* ECP, << 9597 G4double* ECD, << 9598 G4double* ECT, << 9599 G4double* ECHE, << 9600 G4double* ECA) << 9601 { << 9602 G4double SBP = SP + BP; << 9603 G4double SBD = SD + BD; << 9604 G4double SBT = ST + BT; << 9605 G4double SBHE = SHE + BHE; << 9606 G4double SBA = SA + BA; << 9607 << 9608 G4double e = dmin1(SBP, SBD, SBT); << 9609 e = dmin1(SBHE, SN, e); << 9610 e = dmin1(SBHE, SBA, e); << 9611 // << 9612 if (SN == e) << 9613 { << 9614 *ECN = (-1.0) * SN; << 9615 *ECP = 0.0; << 9616 *ECD = 0.0; << 9617 *ECT = 0.0; << 9618 *ECHE = 0.0; << 9619 *ECA = 0.0; << 9620 *PROBN = 1.0; << 9621 *PROBP = 0.0; << 9622 *PROBD = 0.0; << 9623 *PROBT = 0.0; << 9624 *PROBHE = 0.0; << 9625 *PROBA = 0.0; << 9626 *PROBIMF = 0.0; << 9627 *PROBF = 0.0; << 9628 *PROBG = 0.0; << 9629 } << 9630 else if (SBP == e) << 9631 { << 9632 *ECN = 0.0; << 9633 *ECP = (-1.0) * SP + BP; << 9634 *ECD = 0.0; << 9635 *ECT = 0.0; << 9636 *ECHE = 0.0; << 9637 *ECA = 0.0; << 9638 *PROBN = 0.0; << 9639 *PROBP = 1.0; << 9640 *PROBD = 0.0; << 9641 *PROBT = 0.0; << 9642 *PROBHE = 0.0; << 9643 *PROBA = 0.0; << 9644 *PROBIMF = 0.0; << 9645 *PROBF = 0.0; << 9646 *PROBG = 0.0; << 9647 } << 9648 else if (SBD == e) << 9649 { << 9650 *ECN = 0.0; << 9651 *ECD = (-1.0) * SD + BD; << 9652 *ECP = 0.0; << 9653 *ECT = 0.0; << 9654 *ECHE = 0.0; << 9655 *ECA = 0.0; << 9656 *PROBN = 0.0; << 9657 *PROBP = 0.0; << 9658 *PROBD = 1.0; << 9659 *PROBT = 0.0; << 9660 *PROBHE = 0.0; << 9661 *PROBA = 0.0; << 9662 *PROBIMF = 0.0; << 9663 *PROBF = 0.0; << 9664 *PROBG = 0.0; << 9665 } << 9666 else if (SBT == e) << 9667 { << 9668 *ECN = 0.0; << 9669 *ECT = (-1.0) * ST + BT; << 9670 *ECD = 0.0; << 9671 *ECP = 0.0; << 9672 *ECHE = 0.0; << 9673 *ECA = 0.0; << 9674 *PROBN = 0.0; << 9675 *PROBP = 0.0; << 9676 *PROBD = 0.0; << 9677 *PROBT = 1.0; << 9678 *PROBHE = 0.0; << 9679 *PROBA = 0.0; << 9680 *PROBIMF = 0.0; << 9681 *PROBF = 0.0; << 9682 *PROBG = 0.0; << 9683 } << 9684 else if (SBHE == e) << 9685 { << 9686 *ECN = 0.0; << 9687 *ECHE = (-1.0) * SHE + BHE; << 9688 *ECD = 0.0; << 9689 *ECT = 0.0; << 9690 *ECP = 0.0; << 9691 *ECA = 0.0; << 9692 *PROBN = 0.0; << 9693 *PROBP = 0.0; << 9694 *PROBD = 0.0; << 9695 *PROBT = 0.0; << 9696 *PROBHE = 1.0; << 9697 *PROBA = 0.0; << 9698 *PROBIMF = 0.0; << 9699 *PROBF = 0.0; << 9700 *PROBG = 0.0; << 9701 } << 9702 else << 9703 { << 9704 if (SBA == e) << 9705 { << 9706 *ECN = 0.0; << 9707 *ECA = (-1.0) * SA + BA; << 9708 *ECD = 0.0; << 9709 *ECT = 0.0; << 9710 *ECHE = 0.0; << 9711 *ECP = 0.0; << 9712 *PROBN = 0.0; << 9713 *PROBP = 0.0; << 9714 *PROBD = 0.0; << 9715 *PROBT = 0.0; << 9716 *PROBHE = 0.0; << 9717 *PROBA = 1.0; << 9718 *PROBIMF = 0.0; << 9719 *PROBF = 0.0; << 9720 *PROBG = 0.0; << 9721 } << 9722 } << 9723 7786 9724 return; << 7787 G4double G4Abla::gethyperseparation(G4double A, G4double Z, G4int ny){ >> 7788 if(A<1.)return 1.e38; >> 7789 // For light nuclei we take experimental values >> 7790 // Journal of Physics G, Nucl Part Phys 32,363 (2006) >> 7791 if(ny==1){ >> 7792 if(Z==1 && A==4) return 2.04; >> 7793 else if(Z==2 && A==4) return 2.39; >> 7794 else if(Z==2 && A==5) return 3.12; >> 7795 else if(Z==2 && A==6) return 4.18; >> 7796 else if(Z==2 && A==7) return 5.23; >> 7797 else if(Z==2 && A==8) return 7.16; >> 7798 else if(Z==3 && A==6) return 4.50; >> 7799 else if(Z==3 && A==7) return 5.58; >> 7800 else if(Z==3 && A==8) return 6.80; >> 7801 else if(Z==3 && A==9) return 8.50; >> 7802 else if(Z==4 && A==7) return 5.16; >> 7803 else if(Z==4 && A==8) return 6.84; >> 7804 else if(Z==4 && A==9) return 6.71; >> 7805 else if(Z==4 && A==10) return 9.11; >> 7806 else if(Z==5 && A==9) return 8.29; >> 7807 else if(Z==5 && A==10) return 8.89; >> 7808 else if(Z==5 && A==11) return 10.24; >> 7809 else if(Z==5 && A==12) return 11.37; >> 7810 else if(Z==6 && A==12) return 10.76; >> 7811 else if(Z==6 && A==13) return 11.69; >> 7812 else if(Z==6 && A==14) return 12.17; >> 7813 else if(Z==14 && A==28) return 16.0; >> 7814 else if(Z==39 && A==89) return 22.1; >> 7815 else if(Z==57 && A==139) return 23.8; >> 7816 else if(Z==82 && A==208) return 26.5; >> 7817 }//ny==1 >> 7818 // For other nuclei we take Bethe-Weizsacker mass formula >> 7819 return gethyperbinding(A, Z, ny)-gethyperbinding(A-1., Z, ny-1); 9725 } 7820 } 9726 7821 9727 void G4Abla::fissionDistri(G4double& A, << 7822 G4double G4Abla::gethyperbinding(G4double A, G4double Z, G4int ny){ 9728 G4double& Z, << 7823 // 9729 G4double& E, << 7824 // Bethe-Weizsacker mass formula 9730 G4double& a1, << 7825 // Journal of Physics G, Nucl Part Phys 32,363 (2006) 9731 G4double& z1, << 7826 // 9732 G4double& e1, << 7827 if(A<2 || Z<2)return 0.; 9733 G4double& v1, << 7828 G4double N = A-Z -1.*ny; 9734 G4double& a2, << 7829 G4double be=0., my = 1115.683, 9735 G4double& z2, << 7830 av = 15.77, 9736 G4double& e2, << 7831 as = 18.34, 9737 G4double& v2, << 7832 ac = 0.71, 9738 G4double& vx_eva_s << 7833 asym = 23.21, 9739 G4double& vy_eva_s << 7834 k = 17., 9740 G4double& vz_eva_s << 7835 c = 30., 9741 G4int* NbLam0_par) << 7836 D = 0.; 9742 { << 7837 if(mod(N,2) == 1 && mod(Z,2) == 1)D = -12./std::sqrt(A); 9743 << 7838 if(mod(N,2) == 0 && mod(Z,2) == 0)D = 12./std::sqrt(A); 9744 /* << 7839 // 9745 Last update: << 7840 G4double deltanew = (1.-std::exp(-1.*A/c))*D; 9746 << 7841 // 9747 21/01/17 - J.L.R.S. - Implementation of << 7842 be= av*A-as*std::pow(A,2./3.)-ac*Z*(Z-1.)/std::pow(A,1./3.)-asym*(N-Z)*(N-Z)/((1.+std::exp(-1.*A/k))*A)+deltanew + ny*(0.0335*my-26.7-48.7/std::pow(A,2.0/3.0)); 9748 << 7843 return be; 9749 << 7844 } 9750 Authors: K.-H. Schmidt, A. Kelic, M. V. << 9751 J.L.Rodriguez-Sanchez(1995 - 2 << 9752 << 9753 On input: A, Z, E (mass, atomic number << 9754 before fission) << 9755 On output: Ai, Zi, Ei (mass, atomic num << 9756 fragment 1 and 2 << 9757 << 9758 */ << 9759 /* This program calculates isotopic distr << 9760 /* with a semiempirical model << 9761 /* The width and eventually a shift in N/ << 9762 /* following rules: << 9763 /* << 9764 /* The line N/Z following UCD has an angl << 9765 /* to the horizontal axis on a chart of n << 9766 /* (For 238U the angle is 32.2 deg.) << 9767 /* << 9768 /* The following relations hold: (from << 9769 c << 9770 c sigma(N) (A=const) = sigma(Z) (A=con << 9771 c sigma(A) (N=const) = sigma(Z) (N=con << 9772 c sigma(A) (Z=const) = sigma(N) (Z=con << 9773 c << 9774 c From this we get: << 9775 c sigma(Z) (N=const) * N = sigma(N) (Z << 9776 c sigma(A) (Z=const) = sigma(Z) (A=con << 9777 c sigma(N) (Z=const) = sigma(Z) (A=con << 9778 c Z*sigma(N) (Z=const) = N*sigma(Z) (N << 9779 // << 9780 << 9781 /* Model parameters: << 9782 C These parameters have been adjusted << 9783 c For the fission of another compound << 9784 c necessary to slightly adjust some p << 9785 c The most important ones are << 9786 C Delta_U1_shell_max and << 9787 c Delta_u2_shell. << 9788 */ << 9789 G4double Nheavy1_in; // 'position of she << 9790 Nheavy1_in = 83.0; << 9791 << 9792 G4double Zheavy1_in; // 'position of she << 9793 Zheavy1_in = 50.0; << 9794 << 9795 G4double Nheavy2; // 'position of heavy << 9796 Nheavy2 = 89.0; << 9797 << 9798 G4double Delta_U1_shell_max; // 'Shell e << 9799 Delta_U1_shell_max = -2.45; << 9800 << 9801 G4double U1NZ_SLOPE; // Reduction of shel << 9802 U1NZ_SLOPE = 0.2; << 9803 << 9804 G4double Delta_U2_shell; // 'Shell effec << 9805 Delta_U2_shell = -2.45; << 9806 << 9807 G4double X_s2s; // 'Ratio (C_sad/C_scis) << 9808 X_s2s = 0.8; << 9809 << 9810 G4double hbom1, hbom2, hbom3; // 'Curvat << 9811 hbom1 = 0.2; // hbom1 is << 9812 hbom2 = 0.2; // hbom2 is << 9813 hbom3 = 0.2; // hbom3 is << 9814 << 9815 G4double Fwidth_asymm1, Fwidth_asymm2, Fw << 9816 // 'Factors for widths of distr. << 9817 Fwidth_asymm1 = 0.65; << 9818 Fwidth_asymm2 = 0.65; << 9819 Fwidth_symm = 1.16; << 9820 << 9821 G4double xLevdens; // 'Parameter x: a = A << 9822 xLevdens = 10.75; << 9823 // The value of 1/0.093 = 10.75 is co << 9824 // systematics of the mass widths of << 9825 << 9826 G4double FGAMMA; // 'Factor to gamma' << 9827 FGAMMA = 1.; // Theoretical expectati << 9828 // Additional factor to attenuation c << 9829 // with increasing excitation energy << 9830 << 9831 G4double FGAMMA1; // 'Factor to gamma_hea << 9832 FGAMMA1 = 2.; << 9833 // Adjusted to reduce the weight of S << 9834 // excitation energies, as required b << 9835 << 9836 G4double FREDSHELL; << 9837 FREDSHELL = 0.; << 9838 // Adjusted to the reduced attenuatio << 9839 // If FGAMMA is modified, << 9840 // FGAMMA * FREADSHELL should remain << 9841 // the attenuation of the shell effec << 9842 // pairing energy ECRIT unchanged, wh << 9843 // adjusted to the mass yields of Viv << 9844 // energy range. A high value of FGAM << 9845 // attenuation of shell effects above << 9846 << 9847 G4double Ecrit; << 9848 Ecrit = 5.; << 9849 // The value of ECRIT determines the << 9850 // decrease of the shell effect below << 9851 // decrease above the superfluid rang << 9852 const G4double d = 2.0; // 'Surface dista << 9853 // d = 2.0; << 9854 // Charge pola << 9855 G4double cpol1; // Charge polaris << 9856 cpol1 = 0.35; // calculated int << 9857 G4double cpol2; // Charge polaris << 9858 cpol2 = 0.; // calculated int << 9859 G4double Friction_factor; << 9860 Friction_factor = 1.0; << 9861 G4double Nheavy1; // position << 9862 G4double Delta_U1, Delta_U2; // used shel << 9863 G4double cN_asymm1_shell, cN_asymm2_shell << 9864 G4double gamma, gamma_heavy1, gamma_heavy << 9865 G4double E_saddle_scission; << 9866 G4double Ysymm = 0.; << 9867 G4double Yasymm1 = 0.; << 9868 G4double Yasymm2 = 0.; << 9869 G4double Nheavy1_eff; << 9870 G4double Nheavy2_eff; << 9871 G4double eexc1_saddle; << 9872 G4double eexc2_saddle; << 9873 G4double EEXC_MAX; << 9874 G4double r_e_o; << 9875 G4double cN_symm; << 9876 G4double CZ; << 9877 G4double Nheavy2_NZ; << 9878 G4double N; << 9879 G4double Aheavy1, Aheavy2; << 9880 G4double Sasymm1 = 0., Sasymm2 = 0., Ssym << 9881 G4double Ssymm_mode1, Ssymm_mode2; << 9882 G4double wNasymm1_saddle, wNasymm2_saddle << 9883 G4double wNasymm2_scission, wNsymm_scissi << 9884 G4double wNasymm1, wNasymm2, wNsymm; << 9885 G4int imode; << 9886 G4double rmode; << 9887 G4double ZA1width; << 9888 G4double N1r, N2r, A1r, N1, N2; << 9889 G4double Zsymm, Nsymm; << 9890 G4double N1mean, N1width; << 9891 G4double dUeff; << 9892 /* effective shell effect at lowest barri << 9893 G4double Eld; << 9894 /* Excitation energy with respect to ld b << 9895 G4double re1, re2, re3; << 9896 G4double eps1, eps2; << 9897 G4double Z1UCD, Z2UCD; << 9898 G4double beta = 0., beta1 = 0., beta2 = 0 << 9899 // double betacomplement; << 9900 G4double DN1_POL; << 9901 /* shift of most probable neutron number << 9902 according to polarization */ << 9903 G4int i_help; << 9904 G4double A_levdens; << 9905 /* level-density parameter */ << 9906 // double A_levdens_light1,A_levdens_ligh << 9907 G4double A_levdens_heavy1, A_levdens_heav << 9908 << 9909 G4double R0 = 1.16; << 9910 << 9911 G4double epsilon_1_saddle, epsilon0_1_sad << 9912 G4double epsilon_2_saddle, epsilon0_2_sad << 9913 G4double epsilon_1_scission; //,epsilon0_ << 9914 G4double epsilon_2_scission; //,epsilon0_ << 9915 G4double epsilon_symm_scission; << 9916 /* modified energy */ << 9917 G4double E_eff1_saddle, E_eff2_saddle; << 9918 G4double Epot0_mode1_saddle, Epot0_mode2_ << 9919 G4double Epot_mode1_saddle, Epot_mode2_sa << 9920 G4double E_defo, E_defo1, E_defo2, E_scis << 9921 G4double E_asym; << 9922 G4double E1exc = 0., E2exc = 0.; << 9923 G4double E1exc_sigma, E2exc_sigma; << 9924 G4double TKER; << 9925 G4double EkinR1, EkinR2; << 9926 G4double MassCurv_scis, MassCurv_sadd; << 9927 G4double cN_symm_sadd; << 9928 G4double Nheavy1_shell, Nheavy2_shell; << 9929 G4double wNasymm1_scission; << 9930 G4double Aheavy1_eff, Aheavy2_eff; << 9931 G4double Z1rr, Z1r; << 9932 G4double E_HELP; << 9933 G4double Z_scission, N_scission, A_scissi << 9934 G4double Z2_over_A_eff; << 9935 G4double beta1gs = 0., beta2gs = 0., beta << 9936 G4double sigZmin; << 9937 G4double DSN132, Delta_U1_shell, E_eff0_s << 9938 G4int NbLam0 = (*NbLam0_par); << 9939 // << 9940 sigZmin = 0.5; << 9941 N = A - Z; /* neutron number of the fiss << 9942 // << 9943 cN_asymm1_shell = 0.700 * N / Z; << 9944 cN_asymm2_shell = 0.040 * N / Z; << 9945 7845 9946 //*************************************** << 7846 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) >> 7847 { >> 7848 G4double SBP = SP + BP; >> 7849 G4double SBD = SD + BD; >> 7850 G4double SBT = ST + BT; >> 7851 G4double SBHE = SHE + BHE; >> 7852 G4double SBA = SA + BA; 9947 7853 9948 DSN132 = Nheavy1_in - N / Z * Zheavy1_in; << 7854 G4double e = dmin1(SBP,SBD,SBT); 9949 Aheavy1 = Nheavy1_in + Zheavy1_in + 0.340 << 7855 e = dmin1(SBHE,SN,e); 9950 /* Neutron number of valley Standard 1 */ << 7856 e = dmin1(SBHE,SBA,e); 9951 /* It is assumed that the 82-neutron shel << 7857 // 9952 c the 50-proton shell effect. There << 7858 if(SN==e){ 9953 c the fissioning nucleus from the N << 7859 *ECN = (-1.0)*SN; 9954 c change the position of the combin << 7860 *ECP = 0.0; 9955 c deficient fissioning nuclei, the << 7861 *ECD = 0.0; 9956 c versa. */ << 7862 *ECT = 0.0; 9957 << 7863 *ECHE = 0.0; 9958 Delta_U1_shell = Delta_U1_shell_max + U1N << 7864 *ECA = 0.0; 9959 Delta_U1_shell = min(0., Delta_U1_shell); << 7865 *PROBN = 1.0; 9960 /* Empirical reduction of shell effect wi << 7866 *PROBP = 0.0; 9961 /* Fits (239U,n)f and 226Th e.-m.-induced << 7867 *PROBD = 0.0; 9962 << 7868 *PROBT = 0.0; 9963 Nheavy1 = N / A * Aheavy1; /* UCD */ << 7869 *PROBHE = 0.0; 9964 Aheavy2 = Nheavy2 * A / N; << 7870 *PROBA = 0.0; 9965 << 7871 *PROBIMF = 0.0; 9966 Zsymm = Z / 2.0; /* proton number in symm << 7872 *PROBF = 0.0; 9967 Nsymm = N / 2.0; << 7873 *PROBG = 0.0; 9968 A_levdens = A / xLevdens; << 7874 } 9969 gamma = A_levdens / (0.40 * std::pow(A, 1 << 7875 else if(SBP==e){ 9970 A_levdens_heavy1 = Aheavy1 / xLevdens; << 7876 *ECN = 0.0; 9971 gamma_heavy1 = A_levdens_heavy1 / (0.40 * << 7877 *ECP = (-1.0)*SP + BP; 9972 A_levdens_heavy2 = Aheavy2 / xLevdens; << 7878 *ECD = 0.0; 9973 gamma_heavy2 = A_levdens_heavy2 / (0.40 * << 7879 *ECT = 0.0; 9974 << 7880 *ECHE = 0.0; 9975 // Energy dissipated from saddle to s << 7881 *ECA = 0.0; 9976 // F. Rejmund et al., Nucl. Phys. A 6 << 7882 *PROBN = 0.0; 9977 E_saddle_scission = (-24. + 0.02227 * Z * << 7883 *PROBP = 1.0; 9978 E_saddle_scission = max(0.0, E_saddle_sci << 7884 *PROBD = 0.0; 9979 << 7885 *PROBT = 0.0; 9980 // Fit to experimental result on curv << 7886 *PROBHE = 0.0; 9981 // Parametrization of T. Enqvist acco << 7887 *PROBA = 0.0; 9982 // MassCurv taken at scission. */ << 7888 *PROBIMF = 0.0; 9983 << 7889 *PROBF = 0.0; 9984 Z2_over_A_eff = Z * Z / A; << 7890 *PROBG = 0.0; 9985 << 7891 } 9986 if (Z2_over_A_eff < 34.0) << 7892 else if(SBD==e){ 9987 MassCurv_scis = std::pow(10., -1.0933 << 7893 *ECN = 0.0; 9988 else << 7894 *ECD = (-1.0)*SD + BD; 9989 MassCurv_scis = std::pow(10., 3.05353 << 7895 *ECP = 0.0; 9990 << 7896 *ECT = 0.0; 9991 // to do: << 7897 *ECHE = 0.0; 9992 // fix the X with the channel intensi << 7898 *ECA = 0.0; 9993 // replace then (all) cN_symm by cN_s << 7899 *PROBN = 0.0; 9994 MassCurv_sadd = X_s2s * MassCurv_scis; << 7900 *PROBP = 0.0; 9995 << 7901 *PROBD = 1.0; 9996 cN_symm = 8.0 / std::pow(N, 2.) * MassCur << 7902 *PROBT = 0.0; 9997 cN_symm_sadd = 8.0 / std::pow(N, 2.) * Ma << 7903 *PROBHE = 0.0; 9998 << 7904 *PROBA = 0.0; 9999 Nheavy1_shell = Nheavy1; << 7905 *PROBIMF = 0.0; 10000 << 7906 *PROBF = 0.0; 10001 if (E < 100.0) << 7907 *PROBG = 0.0; 10002 Nheavy1_eff = (cN_symm_sadd * Nsymm << 7908 } 10003 cN_asymm1_shell * Uwa << 7909 else if(SBT==e){ 10004 (cN_symm_sadd + cN_asy << 7910 *ECN = 0.0; 10005 else << 7911 *ECT = (-1.0)*ST + BT; 10006 Nheavy1_eff = (cN_symm_sadd * Nsymm << 7912 *ECD = 0.0; 10007 << 7913 *ECP = 0.0; 10008 /* Position of Standard II defined by ne << 7914 *ECHE = 0.0; 10009 Nheavy2_NZ = Nheavy2; << 7915 *ECA = 0.0; 10010 Nheavy2_shell = Nheavy2_NZ; << 7916 *PROBN = 0.0; 10011 if (E < 100.) << 7917 *PROBP = 0.0; 10012 Nheavy2_eff = (cN_symm_sadd * Nsymm << 7918 *PROBD = 0.0; 10013 cN_asymm2_shell * Uwa << 7919 *PROBT = 1.0; 10014 (cN_symm_sadd + cN_asy << 7920 *PROBHE = 0.0; 10015 else << 7921 *PROBA = 0.0; 10016 Nheavy2_eff = (cN_symm_sadd * Nsymm << 7922 *PROBIMF = 0.0; 10017 << 7923 *PROBF = 0.0; 10018 Delta_U1 = Delta_U1_shell + (Nheavy1_she << 7924 *PROBG = 0.0; 10019 cN_asymm << 7925 } 10020 Delta_U1 = min(Delta_U1, 0.0); << 7926 else if(SBHE==e){ 10021 Delta_U2 = Delta_U2_shell + (Nheavy2_she << 7927 *ECN = 0.0; 10022 cN_asymm << 7928 *ECHE= (-1.0)*SHE + BHE; 10023 Delta_U2 = min(Delta_U2, 0.0); << 7929 *ECD = 0.0; 10024 << 7930 *ECT = 0.0; 10025 // liquid drop energies at the centre << 7931 *ECP = 0.0; 10026 // with respect to liquid drop at sym << 7932 *ECA = 0.0; 10027 Epot0_mode1_saddle = (Nheavy1_eff - Nsym << 7933 *PROBN = 0.0; 10028 Epot0_mode2_saddle = (Nheavy2_eff - Nsym << 7934 *PROBP = 0.0; 10029 Epot0_symm_saddle = 0.0; << 7935 *PROBD = 0.0; 10030 << 7936 *PROBT = 0.0; 10031 // energies including shell effects a << 7937 *PROBHE = 1.0; 10032 // shell effects with respect to liqu << 7938 *PROBA = 0.0; 10033 Epot_mode1_saddle = Epot0_mode1_saddle + << 7939 *PROBIMF = 0.0; 10034 Epot_mode2_saddle = Epot0_mode2_saddle + << 7940 *PROBF = 0.0; 10035 Epot_symm_saddle = Epot0_symm_saddle; << 7941 *PROBG = 0.0; 10036 << 7942 } 10037 // minimum of potential with respect << 7943 else{ 10038 dUeff = min(Epot_mode1_saddle, Epot_mode << 7944 if(SBA==e){ 10039 dUeff = min(dUeff, Epot_symm_saddle); << 7945 *ECN = 0.0; 10040 dUeff = dUeff - Epot_symm_saddle; << 7946 *ECA = (-1.0)*SA + BA; 10041 << 7947 *ECD = 0.0; 10042 Eld = E + dUeff; << 7948 *ECT = 0.0; 10043 // E = energy above lowest effecti << 7949 *ECHE = 0.0; 10044 // Eld = energy above liquid-drop ba << 7950 *ECP = 0.0; 10045 // Due to this treatment the energy << 7951 *PROBN = 0.0; 10046 // energy above the lowest saddle. << 7952 *PROBP = 0.0; 10047 << 7953 *PROBD = 0.0; 10048 // excitation energies at saddle mode << 7954 *PROBT = 0.0; 10049 epsilon0_1_saddle = Eld - Epot0_mode1_sa << 7955 *PROBHE = 0.0; 10050 epsilon0_2_saddle = Eld - Epot0_mode2_sa << 7956 *PROBA = 1.0; 10051 << 7957 *PROBIMF = 0.0; 10052 // excitation energies at saddle mode << 7958 *PROBF = 0.0; 10053 epsilon_1_saddle = Eld - Epot_mode1_sadd << 7959 *PROBG = 0.0; 10054 epsilon_2_saddle = Eld - Epot_mode2_sadd << 7960 } 10055 << 7961 } 10056 epsilon_symm_saddle = Eld - Epot_symm_sa << 7962 10057 // epsilon_symm_saddle = Eld - dUeff; << 7963 return; 10058 << 7964 } 10059 eexc1_saddle = epsilon_1_saddle; << 7965 10060 eexc2_saddle = epsilon_2_saddle; << 7966 void G4Abla::fissionDistri(G4double &A,G4double &Z,G4double &E, 10061 << 7967 G4double &a1,G4double &z1,G4double &e1,G4double &v1, 10062 // EEXC_MAX is energy above the lowes << 7968 G4double &a2,G4double &z2,G4double &e2,G4double &v2, 10063 EEXC_MAX = max(eexc1_saddle, eexc2_saddl << 7969 G4double &vx_eva_sc,G4double &vy_eva_sc,G4double &vz_eva_sc, 10064 EEXC_MAX = max(EEXC_MAX, Eld); << 7970 G4int *NbLam0_par) 10065 << 7971 { 10066 // excitation energy at scission */ << 7972 10067 epsilon_1_scission = Eld + E_saddle_scis << 7973 /* 10068 epsilon_2_scission = Eld + E_saddle_scis << 7974 Last update: 10069 << 7975 10070 // excitation energy of symmetric fra << 7976 21/01/17 - J.L.R.S. - Implementation of this fission model in C++ 10071 epsilon_symm_scission = Eld + E_saddle_s << 7977 10072 << 7978 10073 // calculate widhts at the saddle << 7979 Authors: K.-H. Schmidt, A. Kelic, M. V. Ricciardi,J. Benlliure, and 10074 E_eff1_saddle = << 7980 J.L.Rodriguez-Sanchez(1995 - 2017) 10075 epsilon0_1_saddle - Delta_U1 * Uwash << 7981 10076 << 7982 On input: A, Z, E (mass, atomic number and exc. energy of compound nucleus 10077 if (E_eff1_saddle < A_levdens * hbom1 * << 7983 before fission) 10078 E_eff1_saddle = A_levdens * hbom1 * << 7984 On output: Ai, Zi, Ei (mass, atomic number and (absolute) exc. energy of 10079 << 7985 fragment 1 and 2 after fission) 10080 wNasymm1_saddle = std::sqrt( << 7986 10081 0.50 * std::sqrt(1.0 / A_levdens * E << 7987 */ 10082 (cN_asymm1_shell * Uwash(epsilon_1_s << 7988 /* This program calculates isotopic distributions of fission fragments */ 10083 << 7989 /* with a semiempirical model */ 10084 E_eff2_saddle = << 7990 /* The width and eventually a shift in N/Z (polarization) follows the */ 10085 epsilon0_2_saddle - Delta_U2 * Uwash << 7991 /* following rules: */ 10086 << 7992 /* */ 10087 if (E_eff2_saddle < A_levdens * hbom2 * << 7993 /* The line N/Z following UCD has an angle of atan(Zcn/Ncn) */ 10088 E_eff2_saddle = A_levdens * hbom2 * << 7994 /* to the horizontal axis on a chart of nuclides. */ 10089 << 7995 /* (For 238U the angle is 32.2 deg.) */ 10090 wNasymm2_saddle = std::sqrt( << 7996 /* */ 10091 0.50 * std::sqrt(1.0 / A_levdens * E << 7997 /* The following relations hold: (from Armbruster) 10092 (cN_asymm2_shell * Uwash(epsilon_2_s << 7998 c 10093 << 7999 c sigma(N) (A=const) = sigma(Z) (A=const) 10094 E_eff0_saddle = epsilon_symm_saddle; << 8000 c sigma(A) (N=const) = sigma(Z) (N=const) 10095 if (E_eff0_saddle < A_levdens * hbom3 * << 8001 c sigma(A) (Z=const) = sigma(N) (Z=const) 10096 E_eff0_saddle = A_levdens * hbom3 * << 8002 c 10097 << 8003 c From this we get: 10098 wNsymm_saddle = std::sqrt(0.50 * std::sq << 8004 c sigma(Z) (N=const) * N = sigma(N) (Z=const) * Z 10099 << 8005 c sigma(A) (Z=const) = sigma(Z) (A=const) * A/Z 10100 if (epsilon_symm_scission > 0.0) << 8006 c sigma(N) (Z=const) = sigma(Z) (A=const) * A/Z 10101 { << 8007 c Z*sigma(N) (Z=const) = N*sigma(Z) (N=const) = A*sigma(Z) (A=const) */ 10102 E_HELP = max(E_saddle_scission, epsi << 8008 // 10103 wNsymm_scission = std::sqrt(0.50 * s << 8009 10104 } << 8010 /* Model parameters: 10105 else << 8011 C These parameters have been adjusted to the compound nucleus 238U. 10106 { << 8012 c For the fission of another compound nucleus, it might be 10107 wNsymm_scission = std::sqrt(0.50 * s << 8013 c necessary to slightly adjust some parameter values. 10108 } << 8014 c The most important ones are >> 8015 C Delta_U1_shell_max and >> 8016 c Delta_u2_shell. >> 8017 */ >> 8018 G4double Nheavy1_in; // 'position of shell for Standard 1' >> 8019 Nheavy1_in = 83.0; >> 8020 >> 8021 G4double Zheavy1_in; // 'position of shell for Standard 1' >> 8022 Zheavy1_in = 50.0; >> 8023 >> 8024 G4double Nheavy2; // 'position of heavy peak valley 2' >> 8025 Nheavy2 = 89.0; >> 8026 >> 8027 G4double Delta_U1_shell_max; // 'Shell effect for valley 1' >> 8028 Delta_U1_shell_max = -2.45; >> 8029 >> 8030 G4double U1NZ_SLOPE; // Reduction of shell effect with distance to 132Sn >> 8031 U1NZ_SLOPE = 0.2; >> 8032 >> 8033 G4double Delta_U2_shell; // 'Shell effect for valley 2' >> 8034 Delta_U2_shell = -2.45; >> 8035 >> 8036 G4double X_s2s; // 'Ratio (C_sad/C_scis) of curvature of potential' >> 8037 X_s2s = 0.8; >> 8038 >> 8039 G4double hbom1,hbom2,hbom3; // 'Curvature of potential at saddle' >> 8040 hbom1 = 0.2; // hbom1 is hbar * omega1 / (2 pi) !!! >> 8041 hbom2 = 0.2; // hbom2 is hbar * omega2 / (2 pi) !!! >> 8042 hbom3 = 0.2; // hbom3 is hbar * omega3 / (2 pi) !!! >> 8043 >> 8044 G4double Fwidth_asymm1,Fwidth_asymm2,Fwidth_symm; >> 8045 // 'Factors for widths of distr. valley 1 and 2' >> 8046 Fwidth_asymm1 = 0.65; >> 8047 Fwidth_asymm2 = 0.65; >> 8048 Fwidth_symm = 1.16; >> 8049 >> 8050 G4double xLevdens; // 'Parameter x: a = A/x' >> 8051 xLevdens = 10.75; >> 8052 // The value of 1/0.093 = 10.75 is consistent with the >> 8053 // systematics of the mass widths of Ref. (RuI97). >> 8054 >> 8055 G4double FGAMMA; // 'Factor to gamma' >> 8056 FGAMMA = 1.; // Theoretical expectation, not adjusted to data. >> 8057 // Additional factor to attenuation coefficient of shell effects >> 8058 // with increasing excitation energy >> 8059 >> 8060 G4double FGAMMA1; // 'Factor to gamma_heavy1' >> 8061 FGAMMA1 = 2.; >> 8062 // Adjusted to reduce the weight of Standard 1 with increasing >> 8063 // excitation energies, as required by experimental data. >> 8064 >> 8065 G4double FREDSHELL; >> 8066 FREDSHELL = 0.; >> 8067 // Adjusted to the reduced attenuation of shells in the superfluid region. >> 8068 // If FGAMMA is modified, >> 8069 // FGAMMA * FREADSHELL should remain constant (0.65) to keep >> 8070 // the attenuation of the shell effects below the critical >> 8071 // pairing energy ECRIT unchanged, which has been carefully >> 8072 // adjusted to the mass yields of Vives and Zoeller in this >> 8073 // energy range. A high value of FGAMMA leads ot a stronger >> 8074 // attenuation of shell effects above the superfluid region. >> 8075 >> 8076 G4double Ecrit; >> 8077 Ecrit = 5.; >> 8078 // The value of ECRIT determines the transition from a weak >> 8079 // decrease of the shell effect below ECRIT to a stronger >> 8080 // decrease above the superfluid range. >> 8081 const G4double d = 2.0; // 'Surface distance of scission configuration' >> 8082 // d = 2.0; >> 8083 // Charge polarisation from Wagemanns p. 397: >> 8084 G4double cpol1; // Charge polarisation standard I >> 8085 cpol1 = 0.35; // calculated internally with shells >> 8086 G4double cpol2; // Charge polarisation standard II >> 8087 cpol2 = 0.; // calculated internally from LDM >> 8088 G4double Friction_factor; >> 8089 Friction_factor = 1.0; >> 8090 G4double Nheavy1; // position of valley St 1 in Z and N >> 8091 G4double Delta_U1,Delta_U2; // used shell effects >> 8092 G4double cN_asymm1_shell, cN_asymm2_shell; >> 8093 G4double gamma,gamma_heavy1,gamma_heavy2; // fading of shells >> 8094 G4double E_saddle_scission; // friction from saddle to scission >> 8095 G4double Ysymm=0.; // Yield of symmetric mode >> 8096 G4double Yasymm1=0.; // Yield of asymmetric mode 1 >> 8097 G4double Yasymm2=0.; // Yield of asymmetric mode 2 >> 8098 G4double Nheavy1_eff; // Effective position of valley 1 >> 8099 G4double Nheavy2_eff; // Effective position of valley 2 >> 8100 G4double eexc1_saddle; // Excitation energy above saddle 1 >> 8101 G4double eexc2_saddle; // Excitation energy above saddle 2 >> 8102 G4double EEXC_MAX; // Excitation energy above lowest saddle >> 8103 G4double r_e_o; // Even-odd effect in Z >> 8104 G4double cN_symm; // Curvature of symmetric valley >> 8105 G4double CZ; // Curvature of Z distribution for fixed A >> 8106 G4double Nheavy2_NZ; // Position of Shell 2, combined N and Z >> 8107 G4double N; >> 8108 G4double Aheavy1,Aheavy2; >> 8109 G4double Sasymm1=0.,Sasymm2=0.,Ssymm=0.,Ysum=0.,Yasymm=0.; >> 8110 G4double Ssymm_mode1,Ssymm_mode2; >> 8111 G4double wNasymm1_saddle, wNasymm2_saddle, wNsymm_saddle; >> 8112 G4double wNasymm2_scission, wNsymm_scission; >> 8113 G4double wNasymm1, wNasymm2, wNsymm; >> 8114 G4int imode; >> 8115 G4double rmode; >> 8116 G4double ZA1width; >> 8117 G4double N1r,N2r,A1r,N1,N2; >> 8118 G4double Zsymm,Nsymm; >> 8119 G4double N1mean, N1width; >> 8120 G4double dUeff; >> 8121 /* effective shell effect at lowest barrier */ >> 8122 G4double Eld; >> 8123 /* Excitation energy with respect to ld barrier */ >> 8124 G4double re1,re2,re3; >> 8125 G4double eps1,eps2; >> 8126 G4double Z1UCD,Z2UCD; >> 8127 G4double beta,beta1,beta2; >> 8128 // double betacomplement; >> 8129 G4double DN1_POL; >> 8130 /* shift of most probable neutron number for given Z, >> 8131 according to polarization */ >> 8132 G4int i_help; >> 8133 G4double A_levdens; >> 8134 /* level-density parameter */ >> 8135 // double A_levdens_light1,A_levdens_light2; >> 8136 G4double A_levdens_heavy1,A_levdens_heavy2; >> 8137 >> 8138 G4double R0=1.16; >> 8139 >> 8140 G4double epsilon_1_saddle,epsilon0_1_saddle; >> 8141 G4double epsilon_2_saddle,epsilon0_2_saddle,epsilon_symm_saddle; >> 8142 G4double epsilon_1_scission;//,epsilon0_1_scission; >> 8143 G4double epsilon_2_scission;//,epsilon0_2_scission; >> 8144 G4double epsilon_symm_scission; >> 8145 /* modified energy */ >> 8146 G4double E_eff1_saddle,E_eff2_saddle; >> 8147 G4double Epot0_mode1_saddle,Epot0_mode2_saddle,Epot0_symm_saddle; >> 8148 G4double Epot_mode1_saddle,Epot_mode2_saddle,Epot_symm_saddle; >> 8149 G4double E_defo,E_defo1,E_defo2,E_scission_pre,E_scission_post; >> 8150 G4double E_asym; >> 8151 G4double E1exc,E2exc; >> 8152 G4double E1exc_sigma,E2exc_sigma; >> 8153 G4double TKER; >> 8154 G4double EkinR1,EkinR2; >> 8155 G4double MassCurv_scis, MassCurv_sadd; >> 8156 G4double cN_symm_sadd; >> 8157 G4double Nheavy1_shell,Nheavy2_shell; >> 8158 G4double wNasymm1_scission; >> 8159 G4double Aheavy1_eff,Aheavy2_eff; >> 8160 G4double Z1rr,Z1r; >> 8161 G4double E_HELP; >> 8162 G4double Z_scission,N_scission,A_scission; >> 8163 G4double Z2_over_A_eff; >> 8164 G4double beta1gs,beta2gs,betags; >> 8165 G4double sigZmin; // 'Minimum neutron width for constant Z' >> 8166 G4double DSN132,Delta_U1_shell,E_eff0_saddle;//,e_scission; >> 8167 G4int NbLam0= (*NbLam0_par); >> 8168 // >> 8169 sigZmin = 0.5; >> 8170 N = A - Z; /* neutron number of the fissioning nucleus */ >> 8171 // >> 8172 cN_asymm1_shell = 0.700 * N/Z; >> 8173 cN_asymm2_shell = 0.040 * N/Z; 10109 8174 10110 // Calculate widhts at the scission p << 8175 //********************************************************************* 10111 // fits of ref. Beizin 1991 (Plots by << 10112 8176 10113 if (E_saddle_scission == 0.0) << 8177 DSN132 = Nheavy1_in - N/Z * Zheavy1_in; 10114 { << 8178 Aheavy1 = Nheavy1_in + Zheavy1_in + 0.340 * DSN132; >> 8179 /* Neutron number of valley Standard 1 */ >> 8180 /* It is assumed that the 82-neutron shell effect is stronger than >> 8181 c the 50-proton shell effect. Therefore, the deviation in N/Z of >> 8182 c the fissioning nucleus from the N/Z of 132Sn will >> 8183 c change the position of the combined shell in mass. For neutron- >> 8184 c deficient fissioning nuclei, the mass will increase and vice >> 8185 c versa. */ >> 8186 >> 8187 Delta_U1_shell = Delta_U1_shell_max + U1NZ_SLOPE * std::abs(DSN132); >> 8188 Delta_U1_shell = min(0.,Delta_U1_shell); >> 8189 /* Empirical reduction of shell effect with distance in N/Z of CN to 132Sn */ >> 8190 /* Fits (239U,n)f and 226Th e.-m.-induced fission */ >> 8191 >> 8192 Nheavy1 = N/A * Aheavy1; /* UCD */ >> 8193 Aheavy2 = Nheavy2 * A/N; >> 8194 >> 8195 Zsymm = Z / 2.0; /* proton number in symmetric fission (centre) */ >> 8196 Nsymm = N / 2.0; >> 8197 A_levdens = A / xLevdens; >> 8198 gamma = A_levdens / (0.40 * std::pow(A,1.3333)) * FGAMMA; >> 8199 A_levdens_heavy1 = Aheavy1 / xLevdens; >> 8200 gamma_heavy1 = A_levdens_heavy1 / (0.40 * std::pow(Aheavy1,1.3333)) * FGAMMA * FGAMMA1; >> 8201 A_levdens_heavy2 = Aheavy2 / xLevdens; >> 8202 gamma_heavy2 = A_levdens_heavy2 / (0.40 * std::pow(Aheavy2,1.3333)) * FGAMMA; >> 8203 >> 8204 // Energy dissipated from saddle to scission >> 8205 // F. Rejmund et al., Nucl. Phys. A 678 (2000) 215, fig. 4 b */ >> 8206 E_saddle_scission = (-24. + 0.02227 * Z*Z/std::pow(A,0.33333))*Friction_factor; >> 8207 E_saddle_scission = max( 0.0, E_saddle_scission ); >> 8208 >> 8209 // Fit to experimental result on curvature of potential at saddle >> 8210 // Parametrization of T. Enqvist according to Mulgin et al. 1998 >> 8211 // MassCurv taken at scission. */ >> 8212 >> 8213 Z2_over_A_eff = Z*Z/A; >> 8214 >> 8215 if( Z2_over_A_eff< 34.0 ) >> 8216 MassCurv_scis = std::pow(10., -1.093364 + 0.082933 * Z2_over_A_eff - 0.0002602 * Z2_over_A_eff*Z2_over_A_eff); >> 8217 else >> 8218 MassCurv_scis = std::pow(10., 3.053536 - 0.056477 * Z2_over_A_eff+ 0.0002454 * Z2_over_A_eff*Z2_over_A_eff ); >> 8219 >> 8220 // to do: >> 8221 // fix the X with the channel intensities of 226Th (KHS at SEYSSINS,1998) >> 8222 // replace then (all) cN_symm by cN_symm_saddle (at least for Yields) >> 8223 MassCurv_sadd = X_s2s * MassCurv_scis; >> 8224 >> 8225 cN_symm = 8.0 / std::pow(N,2.) * MassCurv_scis; >> 8226 cN_symm_sadd = 8.0 / std::pow(N,2.) * MassCurv_sadd; >> 8227 >> 8228 Nheavy1_shell = Nheavy1; >> 8229 >> 8230 if(E < 100.0) >> 8231 Nheavy1_eff = (cN_symm_sadd*Nsymm + cN_asymm1_shell * >> 8232 Uwash(E/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1) * >> 8233 Nheavy1_shell) >> 8234 / (cN_symm_sadd + >> 8235 cN_asymm1_shell * >> 8236 Uwash(E/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1)); >> 8237 else >> 8238 Nheavy1_eff = (cN_symm_sadd*Nsymm + >> 8239 cN_asymm1_shell*Nheavy1_shell) >> 8240 / (cN_symm_sadd + >> 8241 cN_asymm1_shell); >> 8242 >> 8243 /* Position of Standard II defined by neutron shell */ >> 8244 Nheavy2_NZ = Nheavy2; >> 8245 Nheavy2_shell = Nheavy2_NZ; >> 8246 if (E < 100.) >> 8247 Nheavy2_eff = (cN_symm_sadd*Nsymm + >> 8248 cN_asymm2_shell* >> 8249 Uwash(E/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2) * >> 8250 Nheavy2_shell) >> 8251 / (cN_symm_sadd + >> 8252 cN_asymm2_shell* >> 8253 Uwash(E/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2)); >> 8254 else >> 8255 Nheavy2_eff = (cN_symm_sadd*Nsymm + >> 8256 cN_asymm2_shell*Nheavy2_shell) >> 8257 / (cN_symm_sadd + >> 8258 cN_asymm2_shell); >> 8259 >> 8260 Delta_U1 = Delta_U1_shell + (Nheavy1_shell - Nheavy1_eff)*(Nheavy1_shell - Nheavy1_eff) * cN_asymm1_shell; /* shell effect in valley of mode 1 */ >> 8261 Delta_U1 = min(Delta_U1,0.0); >> 8262 Delta_U2 = Delta_U2_shell + (Nheavy2_shell - Nheavy2_eff)*(Nheavy2_shell - Nheavy2_eff) * cN_asymm2_shell; /* shell effect in valley of mode 2 */ >> 8263 Delta_U2 = min(Delta_U2,0.0); >> 8264 >> 8265 // liquid drop energies at the centres of the different shell effects >> 8266 // with respect to liquid drop at symmetry >> 8267 Epot0_mode1_saddle = (Nheavy1_eff-Nsymm)*(Nheavy1_eff-Nsymm) * cN_symm_sadd; >> 8268 Epot0_mode2_saddle = (Nheavy2_eff-Nsymm)*(Nheavy2_eff-Nsymm) * cN_symm_sadd; >> 8269 Epot0_symm_saddle = 0.0; >> 8270 >> 8271 // energies including shell effects at the centres of the different >> 8272 // shell effects with respect to liquid drop at symmetry */ >> 8273 Epot_mode1_saddle = Epot0_mode1_saddle + Delta_U1; >> 8274 Epot_mode2_saddle = Epot0_mode2_saddle + Delta_U2; >> 8275 Epot_symm_saddle = Epot0_symm_saddle; >> 8276 >> 8277 // minimum of potential with respect to ld potential at symmetry >> 8278 dUeff = min( Epot_mode1_saddle, Epot_mode2_saddle); >> 8279 dUeff = min( dUeff, Epot_symm_saddle); >> 8280 dUeff = dUeff - Epot_symm_saddle; >> 8281 >> 8282 Eld = E + dUeff; >> 8283 // E = energy above lowest effective barrier >> 8284 // Eld = energy above liquid-drop barrier >> 8285 // Due to this treatment the energy E on input means the excitation >> 8286 // energy above the lowest saddle. */ >> 8287 >> 8288 // excitation energies at saddle modes 1 and 2 without shell effect */ >> 8289 epsilon0_1_saddle = Eld - Epot0_mode1_saddle; >> 8290 epsilon0_2_saddle = Eld - Epot0_mode2_saddle; >> 8291 >> 8292 // excitation energies at saddle modes 1 and 2 with shell effect */ >> 8293 epsilon_1_saddle = Eld - Epot_mode1_saddle; >> 8294 epsilon_2_saddle = Eld - Epot_mode2_saddle; >> 8295 >> 8296 epsilon_symm_saddle = Eld - Epot_symm_saddle; >> 8297 // epsilon_symm_saddle = Eld - dUeff; >> 8298 >> 8299 eexc1_saddle = epsilon_1_saddle; >> 8300 eexc2_saddle = epsilon_2_saddle; >> 8301 >> 8302 // EEXC_MAX is energy above the lowest saddle */ >> 8303 EEXC_MAX = max( eexc1_saddle, eexc2_saddle); >> 8304 EEXC_MAX = max( EEXC_MAX, Eld); >> 8305 >> 8306 // excitation energy at scission */ >> 8307 epsilon_1_scission = Eld + E_saddle_scission - Epot_mode1_saddle; >> 8308 epsilon_2_scission = Eld + E_saddle_scission - Epot_mode2_saddle; >> 8309 >> 8310 // excitation energy of symmetric fragment at scission */ >> 8311 epsilon_symm_scission = Eld + E_saddle_scission - Epot_symm_saddle; >> 8312 >> 8313 // calculate widhts at the saddle >> 8314 E_eff1_saddle = epsilon0_1_saddle - Delta_U1 * >> 8315 Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1); >> 8316 >> 8317 if( E_eff1_saddle < A_levdens * hbom1*hbom1) >> 8318 E_eff1_saddle = A_levdens * hbom1*hbom1; >> 8319 >> 8320 wNasymm1_saddle = >> 8321 std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_eff1_saddle) / >> 8322 (cN_asymm1_shell * >> 8323 Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1)+ >> 8324 cN_symm_sadd)); >> 8325 >> 8326 E_eff2_saddle = epsilon0_2_saddle - >> 8327 Delta_U2 * >> 8328 Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2); >> 8329 >> 8330 if(E_eff2_saddle < A_levdens * hbom2*hbom2) >> 8331 E_eff2_saddle = A_levdens * hbom2*hbom2; >> 8332 >> 8333 wNasymm2_saddle = >> 8334 std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_eff2_saddle) / >> 8335 (cN_asymm2_shell * >> 8336 Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2)+ >> 8337 cN_symm_sadd)); >> 8338 >> 8339 E_eff0_saddle = epsilon_symm_saddle; >> 8340 if(E_eff0_saddle < A_levdens * hbom3*hbom3) >> 8341 E_eff0_saddle = A_levdens * hbom3*hbom3; >> 8342 >> 8343 wNsymm_saddle = >> 8344 std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_eff0_saddle) / >> 8345 cN_symm_sadd); >> 8346 >> 8347 if(epsilon_symm_scission > 0.0 ){ >> 8348 E_HELP = max(E_saddle_scission,epsilon_symm_scission); >> 8349 wNsymm_scission = >> 8350 std::sqrt(0.50 * std::sqrt(1.0/A_levdens*(E_HELP)) / >> 8351 cN_symm); >> 8352 }else{ >> 8353 wNsymm_scission = >> 8354 std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_saddle_scission) / >> 8355 cN_symm); >> 8356 } >> 8357 >> 8358 // Calculate widhts at the scission point: >> 8359 // fits of ref. Beizin 1991 (Plots by Sergei Zhdanov) >> 8360 >> 8361 if( E_saddle_scission == 0.0 ){ 10115 wNasymm1_scission = wNasymm1_saddle; 8362 wNasymm1_scission = wNasymm1_saddle; 10116 wNasymm2_scission = wNasymm2_saddle; 8363 wNasymm2_scission = wNasymm2_saddle; 10117 } << 8364 }else{ 10118 else << 8365 if( Nheavy1_eff > 75.0 ){ 10119 { << 8366 wNasymm1_scission = std::sqrt(21.0)*N/A; 10120 if (Nheavy1_eff > 75.0) << 8367 wNasymm2_scission = max( 12.8 - 1.0 *(92.0 - Nheavy2_eff),1.0)*N/A; 10121 { << 8368 10122 wNasymm1_scission = std::sqrt(21 << 8369 }else{ 10123 wNasymm2_scission = max(12.8 - 1 << 8370 wNasymm1_scission = wNasymm1_saddle; >> 8371 wNasymm2_scission = wNasymm2_saddle; 10124 } 8372 } 10125 else << 8373 } 10126 { << 10127 wNasymm1_scission = wNasymm1_sad << 10128 wNasymm2_scission = wNasymm2_sad << 10129 } << 10130 } << 10131 << 10132 wNasymm1_scission = max(wNasymm1_scissio << 10133 wNasymm2_scission = max(wNasymm2_scissio << 10134 << 10135 wNasymm1 = wNasymm1_scission * Fwidth_as << 10136 wNasymm2 = wNasymm2_scission * Fwidth_as << 10137 wNsymm = wNsymm_scission * Fwidth_symm; << 10138 << 10139 // mass and charge of fragments usin << 10140 Aheavy1_eff = Nheavy1_eff * A / N; << 10141 Aheavy2_eff = Nheavy2_eff * A / N; << 10142 << 10143 A_levdens_heavy1 = Aheavy1_eff / xLevden << 10144 A_levdens_heavy2 = Aheavy2_eff / xLevden << 10145 gamma_heavy1 = A_levdens_heavy1 / (0.40 << 10146 gamma_heavy2 = A_levdens_heavy2 / (0.40 << 10147 << 10148 if (epsilon_symm_saddle < A_levdens * hb << 10149 Ssymm = 2.0 * std::sqrt(A_levdens * << 10150 (epsilon_symm_saddle - A_lev << 10151 else << 10152 Ssymm = 2.0 * std::sqrt(A_levdens * << 10153 << 10154 Ysymm = 1.0; << 10155 << 10156 if (epsilon0_1_saddle < A_levdens * hbom << 10157 Ssymm_mode1 = 2.0 * std::sqrt(A_levd << 10158 (epsilon0_1_saddle - A << 10159 else << 10160 Ssymm_mode1 = 2.0 * std::sqrt(A_levd << 10161 << 10162 if (epsilon0_2_saddle < A_levdens * hbom << 10163 Ssymm_mode2 = 2.0 * std::sqrt(A_levd << 10164 (epsilon0_2_saddle - A << 10165 else << 10166 Ssymm_mode2 = 2.0 * std::sqrt(A_levd << 10167 << 10168 if (epsilon0_1_saddle - Delta_U1 * Uwash << 10169 A_levdens * hbom1 * hbom1) << 10170 Sasymm1 = << 10171 2.0 * std::sqrt(A_levdens * A_le << 10172 (epsilon0_1_saddle - Delta_U1 * << 10173 A_levdens * hbom1 * hbom1) / << 10174 hbom1; << 10175 else << 10176 Sasymm1 = 2.0 * std::sqrt(A_levdens << 10177 (epsilon0_ << 10178 Delta_U1 << 10179 << 10180 if (epsilon0_2_saddle - Delta_U2 * Uwash << 10181 A_levdens * hbom2 * hbom2) << 10182 Sasymm2 = << 10183 2.0 * std::sqrt(A_levdens * A_le << 10184 (epsilon0_1_saddle - Delta_U1 * << 10185 A_levdens * hbom2 * hbom2) / << 10186 hbom2; << 10187 else << 10188 Sasymm2 = 2.0 * std::sqrt(A_levdens << 10189 (epsilon0_ << 10190 Delta_U2 << 10191 8374 10192 Yasymm1 = (std::exp(Sasymm1 - Ssymm) - s << 8375 wNasymm1_scission = max( wNasymm1_scission, wNasymm1_saddle ); >> 8376 wNasymm2_scission = max( wNasymm2_scission, wNasymm2_saddle ); 10193 8377 10194 Yasymm2 = (std::exp(Sasymm2 - Ssymm) - s << 8378 wNasymm1 = wNasymm1_scission * Fwidth_asymm1; >> 8379 wNasymm2 = wNasymm2_scission * Fwidth_asymm2; >> 8380 wNsymm = wNsymm_scission * Fwidth_symm; >> 8381 >> 8382 // mass and charge of fragments using UCD, needed for level densities >> 8383 Aheavy1_eff = Nheavy1_eff * A/N; >> 8384 Aheavy2_eff = Nheavy2_eff * A/N; >> 8385 >> 8386 A_levdens_heavy1 = Aheavy1_eff / xLevdens; >> 8387 A_levdens_heavy2 = Aheavy2_eff / xLevdens; >> 8388 gamma_heavy1 = A_levdens_heavy1 / (0.40 * std::pow(Aheavy1_eff,1.3333)) * FGAMMA * FGAMMA1; >> 8389 gamma_heavy2 = A_levdens_heavy2 / (0.40 * std::pow(Aheavy2_eff,1.3333)) * FGAMMA; >> 8390 >> 8391 if( epsilon_symm_saddle < A_levdens * hbom3*hbom3) >> 8392 Ssymm = 2.0 * std::sqrt(A_levdens*A_levdens * hbom3*hbom3) + >> 8393 (epsilon_symm_saddle - A_levdens * hbom3*hbom3)/hbom3; >> 8394 else >> 8395 Ssymm = 2.0 * std::sqrt(A_levdens*epsilon_symm_saddle); >> 8396 >> 8397 Ysymm = 1.0; >> 8398 >> 8399 if( epsilon0_1_saddle < A_levdens * hbom1*hbom1 ) >> 8400 Ssymm_mode1 = 2.0 * std::sqrt(A_levdens*A_levdens * hbom1*hbom1) + >> 8401 (epsilon0_1_saddle - A_levdens * hbom1*hbom1)/hbom1; >> 8402 else >> 8403 Ssymm_mode1 = 2.0 * std::sqrt( A_levdens*epsilon0_1_saddle ); >> 8404 >> 8405 if( epsilon0_2_saddle < A_levdens * hbom2*hbom2 ) >> 8406 Ssymm_mode2 = 2.0 * std::sqrt(A_levdens*A_levdens * hbom2*hbom2) + >> 8407 (epsilon0_2_saddle - A_levdens * hbom2*hbom2)/hbom2; >> 8408 else >> 8409 Ssymm_mode2 = 2.0 * std::sqrt(A_levdens*epsilon0_2_saddle); >> 8410 >> 8411 >> 8412 if( epsilon0_1_saddle - >> 8413 Delta_U1* >> 8414 Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1) >> 8415 < A_levdens * hbom1*hbom1 ) >> 8416 Sasymm1 = 2.0 * std::sqrt( A_levdens*A_levdens * hbom1*hbom1 ) + >> 8417 (epsilon0_1_saddle - Delta_U1 * >> 8418 Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1) >> 8419 - A_levdens * hbom1*hbom1)/hbom1; >> 8420 else >> 8421 Sasymm1 = 2.0 *std::sqrt( A_levdens*(epsilon0_1_saddle - Delta_U1 * >> 8422 Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1))); >> 8423 >> 8424 if( epsilon0_2_saddle - >> 8425 Delta_U2* >> 8426 Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2) >> 8427 < A_levdens * hbom2*hbom2 ) >> 8428 Sasymm2 = 2.0 * std::sqrt( A_levdens*A_levdens * hbom2*hbom2 ) + >> 8429 (epsilon0_1_saddle-Delta_U1 * >> 8430 Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2) >> 8431 - A_levdens * hbom2*hbom2)/hbom2; >> 8432 else >> 8433 Sasymm2 = 2.0 * >> 8434 std::sqrt( A_levdens*(epsilon0_2_saddle - Delta_U2 * >> 8435 Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2))); >> 8436 >> 8437 Yasymm1 = ( std::exp(Sasymm1 - Ssymm) - std::exp(Ssymm_mode1 - Ssymm) ) * >> 8438 wNasymm1_saddle / wNsymm_saddle * 2.0; 10195 8439 10196 Ysum = Ysymm + Yasymm1 + Yasymm2; /* nor << 8440 Yasymm2 = ( std::exp(Sasymm2 - Ssymm) - std::exp(Ssymm_mode2 - Ssymm) ) * >> 8441 wNasymm2_saddle / wNsymm_saddle * 2.0; 10197 8442 10198 if (Ysum > 0.00) << 8443 Ysum = Ysymm + Yasymm1 + Yasymm2; /* normalize */ 10199 { << 8444 >> 8445 if( Ysum > 0.00 ){ 10200 Ysymm = Ysymm / Ysum; 8446 Ysymm = Ysymm / Ysum; 10201 Yasymm1 = Yasymm1 / Ysum; 8447 Yasymm1 = Yasymm1 / Ysum; 10202 Yasymm2 = Yasymm2 / Ysum; 8448 Yasymm2 = Yasymm2 / Ysum; 10203 Yasymm = Yasymm1 + Yasymm2; 8449 Yasymm = Yasymm1 + Yasymm2; 10204 } << 8450 }else{ 10205 else << 10206 { << 10207 Ysymm = 0.0; 8451 Ysymm = 0.0; 10208 Yasymm1 = 0.0; 8452 Yasymm1 = 0.0; 10209 Yasymm2 = 0.0; 8453 Yasymm2 = 0.0; 10210 // search minimum threshold an << 8454 // search minimum threshold and attribute all events to this mode */ 10211 if ((epsilon_symm_saddle < epsilon_1 << 8455 if( (epsilon_symm_saddle < epsilon_1_saddle) && 10212 Ysymm = 1.0; << 8456 (epsilon_symm_saddle < epsilon_2_saddle) ) 10213 else if (epsilon_1_saddle < epsilon_ << 8457 Ysymm = 1.0; 10214 Yasymm1 = 1.0; << 10215 else 8458 else >> 8459 if( epsilon_1_saddle < epsilon_2_saddle ) >> 8460 Yasymm1 = 1.0; >> 8461 else 10216 Yasymm2 = 1.0; 8462 Yasymm2 = 1.0; 10217 } << 8463 } 10218 // even-odd effect << 8464 // even-odd effect 10219 // Parametrization from Rejmund et al. << 8465 // Parametrization from Rejmund et al. 10220 if (mod(Z, 2.0) == 0) << 8466 if (mod(Z,2.0)== 0) 10221 r_e_o = std::pow(10.0, -0.0170 * (E_ << 8467 r_e_o = std::pow(10.0,-0.0170 * (E_saddle_scission + Eld)*(E_saddle_scission + Eld)); 10222 else << 8468 else 10223 r_e_o = 0.0; << 8469 r_e_o = 0.0; 10224 << 8470 10225 /* --------------------------------- << 8471 /* ------------------------------------------------------- 10226 c selecting the fission mode using t << 8472 c selecting the fission mode using the yields at scission 10227 c ---------------------------------- << 8473 c ------------------------------------------------------- 10228 c random decision: symmetric or asym << 8474 c random decision: symmetric or asymmetric 10229 c IMODE = 1 means asymmetric fission << 8475 c IMODE = 1 means asymmetric fission, mode 1 10230 c IMODE = 2 means asymmetric fission << 8476 c IMODE = 2 means asymmetric fission, mode 2 10231 c IMODE = 3 means symmetric fission << 8477 c IMODE = 3 means symmetric fission 10232 c testcase: 238U, E*= 6 MeV : 646 << 8478 c testcase: 238U, E*= 6 MeV : 6467 8781 4752 (20000) 10233 c 12779 << 8479 c 127798 176480 95722 (400000) 10234 c 31991 << 8480 c 319919 440322 239759 (1000000) 10235 c E*=12 MeV : 15340 << 8481 c E*=12 MeV : 153407 293063 553530 (1000000) */ 10236 << 8482 10237 fiss321: // rmode = DBLE(HAZ(k)) << 8483 fiss321: // rmode = DBLE(HAZ(k)) 10238 rmode = G4AblaRandom::flat(); << 8484 rmode = G4AblaRandom::flat(); 10239 if (rmode < Yasymm1) << 8485 if( rmode < Yasymm1 ) 10240 imode = 1; << 8486 imode = 1; 10241 else if ((rmode > Yasymm1) && (rmode < Y << 8487 else 10242 imode = 2; << 8488 if( (rmode > Yasymm1) && (rmode < Yasymm) ) 10243 else << 8489 imode = 2; 10244 imode = 3; << 8490 else 10245 << 8491 imode = 3; 10246 // determine parameters of the neutro << 8492 10247 // at scission << 8493 // determine parameters of the neutron distribution of each mode 10248 << 8494 // at scission 10249 if (imode == 1) << 8495 10250 { << 8496 if( imode == 1){ 10251 N1mean = Nheavy1_eff; << 8497 N1mean = Nheavy1_eff; 10252 N1width = wNasymm1; << 8498 N1width = wNasymm1; 10253 } << 8499 }else{ 10254 else << 8500 if( imode == 2 ){ 10255 { << 8501 N1mean = Nheavy2_eff; 10256 if (imode == 2) << 8502 N1width = wNasymm2; 10257 { << 8503 }else{ 10258 N1mean = Nheavy2_eff; << 8504 //if( imode == 3 ) then 10259 N1width = wNasymm2; << 8505 N1mean = Nsymm; 10260 } << 8506 N1width = wNsymm; 10261 else << 8507 } 10262 { << 8508 } 10263 // if( imode == 3 ) then << 10264 N1mean = Nsymm; << 10265 N1width = wNsymm; << 10266 } << 10267 } << 10268 8509 10269 // N2mean needed by CZ below << 8510 // N2mean needed by CZ below 10270 // N2mean = N - N1mean; 8511 // N2mean = N - N1mean; 10271 << 8512 10272 // fission mode found, then the dete << 8513 // fission mode found, then the determination of the 10273 // neutron numbers N1 and N2 at scis << 8514 // neutron numbers N1 and N2 at scission by randon decision 10274 N1r = 1.0; << 8515 N1r = 1.0; 10275 N2r = 1.0; << 8516 N2r = 1.0; 10276 while (N1r < 5.0 || N2r < 5.0) << 8517 while( N1r < 5.0 || N2r < 5.0 ){ 10277 { << 8518 // N1r = DBLE(GaussHaz(k,sngl(N1mean), sngl(N1width) )) 10278 // N1r = DBLE(GaussHaz(k,sngl(N1mea << 10279 // N1r = N1mean+G4AblaRandom::gaus(N 8519 // N1r = N1mean+G4AblaRandom::gaus(N1width);// 10280 N1r = gausshaz(0, N1mean, N1width); << 8520 N1r = gausshaz(0,N1mean,N1width); 10281 N2r = N - N1r; << 8521 N2r = N - N1r; 10282 } << 8522 } 10283 8523 10284 // --------------------------------- << 8524 // -------------------------------------------------- 10285 // first approximation of fission fr << 8525 // first approximation of fission fragments using UCD at saddle 10286 // --------------------------------- << 8526 // -------------------------------------------------- 10287 Z1UCD = Z / N * N1r; << 8527 Z1UCD = Z/N * N1r; 10288 Z2UCD = Z / N * N2r; << 8528 Z2UCD = Z/N * N2r; 10289 A1r = A / N * N1r; << 8529 A1r = A/N * N1r; 10290 // << 8530 // 10291 // -------------------------- << 8531 // -------------------------- 10292 // deformations: starting ... << 8532 // deformations: starting ... 10293 // -------------------------- */ << 8533 // -------------------------- */ 10294 if (imode == 1) << 8534 if( imode == 1 ){ 10295 { << 8535 // --- N = 82 */ 10296 // --- N = 82 */ << 8536 E_scission_pre = max( epsilon_1_scission, 1.0 ); 10297 E_scission_pre = max(epsilon_1_sciss << 8537 // ! Eexc at scission, neutron evaporation from saddle to scission not considered */ 10298 // ! Eexc at scission, neutron eva << 8538 if( N1mean > N*0.50 ){ 10299 // considered */ << 8539 beta1 = 0.0; /* 1. fragment is spherical */ 10300 if (N1mean > N * 0.50) << 8540 beta2 = 0.55; /* 2. fragment is deformed 0.5*/ 10301 { << 8541 }else{ 10302 beta1 = 0.0; /* 1. fragment i << 8542 beta1 = 0.55; /* 1. fragment is deformed 0.5*/ 10303 beta2 = 0.55; /* 2. fragment i << 8543 beta2 = 0.00; /* 2. fragment is spherical */ 10304 } << 8544 } 10305 else << 8545 } 10306 { << 8546 if( imode == 2 ){ 10307 beta1 = 0.55; /* 1. fragment is << 8547 // --- N appr. 86 */ 10308 beta2 = 0.00; /* 2. fragment is << 8548 E_scission_pre = max( epsilon_2_scission, 1.0 ); 10309 } << 8549 if( N1mean > N*0.50 ){ 10310 } << 8550 beta1 = (N1r - 92.0) * 0.030 + 0.60; 10311 if (imode == 2) << 8551 10312 { << 8552 beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)]; 10313 // --- N appr. 86 */ << 8553 beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)]; 10314 E_scission_pre = max(epsilon_2_sciss << 8554 10315 if (N1mean > N * 0.50) << 8555 beta1 = max(beta1,beta1gs); 10316 { << 8556 beta2 = 1.0 - beta1; 10317 beta1 = (N1r - 92.0) * 0.030 + 0 << 8557 beta2 = max(beta2,beta2gs); 10318 << 8558 }else{ 10319 beta1gs = ecld->beta2[idint(N1r) << 8559 10320 beta2gs = ecld->beta2[idint(N2r) << 8560 beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)]; 10321 << 8561 beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)]; 10322 beta1 = max(beta1, beta1gs); << 8562 10323 beta2 = 1.0 - beta1; << 8563 beta2 = (N2r -92.0) * 0.030 + 0.60; 10324 beta2 = max(beta2, beta2gs); << 8564 beta2 = max(beta2,beta2gs); >> 8565 beta1 = 1.0 - beta2; >> 8566 beta1 = max(beta1,beta1gs); 10325 } 8567 } 10326 else << 8568 } 10327 { << 8569 beta = 0.0; 10328 << 8570 if( imode == 3 ){ 10329 beta1gs = ecld->beta2[idint(N1r) << 8571 // if( imode >0 ){ 10330 beta2gs = ecld->beta2[idint(N2r) << 8572 // --- Symmetric fission channel 10331 << 8573 // the fit function for beta is the deformation for optimum energy 10332 beta2 = (N2r - 92.0) * 0.030 + 0 << 8574 // at the scission point, d = 2 10333 beta2 = max(beta2, beta2gs); << 8575 // beta : deformation of symmetric fragments 10334 beta1 = 1.0 - beta2; << 8576 // beta1 : deformation of first fragment 10335 beta1 = max(beta1, beta1gs); << 8577 // beta2 : deformation of second fragment 10336 } << 10337 } << 10338 beta = 0.0; << 10339 if (imode == 3) << 10340 { << 10341 // if( imode >0 ){ << 10342 // --- Symmetric fission channel << 10343 // the fit function for beta i << 10344 // at the scission point, d = << 10345 // beta : deformation of symm << 10346 // beta1 : deformation of firs << 10347 // beta2 : deformation of seco << 10348 betags = ecld->beta2[idint(Nsymm)][i 8578 betags = ecld->beta2[idint(Nsymm)][idint(Zsymm)]; 10349 beta1gs = ecld->beta2[idint(N1r)][id 8579 beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)]; 10350 beta2gs = ecld->beta2[idint(N2r)][id 8580 beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)]; 10351 beta = max(0.177963 + 0.0153241 * Zs << 8581 beta = max(0.177963+0.0153241*Zsymm-1.62037e-4*Zsymm*Zsymm,betags); 10352 beta1 = max(0.177963 + 0.0153241 * Z << 8582 beta1 = max(0.177963+0.0153241*Z1UCD-1.62037e-4*Z1UCD*Z1UCD,beta1gs); 10353 beta2 = max(0.177963 + 0.0153241 * Z << 8583 beta2 = max(0.177963+0.0153241*Z2UCD-1.62037e-4*Z2UCD*Z2UCD,beta2gs); 10354 << 8584 10355 E_asym = frldm(Z1UCD, N1r, beta1) + << 8585 E_asym = frldm( Z1UCD, N1r, beta1 ) + 10356 ecoul(Z1UCD, N1r, beta1, Z2 << 8586 frldm( Z2UCD, N2r, beta2 ) + 10357 ecoul(Zsymm, Nsymm, beta, Z << 8587 ecoul( Z1UCD, N1r, beta1, Z2UCD, N2r, beta2, 2.0 ) - 10358 E_scission_pre = max(epsilon_symm_sc << 8588 2.0 * frldm( Zsymm, Nsymm, beta ) - 10359 } << 8589 ecoul( Zsymm, Nsymm, beta, Zsymm, Nsymm, beta, 2.0 ); 10360 // ----------------------- << 8590 E_scission_pre = max( epsilon_symm_scission - E_asym, 1. ); 10361 // ... end of deformations << 8591 } 10362 // ----------------------- << 8592 // ----------------------- 10363 << 8593 // ... end of deformations 10364 // --------------------------------- << 8594 // ----------------------- 10365 // evaporation from saddle to scissi << 8595 10366 // --------------------------------- << 8596 // ------------------------------------------ 10367 if (E_scission_pre > 5. && NbLam0 < 1) << 8597 // evaporation from saddle to scission ... 10368 { << 8598 // ------------------------------------------ 10369 evap_postsaddle( << 8599 if(E_scission_pre>5. && NbLam0<1){ 10370 A, Z, E_scission_pre, &E_scissio << 8600 evap_postsaddle(A,Z,E_scission_pre,&E_scission_post, 10371 N_scission = A_scission - Z_scission << 8601 &A_scission,&Z_scission,vx_eva_sc,vy_eva_sc,vz_eva_sc,&NbLam0); 10372 } << 8602 N_scission = A_scission - Z_scission; 10373 else << 8603 }else{ 10374 { << 8604 A_scission = A; 10375 A_scission = A; << 8605 Z_scission = Z; 10376 Z_scission = Z; << 8606 E_scission_post = E_scission_pre; 10377 E_scission_post = E_scission_pre; << 8607 N_scission = A_scission - Z_scission; 10378 N_scission = A_scission - Z_scission << 8608 } 10379 } << 8609 // --------------------------------------------------- 10380 // --------------------------------- << 8610 // second approximation of fission fragments using UCD 10381 // second approximation of fission f << 8611 // --------------------------------------------------- */ 10382 // --------------------------------- << 8612 // 10383 // << 8613 N1r = N1r * N_scission / N; 10384 N1r = N1r * N_scission / N; << 8614 N2r = N2r * N_scission / N; 10385 N2r = N2r * N_scission / N; << 8615 Z1UCD = Z1UCD * Z_scission / Z; 10386 Z1UCD = Z1UCD * Z_scission / Z; << 8616 Z2UCD = Z2UCD * Z_scission / Z; 10387 Z2UCD = Z2UCD * Z_scission / Z; << 8617 A1r = Z1UCD + N1r; 10388 A1r = Z1UCD + N1r; << 8618 10389 << 8619 // --------------------------------------------------------- 10390 // --------------------------------- << 8620 // determination of the charge and mass of the fragments ... 10391 // determination of the charge and m << 8621 // --------------------------------------------------------- 10392 // --------------------------------- << 8622 10393 << 8623 // - CZ is the curvature of charge distribution for fixed mass, 10394 // - CZ is the curvature of charge d << 8624 // common to all modes, gives the width of the charge distribution. 10395 // common to all modes, gives the << 8625 // The physics picture behind is that the division of the 10396 // The physics picture behind is t << 8626 // fissioning nucleus in N and Z is slow when mass transport from 10397 // fissioning nucleus in N and Z i << 8627 // one nascent fragment to the other is concerned but fast when the 10398 // one nascent fragment to the oth << 8628 // N/Z degree of freedom is concernded. In addition, the potential 10399 // N/Z degree of freedom is concer << 8629 // minima in direction of mass transport are broad compared to the 10400 // minima in direction of mass tra << 8630 // potential minimum in N/Z direction. 10401 // potential minimum in N/Z direct << 8631 // The minima in direction of mass transport are calculated 10402 // The minima in direction of m << 8632 // by the liquid-drop (LD) potential (for superlong mode), 10403 // by the liquid-drop (LD) pote << 8633 // by LD + N=82 shell (for standard 1 mode) and 10404 // by LD + N=82 shell (for stan << 8634 // by LD + N=86 shell (for standard 2 mode). 10405 // by LD + N=86 shell (for stan << 8635 // Since the variation of N/Z is fast, it can quickly adjust to 10406 // Since the variation of N/Z i << 8636 // the potential and is thus determined close to scission. 10407 // the potential and is thus de << 8637 // Thus, we calculate the mean N/Z and its width for fixed mass 10408 // Thus, we calculate the mean << 8638 // at scission. 10409 // at scission. << 8639 // For the SL mode, the mean N/Z is calculated by the 10410 // For the SL mode, the mean N/ << 8640 // minimum of the potential at scission as a function of N/Z for 10411 // minimum of the potential at << 8641 // fixed mass. 10412 // fixed mass. << 8642 // For the S1 and S2 modes, this correlation is imposed by the 10413 // For the S1 and S2 modes, thi << 8643 // empirical charge polarisation. 10414 // empirical charge polarisatio << 8644 // For the SL mode, the fluctuation in this width is calculated 10415 // For the SL mode, the fluctua << 8645 // from the curvature of the potential at scission as a function 10416 // from the curvature of the po << 8646 // of N/Z. This value is also used for the widths of S1 and S2. 10417 // of N/Z. This value is also u << 8647 10418 << 8648 10419 // Polarisation assumed for standard << 8649 // Polarisation assumed for standard I and standard II: 10420 // Z - Zucd = cpol (for A = const); << 8650 // Z - Zucd = cpol (for A = const); 10421 // from this we get (see remarks ab << 8651 // from this we get (see remarks above) 10422 // Z - Zucd = Acn/Ncn * cpol (for << 8652 // Z - Zucd = Acn/Ncn * cpol (for N = const) */ 10423 // << 8653 // 10424 CZ = (frldm(Z1UCD - 1.0, N1r + 1.0, beta << 8654 CZ = ( frldm( Z1UCD-1.0, N1r+1.0, beta1 ) + 10425 frldm(Z1UCD + 1.0, N1r - 1.0, beta << 8655 frldm( Z2UCD+1.0, N2r-1.0, beta2 ) + 10426 ecoul(Z1UCD - 1.0, N1r + 1.0, beta << 8656 frldm( Z1UCD+1.0, N1r-1.0, beta1 ) + 10427 ecoul(Z1UCD + 1.0, N1r - 1.0, beta << 8657 frldm( Z2UCD-1.0, N2r+1.0, beta2 ) + 10428 2.0 * ecoul(Z1UCD, N1r, beta1, Z2U << 8658 ecoul( Z1UCD-1.0, N1r+1.0, beta1, 10429 2.0 * frldm(Z2UCD, N2r, beta2)) * << 8659 Z2UCD+1.0, N2r-1.0, beta2, 2.0) + 10430 0.50; << 8660 ecoul( Z1UCD+1.0, N1r-1.0, beta1, 10431 // << 8661 Z2UCD-1.0, N2r+1.0, beta2, 2.0) - 10432 if (1.0 / A_levdens * E_scission_post < << 8662 2.0*ecoul( Z1UCD, N1r, beta1, Z2UCD, N2r, beta2, 2.0) - >> 8663 2.0*frldm( Z1UCD, N1r, beta1 ) - >> 8664 2.0*frldm( Z2UCD, N2r, beta2) ) * 0.50; >> 8665 // >> 8666 if(1.0/A_levdens*E_scission_post < 0.0) 10433 std::cout << "DSQRT 1 < 0" << A_levd 8667 std::cout << "DSQRT 1 < 0" << A_levdens << " " << E_scission_post << std::endl; 10434 << 8668 10435 if (0.50 * std::sqrt(1.0 / A_levdens * E << 8669 if(0.50 * std::sqrt(1.0/A_levdens*E_scission_post) / CZ < 0.0){ 10436 { << 10437 std::cout << "DSQRT 2 < 0 " << CZ << 8670 std::cout << "DSQRT 2 < 0 " << CZ << std::endl; 10438 std::cout << "This event was not con 8671 std::cout << "This event was not considered" << std::endl; 10439 goto fiss321; 8672 goto fiss321; 10440 } << 8673 } 10441 8674 10442 ZA1width = std::sqrt(0.5 * std::sqrt(1.0 << 8675 ZA1width = std::sqrt(0.5*std::sqrt(1.0/A_levdens*E_scission_post)/CZ); 10443 8676 10444 // Minimum width in N/Z imposed. << 8677 // Minimum width in N/Z imposed. 10445 // Value of minimum width taken from << 8678 // Value of minimum width taken from 235U(nth,f) data 10446 // sigma_Z(A=const) = 0.4 to 0.5 (f << 8679 // sigma_Z(A=const) = 0.4 to 0.5 (from Lang paper Nucl Phys. A345 (1980) 34) 10447 // 34) sigma_N(Z=const) = 0.45 * A/Z << 8680 // sigma_N(Z=const) = 0.45 * A/Z (= 1.16 for 238U) 10448 // therefore: SIGZMIN = 1.16 << 8681 // therefore: SIGZMIN = 1.16 10449 // Physics; variation in N/Z for fix << 8682 // Physics; variation in N/Z for fixed A assumed. 10450 // Thermal energy at scission is re << 8683 // Thermal energy at scission is reduced by 10451 // pre-scission neutron evaporation << 8684 // pre-scission neutron evaporation" 10452 << 8685 10453 ZA1width = max(ZA1width, sigZmin); << 8686 ZA1width = max(ZA1width,sigZmin); 10454 << 8687 10455 if (imode == 1 && cpol1 != 0.0) << 8688 if(imode == 1 && cpol1 != 0.0){ 10456 { << 8689 // --- asymmetric fission, mode 1 */ 10457 // --- asymmetric fission, mod << 8690 G4int IS = 0; >> 8691 fiss2801: >> 8692 Z1rr = Z1UCD - cpol1 * A_scission/N_scission; >> 8693 // Z1r = DBLE(GaussHaz(k,sngl(Z1rr), sngl(ZA1width) )); >> 8694 // Z1r = Z1rr+G4AblaRandom::gaus(ZA1width);// >> 8695 Z1r =gausshaz(0,Z1rr,ZA1width); >> 8696 IS = IS +1; >> 8697 if(IS>100){ >> 8698 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED" << std::endl; >> 8699 Z1r = Z1rr; >> 8700 } >> 8701 if ((utilabs(Z1rr - Z1r) > 3.0*ZA1width) || Z1r<1.0)goto fiss2801; >> 8702 N1r = A1r - Z1r; >> 8703 }else{ >> 8704 if( imode == 2 && cpol2 != 0.0 ){ >> 8705 // --- asymmetric fission, mode 2 */ 10458 G4int IS = 0; 8706 G4int IS = 0; 10459 fiss2801: << 10460 Z1rr = Z1UCD - cpol1 * A_scission / << 10461 // Z1r = DBLE(GaussHaz(k,sngl(Z1rr), << 10462 // Z1r = Z1rr+G4AblaRandom::gaus(ZA1 << 10463 Z1r = gausshaz(0, Z1rr, ZA1width); << 10464 IS = IS + 1; << 10465 if (IS > 100) << 10466 { << 10467 std::cout << "WARNING: GAUSSHAZ << 10468 "CALCULATING Z1R IN << 10469 << std::endl; << 10470 Z1r = Z1rr; << 10471 } << 10472 if ((utilabs(Z1rr - Z1r) > 3.0 * ZA1 << 10473 goto fiss2801; << 10474 N1r = A1r - Z1r; << 10475 } << 10476 else << 10477 { << 10478 if (imode == 2 && cpol2 != 0.0) << 10479 { << 10480 // --- asymmetric fission, << 10481 G4int IS = 0; << 10482 fiss2802: 8707 fiss2802: 10483 Z1rr = Z1UCD - cpol2 * A_scissio << 8708 Z1rr = Z1UCD - cpol2 * A_scission/N_scission; 10484 // Z1r = Z1rr+G4AblaRandom::gaus << 8709 //Z1r = Z1rr+G4AblaRandom::gaus(ZA1width);// 10485 Z1r = gausshaz(0, Z1rr, ZA1width << 8710 Z1r = gausshaz(0,Z1rr,ZA1width); 10486 IS = IS + 1; << 8711 IS = IS +1; 10487 if (IS > 100) << 8712 if(IS>100){ 10488 { << 8713 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED" << std::endl; 10489 std::cout << "WARNING: GAUSS << 8714 Z1r = Z1rr; 10490 "CALCULATING Z1 << 10491 << std::endl; << 10492 Z1r = Z1rr; << 10493 } << 10494 if ((utilabs(Z1rr - Z1r) > 3.0 * << 10495 goto fiss2802; << 10496 N1r = A1r - Z1r; << 10497 } 8715 } 10498 else << 8716 if( (utilabs(Z1rr - Z1r) > 3.0*ZA1width) || Z1r < 1.0 ) goto fiss2802; 10499 { << 8717 N1r = A1r - Z1r; 10500 // Otherwise do; /* Imode = << 8718 }else{ 10501 // 0 */ << 8719 // Otherwise do; /* Imode = 3 in any case; imode = 1 and 2 for CPOL = 0 */ 10502 // and symmetric case << 8720 // and symmetric case */ 10503 // We treat a simultaneo << 8721 // We treat a simultaneous split in Z and N to determine 10504 // polarisation */ << 8722 // polarisation */ 10505 << 8723 10506 re1 = frldm(Z1UCD - 1.0, N1r + 1 << 8724 re1 = frldm( Z1UCD-1.0, N1r+1.0, beta1 ) + 10507 ecoul(Z1UCD - 1.0, N1r + 1 << 8725 frldm( Z2UCD+1.0, N2r-1.0, beta2 ) + 10508 re2 = frldm(Z1UCD, N1r, beta1) + << 8726 ecoul( Z1UCD-1.0, N1r+1.0, beta1, 10509 ecoul(Z1UCD, N1r, beta1, Z << 8727 Z2UCD+1.0, N2r-1.0, beta2, d ); /* d = 2 fm */ 10510 re3 = frldm(Z1UCD + 1.0, N1r - 1 << 8728 re2 = frldm( Z1UCD, N1r, beta1) + 10511 ecoul(Z1UCD + 1.0, N1r - 1 << 8729 frldm( Z2UCD, N2r, beta2 ) + 10512 eps2 = (re1 - 2.0 * re2 + re3) / << 8730 ecoul( Z1UCD, N1r, beta1, 10513 eps1 = (re3 - re1) / 2.0; << 8731 Z2UCD, N2r, beta2, d ); /* d = 2 fm */ 10514 DN1_POL = -eps1 / (2.0 * eps2); << 8732 re3 = frldm( Z1UCD+1.0, N1r-1.0, beta1 ) + 10515 // << 8733 frldm( Z2UCD-1.0, N2r+1.0, beta2 ) + 10516 Z1rr = Z1UCD + DN1_POL; << 8734 ecoul( Z1UCD+1.0, N1r-1.0, beta1, 10517 << 8735 Z2UCD-1.0, N2r+1.0, beta2, d ); /* d = 2 fm */ 10518 // Polarization of Standar << 8736 eps2 = ( re1 - 2.0*re2 + re3 ) / 2.0; 10519 if (imode == 1) << 8737 eps1 = ( re3 - re1 ) / 2.0; 10520 { << 8738 DN1_POL = -eps1 / ( 2.0 * eps2 ); 10521 if (Z1rr > 50.0) << 8739 // 10522 { << 8740 Z1rr = Z1UCD + DN1_POL; 10523 DN1_POL = DN1_POL - 0.6 << 10524 Z1rr = Z1UCD + DN1_POL; << 10525 if (Z1rr < 50.) << 10526 Z1rr = 50.0; << 10527 } << 10528 else << 10529 { << 10530 DN1_POL = DN1_POL + 0.60 << 10531 Z1rr = Z1UCD + DN1_POL; << 10532 if (Z1rr > 50.0) << 10533 Z1rr = 50.0; << 10534 } << 10535 } << 10536 8741 10537 G4int IS = 0; << 8742 // Polarization of Standard 1 from shell effects around 132Sn 10538 fiss2803: << 8743 if ( imode == 1 ){ 10539 // Z1r = Z1rr+G4AblaRandom::gaus << 8744 if ( Z1rr > 50.0 ){ 10540 Z1r = gausshaz(0, Z1rr, ZA1width << 8745 DN1_POL = DN1_POL - 0.6 * Uwash(E_scission_post,Ecrit,FREDSHELL,gamma); 10541 IS = IS + 1; << 8746 Z1rr = Z1UCD + DN1_POL; 10542 if (IS > 100) << 8747 if ( Z1rr < 50. ) Z1rr = 50.0; 10543 { << 8748 }else{ 10544 std::cout << "WARNING: GAUSS << 8749 DN1_POL = DN1_POL + 0.60 * Uwash(E_scission_post,Ecrit,FREDSHELL,gamma); 10545 "CALCULATING Z1 << 8750 Z1rr = Z1UCD + DN1_POL; 10546 << std::endl; << 8751 if ( Z1rr > 50.0 ) Z1rr = 50.0; 10547 Z1r = Z1rr; << 10548 } 8752 } >> 8753 } 10549 8754 10550 if ((utilabs(Z1rr - Z1r) > 3.0 * << 8755 G4int IS = 0; 10551 goto fiss2803; << 8756 fiss2803: 10552 N1r = A1r - Z1r; << 8757 //Z1r = Z1rr+G4AblaRandom::gaus(ZA1width); >> 8758 Z1r = gausshaz(0,Z1rr,ZA1width); >> 8759 IS = IS +1; >> 8760 if(IS>100){ >> 8761 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED" << std::endl; >> 8762 Z1r = Z1rr; 10553 } 8763 } 10554 } << 10555 8764 10556 // --------------------------------- << 8765 if( (utilabs(Z1rr - Z1r) > 3.0*ZA1width) || (Z1r < 1.0) )goto fiss2803; 10557 // Integer proton number with even-o << 8766 N1r = A1r - Z1r; 10558 // --------------------------------- << 8767 10559 even_odd(Z1r, r_e_o, i_help); << 10560 << 10561 z1 = G4double(i_help); << 10562 z2 = dint(Z_scission) - z1; << 10563 N1 = dint(N1r); << 10564 N2 = dint(N_scission) - N1; << 10565 a1 = z1 + N1; << 10566 a2 = z2 + N2; << 10567 << 10568 if ((z1 < 0) || (z2 < 0) || (a1 < 0) || << 10569 { << 10570 std::cout << " --------------------- << 10571 std::cout << " Z, A, N : " << Z << " << 10572 std::cout << z1 << " " << z2 << " " << 10573 std::cout << E_scission_post << " " << 10574 << 10575 std::cout << " --------------------- << 10576 } << 10577 << 10578 // ----------------------- << 10579 // excitation energies ... << 10580 // ----------------------- << 10581 // << 10582 if (imode == 1) << 10583 { << 10584 // ---- N = 82 << 10585 if (N1mean > N * 0.50) << 10586 { << 10587 // (a) 1. fragment is sp << 10588 E_defo = 0.0; << 10589 beta2gs = ecld->beta2[idint(N2)] << 10590 if (beta2 < beta2gs) << 10591 beta2 = beta2gs; << 10592 E1exc = E_scission_pre * a1 / A << 10593 E_defo = frldm(z2, N2, beta2) - << 10594 E2exc = E_scission_pre * a2 / A << 10595 } << 10596 else << 10597 { << 10598 // (b) 1. fragment is de << 10599 beta1gs = ecld->beta2[idint(N1)] << 10600 if (beta1 < beta1gs) << 10601 beta1 = beta1gs; << 10602 E_defo = frldm(z1, N1, beta1) - << 10603 E1exc = E_scission_pre * a1 / A << 10604 E_defo = 0.0; << 10605 E2exc = E_scission_pre * a2 / A << 10606 } 8768 } 10607 } << 8769 } >> 8770 >> 8771 // ------------------------------------------ >> 8772 // Integer proton number with even-odd effect >> 8773 // ------------------------------------------ >> 8774 even_odd(Z1r, r_e_o, i_help); >> 8775 >> 8776 z1 = G4double(i_help); >> 8777 z2 = dint( Z_scission ) - z1; >> 8778 N1 = dint( N1r ); >> 8779 N2 = dint( N_scission ) - N1; >> 8780 a1 = z1 + N1; >> 8781 a2 = z2 + N2; >> 8782 >> 8783 if( (z1 < 0) || (z2 < 0) || (a1 < 0) || (a2 < 0) ){ >> 8784 std::cout << " -------------------------------" << std::endl; >> 8785 std::cout << " Z, A, N : " << Z << " " << A << " " << N << std::endl; >> 8786 std::cout << z1 << " " << z2 << " " << a1 << " " << a2 << std::endl; >> 8787 std::cout << E_scission_post << " " << A_levdens << " " << CZ << std::endl; 10608 8788 10609 if (imode == 2) << 8789 std::cout << " -------------------------------" << std::endl; 10610 { << 8790 } 10611 // --- N appr. 86 */ << 8791 10612 if (N1mean > N * 0.5) << 8792 // ----------------------- 10613 { << 8793 // excitation energies ... 10614 /* 2. fragment is spherical */ << 8794 // ----------------------- 10615 beta1gs = ecld->beta2[idint(N1)] << 8795 // 10616 if (beta1 < beta1gs) << 8796 if( imode == 1 ){ 10617 beta1 = beta1gs; << 8797 // ---- N = 82 10618 E_defo = frldm(z1, N1, beta1) - << 8798 if( N1mean > N*0.50 ){ 10619 E1exc = E_scission_pre * a1 / A << 8799 // (a) 1. fragment is spherical and 2. fragment is deformed */ 10620 beta2gs = ecld->beta2[idint(N2)] << 8800 E_defo = 0.0; 10621 if (beta2 < beta2gs) << 8801 beta2gs = ecld->beta2[idint(N2)][idint(z2)]; 10622 beta2 = beta2gs; << 8802 if(beta2< beta2gs) beta2 = beta2gs; 10623 E_defo = frldm(z2, N2, beta2) - << 8803 E1exc = E_scission_pre * a1 / A + E_defo; 10624 E2exc = E_scission_pre * a2 / A << 8804 E_defo = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs ); >> 8805 E2exc = E_scission_pre * a2 / A + E_defo; >> 8806 }else{ >> 8807 // (b) 1. fragment is deformed and 2. fragment is spherical */ >> 8808 beta1gs = ecld->beta2[idint(N1)][idint(z1)]; >> 8809 if(beta1< beta1gs) beta1 = beta1gs; >> 8810 E_defo = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs ); >> 8811 E1exc = E_scission_pre * a1 / A + E_defo; >> 8812 E_defo = 0.0; >> 8813 E2exc = E_scission_pre * a2 / A + E_defo; 10625 } 8814 } 10626 else << 8815 } 10627 { << 8816 10628 /* 1. fragment is spherical */ << 8817 10629 beta2gs = ecld->beta2[idint(N2)] << 8818 if( imode == 2 ){ 10630 if (beta2 < beta2gs) << 8819 // --- N appr. 86 */ 10631 beta2 = beta2gs; << 8820 if( N1mean > N*0.5 ){ 10632 E_defo = frldm(z2, N2, beta2) - << 8821 /* 2. fragment is spherical */ 10633 E2exc = E_scission_pre * a2 / A << 8822 beta1gs = ecld->beta2[idint(N1)][idint(z1)]; 10634 beta1gs = ecld->beta2[idint(N1)] << 8823 if(beta1< beta1gs) beta1 = beta1gs; 10635 if (beta1 < beta1gs) << 8824 E_defo = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs ); 10636 beta1 = beta1gs; << 8825 E1exc = E_scission_pre * a1 / A + E_defo; 10637 E_defo = frldm(z1, N1, beta1) - << 8826 beta2gs = ecld->beta2[idint(N2)][idint(z2)]; 10638 E1exc = E_scission_pre * a1 / A << 8827 if(beta2< beta2gs) beta2 = beta2gs; >> 8828 E_defo = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs ); >> 8829 E2exc = E_scission_pre * a2 / A + E_defo; >> 8830 }else{ >> 8831 /* 1. fragment is spherical */ >> 8832 beta2gs = ecld->beta2[idint(N2)][idint(z2)]; >> 8833 if(beta2< beta2gs) beta2 = beta2gs; >> 8834 E_defo = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs ); >> 8835 E2exc = E_scission_pre * a2 / A + E_defo; >> 8836 beta1gs = ecld->beta2[idint(N1)][idint(z1)]; >> 8837 if(beta1< beta1gs) beta1 = beta1gs; >> 8838 E_defo = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs ); >> 8839 E1exc = E_scission_pre * a1 / A + E_defo; 10639 } 8840 } 10640 } << 8841 } 10641 8842 10642 if (imode == 3) << 8843 if( imode == 3 ){ 10643 { << 8844 // --- Symmetric fission channel 10644 // --- Symmetric fission channel << 8845 beta1gs = ecld->beta2[idint(N1)][idint(z1)]; 10645 beta1gs = ecld->beta2[idint(N1)][idi << 8846 if(beta1< beta1gs) beta1 = beta1gs; 10646 if (beta1 < beta1gs) << 8847 beta2gs = ecld->beta2[idint(N2)][idint(z2)]; 10647 beta1 = beta1gs; << 8848 if(beta2< beta2gs) beta2 = beta2gs; 10648 beta2gs = ecld->beta2[idint(N2)][idi << 8849 E_defo1 = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs ); 10649 if (beta2 < beta2gs) << 8850 E_defo2 = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs ); 10650 beta2 = beta2gs; << 10651 E_defo1 = frldm(z1, N1, beta1) - frl << 10652 E_defo2 = frldm(z2, N2, beta2) - frl << 10653 E1exc = E_scission_pre * a1 / A + E_ 8851 E1exc = E_scission_pre * a1 / A + E_defo1; 10654 E2exc = E_scission_pre * a2 / A + E_ 8852 E2exc = E_scission_pre * a2 / A + E_defo2; 10655 } << 8853 } >> 8854 10656 8855 10657 // pre-neutron-emission total kinetic e << 8856 // pre-neutron-emission total kinetic energy */ 10658 TKER = (z1 * z2 * 1.440) / (R0 * std::po << 8857 TKER = ( z1 * z2 * 1.440 ) / 10659 R0 * std::po << 8858 ( R0 * std::pow(a1,0.333330) * (1.0 + 2.0/3.0 * beta1 ) + 10660 // Pre-neutron-emission kinetic energie << 8859 R0 * std::pow(a2,0.333330) * (1.0 + 2.0/3.0 * beta2 ) + 2.0 ); >> 8860 // Pre-neutron-emission kinetic energies of the fragments */ 10661 EkinR1 = TKER * a2 / A; 8861 EkinR1 = TKER * a2 / A; 10662 EkinR2 = TKER * a1 / A; 8862 EkinR2 = TKER * a1 / A; 10663 v1 = std::sqrt(EkinR1 / a1) * 1.3887; << 8863 v1 = std::sqrt(EkinR1/a1) * 1.3887; 10664 v2 = std::sqrt(EkinR2 / a2) * 1.3887; << 8864 v2 = std::sqrt(EkinR2/a2) * 1.3887; 10665 8865 10666 // Extracted from Lang et al. Nucl. Phy << 8866 // Extracted from Lang et al. Nucl. Phys. A 345 (1980) 34 */ 10667 E1exc_sigma = 5.50; 8867 E1exc_sigma = 5.50; 10668 E2exc_sigma = 5.50; 8868 E2exc_sigma = 5.50; 10669 8869 10670 fis987: << 8870 fis987: 10671 // e1 = E1exc+G4AblaRandom::gaus(E1exc_s << 8871 //e1 = E1exc+G4AblaRandom::gaus(E1exc_sigma);// 10672 e1 = gausshaz(0, E1exc, E1exc_sigma); << 8872 e1 = gausshaz(0,E1exc,E1exc_sigma); 10673 if (e1 < 0.) << 8873 if(e1<0.)goto fis987; 10674 goto fis987; << 8874 fis988: 10675 fis988: << 8875 //e2 = E2exc+G4AblaRandom::gaus(E2exc_sigma);// 10676 // e2 = E2exc+G4AblaRandom::gaus(E2exc_s << 8876 e2 = gausshaz(0,E2exc,E2exc_sigma); 10677 e2 = gausshaz(0, E2exc, E2exc_sigma); << 8877 if(e2<0.)goto fis988; 10678 if (e2 < 0.) << 10679 goto fis988; << 10680 8878 10681 (*NbLam0_par) = NbLam0; 8879 (*NbLam0_par) = NbLam0; 10682 return; 8880 return; 10683 } 8881 } 10684 8882 10685 void G4Abla::even_odd(G4double r_origin, G4d << 10686 { << 10687 // Procedure to calculate I_OUT from R_I << 10688 // on the average a flat distribution in << 10689 // fluctuating distribution in I_OUT wit << 10690 // given by R_EVEN_ODD << 10691 << 10692 // /* ------------------------------ << 10693 // /* EXAMPLES : << 10694 // /* ------------------------------ << 10695 // /* If R_EVEN_ODD = 0 : << 10696 // /* CEIL(R_IN) ---- << 10697 // /* << 10698 // /* R_IN -> << 10699 // /* (somewhere in betwe << 10700 // /* << 10701 // /* FLOOR(R_IN) ---- << 10702 // /* ------------------------------ << 10703 // /* If R_EVEN_ODD > 0 : << 10704 // /* The interval for the abov << 10705 // /* larger for FLOOR(R_IN) << 10706 // /* smaller for FLOOR(R_IN << 10707 // /* For R_EVEN_ODD < 0 : just o << 10708 // /* ------------------------------ << 10709 << 10710 // /* ------------------------------ << 10711 // /* On input: R_ORIGIN nuclea << 10712 // /* R_EVEN_ODD reques << 10713 // /* Intermediate quantity: R_IN = << 10714 // /* On output: I_OUT nuclea << 10715 // /* ------------------------------ << 10716 << 10717 // G4double R_ORIGIN,R_IN,R_EVEN_OD << 10718 G4double r_in = 0.0, r_rest = 0.0, r_hel << 10719 G4double r_floor = 0.0; << 10720 G4double r_middle = 0.0; << 10721 // G4int I_OUT,N_FLOOR; << 10722 G4int n_floor = 0; << 10723 << 10724 r_in = r_origin + 0.5; << 10725 r_floor = (G4double)((G4int)(r_in)); << 10726 if (r_even_odd < 0.001) << 10727 { << 10728 i_out = (G4int)(r_floor); << 10729 } << 10730 else << 10731 { << 10732 r_rest = r_in - r_floor; << 10733 r_middle = r_floor + 0.5; << 10734 n_floor = (G4int)(r_floor); << 10735 if (n_floor % 2 == 0) << 10736 { << 10737 // even before modif. << 10738 r_help = r_middle + (r_rest - 0. << 10739 } << 10740 else << 10741 { << 10742 // odd before modification << 10743 r_help = r_middle + (r_rest - 0. << 10744 } << 10745 i_out = (G4int)(r_help); << 10746 } << 10747 } << 10748 8883 10749 double G4Abla::umass(G4double z, G4double n, << 8884 void G4Abla::even_odd(G4double r_origin,G4double r_even_odd,G4int &i_out) 10750 { 8885 { 10751 // liquid-drop mass, Myers & Swiatecki, << 8886 // Procedure to calculate I_OUT from R_IN in a way that 10752 // pure liquid drop, without pairing and << 8887 // on the average a flat distribution in R_IN results in a 10753 << 8888 // fluctuating distribution in I_OUT with an even-odd effect as 10754 // On input: Z nuclear charge of << 8889 // given by R_EVEN_ODD 10755 // N number of neutrons << 8890 10756 // beta deformation of nuc << 8891 // /* ------------------------------------------------------------ */ 10757 // On output: binding energy of nucleu << 8892 // /* EXAMPLES : */ 10758 << 8893 // /* ------------------------------------------------------------ */ 10759 G4double a = 0.0, fumass = 0.0; << 8894 // /* If R_EVEN_ODD = 0 : */ 10760 G4double alpha = 0.0; << 8895 // /* CEIL(R_IN) ---- */ 10761 G4double xcom = 0.0, xvs = 0.0, xe = 0.0 << 8896 // /* */ 10762 const G4double pi = 3.1416; << 8897 // /* R_IN -> */ 10763 << 8898 // /* (somewhere in between CEIL(R_IN) and FLOOR(R_IN)) */ */ 10764 a = n + z; << 8899 // /* */ 10765 alpha = (std::sqrt(5.0 / (4.0 * pi))) * << 8900 // /* FLOOR(R_IN) ---- --> I_OUT */ 10766 << 8901 // /* ------------------------------------------------------------ */ 10767 xcom = 1.0 - 1.7826 * ((a - 2.0 * z) / a << 8902 // /* If R_EVEN_ODD > 0 : */ 10768 // factor for asymmetry dependence of su << 8903 // /* The interval for the above treatment is */ 10769 xvs = -xcom * (15.4941 * a - 17.9439 * s << 8904 // /* larger for FLOOR(R_IN) = even and */ 10770 // sum of volume and surface energy << 8905 // /* smaller for FLOOR(R_IN) = odd */ 10771 xe = z * z * (0.7053 / (std::pow(a, 1.0 << 8906 // /* For R_EVEN_ODD < 0 : just opposite treatment */ 10772 fumass = xvs + xe; << 8907 // /* ------------------------------------------------------------ */ 10773 << 8908 10774 return fumass; << 8909 // /* ------------------------------------------------------------ */ >> 8910 // /* On input: R_ORIGIN nuclear charge (real number) */ >> 8911 // /* R_EVEN_ODD requested even-odd effect */ >> 8912 // /* Intermediate quantity: R_IN = R_ORIGIN + 0.5 */ >> 8913 // /* On output: I_OUT nuclear charge (integer) */ >> 8914 // /* ------------------------------------------------------------ */ >> 8915 >> 8916 // G4double R_ORIGIN,R_IN,R_EVEN_ODD,R_REST,R_HELP; >> 8917 G4double r_in = 0.0, r_rest = 0.0, r_help = 0.0; >> 8918 G4double r_floor = 0.0; >> 8919 G4double r_middle = 0.0; >> 8920 // G4int I_OUT,N_FLOOR; >> 8921 G4int n_floor = 0; >> 8922 >> 8923 r_in = r_origin + 0.5; >> 8924 r_floor = (G4double)((G4int)(r_in)); >> 8925 if (r_even_odd < 0.001) { >> 8926 i_out = (G4int)(r_floor); >> 8927 } >> 8928 else { >> 8929 r_rest = r_in - r_floor; >> 8930 r_middle = r_floor + 0.5; >> 8931 n_floor = (G4int)(r_floor); >> 8932 if (n_floor%2 == 0) { >> 8933 // even before modif. >> 8934 r_help = r_middle + (r_rest - 0.5) * (1.0 - r_even_odd); >> 8935 } >> 8936 else { >> 8937 // odd before modification >> 8938 r_help = r_middle + (r_rest - 0.5) * (1.0 + r_even_odd); >> 8939 } >> 8940 i_out = (G4int)(r_help); >> 8941 } >> 8942 } >> 8943 >> 8944 double G4Abla::umass(G4double z,G4double n,G4double beta) >> 8945 { >> 8946 // liquid-drop mass, Myers & Swiatecki, Lysekil, 1967 >> 8947 // pure liquid drop, without pairing and shell effects >> 8948 >> 8949 // On input: Z nuclear charge of nucleus >> 8950 // N number of neutrons in nucleus >> 8951 // beta deformation of nucleus >> 8952 // On output: binding energy of nucleus >> 8953 >> 8954 G4double a = 0.0, fumass = 0.0; >> 8955 G4double alpha = 0.0; >> 8956 G4double xcom = 0.0, xvs = 0.0, xe = 0.0; >> 8957 const G4double pi = 3.1416; >> 8958 >> 8959 a = n + z; >> 8960 alpha = ( std::sqrt(5.0/(4.0*pi)) ) * beta; >> 8961 >> 8962 xcom = 1.0 - 1.7826 * ((a - 2.0*z)/a)*((a - 2.0*z)/a); >> 8963 // factor for asymmetry dependence of surface and volume term >> 8964 xvs = - xcom * ( 15.4941 * a - >> 8965 17.9439 * std::pow(a,2.0/3.0) * (1.0+0.4*alpha*alpha) ); >> 8966 // sum of volume and surface energy >> 8967 xe = z*z * (0.7053/(std::pow(a,1.0/3.0)) * (1.0-0.2*alpha*alpha) - 1.1529/a); >> 8968 fumass = xvs + xe; >> 8969 >> 8970 return fumass; >> 8971 } >> 8972 >> 8973 >> 8974 double G4Abla::ecoul(G4double z1,G4double n1,G4double beta1,G4double z2,G4double n2,G4double beta2,G4double d) >> 8975 { >> 8976 // Coulomb potential between two nuclei >> 8977 // surfaces are in a distance of d >> 8978 // in a tip to tip configuration >> 8979 >> 8980 // approximate formulation >> 8981 // On input: Z1 nuclear charge of first nucleus >> 8982 // N1 number of neutrons in first nucleus >> 8983 // beta1 deformation of first nucleus >> 8984 // Z2 nuclear charge of second nucleus >> 8985 // N2 number of neutrons in second nucleus >> 8986 // beta2 deformation of second nucleus >> 8987 // d distance of surfaces of the nuclei >> 8988 >> 8989 // G4double Z1,N1,beta1,Z2,N2,beta2,d,ecoul; >> 8990 G4double fecoul = 0; >> 8991 G4double dtot = 0; >> 8992 const G4double r0 = 1.16; >> 8993 >> 8994 dtot = r0 * ( std::pow((z1+n1),1.0/3.0) * (1.0+0.6666667*beta1) >> 8995 + std::pow((z2+n2),1.0/3.0) * (1.0+0.6666667*beta2) ) + d; >> 8996 fecoul = z1 * z2 * 1.44 / dtot; >> 8997 >> 8998 return fecoul; >> 8999 } >> 9000 >> 9001 >> 9002 G4double G4Abla::Uwash(G4double E, G4double Ecrit,G4double Freduction,G4double gamma){ >> 9003 // E excitation energy >> 9004 // Ecrit critical pairing energy >> 9005 // Freduction reduction factor for shell washing in superfluid region >> 9006 G4double R_wash,uwash; >> 9007 if(E < Ecrit) >> 9008 R_wash = std::exp(-E * Freduction * gamma); >> 9009 else >> 9010 R_wash = std::exp(- Ecrit * Freduction * gamma -(E-Ecrit) * gamma); >> 9011 >> 9012 uwash = R_wash; >> 9013 return uwash; 10775 } 9014 } 10776 9015 10777 double G4Abla::ecoul(G4double z1, G4double n << 10778 { << 10779 // Coulomb potential between two nuclei << 10780 // surfaces are in a distance of d << 10781 // in a tip to tip configuration << 10782 << 10783 // approximate formulation << 10784 // On input: Z1 nuclear charge of f << 10785 // N1 number of neutrons << 10786 // beta1 deformation of firs << 10787 // Z2 nuclear charge of s << 10788 // N2 number of neutrons << 10789 // beta2 deformation of seco << 10790 // d distance of surface << 10791 9016 10792 // G4double Z1,N1,beta1,Z2,N2,beta2 << 9017 G4double G4Abla::frldm(G4double z,G4double n,G4double beta){ 10793 G4double fecoul = 0; << 10794 G4double dtot = 0; << 10795 const G4double r0 = 1.16; << 10796 9018 10797 dtot = r0 * (std::pow((z1 + n1), 1.0 / 3 << 9019 // Liquid-drop mass, Myers & Swiatecki, Lysekil, 1967 10798 std::pow((z2 + n2), 1.0 / 3 << 9020 // pure liquid drop, without pairing and shell effects 10799 d; << 9021 // 10800 fecoul = z1 * z2 * 1.44 / dtot; << 9022 // On input: Z nuclear charge of nucleus 10801 << 9023 // N number of neutrons in nucleus 10802 return fecoul; << 9024 // beta deformation of nucleus 10803 } << 9025 // On output: binding energy of nucleus 10804 << 9026 // The idea is to use FRLDM model for beta=0 and using Lysekil 10805 G4double G4Abla::Uwash(G4double E, G4double << 9027 // model to get the deformation energy 10806 { << 9028 10807 // E excitation energy << 9029 G4double a; 10808 // Ecrit critical pairing energy << 9030 a = n + z; 10809 // Freduction reduction factor for shel << 9031 return eflmac_profi(a,z) + umass(z,n,beta) - umass(z,n,0.0); 10810 G4double R_wash, uwash; << 10811 if (E < Ecrit) << 10812 R_wash = std::exp(-E * Freduction * << 10813 else << 10814 R_wash = std::exp(-Ecrit * Freductio << 10815 << 10816 uwash = R_wash; << 10817 return uwash; << 10818 } 9032 } 10819 9033 10820 G4double G4Abla::frldm(G4double z, G4double << 10821 { << 10822 << 10823 // Liquid-drop mass, Myers & Swiatec << 10824 // pure liquid drop, without pairing << 10825 // << 10826 // On input: Z nuclear charge << 10827 // N number of neut << 10828 // beta deformation of << 10829 // On output: binding energy of nu << 10830 // The idea is to use FRLDM model for be << 10831 // model to get the deformation energy << 10832 << 10833 G4double a; << 10834 a = n + z; << 10835 return eflmac_profi(a, z) + umass(z, n, << 10836 } << 10837 9034 10838 //****************************************** 9035 //********************************************************************** 10839 // * 9036 // * 10840 // * this function will calculate the liquid 9037 // * this function will calculate the liquid-drop nuclear mass for spheri 10841 // * configuration according to the preprint 9038 // * configuration according to the preprint NUCLEAR GROUND-STATE 10842 // * MASSES and DEFORMATIONS by P. M"oller e 9039 // * MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p. 10843 // * All constants are taken from this publi 9040 // * All constants are taken from this publication for consistency. 10844 // * 9041 // * 10845 // * Parameters: 9042 // * Parameters: 10846 // * a: nuclear mass number 9043 // * a: nuclear mass number 10847 // * z: nuclear charge 9044 // * z: nuclear charge 10848 // ***************************************** 9045 // ********************************************************************** 10849 9046 >> 9047 10850 G4double G4Abla::eflmac_profi(G4double ia, G 9048 G4double G4Abla::eflmac_profi(G4double ia, G4double iz) 10851 { 9049 { 10852 // CHANGED TO CALCULATE TOTAL BINDING EN << 9050 // CHANGED TO CALCULATE TOTAL BINDING ENERGY INSTEAD OF MASS EXCESS. 10853 // SWITCH FOR PAIRING INCLUDED AS WELL. << 9051 // SWITCH FOR PAIRING INCLUDED AS WELL. 10854 // BINDING = EFLMAC(IA,IZ,0,OPTSHP) << 9052 // BINDING = EFLMAC(IA,IZ,0,OPTSHP) 10855 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/E << 9053 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EEX/FRLDM.C 10856 // A.J. 15.07.96 << 9054 // A.J. 15.07.96 10857 << 10858 // this function will calculate the liqu << 10859 // configuration according to the prepri << 10860 // MASSES and DEFORMATIONS by P. M"oller << 10861 // All constants are taken from this pub << 10862 << 10863 // Parameters: << 10864 // a: nuclear mass number << 10865 // z: nuclear charge << 10866 << 10867 G4double eflmacResult = 0.0; << 10868 << 10869 G4int in = 0; << 10870 G4double z = 0.0, n = 0.0, a = 0.0, av = << 10871 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b << 10872 G4double ff = 0.0, ca = 0.0, w = 0.0, ef << 10873 G4double r0 = 0.0, kf = 0.0, ks = 0.0; << 10874 G4double kv = 0.0, rp = 0.0, ay = 0.0, a << 10875 G4double esq = 0.0, ael = 0.0, i = 0.0; << 10876 G4double pi = 3.141592653589793238e0; << 10877 << 10878 // fundamental constants << 10879 // electronic charge squared << 10880 esq = 1.4399764; << 10881 << 10882 // constants from considerations other t << 10883 // electronic binding << 10884 ael = 1.433e-5; << 10885 << 10886 // proton rms radius << 10887 rp = 0.8; << 10888 << 10889 // nuclear radius constant << 10890 r0 = 1.16; << 10891 << 10892 // range of yukawa-plus-expon. potential << 10893 ay = 0.68; << 10894 << 10895 // range of yukawa function used to gene << 10896 // nuclear charge distribution << 10897 aden = 0.70; << 10898 << 10899 // wigner constant << 10900 w = 30.0; << 10901 << 10902 // adjusted parameters << 10903 // volume energy << 10904 av = 16.00126; << 10905 << 10906 // volume asymmetry << 10907 kv = 1.92240; << 10908 << 10909 // surface energy << 10910 as = 21.18466; << 10911 << 10912 // surface asymmetry << 10913 ks = 2.345; << 10914 // a^0 constant << 10915 a0 = 2.615; << 10916 << 10917 // charge asymmetry << 10918 ca = 0.10289; << 10919 << 10920 z = G4double(iz); << 10921 a = G4double(ia); << 10922 in = ia - iz; << 10923 n = G4double(in); << 10924 << 10925 c1 = 3.0 / 5.0 * esq / r0; << 10926 c4 = 5.0 / 4.0 * std::pow((3.0 / (2.0 * << 10927 kf = std::pow((9.0 * pi * z / (4.0 * a)) << 10928 << 10929 ff = -1.0 / 8.0 * rp * rp * esq / std::p << 10930 (145.0 / 48.0 - 327.0 / 2880.0 * st << 10931 1527.0 / 1209600.0 * std::pow(kf, << 10932 << 10933 i = (n - z) / a; << 10934 << 10935 x0 = r0 * std::pow(a, (1.0 / 3.0)) / ay; << 10936 y0 = r0 * std::pow(a, (1.0 / 3.0)) / ade << 10937 << 10938 b1 = 1.0 - 3.0 / (std::pow(x0, 2)) + (1. << 10939 << 10940 b3 = 1.0 - 5.0 / std::pow(y0, 2) * << 10941 (1.0 - 15.0 / (8.0 * y0) << 10942 3.0 / 4.0 * (1.0 + 9.0 / << 10943 std::exp(-2.0 * y0)) << 10944 << 10945 // now calculation of total binding ener << 10946 << 10947 efl = -1.0 * av * (1.0 - kv * i * i) * a << 10948 c1 * z * z * b3 / std::pow(a, (1.0 << 10949 ff * std::pow(z, 2) / a - ca * (n << 10950 << 10951 efl = efl + w * utilabs(i); << 10952 << 10953 eflmacResult = efl; << 10954 << 10955 return eflmacResult; << 10956 } << 10957 // << 10958 // << 10959 // << 10960 void G4Abla::unstable_nuclei(G4int AFP, << 10961 G4int ZFP, << 10962 G4int* AFPNEW, << 10963 G4int* ZFPNEW, << 10964 G4int& IOUNSTAB << 10965 G4double VX, << 10966 G4double VY, << 10967 G4double VZ, << 10968 G4double* VP1X, << 10969 G4double* VP1Y, << 10970 G4double* VP1Z, << 10971 G4double BU_TAB << 10972 G4int* ILOOP) << 10973 { << 10974 // << 10975 G4int INMIN, INMAX, NDIF = 0, IMEM; << 10976 G4int NEVA = 0, PEVA = 0; << 10977 G4double VP2X, VP2Y, VP2Z; << 10978 << 10979 *AFPNEW = AFP; << 10980 *ZFPNEW = ZFP; << 10981 IOUNSTABLE = 0; << 10982 *ILOOP = 0; << 10983 IMEM = 0; << 10984 for (G4int i = 0; i < indexpart; i++) << 10985 { << 10986 BU_TAB_TEMP[i][0] = 0.0; << 10987 BU_TAB_TEMP[i][1] = 0.0; << 10988 BU_TAB_TEMP[i][2] = 0.0; << 10989 BU_TAB_TEMP[i][3] = 0.0; << 10990 BU_TAB_TEMP[i][4] = 0.0; << 10991 // BU_TAB_TEMP[i][5] = 0.0; << 10992 } << 10993 *VP1X = 0.0; << 10994 *VP1Y = 0.0; << 10995 *VP1Z = 0.0; << 10996 << 10997 if (AFP == 0 && ZFP == 0) << 10998 { << 10999 // PRINT*,'UNSTABLE NUCLEI, AF << 11000 return; << 11001 } << 11002 if ((AFP == 1 && ZFP == 0) || (AFP == 1 << 11003 (AFP == 3 && ZFP == 2) || (AFP == 4 << 11004 { << 11005 *VP1X = VX; << 11006 *VP1Y = VY; << 11007 *VP1Z = VZ; << 11008 return; << 11009 } << 11010 9055 11011 if ((AFP - ZFP) == 0 && ZFP > 1) << 9056 // this function will calculate the liquid-drop nuclear mass for spheri 11012 { << 9057 // configuration according to the preprint NUCLEAR GROUND-STATE 11013 for (G4int I = 0; I <= AFP - 2; I++) << 9058 // MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p. 11014 { << 9059 // All constants are taken from this publication for consistency. 11015 unstable_tke(G4double(AFP - I), << 11016 G4double(AFP - I), << 11017 G4double(AFP - I - << 11018 G4double(AFP - I - << 11019 VX, << 11020 VY, << 11021 VZ, << 11022 &(*VP1X), << 11023 &(*VP1Y), << 11024 &(*VP1Z), << 11025 &VP2X, << 11026 &VP2Y, << 11027 &VP2Z); << 11028 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 11029 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11030 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11031 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11032 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11033 *ILOOP = *ILOOP + 1; << 11034 VX = *VP1X; << 11035 VY = *VP1Y; << 11036 VZ = *VP1Z; << 11037 } << 11038 // PEVA = PEVA + ZFP - 1; << 11039 AFP = 1; << 11040 ZFP = 1; << 11041 IOUNSTABLE = 1; << 11042 } << 11043 // << 11044 //*** Find the limits nucleus is bound : << 11045 isostab_lim(ZFP, &INMIN, &INMAX); << 11046 NDIF = AFP - ZFP; << 11047 if (NDIF < INMIN) << 11048 { << 11049 // Proton unbound << 11050 IOUNSTABLE = 1; << 11051 for (G4int I = 1; I <= 10; I++) << 11052 { << 11053 isostab_lim(ZFP - I, &INMIN, &IN << 11054 if (INMIN <= NDIF) << 11055 { << 11056 IMEM = I; << 11057 ZFP = ZFP - I; << 11058 AFP = ZFP + NDIF; << 11059 PEVA = I; << 11060 goto u10; << 11061 } << 11062 } << 11063 // << 11064 u10: << 11065 for (G4int I = 0; I < IMEM; I++) << 11066 { << 11067 unstable_tke(G4double(NDIF + ZFP << 11068 G4double(ZFP + IMEM << 11069 G4double(NDIF + ZFP << 11070 G4double(ZFP + IMEM << 11071 VX, << 11072 VY, << 11073 VZ, << 11074 &(*VP1X), << 11075 &(*VP1Y), << 11076 &(*VP1Z), << 11077 &VP2X, << 11078 &VP2Y, << 11079 &VP2Z); << 11080 BU_TAB_TEMP[I + 1 + *ILOOP][0] = << 11081 BU_TAB_TEMP[I + 1 + *ILOOP][1] = << 11082 BU_TAB_TEMP[I + 1 + *ILOOP][2] = << 11083 BU_TAB_TEMP[I + 1 + *ILOOP][3] = << 11084 BU_TAB_TEMP[I + 1 + *ILOOP][4] = << 11085 VX = *VP1X; << 11086 VY = *VP1Y; << 11087 VZ = *VP1Z; << 11088 } << 11089 *ILOOP = *ILOOP + IMEM; << 11090 } << 11091 if (NDIF > INMAX) << 11092 { << 11093 // Neutron unbound << 11094 NEVA = NDIF - INMAX; << 11095 AFP = ZFP + INMAX; << 11096 IOUNSTABLE = 1; << 11097 for (G4int I = 0; I < NEVA; I++) << 11098 { << 11099 unstable_tke(G4double(ZFP + NDIF << 11100 G4double(ZFP), << 11101 G4double(ZFP + NDIF << 11102 G4double(ZFP), << 11103 VX, << 11104 VY, << 11105 VZ, << 11106 &(*VP1X), << 11107 &(*VP1Y), << 11108 &(*VP1Z), << 11109 &VP2X, << 11110 &VP2Y, << 11111 &VP2Z); << 11112 << 11113 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 11114 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11115 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11116 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11117 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11118 *ILOOP = *ILOOP + 1; << 11119 VX = *VP1X; << 11120 VY = *VP1Y; << 11121 VZ = *VP1Z; << 11122 } << 11123 } << 11124 9060 11125 if ((AFP >= 2) && (ZFP == 0)) << 9061 // Parameters: 11126 { << 9062 // a: nuclear mass number 11127 for (G4int I = 0; I <= AFP - 2; I++) << 9063 // z: nuclear charge 11128 { << 11129 unstable_tke(G4double(AFP - I), << 11130 G4double(ZFP), << 11131 G4double(AFP - I - << 11132 G4double(ZFP), << 11133 VX, << 11134 VY, << 11135 VZ, << 11136 &(*VP1X), << 11137 &(*VP1Y), << 11138 &(*VP1Z), << 11139 &VP2X, << 11140 &VP2Y, << 11141 &VP2Z); << 11142 << 11143 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 11144 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11145 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11146 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11147 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11148 *ILOOP = *ILOOP + 1; << 11149 VX = *VP1X; << 11150 VY = *VP1Y; << 11151 VZ = *VP1Z; << 11152 } << 11153 << 11154 // NEVA = NEVA + (AFP - 1); << 11155 AFP = 1; << 11156 ZFP = 0; << 11157 IOUNSTABLE = 1; << 11158 } << 11159 if (AFP < ZFP) << 11160 { << 11161 std::cout << "WARNING - BU UNSTABLE: << 11162 AFP = 0; << 11163 ZFP = 0; << 11164 IOUNSTABLE = 1; << 11165 } << 11166 if ((AFP >= 4) && (ZFP == 1)) << 11167 { << 11168 // Heavy residue is treated as 3H an << 11169 // neutrons: << 11170 for (G4int I = 0; I < AFP - 3; I++) << 11171 { << 11172 unstable_tke(G4double(AFP - I), << 11173 G4double(ZFP), << 11174 G4double(AFP - I - << 11175 G4double(ZFP), << 11176 VX, << 11177 VY, << 11178 VZ, << 11179 &(*VP1X), << 11180 &(*VP1Y), << 11181 &(*VP1Z), << 11182 &VP2X, << 11183 &VP2Y, << 11184 &VP2Z); << 11185 << 11186 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 11187 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11188 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11189 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11190 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11191 *ILOOP = *ILOOP + 1; << 11192 VX = *VP1X; << 11193 VY = *VP1Y; << 11194 VZ = *VP1Z; << 11195 } << 11196 << 11197 // NEVA = NEVA + (AFP - 3); << 11198 AFP = 3; << 11199 ZFP = 1; << 11200 IOUNSTABLE = 1; << 11201 } << 11202 9064 11203 if ((AFP == 4) && (ZFP == 3)) << 9065 G4double eflmacResult = 0.0; 11204 { << 11205 // 4Li -> 3He + p -> << 11206 AFP = 3; << 11207 ZFP = 2; << 11208 // PEVA = PEVA + 1; << 11209 IOUNSTABLE = 1; << 11210 unstable_tke(4.0, 3.0, 3.0, 2.0, VX, << 11211 9066 11212 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9067 G4int in = 0; 11213 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9068 G4double z = 0.0, n = 0.0, a = 0.0, av = 0.0, as = 0.0; 11214 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9069 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 = 0.0, b3 = 0.0; 11215 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9070 G4double ff = 0.0, ca = 0.0, w = 0.0, efl = 0.0; 11216 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9071 G4double r0 = 0.0, kf = 0.0, ks = 0.0; 11217 *ILOOP = *ILOOP + 1; << 9072 G4double kv = 0.0, rp = 0.0, ay = 0.0, aden = 0.0, x0 = 0.0, y0 = 0.0; 11218 } << 9073 G4double esq = 0.0, ael = 0.0, i = 0.0; 11219 if ((AFP == 5) && (ZFP == 2)) << 9074 G4double pi = 3.141592653589793238e0; 11220 { << 11221 // 5He -> 4He + n -> << 11222 AFP = 4; << 11223 ZFP = 2; << 11224 // NEVA = NEVA + 1; << 11225 IOUNSTABLE = 1; << 11226 unstable_tke(5.0, 2.0, 4.0, 2.0, VX, << 11227 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 11228 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11229 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11230 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11231 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11232 *ILOOP = *ILOOP + 1; << 11233 } << 11234 9075 11235 if ((AFP == 5) && (ZFP == 3)) << 9076 // fundamental constants 11236 { << 9077 // electronic charge squared 11237 // 5Li -> 4He + p << 9078 esq = 1.4399764; 11238 AFP = 4; << 11239 ZFP = 2; << 11240 // PEVA = PEVA + 1; << 11241 IOUNSTABLE = 1; << 11242 unstable_tke(5.0, 3.0, 4.0, 2.0, VX, << 11243 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 11244 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11245 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11246 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11247 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11248 *ILOOP = *ILOOP + 1; << 11249 } << 11250 9079 11251 if ((AFP == 6) && (ZFP == 4)) << 9080 // constants from considerations other than nucl. masses 11252 { << 9081 // electronic binding 11253 // 6Be -> 4He + 2p (velocity in two << 9082 ael = 1.433e-5; 11254 AFP = 4; << 11255 ZFP = 2; << 11256 // PEVA = PEVA + 2; << 11257 IOUNSTABLE = 1; << 11258 // 6Be -> 5Li + p << 11259 unstable_tke(6.0, 4.0, 5.0, 3.0, VX, << 11260 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 11261 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11262 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11263 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11264 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11265 *ILOOP = *ILOOP + 1; << 11266 VX = *VP1X; << 11267 VY = *VP1Y; << 11268 VZ = *VP1Z; << 11269 << 11270 // 5Li -> 4He + p << 11271 unstable_tke(5.0, 3.0, 4.0, 2.0, VX, << 11272 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 11273 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11274 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11275 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11276 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11277 *ILOOP = *ILOOP + 1; << 11278 } << 11279 if ((AFP == 7) && (ZFP == 2)) << 11280 { << 11281 // 7He -> 6He + n << 11282 AFP = 6; << 11283 ZFP = 2; << 11284 // NEVA = NEVA + 1; << 11285 IOUNSTABLE = 1; << 11286 unstable_tke(7.0, 2.0, 6.0, 2.0, VX, << 11287 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 11288 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11289 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11290 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11291 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11292 *ILOOP = *ILOOP + 1; << 11293 } << 11294 << 11295 if ((AFP == 7) && (ZFP == 5)) << 11296 { << 11297 // 7B -> 6Be + p -> 4He + 3p << 11298 for (int I = 0; I <= AFP - 5; I++) << 11299 { << 11300 unstable_tke(double(AFP - I), << 11301 double(ZFP - I), << 11302 double(AFP - I - 1) << 11303 double(ZFP - I - 1) << 11304 VX, << 11305 VY, << 11306 VZ, << 11307 &(*VP1X), << 11308 &(*VP1Y), << 11309 &(*VP1Z), << 11310 &VP2X, << 11311 &VP2Y, << 11312 &VP2Z); << 11313 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 11314 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11315 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11316 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11317 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11318 *ILOOP = *ILOOP + 1; << 11319 VX = *VP1X; << 11320 VY = *VP1Y; << 11321 VZ = *VP1Z; << 11322 } << 11323 << 11324 AFP = 4; << 11325 ZFP = 2; << 11326 // PEVA = PEVA + 3; << 11327 IOUNSTABLE = 1; << 11328 } << 11329 if ((AFP == 8) && (ZFP == 4)) << 11330 { << 11331 // 8Be -> 4He + 4He << 11332 AFP = 4; << 11333 ZFP = 2; << 11334 IOUNSTABLE = 1; << 11335 unstable_tke(8.0, 4.0, 4.0, 2.0, VX, << 11336 BU_TAB_TEMP[*ILOOP][0] = 2.0; << 11337 BU_TAB_TEMP[*ILOOP][1] = 4.0; << 11338 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11339 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11340 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11341 *ILOOP = *ILOOP + 1; << 11342 } << 11343 if ((AFP == 8) && (ZFP == 6)) << 11344 { << 11345 // 8C -> 2p + 6Be << 11346 AFP = 6; << 11347 ZFP = 4; << 11348 // PEVA = PEVA + 2; << 11349 IOUNSTABLE = 1; << 11350 9083 11351 unstable_tke(8.0, 6.0, 7.0, 5.0, VX, << 9084 // proton rms radius 11352 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9085 rp = 0.8; 11353 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11354 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11355 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11356 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11357 *ILOOP = *ILOOP + 1; << 11358 VX = *VP1X; << 11359 VY = *VP1Y; << 11360 VZ = *VP1Z; << 11361 << 11362 unstable_tke(7.0, 5.0, 6.0, 4.0, VX, << 11363 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 11364 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11365 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11366 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11367 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11368 *ILOOP = *ILOOP + 1; << 11369 VX = *VP1X; << 11370 VY = *VP1Y; << 11371 VZ = *VP1Z; << 11372 } << 11373 << 11374 if ((AFP == 9) && (ZFP == 2)) << 11375 { << 11376 // 9He -> 8He + n << 11377 AFP = 8; << 11378 ZFP = 2; << 11379 // NEVA = NEVA + 1; << 11380 IOUNSTABLE = 1; << 11381 9086 11382 unstable_tke(9.0, 2.0, 8.0, 2.0, VX, << 9087 // nuclear radius constant 11383 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 9088 r0 = 1.16; 11384 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11385 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11386 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11387 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11388 *ILOOP = *ILOOP + 1; << 11389 VX = *VP1X; << 11390 VY = *VP1Y; << 11391 VZ = *VP1Z; << 11392 } << 11393 << 11394 if ((AFP == 9) && (ZFP == 5)) << 11395 { << 11396 // 9B -> 4He + 4He + p -> << 11397 AFP = 4; << 11398 ZFP = 2; << 11399 // PEVA = PEVA + 1; << 11400 IOUNSTABLE = 1; << 11401 unstable_tke(9.0, 5.0, 8.0, 4.0, VX, << 11402 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 11403 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11404 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11405 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11406 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11407 *ILOOP = *ILOOP + 1; << 11408 VX = *VP1X; << 11409 VY = *VP1Y; << 11410 VZ = *VP1Z; << 11411 << 11412 unstable_tke(8.0, 4.0, 4.0, 2.0, VX, << 11413 BU_TAB_TEMP[*ILOOP][0] = 2.0; << 11414 BU_TAB_TEMP[*ILOOP][1] = 4.0; << 11415 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11416 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11417 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11418 *ILOOP = *ILOOP + 1; << 11419 VX = *VP1X; << 11420 VY = *VP1Y; << 11421 VZ = *VP1Z; << 11422 } << 11423 << 11424 if ((AFP == 10) && (ZFP == 2)) << 11425 { << 11426 // 10He -> 8He + 2n << 11427 AFP = 8; << 11428 ZFP = 2; << 11429 // NEVA = NEVA + 2; << 11430 IOUNSTABLE = 1; << 11431 // 10He -> 9He + n << 11432 unstable_tke(10.0, 2.0, 9.0, 2.0, VX << 11433 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 11434 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11435 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11436 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11437 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11438 *ILOOP = *ILOOP + 1; << 11439 VX = *VP1X; << 11440 VY = *VP1Y; << 11441 VZ = *VP1Z; << 11442 << 11443 // 9He -> 8He + n << 11444 unstable_tke(9.0, 2.0, 8.0, 2.0, VX, << 11445 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 11446 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11447 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11448 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11449 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11450 *ILOOP = *ILOOP + 1; << 11451 VX = *VP1X; << 11452 VY = *VP1Y; << 11453 VZ = *VP1Z; << 11454 } << 11455 if ((AFP == 10) && (ZFP == 3)) << 11456 { << 11457 // 10Li -> 9Li + n -> << 11458 AFP = 9; << 11459 ZFP = 3; << 11460 // NEVA = NEVA + 1; << 11461 IOUNSTABLE = 1; << 11462 unstable_tke(10.0, 3.0, 9.0, 3.0, VX << 11463 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 11464 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11465 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11466 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11467 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11468 *ILOOP = *ILOOP + 1; << 11469 VX = *VP1X; << 11470 VY = *VP1Y; << 11471 VZ = *VP1Z; << 11472 } << 11473 if ((AFP == 10) && (ZFP == 7)) << 11474 { << 11475 // 10N -> 9C + p -> << 11476 AFP = 9; << 11477 ZFP = 6; << 11478 // PEVA = PEVA + 1; << 11479 IOUNSTABLE = 1; << 11480 unstable_tke(10.0, 7.0, 9.0, 6.0, VX << 11481 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 11482 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11483 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11484 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11485 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11486 *ILOOP = *ILOOP + 1; << 11487 VX = *VP1X; << 11488 VY = *VP1Y; << 11489 VZ = *VP1Z; << 11490 } << 11491 << 11492 if ((AFP == 11) && (ZFP == 7)) << 11493 { << 11494 // 11N -> 10C + p -> << 11495 AFP = 10; << 11496 ZFP = 6; << 11497 // PEVA = PEVA + 1; << 11498 IOUNSTABLE = 1; << 11499 unstable_tke(11.0, 7.0, 10.0, 6.0, V << 11500 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 11501 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11502 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11503 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11504 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11505 *ILOOP = *ILOOP + 1; << 11506 VX = *VP1X; << 11507 VY = *VP1Y; << 11508 VZ = *VP1Z; << 11509 } << 11510 if ((AFP == 12) && (ZFP == 8)) << 11511 { << 11512 // 12O -> 10C + 2p -> << 11513 AFP = 10; << 11514 ZFP = 6; << 11515 // PEVA = PEVA + 2; << 11516 IOUNSTABLE = 1; << 11517 9089 11518 unstable_tke(12.0, 8.0, 11.0, 7.0, V << 9090 // range of yukawa-plus-expon. potential 11519 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9091 ay = 0.68; 11520 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9092 11521 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9093 // range of yukawa function used to generate 11522 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9094 // nuclear charge distribution 11523 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9095 aden= 0.70; 11524 *ILOOP = *ILOOP + 1; << 9096 11525 VX = *VP1X; << 9097 // wigner constant 11526 VY = *VP1Y; << 9098 w = 30.0; 11527 VZ = *VP1Z; << 9099 11528 << 9100 // adjusted parameters 11529 unstable_tke(11.0, 7.0, 10.0, 6.0, V << 9101 // volume energy 11530 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9102 av = 16.00126; 11531 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9103 11532 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9104 // volume asymmetry 11533 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9105 kv = 1.92240; 11534 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9106 11535 *ILOOP = *ILOOP + 1; << 9107 // surface energy 11536 VX = *VP1X; << 9108 as = 21.18466; 11537 VY = *VP1Y; << 9109 11538 VZ = *VP1Z; << 9110 // surface asymmetry 11539 } << 9111 ks = 2.345; 11540 if ((AFP == 15) && (ZFP == 9)) << 9112 // a^0 constant 11541 { << 9113 a0 = 2.615; 11542 // 15F -> 14O + p -> << 9114 11543 AFP = 14; << 9115 // charge asymmetry 11544 ZFP = 8; << 9116 ca = 0.10289; 11545 // PEVA = PEVA + 1; << 9117 11546 IOUNSTABLE = 1; << 9118 z = G4double(iz); 11547 unstable_tke(15.0, 9.0, 14.0, 8.0, V << 9119 a = G4double(ia); 11548 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9120 in = ia - iz; 11549 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9121 n = G4double(in); 11550 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9122 11551 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9123 11552 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9124 c1 = 3.0/5.0*esq/r0; 11553 *ILOOP = *ILOOP + 1; << 9125 c4 = 5.0/4.0*std::pow((3.0/(2.0*pi)),(2.0/3.0)) * c1; 11554 VX = *VP1X; << 9126 kf = std::pow((9.0*pi*z/(4.0*a)),(1.0/3.0))/r0; 11555 VY = *VP1Y; << 9127 11556 VZ = *VP1Z; << 9128 ff = -1.0/8.0*rp*rp*esq/std::pow(r0,3) * (145.0/48.0 - 327.0/2880.0*std::pow(kf,2) * std::pow(rp,2) + 1527.0/1209600.0*std::pow(kf,4) * std::pow(rp,4)); 11557 } << 9129 11558 << 9130 i = (n-z)/a; 11559 if ((AFP == 16) && (ZFP == 9)) << 9131 11560 { << 9132 x0 = r0 * std::pow(a,(1.0/3.0)) / ay; 11561 // 16F -> 15O + p -> << 9133 y0 = r0 * std::pow(a,(1.0/3.0)) / aden; 11562 AFP = 15; << 9134 11563 ZFP = 8; << 9135 b1 = 1.0 - 3.0/(std::pow(x0,2)) + (1.0 + x0) * (2.0 + 3.0/x0 + 3.0/std::pow(x0,2)) * std::exp(-2.0*x0); 11564 // PEVA = PEVA + 1; << 9136 11565 IOUNSTABLE = 1; << 9137 b3 = 1.0 - 5.0/std::pow(y0,2) * (1.0 - 15.0/(8.0*y0) + 21.0/(8.0 * std::pow(y0,3)) 11566 unstable_tke(16.0, 9.0, 15.0, 8.0, V << 9138 - 3.0/4.0 * (1.0 + 9.0/(2.0*y0) + 7.0/std::pow(y0,2) 11567 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9139 + 7.0/(2.0 * std::pow(y0,3))) * std::exp(-2.0*y0)); 11568 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9140 11569 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9141 // now calulation of total binding energy 11570 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9142 11571 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9143 efl = -1.0 * av*(1.0 - kv*i*i)*a + as*(1.0 - ks*i*i)*b1 * std::pow(a,(2.0/3.0)) + a0 11572 *ILOOP = *ILOOP + 1; << 9144 + c1*z*z*b3/std::pow(a,(1.0/3.0)) - c4*std::pow(z,(4.0/3.0))/std::pow(a,(1.e0/3.e0)) 11573 VX = *VP1X; << 9145 + ff*std::pow(z,2)/a -ca*(n-z) - ael * std::pow(z,(2.39e0)); 11574 VY = *VP1Y; << 9146 11575 VZ = *VP1Z; << 9147 efl = efl + w*utilabs(i); 11576 } << 9148 11577 << 9149 eflmacResult = efl; 11578 if ((AFP == 16) && (ZFP == 10)) << 9150 11579 { << 9151 return eflmacResult; 11580 // 16Ne -> 14O + 2p -> << 9152 } 11581 AFP = 14; << 9153 // 11582 ZFP = 8; << 9154 // 11583 // PEVA = PEVA + 2; << 9155 // 11584 IOUNSTABLE = 1; << 9156 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[200][6],G4int *ILOOP){ 11585 unstable_tke(16.0, 10.0, 15.0, 9.0, << 9157 // 11586 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9158 G4int INMIN,INMAX,NDIF=0,IMEM; 11587 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9159 G4int NEVA=0,PEVA=0; 11588 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9160 G4double VP2X,VP2Y,VP2Z; 11589 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9161 11590 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9162 *AFPNEW = AFP; 11591 *ILOOP = *ILOOP + 1; << 9163 *ZFPNEW = ZFP; 11592 VX = *VP1X; << 9164 IOUNSTABLE = 0; 11593 VY = *VP1Y; << 9165 *ILOOP = 0; 11594 VZ = *VP1Z; << 9166 IMEM = 0; 11595 << 9167 for(G4int i=0;i<200;i++){ 11596 unstable_tke(15.0, 9.0, 14.0, 8.0, V << 9168 BU_TAB_TEMP[i][0] = 0.0; 11597 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9169 BU_TAB_TEMP[i][1] = 0.0; 11598 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9170 BU_TAB_TEMP[i][2] = 0.0; 11599 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9171 BU_TAB_TEMP[i][3] = 0.0; 11600 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9172 BU_TAB_TEMP[i][4] = 0.0; 11601 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9173 //BU_TAB_TEMP[i][5] = 0.0; 11602 *ILOOP = *ILOOP + 1; << 9174 } 11603 VX = *VP1X; << 9175 *VP1X = 0.0; 11604 VY = *VP1Y; << 9176 *VP1Y = 0.0; 11605 VZ = *VP1Z; << 9177 *VP1Z = 0.0; 11606 } << 9178 11607 if ((AFP == 18) && (ZFP == 11)) << 9179 if(AFP==0 && ZFP==0){ 11608 { << 9180 // PRINT*,'UNSTABLE NUCLEI, AFP=0, ZFP=0' 11609 // 18Na -> 17Ne + p -> << 9181 return; 11610 AFP = 17; << 9182 } 11611 ZFP = 10; << 9183 if((AFP==1 && ZFP==0) || 11612 // PEVA = PEVA + 1; << 9184 (AFP==1 && ZFP==1) || 11613 IOUNSTABLE = 1; << 9185 (AFP==2 && ZFP==1) || 11614 unstable_tke(18.0, 11.0, 17.0, 10.0, << 9186 (AFP==3 && ZFP==1) || 11615 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9187 (AFP==3 && ZFP==2) || 11616 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9188 (AFP==4 && ZFP==2) || 11617 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9189 (AFP==6 && ZFP==2) || 11618 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9190 (AFP==8 && ZFP==2) 11619 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9191 ){ 11620 *ILOOP = *ILOOP + 1; << 9192 *VP1X = VX; 11621 VX = *VP1X; << 9193 *VP1Y = VY; 11622 VY = *VP1Y; << 9194 *VP1Z = VZ; 11623 VZ = *VP1Z; << 9195 return; 11624 } << 9196 } 11625 if ((AFP == 19) && (ZFP == 11)) << 9197 11626 { << 9198 if ((AFP-ZFP)==0 && ZFP>1){ 11627 // 19Na -> 18Ne + p -> << 9199 for(G4int I = 0;I<=AFP-2;I++){ 11628 AFP = 18; << 9200 unstable_tke(G4double(AFP-I),G4double(AFP-I),G4double(AFP-I-1),G4double(AFP-I-1),VX,VY,VZ, 11629 ZFP = 10; << 9201 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); 11630 // PEVA = PEVA + 1; << 9202 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11631 IOUNSTABLE = 1; << 9203 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11632 unstable_tke(19.0, 11.0, 18.0, 10.0, << 9204 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11633 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9205 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11634 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9206 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11635 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9207 *ILOOP = *ILOOP + 1; 11636 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9208 VX = *VP1X; 11637 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9209 VY = *VP1Y; 11638 *ILOOP = *ILOOP + 1; << 9210 VZ = *VP1Z; 11639 VX = *VP1X; << 11640 VY = *VP1Y; << 11641 VZ = *VP1Z; << 11642 } << 11643 if (ZFP >= 4 && (AFP - ZFP) == 1) << 11644 { << 11645 // Heavy residue is treated as 3He << 11646 NEVA = AFP - 3; << 11647 PEVA = ZFP - 2; << 11648 << 11649 for (G4int I = 0; I < NEVA; I++) << 11650 { << 11651 unstable_tke(G4double(AFP - I), << 11652 G4double(ZFP), << 11653 G4double(AFP - I - << 11654 G4double(ZFP), << 11655 VX, << 11656 VY, << 11657 VZ, << 11658 &(*VP1X), << 11659 &(*VP1Y), << 11660 &(*VP1Z), << 11661 &VP2X, << 11662 &VP2Y, << 11663 &VP2Z); << 11664 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 11665 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11666 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11667 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11668 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11669 *ILOOP = *ILOOP + 1; << 11670 VX = *VP1X; << 11671 VY = *VP1Y; << 11672 VZ = *VP1Z; << 11673 } << 11674 for (G4int I = 0; I < PEVA; I++) << 11675 { << 11676 unstable_tke(G4double(AFP - NEVA << 11677 G4double(ZFP - I), << 11678 G4double(AFP - NEVA << 11679 G4double(ZFP - I - << 11680 VX, << 11681 VY, << 11682 VZ, << 11683 &(*VP1X), << 11684 &(*VP1Y), << 11685 &(*VP1Z), << 11686 &VP2X, << 11687 &VP2Y, << 11688 &VP2Z); << 11689 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 11690 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 11691 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 11692 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 11693 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 11694 *ILOOP = *ILOOP + 1; << 11695 VX = *VP1X; << 11696 VY = *VP1Y; << 11697 VZ = *VP1Z; << 11698 } 9211 } >> 9212 // PEVA = PEVA + ZFP - 1; >> 9213 AFP = 1; >> 9214 ZFP = 1; >> 9215 IOUNSTABLE = 1; >> 9216 } >> 9217 // >> 9218 //*** Find the limits nucleus is bound : >> 9219 isostab_lim(ZFP,&INMIN,&INMAX); >> 9220 NDIF = AFP - ZFP; >> 9221 if(NDIF<INMIN){ >> 9222 // Proton unbound >> 9223 IOUNSTABLE = 1; >> 9224 for(G4int I = 1;I<=10; I++){ >> 9225 isostab_lim(ZFP-I,&INMIN,&INMAX); >> 9226 if(INMIN<=NDIF){ >> 9227 IMEM = I; >> 9228 ZFP = ZFP - I; >> 9229 AFP = ZFP + NDIF; >> 9230 PEVA = I; >> 9231 goto u10; >> 9232 } >> 9233 } >> 9234 // >> 9235 u10: >> 9236 for(G4int I = 0;I< IMEM;I++){ >> 9237 unstable_tke(G4double(NDIF+ZFP+IMEM-I), >> 9238 G4double(ZFP+IMEM-I), >> 9239 G4double(NDIF+ZFP+IMEM-I-1), >> 9240 G4double(ZFP+IMEM-I-1), >> 9241 VX,VY,VZ, >> 9242 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9243 BU_TAB_TEMP[I+1+*ILOOP][0] = 1.0; >> 9244 BU_TAB_TEMP[I+1+*ILOOP][1] = 1.0; >> 9245 BU_TAB_TEMP[I+1+*ILOOP][2] = VP2X; >> 9246 BU_TAB_TEMP[I+1+*ILOOP][3] = VP2Y; >> 9247 BU_TAB_TEMP[I+1+*ILOOP][4] = VP2Z; >> 9248 VX = *VP1X; >> 9249 VY = *VP1Y; >> 9250 VZ = *VP1Z; >> 9251 } >> 9252 *ILOOP = *ILOOP + IMEM; 11699 9253 11700 AFP = 3; << 9254 } 11701 ZFP = 2; << 9255 if(NDIF>INMAX){ >> 9256 // Neutron unbound >> 9257 NEVA = NDIF - INMAX; >> 9258 AFP = ZFP + INMAX; 11702 IOUNSTABLE = 1; 9259 IOUNSTABLE = 1; 11703 } << 9260 for(G4int I = 0;I<NEVA;I++){ 11704 // << 9261 unstable_tke(G4double(ZFP+NDIF-I), 11705 *AFPNEW = AFP; << 9262 G4double(ZFP), 11706 *ZFPNEW = ZFP; << 9263 G4double(ZFP+NDIF-I-1), 11707 return; << 9264 G4double(ZFP), >> 9265 VX,VY,VZ, >> 9266 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9267 >> 9268 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9269 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9270 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9271 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9272 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9273 *ILOOP = *ILOOP + 1; >> 9274 VX = *VP1X; >> 9275 VY = *VP1Y; >> 9276 VZ = *VP1Z; >> 9277 } >> 9278 } >> 9279 >> 9280 if ((AFP>=2) && (ZFP==0)){ >> 9281 for(G4int I = 0;I<= AFP-2;I++){ >> 9282 unstable_tke(G4double(AFP-I),G4double(ZFP), >> 9283 G4double(AFP-I-1),G4double(ZFP), >> 9284 VX,VY,VZ, >> 9285 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9286 >> 9287 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9288 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9289 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9290 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9291 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9292 *ILOOP = *ILOOP + 1; >> 9293 VX = *VP1X; >> 9294 VY = *VP1Y; >> 9295 VZ = *VP1Z; >> 9296 } >> 9297 >> 9298 //NEVA = NEVA + (AFP - 1); >> 9299 AFP = 1; >> 9300 ZFP = 0; >> 9301 IOUNSTABLE = 1; >> 9302 } >> 9303 if (AFP<ZFP){ >> 9304 std::cout << "WARNING - BU UNSTABLE: AF < ZF" << std::endl; >> 9305 AFP = 0; >> 9306 ZFP = 0; >> 9307 IOUNSTABLE = 1; >> 9308 } >> 9309 if ((AFP>=4) && (ZFP==1)){ >> 9310 // Heavy residue is treated as 3H and the rest of mass is emitted as neutrons: >> 9311 for(G4int I = 0; I<AFP-3;I++){ >> 9312 unstable_tke(G4double(AFP-I),G4double(ZFP), >> 9313 G4double(AFP-I-1),G4double(ZFP), >> 9314 VX,VY,VZ, >> 9315 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9316 >> 9317 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9318 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9319 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9320 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9321 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9322 *ILOOP = *ILOOP + 1; >> 9323 VX = *VP1X; >> 9324 VY = *VP1Y; >> 9325 VZ = *VP1Z; >> 9326 } >> 9327 >> 9328 // NEVA = NEVA + (AFP - 3); >> 9329 AFP = 3; >> 9330 ZFP = 1; >> 9331 IOUNSTABLE = 1; >> 9332 } >> 9333 >> 9334 if ((AFP==4) && (ZFP==3)){ >> 9335 // 4Li -> 3He + p -> >> 9336 AFP = 3; >> 9337 ZFP = 2; >> 9338 //PEVA = PEVA + 1; >> 9339 IOUNSTABLE = 1; >> 9340 unstable_tke(4.0,3.0,3.0,2.0, >> 9341 VX,VY,VZ, >> 9342 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9343 >> 9344 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9345 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9346 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9347 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9348 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9349 *ILOOP = *ILOOP + 1; >> 9350 } >> 9351 if ((AFP==5) && (ZFP==2)){ >> 9352 // 5He -> 4He + n -> >> 9353 AFP = 4; >> 9354 ZFP = 2; >> 9355 //NEVA = NEVA + 1; >> 9356 IOUNSTABLE = 1; >> 9357 unstable_tke(5.0,2.0,4.0,2.0, >> 9358 VX,VY,VZ, >> 9359 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9360 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9361 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9362 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9363 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9364 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9365 *ILOOP = *ILOOP + 1; >> 9366 } >> 9367 >> 9368 if ((AFP==5) && (ZFP==3)){ >> 9369 // 5Li -> 4He + p >> 9370 AFP = 4; >> 9371 ZFP = 2; >> 9372 //PEVA = PEVA + 1; >> 9373 IOUNSTABLE = 1; >> 9374 unstable_tke(5.0,3.0,4.0,2.0, >> 9375 VX,VY,VZ, >> 9376 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9377 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9378 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9379 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9380 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9381 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9382 *ILOOP = *ILOOP + 1; >> 9383 } >> 9384 >> 9385 if ((AFP==6) && (ZFP==4)){ >> 9386 // 6Be -> 4He + 2p (velocity in two steps: 6Be->5Li->4He) >> 9387 AFP = 4; >> 9388 ZFP = 2; >> 9389 //PEVA = PEVA + 2; >> 9390 IOUNSTABLE = 1; >> 9391 // 6Be -> 5Li + p >> 9392 unstable_tke(6.0,4.0,5.0,3.0, >> 9393 VX,VY,VZ, >> 9394 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9395 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9396 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9397 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9398 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9399 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9400 *ILOOP = *ILOOP + 1; >> 9401 VX = *VP1X; >> 9402 VY = *VP1Y; >> 9403 VZ = *VP1Z; >> 9404 >> 9405 // 5Li -> 4He + p >> 9406 unstable_tke(5.0,3.0,4.0,2.0, >> 9407 VX,VY,VZ, >> 9408 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9409 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9410 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9411 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9412 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9413 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9414 *ILOOP = *ILOOP + 1; >> 9415 } >> 9416 if ((AFP==7)&&(ZFP==2)){ >> 9417 // 7He -> 6He + n >> 9418 AFP = 6; >> 9419 ZFP = 2; >> 9420 //NEVA = NEVA + 1; >> 9421 IOUNSTABLE = 1; >> 9422 unstable_tke(7.0,2.0,6.0,2.0, >> 9423 VX,VY,VZ, >> 9424 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9425 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9426 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9427 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9428 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9429 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9430 *ILOOP = *ILOOP + 1; >> 9431 } >> 9432 >> 9433 if ((AFP==7) && (ZFP==5)){ >> 9434 // 7B -> 6Be + p -> 4He + 3p >> 9435 for(int I = 0; I<= AFP-5;I++){ >> 9436 unstable_tke(double(AFP-I),double(ZFP-I), >> 9437 double(AFP-I-1),double(ZFP-I-1), >> 9438 VX,VY,VZ, >> 9439 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9440 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9441 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9442 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9443 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9444 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9445 *ILOOP = *ILOOP + 1; >> 9446 VX = *VP1X; >> 9447 VY = *VP1Y; >> 9448 VZ = *VP1Z; >> 9449 } >> 9450 >> 9451 AFP = 4; >> 9452 ZFP = 2; >> 9453 //PEVA = PEVA + 3; >> 9454 IOUNSTABLE = 1; >> 9455 } >> 9456 if ((AFP==8) && (ZFP==4)){ >> 9457 // 8Be -> 4He + 4He >> 9458 AFP = 4; >> 9459 ZFP = 2; >> 9460 IOUNSTABLE = 1; >> 9461 unstable_tke(8.0,4.0,4.0,2.0, >> 9462 VX,VY,VZ, >> 9463 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9464 BU_TAB_TEMP[*ILOOP][0] = 2.0; >> 9465 BU_TAB_TEMP[*ILOOP][1] = 4.0; >> 9466 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9467 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9468 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9469 *ILOOP = *ILOOP + 1; >> 9470 } >> 9471 if ((AFP==8) && (ZFP==6)){ >> 9472 // 8C -> 2p + 6Be >> 9473 AFP = 6; >> 9474 ZFP = 4; >> 9475 //PEVA = PEVA + 2; >> 9476 IOUNSTABLE = 1; >> 9477 >> 9478 unstable_tke(8.0,6.0,7.0,5.0, >> 9479 VX,VY,VZ, >> 9480 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9481 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9482 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9483 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9484 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9485 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9486 *ILOOP = *ILOOP + 1; >> 9487 VX = *VP1X; >> 9488 VY = *VP1Y; >> 9489 VZ = *VP1Z; >> 9490 >> 9491 unstable_tke(7.0,5.0,6.0,4.0, >> 9492 VX,VY,VZ, >> 9493 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9494 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9495 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9496 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9497 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9498 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9499 *ILOOP = *ILOOP + 1; >> 9500 VX = *VP1X; >> 9501 VY = *VP1Y; >> 9502 VZ = *VP1Z; >> 9503 } >> 9504 >> 9505 if((AFP==9) && (ZFP==2)){ >> 9506 // 9He -> 8He + n >> 9507 AFP = 8; >> 9508 ZFP = 2; >> 9509 //NEVA = NEVA + 1; >> 9510 IOUNSTABLE = 1; >> 9511 >> 9512 unstable_tke(9.0,2.0,8.0,2.0, >> 9513 VX,VY,VZ, >> 9514 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9515 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9516 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9517 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9518 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9519 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9520 *ILOOP = *ILOOP + 1; >> 9521 VX = *VP1X; >> 9522 VY = *VP1Y; >> 9523 VZ = *VP1Z; >> 9524 } >> 9525 >> 9526 if((AFP==9) && (ZFP==5)){ >> 9527 // 9B -> 4He + 4He + p -> >> 9528 AFP = 4; >> 9529 ZFP = 2; >> 9530 //PEVA = PEVA + 1; >> 9531 IOUNSTABLE = 1; >> 9532 unstable_tke(9.0,5.0,8.0,4.0, >> 9533 VX,VY,VZ, >> 9534 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9535 BU_TAB_TEMP[*ILOOP][0] = 1.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 unstable_tke(8.0,4.0,4.0,2.0, >> 9546 VX,VY,VZ, >> 9547 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9548 BU_TAB_TEMP[*ILOOP][0] = 2.0; >> 9549 BU_TAB_TEMP[*ILOOP][1] = 4.0; >> 9550 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9551 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9552 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9553 *ILOOP = *ILOOP + 1; >> 9554 VX = *VP1X; >> 9555 VY = *VP1Y; >> 9556 VZ = *VP1Z; >> 9557 } >> 9558 >> 9559 if((AFP==10) && (ZFP==2)){ >> 9560 // 10He -> 8He + 2n >> 9561 AFP = 8; >> 9562 ZFP = 2; >> 9563 //NEVA = NEVA + 2; >> 9564 IOUNSTABLE = 1; >> 9565 // 10He -> 9He + n >> 9566 unstable_tke(10.0,2.0,9.0,2.0, >> 9567 VX,VY,VZ, >> 9568 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9569 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9570 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9571 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9572 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9573 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9574 *ILOOP = *ILOOP + 1; >> 9575 VX = *VP1X; >> 9576 VY = *VP1Y; >> 9577 VZ = *VP1Z; >> 9578 >> 9579 // 9He -> 8He + n >> 9580 unstable_tke(9.0,2.0,8.0,2.0, >> 9581 VX,VY,VZ, >> 9582 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9583 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9584 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9585 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9586 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9587 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9588 *ILOOP = *ILOOP + 1; >> 9589 VX = *VP1X; >> 9590 VY = *VP1Y; >> 9591 VZ = *VP1Z; >> 9592 } >> 9593 if ((AFP==10) && (ZFP==3)){ >> 9594 // 10Li -> 9Li + n -> >> 9595 AFP = 9; >> 9596 ZFP = 3; >> 9597 //NEVA = NEVA + 1; >> 9598 IOUNSTABLE = 1; >> 9599 unstable_tke(10.0,3.0,9.0,3.0, >> 9600 VX,VY,VZ, >> 9601 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9602 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9603 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9604 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9605 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9606 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9607 *ILOOP = *ILOOP + 1; >> 9608 VX = *VP1X; >> 9609 VY = *VP1Y; >> 9610 VZ = *VP1Z; >> 9611 } >> 9612 if ((AFP==10) && (ZFP==7)){ >> 9613 // 10N -> 9C + p -> >> 9614 AFP = 9; >> 9615 ZFP = 6; >> 9616 //PEVA = PEVA + 1; >> 9617 IOUNSTABLE = 1; >> 9618 unstable_tke(10.0,7.0,9.0,6.0, >> 9619 VX,VY,VZ, >> 9620 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9621 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9622 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9623 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9624 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9625 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9626 *ILOOP = *ILOOP + 1; >> 9627 VX = *VP1X; >> 9628 VY = *VP1Y; >> 9629 VZ = *VP1Z; >> 9630 } >> 9631 >> 9632 if((AFP==11) && (ZFP==7)){ >> 9633 // 11N -> 10C + p -> >> 9634 AFP = 10; >> 9635 ZFP = 6; >> 9636 //PEVA = PEVA + 1; >> 9637 IOUNSTABLE = 1; >> 9638 unstable_tke(11.0,7.0,10.0,6.0, >> 9639 VX,VY,VZ, >> 9640 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9641 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9642 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9643 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9644 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9645 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9646 *ILOOP = *ILOOP + 1; >> 9647 VX = *VP1X; >> 9648 VY = *VP1Y; >> 9649 VZ = *VP1Z; >> 9650 } >> 9651 if ((AFP==12) && (ZFP==8)){ >> 9652 // 12O -> 10C + 2p -> >> 9653 AFP = 10; >> 9654 ZFP = 6; >> 9655 //PEVA = PEVA + 2; >> 9656 IOUNSTABLE = 1; >> 9657 >> 9658 unstable_tke(12.0,8.0,11.0,7.0, >> 9659 VX,VY,VZ, >> 9660 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9661 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9662 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9663 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9664 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9665 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9666 *ILOOP = *ILOOP + 1; >> 9667 VX = *VP1X; >> 9668 VY = *VP1Y; >> 9669 VZ = *VP1Z; >> 9670 >> 9671 unstable_tke(11.0,7.0,10.0,6.0, >> 9672 VX,VY,VZ, >> 9673 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9674 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9675 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9676 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9677 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9678 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9679 *ILOOP = *ILOOP + 1; >> 9680 VX = *VP1X; >> 9681 VY = *VP1Y; >> 9682 VZ = *VP1Z; >> 9683 } >> 9684 if ((AFP==15) && (ZFP==9)){ >> 9685 // 15F -> 14O + p -> >> 9686 AFP = 14; >> 9687 ZFP = 8; >> 9688 //PEVA = PEVA + 1; >> 9689 IOUNSTABLE = 1; >> 9690 unstable_tke(15.0,9.0,14.0,8.0, >> 9691 VX,VY,VZ, >> 9692 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9693 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9694 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9695 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9696 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9697 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9698 *ILOOP = *ILOOP + 1; >> 9699 VX = *VP1X; >> 9700 VY = *VP1Y; >> 9701 VZ = *VP1Z; >> 9702 } >> 9703 >> 9704 if ((AFP==16) && (ZFP==9)){ >> 9705 // 16F -> 15O + p -> >> 9706 AFP = 15; >> 9707 ZFP = 8; >> 9708 //PEVA = PEVA + 1; >> 9709 IOUNSTABLE = 1; >> 9710 unstable_tke(16.0,9.0,15.0,8.0, >> 9711 VX,VY,VZ, >> 9712 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9713 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9714 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9715 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9716 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9717 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9718 *ILOOP = *ILOOP + 1; >> 9719 VX = *VP1X; >> 9720 VY = *VP1Y; >> 9721 VZ = *VP1Z; >> 9722 } >> 9723 >> 9724 if ((AFP==16) && (ZFP==10)){ >> 9725 // 16Ne -> 14O + 2p -> >> 9726 AFP = 14; >> 9727 ZFP = 8; >> 9728 //PEVA = PEVA + 2; >> 9729 IOUNSTABLE = 1; >> 9730 unstable_tke(16.0,10.0,15.0,9.0, >> 9731 VX,VY,VZ, >> 9732 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9733 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9734 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9735 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9736 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9737 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9738 *ILOOP = *ILOOP + 1; >> 9739 VX = *VP1X; >> 9740 VY = *VP1Y; >> 9741 VZ = *VP1Z; >> 9742 >> 9743 unstable_tke(15.0,9.0,14.0,8.0, >> 9744 VX,VY,VZ, >> 9745 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9746 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9747 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9748 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9749 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9750 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9751 *ILOOP = *ILOOP + 1; >> 9752 VX = *VP1X; >> 9753 VY = *VP1Y; >> 9754 VZ = *VP1Z; >> 9755 } >> 9756 if((AFP==18) && (ZFP==11)){ >> 9757 // 18Na -> 17Ne + p -> >> 9758 AFP = 17; >> 9759 ZFP = 10; >> 9760 //PEVA = PEVA + 1; >> 9761 IOUNSTABLE = 1; >> 9762 unstable_tke(18.0,11.0,17.0,10.0, >> 9763 VX,VY,VZ, >> 9764 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9765 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9766 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9767 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9768 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9769 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9770 *ILOOP = *ILOOP + 1; >> 9771 VX = *VP1X; >> 9772 VY = *VP1Y; >> 9773 VZ = *VP1Z; >> 9774 } >> 9775 if((AFP==19) && (ZFP==11)){ >> 9776 // 19Na -> 18Ne + p -> >> 9777 AFP = 18; >> 9778 ZFP = 10; >> 9779 //PEVA = PEVA + 1; >> 9780 IOUNSTABLE = 1; >> 9781 unstable_tke(19.0,11.0,18.0,10.0, >> 9782 VX,VY,VZ, >> 9783 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9784 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9785 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9786 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9787 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9788 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9789 *ILOOP = *ILOOP + 1; >> 9790 VX = *VP1X; >> 9791 VY = *VP1Y; >> 9792 VZ = *VP1Z; >> 9793 } >> 9794 if (ZFP>=4 && (AFP-ZFP)==1){ >> 9795 // Heavy residue is treated as 3He >> 9796 NEVA = AFP - 3; >> 9797 PEVA = ZFP - 2; >> 9798 >> 9799 for(G4int I = 0;I< NEVA;I++){ >> 9800 unstable_tke(G4double(AFP-I),G4double(ZFP), >> 9801 G4double(AFP-I-1),G4double(ZFP), >> 9802 VX,VY,VZ, >> 9803 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9804 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9805 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9806 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9807 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9808 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9809 *ILOOP = *ILOOP + 1; >> 9810 VX = *VP1X; >> 9811 VY = *VP1Y; >> 9812 VZ = *VP1Z; >> 9813 } >> 9814 for( G4int I = 0;I<PEVA;I++){ >> 9815 unstable_tke(G4double(AFP-NEVA-I),G4double(ZFP-I), >> 9816 G4double(AFP-NEVA-I-1),G4double(ZFP-I-1), >> 9817 VX,VY,VZ, >> 9818 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9819 BU_TAB_TEMP[*ILOOP][0] = 1.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 >> 9830 AFP = 3; >> 9831 ZFP = 2; >> 9832 IOUNSTABLE = 1; >> 9833 } >> 9834 // >> 9835 *AFPNEW = AFP; >> 9836 *ZFPNEW = ZFP; >> 9837 return; 11708 } 9838 } 11709 9839 11710 // 9840 // 11711 // 9841 // 11712 void G4Abla::unstable_tke(G4double ain, << 9842 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){ 11713 G4double zin, << 9843 // 11714 G4double anew, << 9844 G4double EKIN_P1=0.,ekin_tot=0.; 11715 G4double znew, << 9845 G4double PX1,PX2,PY1,PY2,PZ1,PZ2,PTOT; 11716 G4double vxin, << 9846 G4double RNDT,CTET1,STET1,RNDP,PHI1,ETOT_P1,ETOT_P2; 11717 G4double vyin, << 9847 G4double MASS,MASS1,MASS2; 11718 G4double vzin, << 9848 G4double vxout=0.,vyout=0.,vzout=0.; 11719 G4double* v1x, << 9849 G4int iain,izin,ianew,iznew,inin,innew; 11720 G4double* v1y, << 9850 // 11721 G4double* v1z, << 9851 G4double C = 29.97924580;// cm/ns 11722 G4double* v2x, << 9852 G4double AMU = 931.4940; // MeV/C^2 11723 G4double* v2y, << 9853 // 11724 G4double* v2z) << 9854 iain = idnint(ain); 11725 { << 9855 izin = idnint(zin); 11726 // << 9856 inin = iain - izin; 11727 G4double EKIN_P1 = 0., ekin_tot = 0.; << 9857 ianew = idnint(anew); 11728 G4double PX1, PX2, PY1, PY2, PZ1, PZ2, P << 9858 iznew = idnint(znew); 11729 G4double RNDT, CTET1, STET1, RNDP, PHI1, << 9859 innew = ianew - iznew; 11730 G4double MASS, MASS1, MASS2; << 9860 // 11731 G4double vxout = 0., vyout = 0., vzout = << 9861 if(izin>12){ 11732 G4int iain, izin, ianew, iznew, inin, in << 9862 mglms(ain,zin,3,&MASS); 11733 // << 9863 mglms(anew,znew,3,&MASS1); 11734 G4double C = 29.97924580; // cm/ << 9864 mglms(ain-anew,zin-znew,3,&MASS2); 11735 G4double AMU = 931.4940; // MeV << 9865 ekin_tot = MASS-MASS1-MASS2; 11736 // << 9866 }else{ 11737 iain = idnint(ain); << 9867 // ekin_tot = MEXP(ININ,IZIN)-(MEXP(INNEW,IZNEW)+MEXP(ININ-INNEW,IZIN-IZNEW)); 11738 izin = idnint(zin); << 9868 ekin_tot = masses->massexp[inin][izin]-(masses->massexp[innew][iznew]+masses->massexp[inin-innew][izin-iznew]); 11739 inin = iain - izin; << 9869 if(izin>12)std::cout << "*** ZIN > 12 ***" << izin << std::endl; 11740 ianew = idnint(anew); << 9870 } 11741 iznew = idnint(znew); << 9871 11742 innew = ianew - iznew; << 9872 if( ekin_tot<0.00 ){ 11743 // << 9873 // if( iain.ne.izin .and. izin.ne.0 ){ 11744 if (ain == 0) << 9874 // print *,"Negative Q-value in UNSTABLE_TKE" 11745 return; << 9875 // print *,"ekin_tot=",ekin_tot 11746 // << 9876 // print *,"ain,zin=",ain,zin,MEXP(ININ,IZIN) 11747 if (izin > 12) << 9877 // print *,"anew,znew=",anew,znew,MEXP(INNEW,IZNEW) 11748 { << 9878 // print * 11749 mglms(ain, zin, 3, &MASS); << 9879 // } 11750 mglms(anew, znew, 3, &MASS1); << 9880 ekin_tot=0.0; 11751 mglms(ain - anew, zin - znew, 3, &MA << 9881 } 11752 ekin_tot = MASS - MASS1 - MASS2; << 9882 // 11753 } << 9883 EKIN_P1 = ekin_tot*(ain-anew)/ ain; 11754 else << 9884 ETOT_P1 = EKIN_P1 + anew * AMU; 11755 { << 9885 PTOT = anew*AMU*std::sqrt((EKIN_P1/(anew*AMU)+1.0)*(EKIN_P1/(anew*AMU)+1.0)-1.0); // MeV/C 11756 // ekin_tot = << 9886 // 11757 // MEXP(ININ,IZIN)-(MEXP(INNEW,IZNE << 9887 RNDT = G4AblaRandom::flat(); 11758 ekin_tot = << 9888 CTET1 = 2.0*RNDT-1.0; 11759 masses->massexp[inin][izin] - (m << 9889 STET1 = std::sqrt(1.0-CTET1*CTET1); 11760 if (izin > 12) << 9890 RNDP = G4AblaRandom::flat(); 11761 std::cout << "*** ZIN > 12 ***" << 9891 PHI1 = RNDP*2.0*3.141592654; 11762 } << 9892 PX1 = PTOT * STET1*std::cos(PHI1); 11763 << 9893 PY1 = PTOT * STET1*std::sin(PHI1); 11764 if (ekin_tot < 0.00) << 9894 PZ1 = PTOT * CTET1; 11765 { << 9895 *v1x = C * PX1 / ETOT_P1; 11766 // if( iain.ne.izin .and. iz << 9896 *v1y = C * PY1 / ETOT_P1; 11767 // print *,"Negative Q-va << 9897 *v1z = C * PZ1 / ETOT_P1; 11768 // print *,"ekin_tot=",ek << 9898 lorentz_boost(vxin,vyin,vzin,*v1x,*v1y,*v1z,&vxout,&vyout,&vzout); 11769 // print *,"ain,zin=",ain << 9899 *v1x = vxout; 11770 // print *,"anew,znew=",a << 9900 *v1y = vyout; 11771 // print * << 9901 *v1z = vzout; 11772 // } << 9902 // 11773 ekin_tot = 0.0; << 9903 PX2 = - PX1; 11774 } << 9904 PY2 = - PY1; 11775 // << 9905 PZ2 = - PZ1; 11776 EKIN_P1 = ekin_tot * (ain - anew) / ain; << 9906 ETOT_P2 = (ekin_tot - EKIN_P1) + (ain-anew) * AMU; 11777 ETOT_P1 = EKIN_P1 + anew * AMU; << 9907 *v2x = C * PX2 / ETOT_P2; 11778 PTOT = anew * AMU * std::sqrt((EKIN_P1 / << 9908 *v2y = C * PY2 / ETOT_P2; 11779 << 9909 *v2z = C * PZ2 / ETOT_P2; 11780 RNDT = G4AblaRandom::flat(); << 9910 lorentz_boost(vxin,vyin,vzin,*v2x,*v2y,*v2z,&vxout,&vyout,&vzout); 11781 CTET1 = 2.0 * RNDT - 1.0; << 9911 *v2x = vxout; 11782 STET1 = std::sqrt(1.0 - CTET1 * CTET1); << 9912 *v2y = vyout; 11783 RNDP = G4AblaRandom::flat(); << 9913 *v2z = vzout; 11784 PHI1 = RNDP * 2.0 * 3.141592654; << 9914 // 11785 PX1 = PTOT * STET1 * std::cos(PHI1); << 9915 return; 11786 PY1 = PTOT * STET1 * std::sin(PHI1); << 11787 PZ1 = PTOT * CTET1; << 11788 *v1x = C * PX1 / ETOT_P1; << 11789 *v1y = C * PY1 / ETOT_P1; << 11790 *v1z = C * PZ1 / ETOT_P1; << 11791 lorentz_boost(vxin, vyin, vzin, *v1x, *v << 11792 *v1x = vxout; << 11793 *v1y = vyout; << 11794 *v1z = vzout; << 11795 // << 11796 PX2 = -PX1; << 11797 PY2 = -PY1; << 11798 PZ2 = -PZ1; << 11799 ETOT_P2 = (ekin_tot - EKIN_P1) + (ain - << 11800 *v2x = C * PX2 / ETOT_P2; << 11801 *v2y = C * PY2 / ETOT_P2; << 11802 *v2z = C * PZ2 / ETOT_P2; << 11803 lorentz_boost(vxin, vyin, vzin, *v2x, *v << 11804 *v2x = vxout; << 11805 *v2y = vyout; << 11806 *v2z = vzout; << 11807 // << 11808 return; << 11809 } 9916 } 11810 // 9917 // 11811 //****************************************** 9918 //************************************************************************** 11812 // 9919 // 11813 void G4Abla::lorentz_boost(G4double VXRIN, << 9920 void G4Abla::lorentz_boost(G4double VXRIN,G4double VYRIN,G4double VZRIN,G4double VXIN,G4double VYIN,G4double VZIN,G4double *VXOUT,G4double *VYOUT,G4double *VZOUT){ 11814 G4double VYRIN, << 9921 // 11815 G4double VZRIN, << 9922 // Calculate velocities of a given fragment from frame 1 into frame 2. 11816 G4double VXIN, << 9923 // Frame 1 is moving with velocity v=(vxr,vyr,vzr) relative to frame 2. 11817 G4double VYIN, << 9924 // Velocity of the fragment in frame 1 -> vxin,vyin,vzin 11818 G4double VZIN, << 9925 // Velocity of the fragment in frame 2 -> vxout,vyout,vzout 11819 G4double* VXOUT, << 9926 // 11820 G4double* VYOUT, << 9927 G4double VXR,VYR,VZR; 11821 G4double* VZOUT) << 9928 G4double GAMMA,VR,C,CC,DENO,VXNOM,VYNOM,VZNOM; 11822 { << 9929 // 11823 // << 9930 C = 29.9792458; // cm/ns 11824 // Calculate velocities of a given fragm << 9931 CC = C*C; 11825 // Frame 1 is moving with velocity v=(vx << 9932 // 11826 // Velocity of the fragment in frame 1 - << 9933 // VXR,VYR,VZR are velocities of frame 1 relative to frame 2; to go from 1 to 2 11827 // Velocity of the fragment in frame 2 - << 9934 // we need to multiply them by -1 11828 // << 9935 VXR = -1.0 * VXRIN; 11829 G4double VXR, VYR, VZR; << 9936 VYR = -1.0 * VYRIN; 11830 G4double GAMMA, VR, C, CC, DENO, VXNOM, << 9937 VZR = -1.0 * VZRIN; 11831 // << 9938 // 11832 C = 29.9792458; // cm/ns << 9939 VR = std::sqrt(VXR*VXR + VYR*VYR + VZR*VZR); 11833 CC = C * C; << 9940 if(VR<1e-9){ 11834 // << 9941 *VXOUT = VXIN; 11835 // VXR,VYR,VZR are velocities of frame 1 << 9942 *VYOUT = VYIN; 11836 // 2 we need to multiply them by -1 << 9943 *VZOUT = VZIN; 11837 VXR = -1.0 * VXRIN; << 9944 return; 11838 VYR = -1.0 * VYRIN; << 9945 } 11839 VZR = -1.0 * VZRIN; << 9946 GAMMA = 1.0/std::sqrt(1.0 - VR*VR/CC); 11840 // << 9947 DENO = 1.0 - VXR*VXIN/CC - VYR*VYIN/CC - VZR*VZIN/CC; 11841 VR = std::sqrt(VXR * VXR + VYR * VYR + V << 11842 if (VR < 1e-9) << 11843 { << 11844 *VXOUT = VXIN; << 11845 *VYOUT = VYIN; << 11846 *VZOUT = VZIN; << 11847 return; << 11848 } << 11849 GAMMA = 1.0 / std::sqrt(1.0 - VR * VR / << 11850 DENO = 1.0 - VXR * VXIN / CC - VYR * VYI << 11851 << 11852 // X component << 11853 VXNOM = -GAMMA * VXR + (1.0 + (GAMMA - 1 << 11854 (GAMMA - 1.0) * VXR * VYR / (VR << 11855 << 11856 *VXOUT = VXNOM / (GAMMA * DENO); << 11857 9948 11858 // Y component << 9949 // X component 11859 VYNOM = -GAMMA * VYR + (1.0 + (GAMMA - 1 << 9950 VXNOM = -GAMMA*VXR + (1.0+(GAMMA-1.0)*VXR*VXR/(VR*VR))*VXIN + (GAMMA-1.0)*VXR*VYR/(VR*VR)*VYIN + (GAMMA-1.0)*VXR*VZR/(VR*VR)*VZIN; 11860 (GAMMA - 1.0) * VXR * VYR / (VR << 11861 9951 11862 *VYOUT = VYNOM / (GAMMA * DENO); << 9952 *VXOUT = VXNOM / (GAMMA * DENO); 11863 9953 11864 // Z component << 9954 // Y component 11865 VZNOM = -GAMMA * VZR + (1.0 + (GAMMA - 1 << 9955 VYNOM = -GAMMA*VYR + (1.0+(GAMMA-1.0)*VYR*VYR/(VR*VR))*VYIN + (GAMMA-1.0)*VXR*VYR/(VR*VR)*VXIN + (GAMMA-1.0)*VYR*VZR/(VR*VR)*VZIN; 11866 (GAMMA - 1.0) * VXR * VZR / (VR << 9956 >> 9957 *VYOUT = VYNOM / (GAMMA * DENO); >> 9958 >> 9959 // Z component >> 9960 VZNOM = -GAMMA*VZR + (1.0+(GAMMA-1.0)*VZR*VZR/(VR*VR))*VZIN + (GAMMA-1.0)*VXR*VZR/(VR*VR)*VXIN + (GAMMA-1.0)*VYR*VZR/(VR*VR)*VYIN; >> 9961 >> 9962 *VZOUT = VZNOM / (GAMMA * DENO); >> 9963 >> 9964 return; >> 9965 } >> 9966 >> 9967 void G4Abla::fission(G4double AF,G4double ZF,G4double EE,G4double JPRF, >> 9968 G4double *VX1_FISSION_par,G4double *VY1_FISSION_par,G4double *VZ1_FISSION_par, >> 9969 G4double *VX2_FISSION_par,G4double *VY2_FISSION_par,G4double *VZ2_FISSION_par, >> 9970 G4int *ZFP1,G4int *AFP1,G4int *SFP1, G4int *ZFP2,G4int *AFP2,G4int *SFP2,G4int *imode_par, >> 9971 G4double *VX_EVA_SC_par, G4double *VY_EVA_SC_par, G4double *VZ_EVA_SC_par, >> 9972 G4double EV_TEMP[200][6],G4int *IEV_TAB_FIS_par, G4int *NbLam0_par){ >> 9973 /// >> 9974 G4double EFF1=0.,EFF2=0.,VFF1=0.,VFF2=0., >> 9975 AF1=0.,ZF1=0.,AF2=0.,ZF2=0., >> 9976 AFF1=0.,ZFF1=0.,AFF2=0.,ZFF2=0., >> 9977 vz1_eva=0., vx1_eva=0.,vy1_eva=0., >> 9978 vz2_eva=0., vx2_eva=0.,vy2_eva=0., >> 9979 vx_eva_sc=0.,vy_eva_sc=0.,vz_eva_sc=0., >> 9980 VXOUT=0.,VYOUT=0.,VZOUT=0., >> 9981 VX2OUT=0.,VY2OUT=0.,VZ2OUT=0.; >> 9982 G4int IEV_TAB_FIS=0,IEV_TAB_TEMP=0; >> 9983 G4double EV_TEMP1[200][6], EV_TEMP2[200][6],mtota=0.; >> 9984 G4int inttype = 0,inum=0; >> 9985 IEV_TAB_SSC=0; >> 9986 (*imode_par)=0; >> 9987 G4int NbLam0= (*NbLam0_par); >> 9988 >> 9989 for(G4int I1=0;I1<200;I1++) >> 9990 for(G4int I2=0;I2<6;I2++){ >> 9991 EV_TEMP[I1][I2] = 0.0; >> 9992 EV_TEMP1[I1][I2] = 0.0; >> 9993 EV_TEMP2[I1][I2] = 0.0; >> 9994 } >> 9995 >> 9996 G4double et = EE - JPRF * JPRF * 197. * 197./(2.*0.4*931.*std::pow(AF,5.0/3.0)*1.16*1.16); >> 9997 >> 9998 fissionDistri(AF,ZF,et,AF1,ZF1,EFF1,VFF1,AF2,ZF2,EFF2,VFF2, >> 9999 vx_eva_sc,vy_eva_sc,vz_eva_sc,&NbLam0); >> 10000 >> 10001 // Lambda particles >> 10002 G4int NbLam1=0; >> 10003 G4int NbLam2=0; >> 10004 G4double pbH = (AF1 - ZF1) / (AF1 - ZF1 + AF2 - ZF2); >> 10005 for(G4int i=0;i<NbLam0;i++){ >> 10006 if(G4AblaRandom::flat()<pbH){ >> 10007 NbLam1++; >> 10008 }else{ >> 10009 NbLam2++; >> 10010 } >> 10011 } >> 10012 // Copy of the evaporated particles from saddle to scission >> 10013 for(G4int IJ = 0; IJ< IEV_TAB_SSC;IJ++){ >> 10014 EV_TEMP[IJ][0] = EV_TAB_SSC[IJ][0]; >> 10015 EV_TEMP[IJ][1] = EV_TAB_SSC[IJ][1]; >> 10016 EV_TEMP[IJ][2] = EV_TAB_SSC[IJ][2]; >> 10017 EV_TEMP[IJ][3] = EV_TAB_SSC[IJ][3]; >> 10018 EV_TEMP[IJ][4] = EV_TAB_SSC[IJ][4]; >> 10019 EV_TEMP[IJ][5] = EV_TAB_SSC[IJ][5]; >> 10020 } >> 10021 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_SSC; >> 10022 >> 10023 // Velocities >> 10024 G4double VZ1_FISSION = (2.0 * G4AblaRandom::flat() - 1.0) * VFF1; >> 10025 G4double VPERP1 = std::sqrt(VFF1*VFF1 - VZ1_FISSION*VZ1_FISSION); >> 10026 G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142; >> 10027 G4double VX1_FISSION = VPERP1 * std::sin(ALPHA1); >> 10028 G4double VY1_FISSION = VPERP1 * std::cos(ALPHA1); >> 10029 G4double VX2_FISSION = - VX1_FISSION / VFF1 * VFF2; >> 10030 G4double VY2_FISSION = - VY1_FISSION / VFF1 * VFF2; >> 10031 G4double VZ2_FISSION = - VZ1_FISSION / VFF1 * VFF2; >> 10032 // >> 10033 // Fission fragment 1 >> 10034 if( (ZF1<=0.0) || (AF1<=0.0) || (AF1<ZF1) ){ >> 10035 std::cout << "F1 unphysical: "<<ZF<< " "<<AF<< " "<<EE<< " "<<ZF1<< " "<<AF1 << std::endl; >> 10036 }else{ >> 10037 // fission and IMF emission are not allowed >> 10038 opt->optimfallowed = 0; // IMF is not allowed >> 10039 fiss->ifis = 0; // fission is not allowed >> 10040 gammaemission=1; >> 10041 G4int FF11=0, FIMF11=0; >> 10042 G4double ZIMFF1=0., AIMFF1=0.,TKEIMF1=0.,JPRFOUT=0.; >> 10043 // >> 10044 evapora(ZF1,AF1,&EFF1,0., &ZFF1, &AFF1, &mtota, &vz1_eva, &vx1_eva,&vy1_eva, &FF11, &FIMF11, &ZIMFF1, &AIMFF1,&TKEIMF1, &JPRFOUT, &inttype, &inum,EV_TEMP1,&IEV_TAB_TEMP,&NbLam1); 11867 10045 11868 *VZOUT = VZNOM / (GAMMA * DENO); << 10046 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ >> 10047 EV_TEMP[IJ+IEV_TAB_FIS][0] = EV_TEMP1[IJ][0]; >> 10048 EV_TEMP[IJ+IEV_TAB_FIS][1] = EV_TEMP1[IJ][1]; >> 10049 // Lorentz kinematics >> 10050 // EV_TEMP(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF >> 10051 // EV_TEMP(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF >> 10052 // EV_TEMP(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF >> 10053 // Lorentz transformation >> 10054 lorentz_boost(VX1_FISSION,VY1_FISSION,VZ1_FISSION, >> 10055 EV_TEMP1[IJ][2],EV_TEMP1[IJ][3],EV_TEMP1[IJ][4], >> 10056 &VXOUT,&VYOUT,&VZOUT); >> 10057 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, >> 10058 VXOUT,VYOUT,VZOUT, >> 10059 &VX2OUT,&VY2OUT,&VZ2OUT); >> 10060 EV_TEMP[IJ+IEV_TAB_FIS][2] = VX2OUT; >> 10061 EV_TEMP[IJ+IEV_TAB_FIS][3] = VY2OUT; >> 10062 EV_TEMP[IJ+IEV_TAB_FIS][4] = VZ2OUT; >> 10063 // >> 10064 } >> 10065 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_TEMP; 11869 10066 11870 return; << 10067 } 11871 } << 10068 // >> 10069 // Fission fragment 2 >> 10070 if( (ZF2<=0.0) || (AF2<=0.0) || (AF2<ZF2) ){ >> 10071 std::cout << "F2 unphysical: "<<ZF<< " "<<AF<< " "<<EE<< " "<<ZF2<< " "<<AF2 << std::endl; >> 10072 }else{ >> 10073 // fission and IMF emission are not allowed >> 10074 opt->optimfallowed = 0; // IMF is not allowed >> 10075 fiss->ifis = 0; // fission is not allowed >> 10076 gammaemission=1; >> 10077 G4int FF22=0, FIMF22=0; >> 10078 G4double ZIMFF2=0., AIMFF2=0.,TKEIMF2=0.,JPRFOUT=0.; >> 10079 // >> 10080 evapora(ZF2,AF2,&EFF2,0., &ZFF2, &AFF2, &mtota, &vz2_eva, &vx2_eva,&vy2_eva, &FF22, &FIMF22, &ZIMFF2, &AIMFF2,&TKEIMF2, &JPRFOUT, &inttype, &inum,EV_TEMP2,&IEV_TAB_TEMP,&NbLam2); 11872 10081 11873 void G4Abla::fission(G4double AF, << 10082 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 11874 G4double ZF, << 10083 EV_TEMP[IJ+IEV_TAB_FIS][0] = EV_TEMP2[IJ][0]; 11875 G4double EE, << 10084 EV_TEMP[IJ+IEV_TAB_FIS][1] = EV_TEMP2[IJ][1]; 11876 G4double JPRF, << 10085 // Lorentz kinematics 11877 G4double* VX1_FISSION_p << 10086 // EV_TEMP(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 11878 G4double* VY1_FISSION_p << 10087 // EV_TEMP(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 11879 G4double* VZ1_FISSION_p << 10088 // EV_TEMP(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 11880 G4double* VX2_FISSION_p << 10089 // Lorentz transformation 11881 G4double* VY2_FISSION_p << 10090 lorentz_boost(VX2_FISSION,VY2_FISSION,VZ2_FISSION, 11882 G4double* VZ2_FISSION_p << 10091 EV_TEMP2[IJ][2],EV_TEMP2[IJ][3],EV_TEMP2[IJ][4], 11883 G4int* ZFP1, << 10092 &VXOUT,&VYOUT,&VZOUT); 11884 G4int* AFP1, << 10093 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, 11885 G4int* SFP1, << 10094 VXOUT,VYOUT,VZOUT, 11886 G4int* ZFP2, << 10095 &VX2OUT,&VY2OUT,&VZ2OUT); 11887 G4int* AFP2, << 10096 EV_TEMP[IJ+IEV_TAB_FIS][2] = VX2OUT; 11888 G4int* SFP2, << 10097 EV_TEMP[IJ+IEV_TAB_FIS][3] = VY2OUT; 11889 G4int* imode_par, << 10098 EV_TEMP[IJ+IEV_TAB_FIS][4] = VZ2OUT; 11890 G4double* VX_EVA_SC_par << 10099 // 11891 G4double* VY_EVA_SC_par << 10100 } 11892 G4double* VZ_EVA_SC_par << 10101 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_TEMP; 11893 G4double EV_TEMP[indexp << 10102 } 11894 G4int* IEV_TAB_FIS_par, << 10103 // 11895 G4int* NbLam0_par) << 10104 // Lorentz kinematics 11896 { << 10105 // vx1_fission = vx1_fission + vx1_eva 11897 /// << 10106 // vy1_fission = vy1_fission + vy1_eva 11898 G4double EFF1 = 0., EFF2 = 0., VFF1 = 0. << 10107 // vz1_fission = vz1_fission + vz1_eva 11899 AFF2 = 0., ZFF2 = 0., vz1_eva = << 10108 // vx2_fission = vx2_fission + vx2_eva 11900 vx_eva_sc = 0., vy_eva_sc = 0., << 10109 // vy2_fission = vy2_fission + vy2_eva 11901 VY2OUT = 0., VZ2OUT = 0.; << 10110 // vz2_fission = vz2_fission + vz2_eva 11902 G4int IEV_TAB_FIS = 0, IEV_TAB_TEMP = 0; << 10111 // The v_eva_sc contribution is considered in the calling subroutine 11903 G4double EV_TEMP1[indexpart][6], EV_TEMP << 10112 // Lorentz transformations 11904 G4int inttype = 0, inum = 0; << 10113 lorentz_boost(vx1_eva,vy1_eva,vz1_eva, 11905 IEV_TAB_SSC = 0; << 10114 VX1_FISSION,VY1_FISSION,VZ1_FISSION, 11906 (*imode_par) = 0; << 10115 &VXOUT,&VYOUT,&VZOUT); 11907 G4int NbLam0 = (*NbLam0_par); << 10116 VX1_FISSION = VXOUT; 11908 << 10117 VY1_FISSION = VYOUT; 11909 for (G4int I1 = 0; I1 < indexpart; I1++) << 10118 VZ1_FISSION = VZOUT; 11910 for (G4int I2 = 0; I2 < 6; I2++) << 10119 lorentz_boost(vx2_eva,vy2_eva,vz2_eva, 11911 { << 10120 VX2_FISSION,VY2_FISSION,VZ2_FISSION, 11912 EV_TEMP[I1][I2] = 0.0; << 10121 &VXOUT,&VYOUT,&VZOUT); 11913 EV_TEMP1[I1][I2] = 0.0; << 10122 VX2_FISSION = VXOUT; 11914 EV_TEMP2[I1][I2] = 0.0; << 10123 VY2_FISSION = VYOUT; 11915 } << 10124 VZ2_FISSION = VZOUT; 11916 << 10125 // 11917 G4double et = EE - JPRF * JPRF * 197. * << 10126 (*ZFP1) = idnint(ZFF1); 11918 << 10127 (*AFP1) = idnint(AFF1); 11919 fissionDistri(AF, ZF, et, AF1, ZF1, EFF1 << 10128 (*SFP1) = NbLam1; 11920 << 10129 (*VX1_FISSION_par) = VX1_FISSION; 11921 // Lambda particles << 10130 (*VY1_FISSION_par) = VY1_FISSION; 11922 G4int NbLam1 = 0; << 10131 (*VZ1_FISSION_par) = VZ1_FISSION; 11923 G4int NbLam2 = 0; << 10132 (*VX_EVA_SC_par)=vx_eva_sc; 11924 G4double pbH = (AF1 - ZF1) / (AF1 - ZF1 << 10133 (*VY_EVA_SC_par)=vy_eva_sc; 11925 for (G4int i = 0; i < NbLam0; i++) << 10134 (*VZ_EVA_SC_par)=vz_eva_sc; 11926 { << 10135 (*ZFP2) = idnint(ZFF2); 11927 if (G4AblaRandom::flat() < pbH) << 10136 (*AFP2) = idnint(AFF2); 11928 { << 10137 (*SFP2) = NbLam2; 11929 NbLam1++; << 10138 (*VX2_FISSION_par) = VX2_FISSION; 11930 } << 10139 (*VY2_FISSION_par) = VY2_FISSION; 11931 else << 10140 (*VZ2_FISSION_par) = VZ2_FISSION; 11932 { << 10141 (*IEV_TAB_FIS_par) = IEV_TAB_FIS; 11933 NbLam2++; << 10142 (*NbLam0_par) = NbLam1 + NbLam2; 11934 } << 10143 if(NbLam0>(NbLam1 + NbLam2))varntp->kfis = 25; 11935 } << 10144 return; 11936 // Copy of the evaporated particles << 11937 for (G4int IJ = 0; IJ < IEV_TAB_SSC; IJ+ << 11938 { << 11939 EV_TEMP[IJ][0] = EV_TAB_SSC[IJ][0]; << 11940 EV_TEMP[IJ][1] = EV_TAB_SSC[IJ][1]; << 11941 EV_TEMP[IJ][2] = EV_TAB_SSC[IJ][2]; << 11942 EV_TEMP[IJ][3] = EV_TAB_SSC[IJ][3]; << 11943 EV_TEMP[IJ][4] = EV_TAB_SSC[IJ][4]; << 11944 EV_TEMP[IJ][5] = EV_TAB_SSC[IJ][5]; << 11945 } << 11946 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_SSC; << 11947 << 11948 // Velocities << 11949 G4double VZ1_FISSION = (2.0 * G4AblaRand << 11950 G4double VPERP1 = std::sqrt(VFF1 * VFF1 << 11951 G4double ALPHA1 = G4AblaRandom::flat() * << 11952 G4double VX1_FISSION = VPERP1 * std::sin << 11953 G4double VY1_FISSION = VPERP1 * std::cos << 11954 G4double VX2_FISSION = -VX1_FISSION / VF << 11955 G4double VY2_FISSION = -VY1_FISSION / VF << 11956 G4double VZ2_FISSION = -VZ1_FISSION / VF << 11957 // << 11958 // Fission fragment 1 << 11959 if ((ZF1 <= 0.0) || (AF1 <= 0.0) || (AF1 << 11960 { << 11961 std::cout << "F1 unphysical: " << ZF << 11962 } << 11963 else << 11964 { << 11965 // fission and IMF emission are not << 11966 opt->optimfallowed = 0; // IMF is n << 11967 fiss->ifis = 0; // fission << 11968 gammaemission = 1; << 11969 G4int FF11 = 0, FIMF11 = 0; << 11970 G4double ZIMFF1 = 0., AIMFF1 = 0., T << 11971 // << 11972 evapora(ZF1, << 11973 AF1, << 11974 &EFF1, << 11975 0., << 11976 &ZFF1, << 11977 &AFF1, << 11978 &mtota, << 11979 &vz1_eva, << 11980 &vx1_eva, << 11981 &vy1_eva, << 11982 &FF11, << 11983 &FIMF11, << 11984 &ZIMFF1, << 11985 &AIMFF1, << 11986 &TKEIMF1, << 11987 &JPRFOUT, << 11988 &inttype, << 11989 &inum, << 11990 EV_TEMP1, << 11991 &IEV_TAB_TEMP, << 11992 &NbLam1); << 11993 << 11994 for (G4int IJ = 0; IJ < IEV_TAB_TEMP << 11995 { << 11996 EV_TEMP[IJ + IEV_TAB_FIS][0] = E << 11997 EV_TEMP[IJ + IEV_TAB_FIS][1] = E << 11998 // Lorentz kinematics << 11999 // EV_TEMP(IJ+IEV_ << 12000 // EV_TEMP(IJ+IEV_ << 12001 // EV_TEMP(IJ+IEV_ << 12002 // Lorentz transformation << 12003 lorentz_boost(VX1_FISSION, << 12004 VY1_FISSION, << 12005 VZ1_FISSION, << 12006 EV_TEMP1[IJ][2], << 12007 EV_TEMP1[IJ][3], << 12008 EV_TEMP1[IJ][4], << 12009 &VXOUT, << 12010 &VYOUT, << 12011 &VZOUT); << 12012 lorentz_boost(vx_eva_sc, vy_eva_ << 12013 EV_TEMP[IJ + IEV_TAB_FIS][2] = V << 12014 EV_TEMP[IJ + IEV_TAB_FIS][3] = V << 12015 EV_TEMP[IJ + IEV_TAB_FIS][4] = V << 12016 // << 12017 } << 12018 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_ << 12019 } << 12020 // << 12021 // Fission fragment 2 << 12022 if ((ZF2 <= 0.0) || (AF2 <= 0.0) || (AF2 << 12023 { << 12024 std::cout << "F2 unphysical: " << ZF << 12025 } << 12026 else << 12027 { << 12028 // fission and IMF emission are not << 12029 opt->optimfallowed = 0; // IMF is n << 12030 fiss->ifis = 0; // fission << 12031 gammaemission = 1; << 12032 G4int FF22 = 0, FIMF22 = 0; << 12033 G4double ZIMFF2 = 0., AIMFF2 = 0., T << 12034 // << 12035 evapora(ZF2, << 12036 AF2, << 12037 &EFF2, << 12038 0., << 12039 &ZFF2, << 12040 &AFF2, << 12041 &mtota, << 12042 &vz2_eva, << 12043 &vx2_eva, << 12044 &vy2_eva, << 12045 &FF22, << 12046 &FIMF22, << 12047 &ZIMFF2, << 12048 &AIMFF2, << 12049 &TKEIMF2, << 12050 &JPRFOUT, << 12051 &inttype, << 12052 &inum, << 12053 EV_TEMP2, << 12054 &IEV_TAB_TEMP, << 12055 &NbLam2); << 12056 << 12057 for (G4int IJ = 0; IJ < IEV_TAB_TEMP << 12058 { << 12059 EV_TEMP[IJ + IEV_TAB_FIS][0] = E << 12060 EV_TEMP[IJ + IEV_TAB_FIS][1] = E << 12061 // Lorentz kinematics << 12062 // EV_TEMP(IJ+IEV_ << 12063 // EV_TEMP(IJ+IEV_ << 12064 // EV_TEMP(IJ+IEV_ << 12065 // Lorentz transformation << 12066 lorentz_boost(VX2_FISSION, << 12067 VY2_FISSION, << 12068 VZ2_FISSION, << 12069 EV_TEMP2[IJ][2], << 12070 EV_TEMP2[IJ][3], << 12071 EV_TEMP2[IJ][4], << 12072 &VXOUT, << 12073 &VYOUT, << 12074 &VZOUT); << 12075 lorentz_boost(vx_eva_sc, vy_eva_ << 12076 EV_TEMP[IJ + IEV_TAB_FIS][2] = V << 12077 EV_TEMP[IJ + IEV_TAB_FIS][3] = V << 12078 EV_TEMP[IJ + IEV_TAB_FIS][4] = V << 12079 // << 12080 } << 12081 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_ << 12082 } << 12083 // << 12084 // Lorentz kinematics << 12085 // vx1_fission = vx1_fission + vx1_ << 12086 // vy1_fission = vy1_fission + vy1_ << 12087 // vz1_fission = vz1_fission + vz1_ << 12088 // vx2_fission = vx2_fission + vx2_ << 12089 // vy2_fission = vy2_fission + vy2_ << 12090 // vz2_fission = vz2_fission + vz2_ << 12091 // The v_eva_sc contribution is consider << 12092 // Lorentz transformations << 12093 lorentz_boost(vx1_eva, vy1_eva, vz1_eva, << 12094 VX1_FISSION = VXOUT; << 12095 VY1_FISSION = VYOUT; << 12096 VZ1_FISSION = VZOUT; << 12097 lorentz_boost(vx2_eva, vy2_eva, vz2_eva, << 12098 VX2_FISSION = VXOUT; << 12099 VY2_FISSION = VYOUT; << 12100 VZ2_FISSION = VZOUT; << 12101 // << 12102 (*ZFP1) = idnint(ZFF1); << 12103 (*AFP1) = idnint(AFF1); << 12104 (*SFP1) = NbLam1; << 12105 (*VX1_FISSION_par) = VX1_FISSION; << 12106 (*VY1_FISSION_par) = VY1_FISSION; << 12107 (*VZ1_FISSION_par) = VZ1_FISSION; << 12108 (*VX_EVA_SC_par) = vx_eva_sc; << 12109 (*VY_EVA_SC_par) = vy_eva_sc; << 12110 (*VZ_EVA_SC_par) = vz_eva_sc; << 12111 (*ZFP2) = idnint(ZFF2); << 12112 (*AFP2) = idnint(AFF2); << 12113 (*SFP2) = NbLam2; << 12114 (*VX2_FISSION_par) = VX2_FISSION; << 12115 (*VY2_FISSION_par) = VY2_FISSION; << 12116 (*VZ2_FISSION_par) = VZ2_FISSION; << 12117 (*IEV_TAB_FIS_par) = IEV_TAB_FIS; << 12118 (*NbLam0_par) = NbLam1 + NbLam2; << 12119 if (NbLam0 > (NbLam1 + NbLam2)) << 12120 varntp->kfis = 25; << 12121 return; << 12122 } 10145 } 12123 //****************************************** 10146 //************************************************************************* 12124 // 10147 // 12125 void G4Abla::tke_bu(G4double Z, G4double A, << 10148 void G4Abla::tke_bu(G4double Z,G4double A,G4double ZALL,G4double AAL,G4double *VX,G4double *VY,G4double *VZ){ 12126 { << 12127 10149 12128 G4double V_over_V0, R0, RALL, RHAZ, R, T << 10150 G4double V_over_V0,R0,RALL,RHAZ,R,TKE,Ekin,V,VPERP,ALPHA1; 12129 10151 12130 V_over_V0 = 6.0; << 10152 V_over_V0 = 6.0; 12131 R0 = 1.16; << 10153 R0 = 1.16; 12132 10154 12133 if (Z < 1.0) << 10155 if(Z < 1.0){ 12134 { << 12135 *VX = 0.0; 10156 *VX = 0.0; 12136 *VY = 0.0; 10157 *VY = 0.0; 12137 *VZ = 0.0; 10158 *VZ = 0.0; 12138 return; 10159 return; 12139 } << 10160 } 12140 10161 12141 RALL = R0 * std::pow(V_over_V0, 1.0 / 3. << 10162 RALL = R0 * std::pow(V_over_V0,1.0/3.0) * std::pow(AAL,1.0/3.0); 12142 RHAZ = G4double(haz(1)); << 10163 RHAZ = G4double(haz(1)); 12143 R = std::pow(RHAZ, 1.0 / 3.0) * RALL; << 10164 R = std::pow(RHAZ,1.0/3.0) * RALL; 12144 TKE = 1.44 * Z * ZALL * R * R * (1.0 - A << 10165 TKE = 1.44 * Z * ZALL * R*R * (1.0 - A/AAL)*(1.0 - A/AAL) / std::pow(RALL,3.0); 12145 << 10166 12146 Ekin = TKE * (AAL - A) / AAL; << 10167 Ekin = TKE * (AAL - A) / AAL; 12147 // print*,'!!!',IDNINT(AAl),IDNINT << 10168 // print*,'!!!',IDNINT(AAl),IDNINT(A),IDNINT(ZALL),IDNINT(Z) 12148 V = std::sqrt(Ekin / A) * 1.3887; << 10169 V = std::sqrt(Ekin/A) * 1.3887; 12149 *VZ = (2.0 * G4double(haz(1)) - 1.0) * V << 10170 *VZ = (2.0 * G4double(haz(1)) - 1.0) * V; 12150 VPERP = std::sqrt(V * V - (*VZ) * (*VZ)) << 10171 VPERP = std::sqrt(V*V - (*VZ)*(*VZ)); 12151 ALPHA1 = G4double(haz(1)) * 2.0 * 3.142; << 10172 ALPHA1 = G4double(haz(1)) * 2.0 * 3.142; 12152 *VX = VPERP * std::sin(ALPHA1); << 10173 *VX = VPERP * std::sin(ALPHA1); 12153 *VY = VPERP * std::cos(ALPHA1); << 10174 *VY = VPERP * std::cos(ALPHA1); 12154 return; << 10175 return; 12155 } 10176 } 12156 10177 12157 G4double G4Abla::haz(G4int k) 10178 G4double G4Abla::haz(G4int k) 12158 { 10179 { 12159 // const G4int pSize = 110; << 10180 // const G4int pSize = 110; 12160 // static G4ThreadLocal G4double p[pSize << 10181 // static G4ThreadLocal G4double p[pSize]; 12161 static G4ThreadLocal G4int ix = 0; << 10182 static G4ThreadLocal G4long ix = 0; 12162 static G4ThreadLocal G4double x = 0.0, y << 10183 static G4ThreadLocal G4double x = 0.0, y = 0.0; 12163 // k =< -1 on initialise << 10184 // k =< -1 on initialise 12164 // k = -1 c'est reproductible << 10185 // k = -1 c'est reproductible 12165 // k < -1 || k > -1 ce n'est pas reprod << 10186 // k < -1 || k > -1 ce n'est pas reproductible 12166 /* << 10187 /* 12167 // Zero is invalid random seed. Set pr << 10188 // Zero is invalid random seed. Set proper value from our random seed collection: 12168 collection: if(ix == 0) { << 10189 if(ix == 0) { 12169 // ix = hazard->ial; << 10190 // ix = hazard->ial; 12170 } << 10191 } 12171 */ << 10192 */ 12172 if (k <= -1) << 10193 if (k <= -1) { //then 12173 { // then << 10194 if(k == -1) { //then 12174 if (k == -1) << 10195 ix = 0; 12175 { // then << 10196 } 12176 ix = 0; << 10197 else { 12177 } << 10198 x = 0.0; 12178 else << 10199 y = secnds(G4int(x)); 12179 { << 10200 ix = G4int(y * 100 + 43543000); 12180 x = 0.0; << 10201 if(mod(ix,2) == 0) { 12181 y = secnds(G4int(x)); << 10202 ix = ix + 1; 12182 ix = G4int(y * 100 + 43543000); << 10203 } 12183 if (mod(ix, 2) == 0) << 10204 }} 12184 { << 12185 ix = ix + 1; << 12186 } << 12187 } << 12188 } << 12189 10205 12190 return G4AblaRandom::flat(); << 10206 return G4AblaRandom::flat(); 12191 } 10207 } 12192 10208 12193 // Random generator according to the 10209 // Random generator according to the 12194 // powerfunction y = x**(lambda) in the ran 10210 // powerfunction y = x**(lambda) in the range from xmin to xmax 12195 // xmin, xmax and y are integers. 10211 // xmin, xmax and y are integers. 12196 // lambda must be different from -1 ! 10212 // lambda must be different from -1 ! 12197 G4int G4Abla::IPOWERLIMHAZ(G4double lambda, << 10213 G4int G4Abla::IPOWERLIMHAZ(G4double lambda,G4int xmin,G4int xmax){ 12198 { << 10214 G4double y,l_plus,rxmin,rxmax; 12199 G4double y, l_plus, rxmin, rxmax; << 10215 l_plus = lambda + 1.; 12200 l_plus = lambda + 1.; << 10216 rxmin = G4double(xmin) - 0.5; 12201 rxmin = G4double(xmin) - 0.5; << 10217 rxmax = G4double(xmax) + 0.5; 12202 rxmax = G4double(xmax) + 0.5; << 10218 // y=(HAZ(k)*(rxmax**l_plus-rxmin**l_plus)+ rxmin**l_plus)**(1.E0/l_plus) 12203 // y=(HAZ(k)*(rxmax**l_plus-rxmin* << 10219 y=std::pow(G4AblaRandom::flat()*(std::pow(rxmax,l_plus)-std::pow(rxmin,l_plus))+ std::pow(rxmin,l_plus),1.0/l_plus); 12204 // rxmin**l_plus)**(1.E0/l_plus) << 10220 return nint(y); 12205 y = std::pow(G4AblaRandom::flat() * (std << 10221 } 12206 1.0 / l_plus); << 10222 12207 return nint(y); << 10223 void G4Abla::AMOMENT(G4double AABRA,G4double APRF, G4int IMULTIFR,G4double *PX,G4double *PY,G4double *PZ){ 12208 } << 10224 12209 << 10225 G4int ISIGOPT = 0; 12210 void G4Abla::AMOMENT(G4double AABRA, G4doubl << 10226 G4double GOLDHA_BU=0.,GOLDHA=0.; 12211 { << 10227 G4double PI = 3.141592653589793; 12212 << 10228 //nu = 1.d0 12213 G4int ISIGOPT = 0; << 12214 G4double GOLDHA_BU = 0., GOLDHA = 0.; << 12215 G4double PI = 3.141592653589793; << 12216 // nu = 1.d0 << 12217 10229 12218 // G4double BETAP = sqrt(1.0 - 1.0/sqrt 10230 // G4double BETAP = sqrt(1.0 - 1.0/sqrt(1.0+EAP/931.494)); 12219 // G4double GAMMAP = 1.0 / sqrt(1. - BE 10231 // G4double GAMMAP = 1.0 / sqrt(1. - BETAP*BETAP); 12220 // G4double FACT_PROJ = (GAMMAP + 1.) / 10232 // G4double FACT_PROJ = (GAMMAP + 1.) / (BETAP * GAMMAP); 12221 10233 12222 // G4double R = 1.160 * pow(APRF,1.0/3.0 << 10234 // G4double R = 1.160 * pow(APRF,1.0/3.0); 12223 10235 12224 // G4double RNDT = double(haz(1)); 10236 // G4double RNDT = double(haz(1)); 12225 // G4double CTET = 2.0*RNDT-1.0; 10237 // G4double CTET = 2.0*RNDT-1.0; 12226 // G4double TETA = acos(CTET); 10238 // G4double TETA = acos(CTET); 12227 // G4double RNDP = double(haz(1)); 10239 // G4double RNDP = double(haz(1)); 12228 // G4double PHI = RNDP*2.0*PI; 10240 // G4double PHI = RNDP*2.0*PI; 12229 // G4double STET = sqrt(1.0-CTET*CTET); 10241 // G4double STET = sqrt(1.0-CTET*CTET); 12230 // RX = R * STET * DCOS(PHI) << 10242 // RX = R * STET * DCOS(PHI) 12231 // RY = R * STET * DSIN(PHI) << 10243 // RY = R * STET * DSIN(PHI) 12232 // RZ = R * CTET << 10244 // RZ = R * CTET 12233 10245 12234 // G4double RZ = 0.0; 10246 // G4double RZ = 0.0; 12235 // G4double RY = R * sin(PHI); 10247 // G4double RY = R * sin(PHI); 12236 // G4double RX = R * cos(PHI); 10248 // G4double RX = R * cos(PHI); 12237 10249 12238 // In MeV/C << 10250 // In MeV/C 12239 G4double V0_over_VBU = 1.0 / 6.0; << 10251 G4double V0_over_VBU = 1.0 / 6.0; 12240 G4double SIGMA_0 = 118.50; << 10252 G4double SIGMA_0 = 118.50; 12241 G4double Efermi = 5.0 * SIGMA_0 * SIGMA_ << 10253 G4double Efermi = 5.0 * SIGMA_0 * SIGMA_0 / (2.0 * 931.4940); 12242 << 10254 12243 if (IMULTIFR == 1) << 10255 if(IMULTIFR==1){ 12244 { << 10256 if(ISIGOPT == 0){ 12245 if (ISIGOPT == 0) << 10257 // "Fermi model" picture: 12246 { << 10258 // Influence of expansion: 12247 // "Fermi model" picture: << 10259 SIGMA_0 = SIGMA_0 * std::pow(V0_over_VBU,1.0/3.0); 12248 // Influence of expansion: << 10260 // To take into account the influence of thermal motion of nucleons (see W. Bauer, 12249 SIGMA_0 = SIGMA_0 * std::pow(V0_ << 10261 // PRC 51 (1995) 803) 12250 // To take into account the infl << 10262 // Efermi = 5.D0 * SIGMA_0 * SIGMA_0 / (2.D0 * 931.49D0) 12251 // W. Bauer, PRC 51 (1995) 803) << 10263 12252 // Efermi = 5.D0 * SIGMA_ << 10264 GOLDHA_BU = SIGMA_0 * std::sqrt((APRF*(AABRA-APRF))/(AABRA-1.0)); 12253 << 10265 GOLDHA = GOLDHA_BU*std::sqrt(1.0 + 12254 GOLDHA_BU = SIGMA_0 * std::sqrt( << 10266 5.0 * PI*PI / 12.0 * (T_freeze_out / Efermi)*(T_freeze_out / Efermi)); 12255 GOLDHA = << 10267 // PRINT*,'AFTER BU fermi:',IDNINT(AABRA),IDNINT(APRF),GOLDHA, 12256 GOLDHA_BU * std::sqrt(1.0 + << 10268 // & GOLDHA_BU 12257 // PRINT*,'AFTER BU fermi: << 10269 }else{ 12258 // & << 10270 // Thermal equilibrium picture (<=> to Boltzmann distribution in momentum with sigma2=M*T) 12259 } << 10271 // The factor (AABRA-APRF)/AP comes from momentum conservation: 12260 else << 10272 GOLDHA_BU = std::sqrt(APRF * T_freeze_out * 931.494 * 12261 { << 10273 (AABRA - APRF) / AABRA); 12262 // Thermal equilibrium picture ( << 10274 GOLDHA = GOLDHA_BU; 12263 // with sigma2=M*T) The factor ( << 10275 // PRINT*,'AFTER BU therm:',IDNINT(AABRA),IDNINT(APRF),GOLDHA, 12264 // conservation: << 10276 // & GOLDHA_BU 12265 GOLDHA_BU = std::sqrt(APRF * T_f << 10277 } 12266 GOLDHA = GOLDHA_BU; << 10278 }else{ 12267 // PRINT*,'AFTER BU therm: << 10279 GOLDHA = SIGMA_0 * std::sqrt((APRF*(AABRA-APRF))/(AABRA-1.0)); 12268 // & << 10280 } 12269 } << 10281 12270 } << 10282 G4int IS = 0; 12271 else << 10283 mom123: 12272 { << 10284 *PX = G4double(gausshaz(1,0.0,GOLDHA)); 12273 GOLDHA = SIGMA_0 * std::sqrt((APRF * << 10285 IS = IS +1; 12274 } << 10286 if(IS>100){ 12275 << 10287 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING PX IN Rn07.FOR. A VALUE WILL BE FORCED." << std::endl; 12276 G4int IS = 0; << 10288 *PX = (AABRA-1.0)*931.4940; 12277 mom123: << 10289 } 12278 *PX = G4double(gausshaz(1, 0.0, GOLDHA)) << 10290 if(std::abs(*PX)>= AABRA*931.494){ 12279 IS = IS + 1; << 10291 // PRINT*,'VX > C',PX,IDNINT(APRF) 12280 if (IS > 100) << 10292 goto mom123; 12281 { << 10293 } 12282 std::cout << "WARNING: GAUSSHAZ CALL << 10294 IS = 0; 12283 "CALCULATING PX IN Rn07 << 10295 mom456: 12284 << std::endl; << 10296 *PY = G4double(gausshaz(1,0.0,GOLDHA)); 12285 *PX = (AABRA - 1.0) * 931.4940; << 10297 IS = IS +1; 12286 } << 10298 if(IS>100){ 12287 if (std::abs(*PX) >= AABRA * 931.494) << 10299 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING PY IN Rn07.FOR. A VALUE WILL BE FORCED." << std::endl; 12288 { << 10300 *PY = (AABRA-1.0)*931.4940; 12289 // PRINT*,'VX > C',PX,IDNINT(A << 10301 } 12290 goto mom123; << 10302 if(std::abs(*PY)>= AABRA*931.494){ 12291 } << 10303 // PRINT*,'VX > C',PX,IDNINT(APRF) 12292 IS = 0; << 10304 goto mom456; 12293 mom456: << 10305 } 12294 *PY = G4double(gausshaz(1, 0.0, GOLDHA)) << 10306 IS = 0; 12295 IS = IS + 1; << 10307 mom789: 12296 if (IS > 100) << 10308 *PZ = G4double(gausshaz(1,0.0,GOLDHA)); 12297 { << 10309 IS = IS +1; 12298 std::cout << "WARNING: GAUSSHAZ CALL << 10310 if(IS>100){ 12299 "CALCULATING PY IN Rn07 << 10311 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING PZ IN Rn07.FOR. A VALUE WILL BE FORCED." << std::endl; 12300 << std::endl; << 10312 *PZ = (AABRA-1.0)*931.4940; 12301 *PY = (AABRA - 1.0) * 931.4940; << 10313 } 12302 } << 10314 if(std::abs(*PZ)>= AABRA*931.494){ 12303 if (std::abs(*PY) >= AABRA * 931.494) << 10315 // PRINT*,'VX > C',PX,IDNINT(APRF) 12304 { << 10316 goto mom789; 12305 // PRINT*,'VX > C',PX,IDNINT(A << 10317 } 12306 goto mom456; << 10318 return; 12307 } << 12308 IS = 0; << 12309 mom789: << 12310 *PZ = G4double(gausshaz(1, 0.0, GOLDHA)) << 12311 IS = IS + 1; << 12312 if (IS > 100) << 12313 { << 12314 std::cout << "WARNING: GAUSSHAZ CALL << 12315 "CALCULATING PZ IN Rn07 << 12316 << std::endl; << 12317 *PZ = (AABRA - 1.0) * 931.4940; << 12318 } << 12319 if (std::abs(*PZ) >= AABRA * 931.494) << 12320 { << 12321 // PRINT*,'VX > C',PX,IDNINT(A << 12322 goto mom789; << 12323 } << 12324 return; << 12325 } 10319 } 12326 10320 12327 G4double G4Abla::gausshaz(G4int k, G4double 10321 G4double G4Abla::gausshaz(G4int k, G4double xmoy, G4double sig) 12328 { 10322 { 12329 // Gaussian random numbers: << 10323 // Gaussian random numbers: 12330 10324 12331 // 1005 C*** TIRAGE ALEATOIRE DA << 10325 // 1005 C*** TIRAGE ALEATOIRE DANS UNE GAUSSIENNE DE LARGEUR SIG ET MOYENNE XMOY 12332 // MOYENNE XMOY << 10326 static G4ThreadLocal G4int iset = 0; 12333 static G4ThreadLocal G4int iset = 0; << 10327 static G4ThreadLocal G4double v1,v2,r,fac,gset,fgausshaz; 12334 static G4ThreadLocal G4double v1, v2, r, << 10328 12335 << 10329 if(iset == 0) { //then 12336 if (iset == 0) << 10330 do { 12337 { // then << 10331 v1 = 2.0*haz(k) - 1.0; 12338 do << 10332 v2 = 2.0*haz(k) - 1.0; 12339 { << 10333 r = std::pow(v1,2) + std::pow(v2,2); 12340 v1 = 2.0 * haz(k) - 1.0; << 10334 } while(r >= 1); 12341 v2 = 2.0 * haz(k) - 1.0; << 10335 12342 r = std::pow(v1, 2) + std::pow(v << 10336 fac = std::sqrt(-2.*std::log(r)/r); 12343 } while (r >= 1); << 10337 gset = v1*fac; 12344 << 10338 fgausshaz = v2*fac*sig+xmoy; 12345 fac = std::sqrt(-2. * std::log(r) / << 10339 iset = 1; 12346 gset = v1 * fac; << 10340 } 12347 fgausshaz = v2 * fac * sig + xmoy; << 10341 else { 12348 iset = 1; << 10342 fgausshaz=gset*sig+xmoy; 12349 } << 10343 iset=0; 12350 else << 10344 } 12351 { << 10345 return fgausshaz; 12352 fgausshaz = gset * sig + xmoy; << 12353 iset = 0; << 12354 } << 12355 return fgausshaz; << 12356 } 10346 } 12357 10347