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); >> 762 >> 763 for(I_Breakup=0;I_Breakup<IMULTBU;I_Breakup++){ >> 764 // For bu products: >> 765 Bvalue_BU = Bvalue_BU + eflmac(idnint(BU_TAB[I_Breakup][1]), idnint(BU_TAB[I_Breakup][0]),1,0); >> 766 Eexc_BU_SUM = Eexc_BU_SUM + BU_TAB[I_Breakup][2]; >> 767 >> 768 AMOMENT(AAINCL,BU_TAB[I_Breakup][1],1,&PX_BU,&PY_BU,&PZ_BU); >> 769 P_BU = std::sqrt(PX_BU*PX_BU + PY_BU*PY_BU + PZ_BU*PZ_BU); >> 770 // ******************************************************* >> 771 // 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)); >> 773 BU_TAB[I_Breakup][4] = C * PX_BU / ETOT_BU; // Velocity in x >> 774 BU_TAB[I_Breakup][5] = C * PY_BU / ETOT_BU; // Velocity in y >> 775 BU_TAB[I_Breakup][6] = C * PZ_BU / ETOT_BU; // Velocity in z >> 776 // Contribution from Coulomb repulsion: >> 777 tke_bu(BU_TAB[I_Breakup][0],BU_TAB[I_Breakup][1],ZAINCL,AAINCL,&VX2_BU,&VY2_BU,&VZ2_BU); >> 778 // Lorentz kinematics >> 779 // BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) + VX2_BU ! velocity change by Coulomb repulsion >> 780 // BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) + VY2_BU >> 781 // BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) + VZ2_BU >> 782 // Lorentz transformation >> 783 lorentz_boost(VX2_BU,VY2_BU,VZ2_BU, >> 784 BU_TAB[I_Breakup][4],BU_TAB[I_Breakup][5],BU_TAB[I_Breakup][6], >> 785 &VXOUT,&VYOUT,&VZOUT); >> 786 >> 787 BU_TAB[I_Breakup][4] = VXOUT; >> 788 BU_TAB[I_Breakup][5] = VYOUT; >> 789 BU_TAB[I_Breakup][6] = VZOUT; >> 790 >> 791 // Total momentum: Goldhaber + Coulomb >> 792 VBU2 = BU_TAB[I_Breakup][4]*BU_TAB[I_Breakup][4] + >> 793 BU_TAB[I_Breakup][5]*BU_TAB[I_Breakup][5] + >> 794 BU_TAB[I_Breakup][6]*BU_TAB[I_Breakup][6]; >> 795 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); >> 796 ETOT_BU = BU_TAB[I_Breakup][1]*amu/GAMMA_REL; >> 797 PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C; >> 798 PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C; >> 799 PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C; >> 800 >> 801 PX_BU_SUM = PX_BU_SUM + PX_BU; >> 802 PY_BU_SUM = PY_BU_SUM + PY_BU; >> 803 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; >> 804 >> 805 }//for I_Breakup >> 806 >> 807 // In the frame of source (i.e. prefragment after abrasion or INCL) >> 808 P_BU_SUM = std::sqrt(PX_BU_SUM*PX_BU_SUM + PY_BU_SUM*PY_BU_SUM + >> 809 PZ_BU_SUM*PZ_BU_SUM); >> 810 // ******************************************************** >> 811 // PPRFP is in MeV/c >> 812 ETOT_SUM = std::sqrt(P_BU_SUM*P_BU_SUM + >> 813 (AAINCL * amu)*(AAINCL * amu)); >> 814 >> 815 VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM; >> 816 VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM; >> 817 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM; 878 818 879 for (I_Breakup = 0; I_Breakup < IMULTB << 819 // Lorentz kinematics - DM 17/5/2010 880 { << 820 // VX_PREF = VX_PREF - VX_BU_SUM 881 // For bu products: << 821 // VY_PREF = VY_PREF - VY_BU_SUM 882 Bvalue_BU = Bvalue_BU + eflmac(idn << 822 // VZ_PREF = VZ_PREF - VZ_BU_SUM 883 Eexc_BU_SUM = Eexc_BU_SUM + BU_TAB << 823 // Lorentz transformation 884 << 824 lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM, 885 AMOMENT(AAINCL, BU_TAB[I_Breakup][ << 825 VX_PREF,VY_PREF,VZ_PREF, 886 P_BU = std::sqrt(PX_BU * PX_BU + P << 826 &VXOUT,&VYOUT,&VZOUT); 887 // ******************************* << 827 888 // PPRFP is in MeV/c << 828 VX_PREF = VXOUT; 889 ETOT_BU = std::sqrt(P_BU * P_BU + << 829 VY_PREF = VYOUT; 890 BU_TAB[I_Breakup][4] = C * PX_BU / << 830 VZ_PREF = VZOUT; 891 BU_TAB[I_Breakup][5] = C * PY_BU / << 831 892 BU_TAB[I_Breakup][6] = C * PZ_BU / << 832 VBU2 = VX_PREF*VX_PREF + VY_PREF*VY_PREF + VZ_PREF*VZ_PREF; 893 // Contribution from Coulom << 833 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); 894 tke_bu(BU_TAB[I_Breakup][0], BU_TA << 834 ETOT_PRF = aprf * amu / GAMMA_REL; 895 // Lorentz kinematics << 835 PXPRFP = ETOT_PRF * VX_PREF / C; 896 // BU_TAB(I_Breakup,5) = << 836 PYPRFP = ETOT_PRF * VY_PREF / C; 897 // change by Coulomb repu << 837 PZPRFP = ETOT_PRF * VZ_PREF / C; 898 // BU_TAB(I_Breakup,6) + << 838 899 // BU_TAB(I_Breakup,7) + << 839 PX_BU_SUM = 0.0; 900 // Lorentz transformation << 840 PY_BU_SUM = 0.0; 901 lorentz_boost(VX2_BU, << 841 PZ_BU_SUM = 0.0; 902 VY2_BU, << 842 903 VZ2_BU, << 843 PX_BU_SUM = PXPRFP; 904 BU_TAB[I_Breakup][4] << 844 PY_BU_SUM = PYPRFP; 905 BU_TAB[I_Breakup][5] << 845 PZ_BU_SUM = PZPRFP; 906 BU_TAB[I_Breakup][6] << 846 E_tot_BU = ETOT_PRF; 907 &VXOUT, << 847 908 &VYOUT, << 848 EKIN_BU = aprf * amu / GAMMA_REL - aprf * amu; 909 &VZOUT); << 849 910 << 850 for(I_Breakup=0;I_Breakup<IMULTBU;I_Breakup++){ 911 BU_TAB[I_Breakup][4] = VXOUT; << 851 // Lorentz kinematics - DM 17/5/2010 912 BU_TAB[I_Breakup][5] = VYOUT; << 852 // BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) - VX_BU_SUM 913 BU_TAB[I_Breakup][6] = VZOUT; << 853 // BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) - VY_BU_SUM 914 << 854 // BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) - VZ_BU_SUM 915 // Total momentum: Goldhaber + Cou << 855 // Lorentz transformation 916 VBU2 = BU_TAB[I_Breakup][4] * BU_T << 856 lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM, 917 BU_TAB[I_Breakup][6] * BU_T << 857 BU_TAB[I_Breakup][4],BU_TAB[I_Breakup][5],BU_TAB[I_Breakup][6], 918 GAMMA_REL = std::sqrt(1.0 - VBU2 / << 858 &VXOUT,&VYOUT,&VZOUT); 919 ETOT_BU = BU_TAB[I_Breakup][1] * a << 859 920 PX_BU = ETOT_BU * BU_TAB[I_Breakup << 860 BU_TAB[I_Breakup][4] = VXOUT; 921 PY_BU = ETOT_BU * BU_TAB[I_Breakup << 861 BU_TAB[I_Breakup][5] = VYOUT; 922 PZ_BU = ETOT_BU * BU_TAB[I_Breakup << 862 BU_TAB[I_Breakup][6] = VZOUT; 923 << 863 924 PX_BU_SUM = PX_BU_SUM + PX_BU; << 864 VBU2 = BU_TAB[I_Breakup][4]*BU_TAB[I_Breakup][4] + 925 PY_BU_SUM = PY_BU_SUM + PY_BU; << 865 BU_TAB[I_Breakup][5]*BU_TAB[I_Breakup][5] + 926 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; << 866 BU_TAB[I_Breakup][6]*BU_TAB[I_Breakup][6]; 927 << 867 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); 928 } // for I_Breakup << 868 929 << 869 ETOT_BU = BU_TAB[I_Breakup][1]*amu/GAMMA_REL; 930 // In the frame of source (i.e. pref << 870 931 P_BU_SUM = std::sqrt(PX_BU_SUM * PX_BU << 871 EKIN_BU = EKIN_BU + BU_TAB[I_Breakup][1] * amu / 932 // *********************************** << 872 GAMMA_REL - BU_TAB[I_Breakup][1] * amu; 933 // PPRFP is in MeV/c << 873 934 ETOT_SUM = std::sqrt(P_BU_SUM * P_BU_S << 874 PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C; >> 875 PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C; >> 876 PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C; >> 877 E_tot_BU = E_tot_BU + ETOT_BU; >> 878 >> 879 PX_BU_SUM = PX_BU_SUM + PX_BU; >> 880 PY_BU_SUM = PY_BU_SUM + PY_BU; >> 881 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; >> 882 }// for I_Breakup >> 883 >> 884 if(std::abs(PX_BU_SUM)>10. || std::abs(PY_BU_SUM)>10. || >> 885 std::abs(PZ_BU_SUM)>10.){ >> 886 >> 887 // In the frame of source (i.e. prefragment after INCL) >> 888 P_BU_SUM = std::sqrt(PX_BU_SUM*PX_BU_SUM + PY_BU_SUM*PY_BU_SUM + >> 889 PZ_BU_SUM*PZ_BU_SUM); >> 890 // ******************************************************** >> 891 // PPRFP is in MeV/c >> 892 ETOT_SUM = std::sqrt(P_BU_SUM*P_BU_SUM + >> 893 (AAINCL * amu)*(AAINCL * amu)); 935 894 936 VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM; 895 VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM; 937 VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM; 896 VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM; 938 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM; 897 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM; 939 898 940 // Lorentz kinematics - DM 17/5/2010 << 899 // Lorentz kinematics 941 // VX_PREF = VX_PREF - VX_BU_SU << 900 // VX_PREF = VX_PREF - VX_BU_SUM 942 // VY_PREF = VY_PREF - VY_BU_SU << 901 // VY_PREF = VY_PREF - VY_BU_SUM 943 // VZ_PREF = VZ_PREF - VZ_BU_SU << 902 // VZ_PREF = VZ_PREF - VZ_BU_SUM 944 // Lorentz transformation << 903 // Lorentz transformation 945 lorentz_boost(-VX_BU_SUM, -VY_BU_SUM, << 904 lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM, >> 905 VX_PREF,VY_PREF,VZ_PREF, >> 906 &VXOUT,&VYOUT,&VZOUT); 946 907 947 VX_PREF = VXOUT; 908 VX_PREF = VXOUT; 948 VY_PREF = VYOUT; 909 VY_PREF = VYOUT; 949 VZ_PREF = VZOUT; 910 VZ_PREF = VZOUT; 950 911 951 VBU2 = VX_PREF * VX_PREF + VY_PREF * V << 912 VBU2 = VX_PREF*VX_PREF + VY_PREF*VY_PREF + VZ_PREF*VZ_PREF; 952 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C << 913 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); 953 ETOT_PRF = aprf * amu / GAMMA_REL; 914 ETOT_PRF = aprf * amu / GAMMA_REL; 954 PXPRFP = ETOT_PRF * VX_PREF / C; 915 PXPRFP = ETOT_PRF * VX_PREF / C; 955 PYPRFP = ETOT_PRF * VY_PREF / C; 916 PYPRFP = ETOT_PRF * VY_PREF / C; 956 PZPRFP = ETOT_PRF * VZ_PREF / C; 917 PZPRFP = ETOT_PRF * VZ_PREF / C; 957 918 958 PX_BU_SUM = 0.0; 919 PX_BU_SUM = 0.0; 959 PY_BU_SUM = 0.0; 920 PY_BU_SUM = 0.0; 960 PZ_BU_SUM = 0.0; 921 PZ_BU_SUM = 0.0; 961 922 962 PX_BU_SUM = PXPRFP; 923 PX_BU_SUM = PXPRFP; 963 PY_BU_SUM = PYPRFP; 924 PY_BU_SUM = PYPRFP; 964 PZ_BU_SUM = PZPRFP; 925 PZ_BU_SUM = PZPRFP; 965 E_tot_BU = ETOT_PRF; 926 E_tot_BU = ETOT_PRF; 966 927 967 EKIN_BU = aprf * amu / GAMMA_REL - apr 928 EKIN_BU = aprf * amu / GAMMA_REL - aprf * amu; 968 929 969 for (I_Breakup = 0; I_Breakup < IMULTB << 930 for(I_Breakup=0;I_Breakup<IMULTBU;I_Breakup++){ 970 { << 931 // Lorentz kinematics - DM 17/5/2010 971 // Lorentz kinematics - DM 17/5/20 << 932 // BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) - VX_BU_SUM 972 // BU_TAB(I_Breakup,5) = B << 933 // BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) - VY_BU_SUM 973 // BU_TAB(I_Breakup,6) = B << 934 // BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) - VZ_BU_SUM 974 // BU_TAB(I_Breakup,7) = B << 935 // Lorentz transformation 975 // Lorentz transformation << 936 lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM, 976 lorentz_boost(-VX_BU_SUM, << 937 BU_TAB[I_Breakup][4],BU_TAB[I_Breakup][5],BU_TAB[I_Breakup][6], 977 -VY_BU_SUM, << 938 &VXOUT,&VYOUT,&VZOUT); 978 -VZ_BU_SUM, << 939 979 BU_TAB[I_Breakup][4] << 940 BU_TAB[I_Breakup][4] = VXOUT; 980 BU_TAB[I_Breakup][5] << 941 BU_TAB[I_Breakup][5] = VYOUT; 981 BU_TAB[I_Breakup][6] << 942 BU_TAB[I_Breakup][6] = VZOUT; 982 &VXOUT, << 943 983 &VYOUT, << 944 VBU2 = BU_TAB[I_Breakup][4]*BU_TAB[I_Breakup][4] + 984 &VZOUT); << 945 BU_TAB[I_Breakup][5]*BU_TAB[I_Breakup][5] + 985 << 946 BU_TAB[I_Breakup][6]*BU_TAB[I_Breakup][6]; 986 BU_TAB[I_Breakup][4] = VXOUT; << 947 GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C)); 987 BU_TAB[I_Breakup][5] = VYOUT; << 948 988 BU_TAB[I_Breakup][6] = VZOUT; << 949 ETOT_BU = BU_TAB[I_Breakup][1]*amu/GAMMA_REL; 989 << 950 990 VBU2 = BU_TAB[I_Breakup][4] * BU_T << 951 EKIN_BU = EKIN_BU + BU_TAB[I_Breakup][1] * amu / 991 BU_TAB[I_Breakup][6] * BU_T << 952 GAMMA_REL - BU_TAB[I_Breakup][1] * amu; 992 GAMMA_REL = std::sqrt(1.0 - VBU2 / << 953 993 << 954 PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C; 994 ETOT_BU = BU_TAB[I_Breakup][1] * a << 955 PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C; 995 << 956 PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C; 996 EKIN_BU = EKIN_BU + BU_TAB[I_Break << 957 E_tot_BU = E_tot_BU + ETOT_BU; 997 << 958 998 PX_BU = ETOT_BU * BU_TAB[I_Breakup << 959 PX_BU_SUM = PX_BU_SUM + PX_BU; 999 PY_BU = ETOT_BU * BU_TAB[I_Breakup << 960 PY_BU_SUM = PY_BU_SUM + PY_BU; 1000 PZ_BU = ETOT_BU * BU_TAB[I_Breaku << 961 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; 1001 E_tot_BU = E_tot_BU + ETOT_BU; << 962 }// for I_Breakup 1002 << 963 }// if DABS(PX_BU_SUM).GT.10.d0 1003 PX_BU_SUM = PX_BU_SUM + PX_BU; << 964 // 1004 PY_BU_SUM = PY_BU_SUM + PY_BU; << 965 // Find the limits that fragment is bound - only done for neutrons and LCPs and for 1005 PZ_BU_SUM = PZ_BU_SUM + PZ_BU; << 966 // nuclei with A=Z, for other nuclei it will be done after decay: 1006 } // for I_Breakup << 967 1007 << 968 INEWLOOP = 0; 1008 if (std::abs(PX_BU_SUM) > 10. || std: << 969 for(G4int i=0;i<IMULTBU;i++){ 1009 { << 970 if(BU_TAB[i][0]<3.0 || BU_TAB[i][0]==BU_TAB[i][1]){ 1010 << 971 unstable_nuclei(idnint(BU_TAB[i][1]),idnint(BU_TAB[i][0]), &afpnew,&zfpnew,IOUNSTABLE, 1011 // In the frame of source (i.e. << 972 BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6], 1012 P_BU_SUM = std::sqrt(PX_BU_SUM * << 973 &VP1X,&VP1Y,&VP1Z,BU_TAB_TEMP,&ILOOP); 1013 // ****************************** << 974 1014 // PPRFP is in MeV/c << 975 if(IOUNSTABLE>0){ 1015 ETOT_SUM = std::sqrt(P_BU_SUM * P << 976 // Properties of "heavy fragment": 1016 << 977 BU_TAB[i][1] = G4double(afpnew); 1017 VX_BU_SUM = C * PX_BU_SUM / ETOT_ << 978 BU_TAB[i][0] = G4double(zfpnew); 1018 VY_BU_SUM = C * PY_BU_SUM / ETOT_ << 979 BU_TAB[i][4] = VP1X; 1019 VZ_BU_SUM = C * PZ_BU_SUM / ETOT_ << 980 BU_TAB[i][5] = VP1Y; 1020 << 981 BU_TAB[i][6] = VP1Z; 1021 // Lorentz kinematics << 982 1022 // VX_PREF = VX_PREF - VX_ << 983 //Properties of "light" fragments: 1023 // VY_PREF = VY_PREF - VY_ << 984 for(int IJ=0;IJ<ILOOP;IJ++){ 1024 // VZ_PREF = VZ_PREF - VZ_ << 985 BU_TAB[IMULTBU+INEWLOOP+IJ][0] = BU_TAB_TEMP[IJ][0]; 1025 // Lorentz transformation << 986 BU_TAB[IMULTBU+INEWLOOP+IJ][1] = BU_TAB_TEMP[IJ][1]; 1026 lorentz_boost(-VX_BU_SUM, -VY_BU_ << 987 BU_TAB[IMULTBU+INEWLOOP+IJ][4] = BU_TAB_TEMP[IJ][2]; 1027 << 988 BU_TAB[IMULTBU+INEWLOOP+IJ][5] = BU_TAB_TEMP[IJ][3]; 1028 VX_PREF = VXOUT; << 989 BU_TAB[IMULTBU+INEWLOOP+IJ][6] = BU_TAB_TEMP[IJ][4]; 1029 VY_PREF = VYOUT; << 990 BU_TAB[IMULTBU+INEWLOOP+IJ][2] = 0.0; 1030 VZ_PREF = VZOUT; << 991 BU_TAB[IMULTBU+INEWLOOP+IJ][3] = 0.0; 1031 << 992 }// for ILOOP 1032 VBU2 = VX_PREF * VX_PREF + VY_PRE << 993 1033 GAMMA_REL = std::sqrt(1.0 - VBU2 << 994 INEWLOOP = INEWLOOP + ILOOP; 1034 ETOT_PRF = aprf * amu / GAMMA_REL << 995 1035 PXPRFP = ETOT_PRF * VX_PREF / C; << 996 }// if IOUNSTABLE.GT.0 1036 PYPRFP = ETOT_PRF * VY_PREF / C; << 997 }//if BU_TAB[I_Breakup][0]<3.0 1037 PZPRFP = ETOT_PRF * VZ_PREF / C; << 998 }// for IMULTBU 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 999 1140 // Increased array of BU_TAB << 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; << 1320 if(IMULTBU>200)std::cout << "IMULTBU>200 " << IMULTBU << std::endl; 1579 delete[] Nblamb; << 1321 delete problamb; 1580 } // if(T_diff>0.1) << 1322 delete Nblamb; 1581 // End of multi-fragmentation << 1323 }// if(T_diff>0.1) 1582 mult7777: << 1324 // End of multi-fragmentation 1583 << 1325 mult7777: 1584 // Start basic de-excitation of fragments << 1326 1585 aprfp = idnint(aprf); << 1327 // Start basic de-excitation of fragments 1586 zprfp = idnint(zprf); << 1328 aprfp = idnint(aprf); 1587 << 1329 zprfp = idnint(zprf); 1588 if (IMULTIFR == 0) << 1330 1589 { << 1331 if(IMULTIFR == 0){ 1590 // These momenta are in the frame of << 1332 // These momenta are in the frame of the projectile (or target in case of direct kinematics) 1591 // direct kinematics) << 1333 VX_PREF = VX_incl; 1592 VX_PREF = VX_incl; << 1334 VY_PREF = VY_incl; 1593 VY_PREF = VY_incl; << 1335 VZ_PREF = VZ_incl; 1594 VZ_PREF = VZ_incl; << 1336 } 1595 } << 1337 // Lambdas after multi-fragmentation 1596 // Lambdas after multi-fragmentation << 1338 if(IMULTIFR == 1){ 1597 if (IMULTIFR == 1) << 1339 NbLam0 = NbLamprf; 1598 { << 1340 } 1599 NbLam0 = NbLamprf; << 1341 // 1600 } << 1342 // CALL THE EVAPORATION SUBROUTINE 1601 // << 1343 // 1602 // CALL THE EVAPORATION SUBROUTINE << 1344 opt->optimfallowed = 1; // IMF is allowed 1603 // << 1345 fiss->ifis = 1; // fission is allowed 1604 opt->optimfallowed = 1; // IMF is allowe << 1346 fimf=0; 1605 fiss->ifis = 1; // fission is al << 1347 ff=0; 1606 fimf = 0; << 1348 1607 ff = 0; << 1349 // To spare computing time; these events in any case cannot decay 1608 << 1350 // IF(ZPRFP.LE.2.AND.ZPRFP.LT.APRFP)THEN FIXME: <= or < 1609 // To spare computing time; these events << 1351 if(zprfp<=2 && zprfp<aprfp){ 1610 // IF(ZPRFP.LE.2.AND.ZPRFP.LT.APRFP) << 1352 zf = zprf; 1611 if (zprfp <= 2 && zprfp < aprfp) << 1353 af = aprf; 1612 { << 1354 ee = 0.0; 1613 zf = zprf; << 1355 ff = 0; 1614 af = aprf; << 1356 fimf = 0; 1615 ee = 0.0; << 1357 ftype = 0; 1616 ff = 0; << 1358 aimf = 0.0; 1617 fimf = 0; << 1359 zimf = 0.0; 1618 ftype = 0; << 1360 tkeimf = 0.0; 1619 aimf = 0.0; << 1361 vx_eva = 0.0; 1620 zimf = 0.0; << 1362 vy_eva = 0.0; 1621 tkeimf = 0.0; << 1363 vz_eva = 0.0; 1622 vx_eva = 0.0; << 1364 jprf0 = jprf; 1623 vy_eva = 0.0; << 1365 goto a1972; 1624 vz_eva = 0.0; << 1366 } 1625 jprf0 = jprf; << 1367 1626 goto a1972; << 1368 // if(ZPRFP.LE.2.AND.ZPRFP.EQ.APRFP) 1627 } << 1369 if(zprfp<=2 && zprfp==aprfp){ 1628 << 1370 unstable_nuclei(aprfp,zprfp,&afpnew,&zfpnew,IOUNSTABLE, 1629 // if(ZPRFP.LE.2.AND.ZPRFP.EQ.APRFP) << 1371 VX_PREF, VY_PREF, VZ_PREF, 1630 if (zprfp <= 2 && zprfp == aprfp) << 1372 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 1631 { << 1373 af = G4double(afpnew); 1632 unstable_nuclei(aprfp, << 1374 zf = G4double(zfpnew); 1633 zprfp, << 1375 VX_PREF = VP1X; 1634 &afpnew, << 1376 VY_PREF = VP1Y; 1635 &zfpnew, << 1377 VZ_PREF = VP1Z; 1636 IOUNSTABLE, << 1378 for(G4int I = 0;I<ILOOP;I++){ 1637 VX_PREF, << 1379 for(G4int IJ = 0; IJ<6; IJ++) 1638 VY_PREF, << 1380 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 1639 VZ_PREF, << 1381 } 1640 &VP1X, << 1641 &VP1Y, << 1642 &VP1Z, << 1643 EV_TAB_TEMP, << 1644 &ILOOP); << 1645 af = G4double(afpnew); << 1646 zf = G4double(zfpnew); << 1647 VX_PREF = VP1X; << 1648 VY_PREF = VP1Y; << 1649 VZ_PREF = VP1Z; << 1650 for (G4int I = 0; I < ILOOP; I++) << 1651 { << 1652 for (G4int IJ = 0; IJ < 6; IJ++) << 1653 EV_TAB[I + IEV_TAB][IJ] = EV_ << 1654 } << 1655 IEV_TAB = IEV_TAB + ILOOP; 1382 IEV_TAB = IEV_TAB + ILOOP; 1656 ee = 0.0; 1383 ee = 0.0; 1657 ff = 0; 1384 ff = 0; 1658 fimf = 0; 1385 fimf = 0; 1659 ftype = 0; 1386 ftype = 0; 1660 aimf = 0.0; 1387 aimf = 0.0; 1661 zimf = 0.0; 1388 zimf = 0.0; 1662 tkeimf = 0.0; 1389 tkeimf = 0.0; 1663 vx_eva = 0.0; 1390 vx_eva = 0.0; 1664 vy_eva = 0.0; 1391 vy_eva = 0.0; 1665 vz_eva = 0.0; 1392 vz_eva = 0.0; 1666 jprf0 = jprf; 1393 jprf0 = jprf; 1667 goto a1972; << 1394 goto a1972; 1668 } << 1395 } 1669 1396 1670 // IF(ZPRFP.EQ.APRFP)THEN << 1397 // IF(ZPRFP.EQ.APRFP)THEN 1671 if (zprfp == aprfp) << 1398 if(zprfp==aprfp){ 1672 { << 1399 unstable_nuclei(aprfp,zprfp,&afpnew,&zfpnew,IOUNSTABLE, 1673 unstable_nuclei(aprfp, << 1400 VX_PREF, VY_PREF, VZ_PREF, 1674 zprfp, << 1401 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 1675 &afpnew, << 1402 af = G4double(afpnew); 1676 &zfpnew, << 1403 zf = G4double(zfpnew); 1677 IOUNSTABLE, << 1404 VX_PREF = VP1X; 1678 VX_PREF, << 1405 VY_PREF = VP1Y; 1679 VY_PREF, << 1406 VZ_PREF = VP1Z; 1680 VZ_PREF, << 1407 for(G4int I = 0;I<ILOOP;I++){ 1681 &VP1X, << 1408 for(G4int IJ = 0; IJ<6; IJ++) 1682 &VP1Y, << 1409 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 1683 &VP1Z, << 1410 } 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; 1411 IEV_TAB = IEV_TAB + ILOOP; 1697 ee = 0.0; 1412 ee = 0.0; 1698 ff = 0; 1413 ff = 0; 1699 fimf = 0; 1414 fimf = 0; 1700 ftype = 0; 1415 ftype = 0; 1701 aimf = 0.0; 1416 aimf = 0.0; 1702 zimf = 0.0; 1417 zimf = 0.0; 1703 tkeimf = 0.0; 1418 tkeimf = 0.0; 1704 vx_eva = 0.0; 1419 vx_eva = 0.0; 1705 vy_eva = 0.0; 1420 vy_eva = 0.0; 1706 vz_eva = 0.0; 1421 vz_eva = 0.0; 1707 jprf0 = jprf; 1422 jprf0 = jprf; 1708 goto a1972; << 1423 goto a1972; 1709 } << 1424 } 1710 // << 1425 // 1711 evapora(zprf, << 1426 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, << 1427 // 1713 &ee, << 1428 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 1714 jprf, << 1429 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1715 &zf, << 1430 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1716 &af, << 1431 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1717 &mtota, << 1432 // 1718 &vz_eva, << 1433 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 1719 &vx_eva, << 1434 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 1720 &vy_eva, << 1435 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 1721 &ff, << 1436 // Lorentz transformation 1722 &fimf, << 1437 lorentz_boost(VX_PREF,VY_PREF,VZ_PREF, 1723 &zimf, << 1438 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1724 &aimf, << 1439 &VXOUT,&VYOUT,&VZOUT); 1725 &tkeimf, << 1440 EV_TAB[IJ+IEV_TAB][2] = VXOUT; 1726 &jprf0, << 1441 EV_TAB[IJ+IEV_TAB][3] = VYOUT; 1727 &inttype, << 1442 EV_TAB[IJ+IEV_TAB][4] = VZOUT; 1728 &inum, << 1443 } 1729 EV_TEMP, << 1444 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1730 &IEV_TAB_TEMP, << 1445 1731 &NbLam0); << 1446 a1972: 1732 // << 1447 1733 for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ+ << 1448 // vi_pref - velocity of the prefragment; vi_eva - recoil due to evaporation 1734 { << 1449 lorentz_boost(VX_PREF,VY_PREF,VZ_PREF, 1735 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ] << 1450 vx_eva,vy_eva,vz_eva, 1736 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ] << 1451 &VXOUT,&VYOUT,&VZOUT); 1737 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ] << 1452 V_CM[0] = VXOUT; 1738 // << 1453 V_CM[1] = VYOUT; 1739 // EV_TAB(IJ+IEV_TAB,3) << 1454 V_CM[2] = VZOUT; 1740 // EV_TAB(IJ+IEV_TAB,4) << 1455 // 1741 // EV_TAB(IJ+IEV_TAB,5) << 1456 if(ff == 0 && fimf == 0){ 1742 // Lorentz transformation << 1457 // Evaporation of neutrons and LCP; no IMF, no fission 1743 lorentz_boost( << 1458 ftype = 0; 1744 VX_PREF, VY_PREF, VZ_PREF, EV_TEM << 1459 ZFP1 = idnint(zf); 1745 EV_TAB[IJ + IEV_TAB][2] = VXOUT; << 1460 AFP1 = idnint(af); 1746 EV_TAB[IJ + IEV_TAB][3] = VYOUT; << 1461 SFP1 = NbLam0; 1747 EV_TAB[IJ + IEV_TAB][4] = VZOUT; << 1462 AFPIMF = 0; 1748 } << 1463 ZFPIMF = 0; 1749 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; << 1464 SFPIMF = 0; 1750 << 1465 ZFP2 = 0; 1751 a1972: << 1466 AFP2 = 0; 1752 << 1467 SFP2 = 0; 1753 // vi_pref - velocity of the prefragment; << 1468 VFP1_CM[0] = V_CM[0]; 1754 lorentz_boost(VX_PREF, VY_PREF, VZ_PREF, << 1469 VFP1_CM[1] = V_CM[1]; 1755 V_CM[0] = VXOUT; << 1470 VFP1_CM[2] = V_CM[2]; 1756 V_CM[1] = VYOUT; << 1471 for(G4int j=0;j<3;j++){ 1757 V_CM[2] = VZOUT; << 1472 VIMF_CM[j] = 0.0; 1758 // << 1473 VFP2_CM[j] = 0.0; 1759 if (ff == 0 && fimf == 0) << 1474 } 1760 { << 1475 } 1761 // Evaporation of neutrons and LCP; n << 1476 // 1762 ftype = 0; << 1477 if(ff == 1 && fimf == 0) ftype = 1; // fission 1763 ZFP1 = idnint(zf); << 1478 if(ff == 0 && fimf == 1) ftype = 2; // IMF emission 1764 AFP1 = idnint(af); << 1479 // 1765 SFP1 = NbLam0; << 1480 // AFP,ZFP IS THE FINAL FRAGMENT IF NO FISSION OR IMF EMISSION OCCURS 1766 AFPIMF = 0; << 1481 // IN CASE OF FISSION IT IS THE NUCLEUS THAT UNDERGOES FISSION OR IMF 1767 ZFPIMF = 0; << 1482 // 1768 SFPIMF = 0; << 1483 1769 ZFP2 = 0; << 1484 //***************** FISSION *************************************** 1770 AFP2 = 0; << 1485 // 1771 SFP2 = 0; << 1486 if(ftype == 1){ 1772 VFP1_CM[0] = V_CM[0]; << 1487 varntp->kfis = 1; 1773 VFP1_CM[1] = V_CM[1]; << 1488 if(NbLam0>0)varntp->kfis = 20; 1774 VFP1_CM[2] = V_CM[2]; << 1489 // ftype1=0; 1775 for (G4int j = 0; j < 3; j++) << 1490 1776 { << 1491 G4int IEV_TAB_FIS = 0,imode=0; 1777 VIMF_CM[j] = 0.0; << 1492 1778 VFP2_CM[j] = 0.0; << 1493 G4double vx1_fission=0.,vy1_fission=0.,vz1_fission=0.; 1779 } << 1494 G4double vx2_fission=0.,vy2_fission=0.,vz2_fission=0.; 1780 } << 1495 G4double vx_eva_sc=0.,vy_eva_sc=0.,vz_eva_sc=0.; 1781 // << 1496 1782 if (ff == 1 && fimf == 0) << 1497 fission(af,zf,ee,jprf0, 1783 ftype = 1; // fission << 1498 &vx1_fission,&vy1_fission,&vz1_fission, 1784 if (ff == 0 && fimf == 1) << 1499 &vx2_fission,&vy2_fission,&vz2_fission, 1785 ftype = 2; // IMF emission << 1500 &ZFP1,&AFP1,&SFP1,&ZFP2,&AFP2,&SFP2,&imode, 1786 // << 1501 &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 << 1502 1788 // IN CASE OF FISSION IT IS THE NUCLEUS T << 1503 for(G4int IJ = 0; IJ< IEV_TAB_FIS;IJ++){ 1789 // << 1504 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1790 << 1505 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1791 //***************** FISSION ************* << 1506 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1792 // << 1507 // Lorentz kinematics 1793 if (ftype == 1) << 1508 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 1794 { << 1509 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 1795 varntp->kfis = 1; << 1510 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 1796 if (NbLam0 > 0) << 1511 // Lorentz transformation 1797 varntp->kfis = 20; << 1512 lorentz_boost(V_CM[0],V_CM[1],V_CM[2], 1798 // ftype1=0; << 1513 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1799 << 1514 &VXOUT,&VYOUT,&VZOUT); 1800 G4int IEV_TAB_FIS = 0, imode = 0; << 1515 EV_TAB[IJ+IEV_TAB][2] = VXOUT; 1801 << 1516 EV_TAB[IJ+IEV_TAB][3] = VYOUT; 1802 G4double vx1_fission = 0., vy1_fissio << 1517 EV_TAB[IJ+IEV_TAB][4] = VZOUT; 1803 G4double vx2_fission = 0., vy2_fissio << 1518 } 1804 G4double vx_eva_sc = 0., vy_eva_sc = << 1519 IEV_TAB = IEV_TAB + IEV_TAB_FIS; 1805 << 1520 1806 fission(af, << 1521 // if(imode==1) ftype1 = 1; // S1 mode 1807 zf, << 1522 // if(imode==2) ftype1 = 2; // S2 mode 1808 ee, << 1523 1809 jprf0, << 1524 AFPIMF = 0; 1810 &vx1_fission, << 1525 ZFPIMF = 0; 1811 &vy1_fission, << 1526 SFPIMF = 0; 1812 &vz1_fission, << 1527 1813 &vx2_fission, << 1528 // VX_EVA_SC,VY_EVA_SC,VZ_EVA_SC - recoil due to particle emisison 1814 &vy2_fission, << 1529 // between saddle and scission 1815 &vz2_fission, << 1530 // Lorentz kinematics 1816 &ZFP1, << 1531 // VFP1_CM(1) = V_CM(1) + VX1_FISSION + VX_EVA_SC ! Velocity of FF1 in x 1817 &AFP1, << 1532 // VFP1_CM(2) = V_CM(2) + VY1_FISSION + VY_EVA_SC ! Velocity of FF1 in y 1818 &SFP1, << 1533 // VFP1_CM(3) = V_CM(3) + VZ1_FISSION + VZ_EVA_SC ! Velocity of FF1 in x 1819 &ZFP2, << 1534 lorentz_boost(vx1_fission,vy1_fission,vz1_fission, 1820 &AFP2, << 1535 V_CM[0],V_CM[1],V_CM[2], 1821 &SFP2, << 1536 &VXOUT,&VYOUT,&VZOUT); 1822 &imode, << 1537 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, 1823 &vx_eva_sc, << 1538 VXOUT,VYOUT,VZOUT, 1824 &vy_eva_sc, << 1539 &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; 1540 VFP1_CM[0] = VX2OUT; 1865 VFP1_CM[1] = VY2OUT; 1541 VFP1_CM[1] = VY2OUT; 1866 VFP1_CM[2] = VZ2OUT; 1542 VFP1_CM[2] = VZ2OUT; 1867 1543 1868 // Lorentz kinematics << 1544 // Lorentz kinematics 1869 // VFP2_CM(1) = V_CM(1) + VX2_ << 1545 // 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) + << 1546 // 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( << 1547 // VFP2_CM(3) = V_CM(3) + VZ2_FISSION + VZ_EVA_SC ! Velocity of FF2 in x 1872 // of FF2 in x << 1548 lorentz_boost(vx2_fission,vy2_fission,vz2_fission, 1873 lorentz_boost(vx2_fission, vy2_fissio << 1549 V_CM[0],V_CM[1],V_CM[2], 1874 lorentz_boost(vx_eva_sc, vy_eva_sc, v << 1550 &VXOUT,&VYOUT,&VZOUT); >> 1551 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, >> 1552 VXOUT,VYOUT,VZOUT, >> 1553 &VX2OUT,&VY2OUT,&VZ2OUT); 1875 VFP2_CM[0] = VX2OUT; 1554 VFP2_CM[0] = VX2OUT; 1876 VFP2_CM[1] = VY2OUT; 1555 VFP2_CM[1] = VY2OUT; 1877 VFP2_CM[2] = VZ2OUT; 1556 VFP2_CM[2] = VZ2OUT; 1878 1557 1879 //************** IMF EMISSION << 1558 //************** IMF EMISSION ************************************************ 1880 //*********************************** << 1559 // 1881 // << 1560 }else if(ftype == 2){ 1882 } << 1561 // IMF emission: Heavy partner is allowed to fission and to emitt IMF, but ONLY once. 1883 else if (ftype == 2) << 1562 G4int FF11 = 0; 1884 { << 1563 G4int FIMF11 = 0; 1885 // IMF emission: Heavy partner is all << 1564 opt->optimfallowed = 1; // IMF is allowed 1886 // ONLY once. << 1565 fiss->ifis = 1; // fission is allowed 1887 G4int FF11 = 0; << 1566 // Lambda particles 1888 G4int FIMF11 = 0; << 1567 G4int NbLamH=0; 1889 opt->optimfallowed = 1; // IMF is al << 1568 G4int NbLamimf=0; 1890 fiss->ifis = 1; // fission i << 1569 G4double pbH = (af-zf) / (af-zf+aimf-zimf); 1891 // Lambda pa << 1570 //double pbL = aimf / (af+aimf); 1892 G4int NbLamH = 0; << 1571 for(G4int i=0;i<NbLam0;i++){ 1893 G4int NbLamimf = 0; << 1572 if(G4AblaRandom::flat()<pbH){ 1894 G4double pbH = (af - zf) / (af - zf + << 1573 NbLamH++; 1895 // double pbL = aimf / (af+aimf); << 1574 }else{ 1896 for (G4int i = 0; i < NbLam0; i++) << 1575 NbLamimf++; 1897 { << 1576 } 1898 if (G4AblaRandom::flat() < pbH) << 1577 } 1899 { << 1578 // 1900 NbLamH++; << 1579 // Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF 1901 } << 1580 G4double EkinR1 = tkeimf * aimf / (af+aimf); 1902 else << 1581 G4double EkinR2 = tkeimf * af / (af+aimf); 1903 { << 1582 G4double V1 = std::sqrt(EkinR1/af) * 1.3887; 1904 NbLamimf++; << 1583 G4double V2 = std::sqrt(EkinR2/aimf) * 1.3887; 1905 } << 1584 G4double VZ1_IMF = (2.0 * G4AblaRandom::flat() - 1.0) * V1; 1906 } << 1585 G4double VPERP1 = std::sqrt(V1*V1 - VZ1_IMF*VZ1_IMF); 1907 // << 1586 G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142; 1908 // Velocities of IMF and partner: 1 << 1587 G4double VX1_IMF = VPERP1 * std::sin(ALPHA1); 1909 G4double EkinR1 = tkeimf * aimf / (af << 1588 G4double VY1_IMF = VPERP1 * std::cos(ALPHA1); 1910 G4double EkinR2 = tkeimf * af / (af + << 1589 G4double VX2_IMF = - VX1_IMF / V1 * V2; 1911 G4double V1 = std::sqrt(EkinR1 / af) << 1590 G4double VY2_IMF = - VY1_IMF / V1 * V2; 1912 G4double V2 = std::sqrt(EkinR2 / aimf << 1591 G4double VZ2_IMF = - VZ1_IMF / V1 * V2; 1913 G4double VZ1_IMF = (2.0 * G4AblaRando << 1592 1914 G4double VPERP1 = std::sqrt(V1 * V1 - << 1593 G4double EEIMFP = ee * af /(af + aimf); 1915 G4double ALPHA1 = G4AblaRandom::flat( << 1594 G4double EEIMF = ee * aimf /(af + aimf); 1916 G4double VX1_IMF = VPERP1 * std::sin( << 1595 1917 G4double VY1_IMF = VPERP1 * std::cos( << 1596 // Decay of heavy partner 1918 G4double VX2_IMF = -VX1_IMF / V1 * V2 << 1597 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 << 1598 1920 G4double VZ2_IMF = -VZ1_IMF / V1 * V2 << 1599 G4double JPRFHEAVY = jprf0 * 0.4 * 931.49 * 1.16*1.16 * std::pow(af,5.0/3.0) / IINERTTOT; 1921 << 1600 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 << 1601 if(af<2.0) std::cout << "RN117-4,AF,ZF,EE,JPRFheavy" << std::endl; 1923 G4double EEIMF = ee * aimf / (af + ai << 1602 1924 << 1603 G4double vx1ev_imf=0., vy1ev_imf=0., vz1ev_imf=0., zdummy=0., adummy=0., tkedummy=0.,jprf1=0.; 1925 // Decay of heavy partner << 1604 1926 G4double IINERTTOT = 0.40 * 931.490 * << 1605 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 << 1606 1928 (std::pow(ai << 1607 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 1929 (std::pow(ai << 1608 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1930 << 1609 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1931 G4double JPRFHEAVY = jprf0 * 0.4 * 93 << 1610 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1932 G4double JPRFLIGHT = jprf0 * 0.4 * 93 << 1611 // 1933 if (af < 2.0) << 1612 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 1934 std::cout << "RN117-4,AF,ZF,EE,JP << 1613 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 1935 << 1614 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 1936 G4double vx1ev_imf = 0., vy1ev_imf = << 1615 // Lorentz transformation 1937 << 1616 lorentz_boost(V_CM[0],V_CM[1],V_CM[2], 1938 evapora(zf, << 1617 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1939 af, << 1618 &VXOUT,&VYOUT,&VZOUT); 1940 &EEIMFP, << 1619 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, 1941 JPRFHEAVY, << 1620 VXOUT,VYOUT,VZOUT, 1942 &zff, << 1621 &VX2OUT,&VY2OUT,&VZ2OUT); 1943 &aff, << 1622 EV_TAB[IJ+IEV_TAB][2] = VX2OUT; 1944 &mtota, << 1623 EV_TAB[IJ+IEV_TAB][3] = VY2OUT; 1945 &vz1ev_imf, << 1624 EV_TAB[IJ+IEV_TAB][4] = VZ2OUT; 1946 &vx1ev_imf, << 1625 } 1947 &vy1ev_imf, << 1626 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1948 &FF11, << 1627 1949 &FIMF11, << 1628 // For IMF - fission and IMF emission are not allowed 1950 &zdummy, << 1629 G4int FF22 = 0; 1951 &adummy, << 1630 G4int FIMF22 = 0; 1952 &tkedummy, << 1631 opt->optimfallowed = 0; // IMF is not allowed 1953 &jprf1, << 1632 fiss->ifis = 0; // fission is not allowed 1954 &inttype, << 1633 1955 &inum, << 1634 // Decay of IMF 1956 EV_TEMP, << 1635 G4double zffimf, affimf,zdummy1=0., adummy1=0., tkedummy1=0.,jprf2,vx2ev_imf,vy2ev_imf, 1957 &IEV_TAB_TEMP, << 1636 vz2ev_imf; 1958 &NbLamH); << 1637 1959 << 1638 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; << 1639 1961 { << 1640 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 1962 EV_TAB[IJ + IEV_TAB][0] = EV_TEMP << 1641 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 1963 EV_TAB[IJ + IEV_TAB][1] = EV_TEMP << 1642 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 1964 EV_TAB[IJ + IEV_TAB][5] = EV_TEMP << 1643 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 1965 // << 1644 // 1966 // EV_TAB(IJ+IEV_TA << 1645 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 1967 // EV_TAB(IJ+IEV_TA << 1646 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 1968 // EV_TAB(IJ+IEV_TA << 1647 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 1969 // Lorentz transformation << 1648 // Lorentz transformation 1970 lorentz_boost( << 1649 lorentz_boost(V_CM[0],V_CM[1],V_CM[2], 1971 V_CM[0], V_CM[1], V_CM[2], EV << 1650 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 1972 lorentz_boost(vx1ev_imf, vy1ev_im << 1651 &VXOUT,&VYOUT,&VZOUT); 1973 EV_TAB[IJ + IEV_TAB][2] = VX2OUT; << 1652 lorentz_boost(VX2_IMF,VY2_IMF,VZ2_IMF, 1974 EV_TAB[IJ + IEV_TAB][3] = VY2OUT; << 1653 VXOUT,VYOUT,VZOUT, 1975 EV_TAB[IJ + IEV_TAB][4] = VZ2OUT; << 1654 &VX2OUT,&VY2OUT,&VZ2OUT); 1976 } << 1655 EV_TAB[IJ+IEV_TAB][2] = VX2OUT; 1977 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; << 1656 EV_TAB[IJ+IEV_TAB][3] = VY2OUT; 1978 << 1657 EV_TAB[IJ+IEV_TAB][4] = VZ2OUT; 1979 // For IMF - fission and IMF emission << 1658 } 1980 G4int FF22 = 0; << 1659 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 1981 G4int FIMF22 = 0; << 1660 // As IMF is not allowed to emit IMF, adummy1=zdummy1=0 1982 opt->optimfallowed = 0; // IMF is no << 1661 1983 fiss->ifis = 0; // fission i << 1662 AFPIMF = idnint(affimf); 1984 << 1663 ZFPIMF = idnint(zffimf); 1985 // Decay of IMF << 1664 SFPIMF = NbLamimf; 1986 G4double zffimf, affimf, zdummy1 = 0. << 1665 1987 << 1666 // vi1_imf, vi2_imf - velocities of imf and partner from TKE; 1988 evapora(zimf, << 1667 // vi1ev_imf, vi2_imf - recoil of partner and imf due to evaporation 1989 aimf, << 1668 // Lorentz kinematics - DM 18/5/2010 1990 &EEIMF, << 1669 // VIMF_CM(1) = V_CM(1) + VX2_IMF + VX2EV_IMF 1991 JPRFLIGHT, << 1670 // VIMF_CM(2) = V_CM(2) + VY2_IMF + VY2EV_IMF 1992 &zffimf, << 1671 // VIMF_CM(3) = V_CM(3) + VZ2_IMF + VZ2EV_IMF 1993 &affimf, << 1672 lorentz_boost(VX2_IMF,VY2_IMF,VZ2_IMF, 1994 &mtota, << 1673 V_CM[0],V_CM[1],V_CM[2], 1995 &vz2ev_imf, << 1674 &VXOUT,&VYOUT,&VZOUT); 1996 &vx2ev_imf, << 1675 lorentz_boost(vx2ev_imf,vy2ev_imf,vz2ev_imf, 1997 &vy2ev_imf, << 1676 VXOUT,VYOUT,VZOUT, 1998 &FF22, << 1677 &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; 1678 VIMF_CM[0] = VX2OUT; 2043 VIMF_CM[1] = VY2OUT; 1679 VIMF_CM[1] = VY2OUT; 2044 VIMF_CM[2] = VZ2OUT; 1680 VIMF_CM[2] = VZ2OUT; 2045 // Lorentz kinematics << 1681 // Lorentz kinematics 2046 // VFP1_CM(1) = V_CM(1) + VX1_I << 1682 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF 2047 // VFP1_CM(2) = V_CM(2) + VY1_I << 1683 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF 2048 // VFP1_CM(3) = V_CM(3) + VZ1_I << 1684 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF 2049 lorentz_boost(VX1_IMF, VY1_IMF, VZ1_I << 1685 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, 2050 lorentz_boost(vx1ev_imf, vy1ev_imf, v << 1686 V_CM[0],V_CM[1],V_CM[2], >> 1687 &VXOUT,&VYOUT,&VZOUT); >> 1688 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, >> 1689 VXOUT,VYOUT,VZOUT, >> 1690 &VX2OUT,&VY2OUT,&VZ2OUT); 2051 VFP1_CM[0] = VX2OUT; 1691 VFP1_CM[0] = VX2OUT; 2052 VFP1_CM[1] = VY2OUT; 1692 VFP1_CM[1] = VY2OUT; 2053 VFP1_CM[2] = VZ2OUT; 1693 VFP1_CM[2] = VZ2OUT; 2054 1694 2055 if (FF11 == 0 && FIMF11 == 0) << 1695 if(FF11==0 && FIMF11==0){ 2056 { << 1696 // heavy partner deexcites by emission of light particles 2057 // heavy partner deexcites by emi << 1697 AFP1 = idnint(aff); 2058 AFP1 = idnint(aff); << 1698 ZFP1 = idnint(zff); 2059 ZFP1 = idnint(zff); << 1699 SFP1 = NbLamH; 2060 SFP1 = NbLamH; << 1700 ZFP2 = 0; 2061 ZFP2 = 0; << 1701 AFP2 = 0; 2062 AFP2 = 0; << 1702 SFP2 = 0; 2063 SFP2 = 0; << 1703 ftype = 2; 2064 ftype = 2; << 1704 AFPIMF = idnint(affimf); 2065 AFPIMF = idnint(affimf); << 1705 ZFPIMF = idnint(zffimf); 2066 ZFPIMF = idnint(zffimf); << 1706 SFPIMF = NbLamimf; 2067 SFPIMF = NbLamimf; << 1707 for(G4int I=0;I<3;I++) 2068 for (G4int I = 0; I < 3; I++) << 1708 VFP2_CM[I] = 0.0; 2069 VFP2_CM[I] = 0.0; << 1709 2070 } << 1710 2071 else if (FF11 == 1 && FIMF11 == 0) << 1711 } else if(FF11==1 && FIMF11==0){ 2072 { << 1712 // Heavy partner fissions 2073 // Heavy partner fissions << 1713 varntp->kfis = 1; 2074 varntp->kfis = 1; << 1714 if(NbLam0>0)varntp->kfis = 20; 2075 if (NbLam0 > 0) << 1715 // 2076 varntp->kfis = 20; << 1716 opt->optimfallowed = 0; // IMF is not allowed 2077 // << 1717 fiss->ifis = 0; // fission is not allowed 2078 opt->optimfallowed = 0; // IMF i << 1718 // 2079 fiss->ifis = 0; // fissi << 1719 zf = zff; 2080 // << 1720 af = aff; 2081 zf = zff; << 1721 ee = EEIMFP; 2082 af = aff; << 1722 // ftype1=0; 2083 ee = EEIMFP; << 1723 ftype=21; 2084 // ftype1=0; << 1724 2085 ftype = 21; << 1725 G4int IEV_TAB_FIS = 0,imode=0; 2086 << 1726 2087 G4int IEV_TAB_FIS = 0, imode = 0; << 1727 G4double vx1_fission=0.,vy1_fission=0.,vz1_fission=0.; 2088 << 1728 G4double vx2_fission=0.,vy2_fission=0.,vz2_fission=0.; 2089 G4double vx1_fission = 0., vy1_fi << 1729 G4double vx_eva_sc=0.,vy_eva_sc=0.,vz_eva_sc=0.; 2090 G4double vx2_fission = 0., vy2_fi << 1730 2091 G4double vx_eva_sc = 0., vy_eva_s << 1731 fission(af,zf,ee,jprf1, 2092 << 1732 &vx1_fission,&vy1_fission,&vz1_fission, 2093 fission(af, << 1733 &vx2_fission,&vy2_fission,&vz2_fission, 2094 zf, << 1734 &ZFP1,&AFP1,&SFP1,&ZFP2,&AFP2,&SFP2,&imode, 2095 ee, << 1735 &vx_eva_sc,&vy_eva_sc,&vz_eva_sc,EV_TEMP,&IEV_TAB_FIS,&NbLamH); 2096 jprf1, << 1736 2097 &vx1_fission, << 1737 for(int IJ = 0; IJ< IEV_TAB_FIS;IJ++){ 2098 &vy1_fission, << 1738 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 2099 &vz1_fission, << 1739 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 2100 &vx2_fission, << 1740 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 2101 &vy2_fission, << 1741 // Lorentz kinematics 2102 &vz2_fission, << 1742 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 2103 &ZFP1, << 1743 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 2104 &AFP1, << 1744 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 2105 &SFP1, << 1745 // Lorentz transformation 2106 &ZFP2, << 1746 lorentz_boost(VFP1_CM[0],VFP1_CM[1],VFP1_CM[2], 2107 &AFP2, << 1747 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 2108 &SFP2, << 1748 &VXOUT,&VYOUT,&VZOUT); 2109 &imode, << 1749 EV_TAB[IJ+IEV_TAB][2] = VXOUT; 2110 &vx_eva_sc, << 1750 EV_TAB[IJ+IEV_TAB][3] = VYOUT; 2111 &vy_eva_sc, << 1751 EV_TAB[IJ+IEV_TAB][4] = VZOUT; 2112 &vz_eva_sc, << 1752 } 2113 EV_TEMP, << 1753 IEV_TAB = IEV_TAB + IEV_TAB_FIS; 2114 &IEV_TAB_FIS, << 1754 2115 &NbLamH); << 1755 // if(imode==1) ftype1 = 1; // S1 mode 2116 << 1756 // if(imode==2) ftype1 = 2; // S2 mode 2117 for (int IJ = 0; IJ < IEV_TAB_FIS << 1757 2118 { << 1758 // Lorentz kinematics 2119 EV_TAB[IJ + IEV_TAB][0] = EV_ << 1759 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF + VX1_FISSION + 2120 EV_TAB[IJ + IEV_TAB][1] = EV_ << 1760 // & VX_EVA_SC ! Velocity of FF1 in x 2121 EV_TAB[IJ + IEV_TAB][5] = EV_ << 1761 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF + VY1_FISSION + 2122 // Lorentz kinematics << 1762 // & VY_EVA_SC ! Velocity of FF1 in y 2123 // EV_TAB(IJ+IE << 1763 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF + VZ1_FISSION + 2124 // EV_TAB(IJ+IE << 1764 // & VZ_EVA_SC ! Velocity of FF1 in x 2125 // EV_TAB(IJ+IE << 1765 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, 2126 // Lorentz transformation << 1766 V_CM[0],V_CM[1],V_CM[2], 2127 lorentz_boost(VFP1_CM[0], << 1767 &VXOUT,&VYOUT,&VZOUT); 2128 VFP1_CM[1], << 1768 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, 2129 VFP1_CM[2], << 1769 VXOUT,VYOUT,VZOUT, 2130 EV_TEMP[IJ][2], << 1770 &VX2OUT,&VY2OUT,&VZ2OUT); 2131 EV_TEMP[IJ][3], << 1771 lorentz_boost(vx1_fission,vy1_fission,vz1_fission, 2132 EV_TEMP[IJ][4], << 1772 VX2OUT,VY2OUT,VZ2OUT, 2133 &VXOUT, << 1773 &VXOUT,&VYOUT,&VZOUT); 2134 &VYOUT, << 1774 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, 2135 &VZOUT); << 1775 VXOUT,VYOUT,VZOUT, 2136 EV_TAB[IJ + IEV_TAB][2] = VXO << 1776 &VX2OUT,&VY2OUT,&VZ2OUT); 2137 EV_TAB[IJ + IEV_TAB][3] = VYO << 1777 VFP1_CM[0] = VX2OUT; 2138 EV_TAB[IJ + IEV_TAB][4] = VZO << 1778 VFP1_CM[1] = VY2OUT; 2139 } << 1779 VFP1_CM[2] = VZ2OUT; 2140 IEV_TAB = IEV_TAB + IEV_TAB_FIS; << 2141 1780 2142 // if(imode==1) ftype1 = 1; / << 1781 // Lorentz kinematics 2143 // if(imode==2) ftype1 = 2; / << 1782 // VFP2_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF + VX2_FISSION + >> 1783 // & VX_EVA_SC ! Velocity of FF2 in x >> 1784 // VFP2_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF + VY2_FISSION + >> 1785 // & VY_EVA_SC ! Velocity of FF2 in y >> 1786 // VFP2_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF + VZ2_FISSION + >> 1787 // & VZ_EVA_SC ! Velocity of FF2 in x >> 1788 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, >> 1789 V_CM[0],V_CM[1],V_CM[2], >> 1790 &VXOUT,&VYOUT,&VZOUT); >> 1791 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, >> 1792 VXOUT,VYOUT,VZOUT, >> 1793 &VX2OUT,&VY2OUT,&VZ2OUT); >> 1794 lorentz_boost(vx2_fission,vy2_fission,vz2_fission, >> 1795 VX2OUT,VY2OUT,VZ2OUT, >> 1796 &VXOUT,&VYOUT,&VZOUT); >> 1797 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, >> 1798 VXOUT,VYOUT,VZOUT, >> 1799 &VX2OUT,&VY2OUT,&VZ2OUT); >> 1800 VFP2_CM[0] = VX2OUT; >> 1801 VFP2_CM[1] = VY2OUT; >> 1802 VFP2_CM[2] = VZ2OUT; 2144 1803 2145 // Lorentz kinematics << 1804 } else if(FF11==0 && FIMF11==1){ 2146 // VFP1_CM(1) = V_CM(1) + << 1805 // Heavy partner emits imf, consequtive imf emission or fission is not allowed 2147 // & VX_EVA_SC << 1806 opt->optimfallowed = 0; // IMF is not allowed 2148 // VFP1_CM(2) = V_CM(2) + << 1807 fiss->ifis = 0; // fission is not allowed 2149 // & VY_EVA_SC << 1808 // 2150 // VFP1_CM(3) = V_CM(3) + << 1809 zf = zff; 2151 // & VZ_EVA_SC << 1810 af = aff; 2152 lorentz_boost(VX1_IMF, VY1_IMF, V << 1811 ee = EEIMFP; 2153 lorentz_boost(vx1ev_imf, vy1ev_im << 1812 aimf = adummy; 2154 lorentz_boost(vx1_fission, vy1_fi << 1813 zimf = zdummy; 2155 lorentz_boost(vx_eva_sc, vy_eva_s << 1814 tkeimf = tkedummy; 2156 VFP1_CM[0] = VX2OUT; << 1815 FF11 = 0; 2157 VFP1_CM[1] = VY2OUT; << 1816 FIMF11 = 0; 2158 VFP1_CM[2] = VZ2OUT; << 1817 ftype = 22; 2159 << 1818 // Lambda particles 2160 // Lorentz kinematics << 1819 G4int NbLamH1=0; 2161 // VFP2_CM(1) = V_CM(1) + << 1820 G4int NbLamimf1=0; 2162 // & VX_EVA_SC << 1821 G4double pbH1 = (af-zf) / (af-zf+aimf-zimf); 2163 // VFP2_CM(2) = V_CM(2) + << 1822 for(G4int i=0;i<NbLamH;i++){ 2164 // & VY_EVA_SC << 1823 if(G4AblaRandom::flat()<pbH1){ 2165 // VFP2_CM(3) = V_CM(3) + << 1824 NbLamH1++; 2166 // & VZ_EVA_SC << 1825 }else{ 2167 lorentz_boost(VX1_IMF, VY1_IMF, V << 1826 NbLamimf1++; 2168 lorentz_boost(vx1ev_imf, vy1ev_im << 1827 } 2169 lorentz_boost(vx2_fission, vy2_fi << 1828 } 2170 lorentz_boost(vx_eva_sc, vy_eva_s << 1829 // 2171 VFP2_CM[0] = VX2OUT; << 1830 // Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF 2172 VFP2_CM[1] = VY2OUT; << 1831 EkinR1 = tkeimf * aimf / (af+aimf); 2173 VFP2_CM[2] = VZ2OUT; << 1832 EkinR2 = tkeimf * af / (af+aimf); 2174 } << 1833 V1 = std::sqrt(EkinR1/af) * 1.3887; 2175 else if (FF11 == 0 && FIMF11 == 1) << 1834 V2 = std::sqrt(EkinR2/aimf) * 1.3887; 2176 { << 1835 G4double VZ1_IMFS = (2.0 * G4AblaRandom::flat() - 1.0) * V1; 2177 // Heavy partner emits imf, conse << 1836 VPERP1 = std::sqrt(V1*V1 - VZ1_IMFS*VZ1_IMFS); 2178 // allowed << 1837 ALPHA1 = G4AblaRandom::flat() * 2. * 3.142; 2179 opt->optimfallowed = 0; // IMF i << 1838 G4double VX1_IMFS = VPERP1 * std::sin(ALPHA1); 2180 fiss->ifis = 0; // fissi << 1839 G4double VY1_IMFS = VPERP1 * std::cos(ALPHA1); 2181 // << 1840 G4double VX2_IMFS = - VX1_IMFS / V1 * V2; 2182 zf = zff; << 1841 G4double VY2_IMFS = - VY1_IMFS / V1 * V2; 2183 af = aff; << 1842 G4double VZ2_IMFS = - VZ1_IMFS / V1 * V2; 2184 ee = EEIMFP; << 1843 2185 aimf = adummy; << 1844 EEIMFP = ee * af /(af + aimf); 2186 zimf = zdummy; << 1845 EEIMF = ee * aimf /(af + aimf); 2187 tkeimf = tkedummy; << 1846 2188 FF11 = 0; << 1847 // Decay of heavy partner 2189 FIMF11 = 0; << 1848 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; << 1849 2191 // Lambda particles << 1850 JPRFHEAVY = jprf1 * 0.4 * 931.49 * 1.16*1.16 * std::pow(af,5.0/3.0) / IINERTTOT; 2192 G4int NbLamH1 = 0; << 1851 JPRFLIGHT = jprf1 * 0.4 * 931.49 * 1.16*1.16 * std::pow(aimf,5.0/3.0) / IINERTTOT; 2193 G4int NbLamimf1 = 0; << 1852 2194 G4double pbH1 = (af - zf) / (af - << 1853 G4double zffs=0.,affs=0.,vx1ev_imfs=0.,vy1ev_imfs=0.,vz1ev_imfs=0.,jprf3=0.; 2195 for (G4int i = 0; i < NbLamH; i++ << 1854 2196 { << 1855 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 << 1856 2198 { << 1857 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 2199 NbLamH1++; << 1858 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 2200 } << 1859 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 2201 else << 1860 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 2202 { << 1861 // 2203 NbLamimf1++; << 1862 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 2204 } << 1863 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 2205 } << 1864 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 2206 // << 1865 // Lorentz transformation 2207 // Velocities of IMF and partner: << 1866 lorentz_boost(VFP1_CM[0],VFP1_CM[1],VFP1_CM[2], 2208 EkinR1 = tkeimf * aimf / (af + ai << 1867 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 2209 EkinR2 = tkeimf * af / (af + aimf << 1868 &VXOUT,&VYOUT,&VZOUT); 2210 V1 = std::sqrt(EkinR1 / af) * 1.3 << 1869 lorentz_boost(vx1ev_imfs,vy1ev_imfs,vz1ev_imfs, 2211 V2 = std::sqrt(EkinR2 / aimf) * 1 << 1870 VXOUT,VYOUT,VZOUT, 2212 G4double VZ1_IMFS = (2.0 * G4Abla << 1871 &VX2OUT,&VY2OUT,&VZ2OUT); 2213 VPERP1 = std::sqrt(V1 * V1 - VZ1_ << 1872 EV_TAB[IJ+IEV_TAB][2] = VX2OUT; 2214 ALPHA1 = G4AblaRandom::flat() * 2 << 1873 EV_TAB[IJ+IEV_TAB][3] = VY2OUT; 2215 G4double VX1_IMFS = VPERP1 * std: << 1874 EV_TAB[IJ+IEV_TAB][4] = VZ2OUT; 2216 G4double VY1_IMFS = VPERP1 * std: << 1875 } 2217 G4double VX2_IMFS = -VX1_IMFS / V << 1876 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 2218 G4double VY2_IMFS = -VY1_IMFS / V << 1877 2219 G4double VZ2_IMFS = -VZ1_IMFS / V << 1878 // For IMF - fission and IMF emission are not allowed 2220 << 1879 opt->optimfallowed = 0; // IMF is not allowed 2221 EEIMFP = ee * af / (af + aimf); << 1880 fiss->ifis = 0; // fission is not allowed 2222 EEIMF = ee * aimf / (af + aimf); << 1881 // 2223 << 1882 FF22 = 0; 2224 // Decay of heavy partner << 1883 FIMF22 = 0; 2225 IINERTTOT = 0.40 * 931.490 * 1.16 << 1884 // Decay of "second" IMF 2226 931.490 * 1.160 * 1.1 << 1885 G4double zffimfs=0.,affimfs=0.,vx2ev_imfs=0.,vy2ev_imfs=0.,vz2ev_imfs=0.,jprf4=0.; 2227 (std::pow(aimf, 1 << 1886 2228 (std::pow(aimf, 1 << 1887 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 << 1888 2230 JPRFHEAVY = jprf1 * 0.4 * 931.49 << 1889 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 2231 JPRFLIGHT = jprf1 * 0.4 * 931.49 << 1890 EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0]; 2232 << 1891 EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1]; 2233 G4double zffs = 0., affs = 0., vx << 1892 EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5]; 2234 << 1893 // 2235 evapora(zf, << 1894 // EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 2236 af, << 1895 // EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 2237 &EEIMFP, << 1896 // EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 2238 JPRFHEAVY, << 1897 // Lorentz transformation 2239 &zffs, << 1898 lorentz_boost(VFP1_CM[0],VFP1_CM[1],VFP1_CM[2], 2240 &affs, << 1899 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4], 2241 &mtota, << 1900 &VXOUT,&VYOUT,&VZOUT); 2242 &vz1ev_imfs, << 1901 lorentz_boost(vx2ev_imfs,vy2ev_imfs,vz2ev_imfs, 2243 &vx1ev_imfs, << 1902 VXOUT,VYOUT,VZOUT, 2244 &vy1ev_imfs, << 1903 &VX2OUT,&VY2OUT,&VZ2OUT); 2245 &FF11, << 1904 EV_TAB[IJ+IEV_TAB][2] = VX2OUT; 2246 &FIMF11, << 1905 EV_TAB[IJ+IEV_TAB][3] = VY2OUT; 2247 &zdummy, << 1906 EV_TAB[IJ+IEV_TAB][4] = VZ2OUT; 2248 &adummy, << 1907 } 2249 &tkedummy, << 1908 IEV_TAB = IEV_TAB + IEV_TAB_TEMP; 2250 &jprf3, << 1909 2251 &inttype, << 1910 AFP1 = idnint(affs); 2252 &inum, << 1911 ZFP1 = idnint(zffs); 2253 EV_TEMP, << 1912 SFP1 = NbLamH1; 2254 &IEV_TAB_TEMP, << 1913 ZFP2 = idnint(zffimfs); 2255 &NbLamH1); << 1914 AFP2 = idnint(affimfs); 2256 << 1915 SFP2 = NbLamimf1; 2257 for (G4int IJ = 0; IJ < IEV_TAB_T << 1916 2258 { << 1917 // Velocity of final heavy residue 2259 EV_TAB[IJ + IEV_TAB][0] = EV_ << 1918 // Lorentz kinematics 2260 EV_TAB[IJ + IEV_TAB][1] = EV_ << 1919 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF 2261 EV_TAB[IJ + IEV_TAB][5] = EV_ << 1920 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF 2262 // << 1921 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF 2263 // EV_TAB(IJ+IE << 1922 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, 2264 // EV_TAB(IJ+IE << 1923 V_CM[0],V_CM[1],V_CM[2], 2265 // EV_TAB(IJ+IE << 1924 &VXOUT,&VYOUT,&VZOUT); 2266 // Lorentz transformation << 1925 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, 2267 lorentz_boost(VFP1_CM[0], << 1926 VXOUT,VYOUT,VZOUT, 2268 VFP1_CM[1], << 1927 &VX2OUT,&VY2OUT,&VZ2OUT); 2269 VFP1_CM[2], << 1928 lorentz_boost(VX1_IMFS,VY1_IMFS,VZ1_IMFS, 2270 EV_TEMP[IJ][2], << 1929 VX2OUT,VY2OUT,VZ2OUT, 2271 EV_TEMP[IJ][3], << 1930 &VXOUT,&VYOUT,&VZOUT); 2272 EV_TEMP[IJ][4], << 1931 lorentz_boost(vx1ev_imfs,vy1ev_imfs,vz1ev_imfs, 2273 &VXOUT, << 1932 VXOUT,VYOUT,VZOUT, 2274 &VYOUT, << 1933 &VX2OUT,&VY2OUT,&VZ2OUT); 2275 &VZOUT); << 1934 VFP1_CM[0] = VX2OUT; 2276 lorentz_boost(vx1ev_imfs, vy1 << 1935 VFP1_CM[1] = VY2OUT; 2277 EV_TAB[IJ + IEV_TAB][2] = VX2 << 1936 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 1937 2283 // For IMF - fission and IMF emis << 1938 // Velocity of the second IMF 2284 opt->optimfallowed = 0; // IMF i << 1939 // Lorentz kinematics 2285 fiss->ifis = 0; // fissi << 1940 // VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF 2286 // << 1941 // VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF 2287 FF22 = 0; << 1942 // VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF 2288 FIMF22 = 0; << 1943 lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF, 2289 // Decay of "second" IMF << 1944 V_CM[0],V_CM[1],V_CM[2], 2290 G4double zffimfs = 0., affimfs = << 1945 &VXOUT,&VYOUT,&VZOUT); 2291 << 1946 lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf, 2292 evapora(zimf, << 1947 VXOUT,VYOUT,VZOUT, 2293 aimf, << 1948 &VX2OUT,&VY2OUT,&VZ2OUT); 2294 &EEIMF, << 1949 lorentz_boost(VX2_IMFS,VY2_IMFS,VZ2_IMFS, 2295 JPRFLIGHT, << 1950 VX2OUT,VY2OUT,VZ2OUT, 2296 &zffimfs, << 1951 &VXOUT,&VYOUT,&VZOUT); 2297 &affimfs, << 1952 lorentz_boost(vx2ev_imfs,vy2ev_imfs,vz2ev_imfs, 2298 &mtota, << 1953 VXOUT,VYOUT,VZOUT, 2299 &vz2ev_imfs, << 1954 &VX2OUT,&VY2OUT,&VZ2OUT); 2300 &vx2ev_imfs, << 1955 VFP2_CM[0] = VX2OUT; 2301 &vy2ev_imfs, << 1956 VFP2_CM[1] = VY2OUT; 2302 &FF22, << 1957 VFP2_CM[2] = VZ2OUT; 2303 &FIMF22, << 1958 }//second decay 2304 &zdummy1, << 1959 }// 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 1960 2340 AFP1 = idnint(affs); << 1961 // Only evaporation of light particles 2341 ZFP1 = idnint(zffs); << 1962 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 1963 2411 if (ftype > 1) << 1964 // ----------- RESOLVE UNSTABLE NUCLEI 2412 { << 1965 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 1966 2444 if (ftype > 2) << 1967 unstable_nuclei(AFP1,ZFP1,&afpnew,&zfpnew,IOUNSTABLE, 2445 { << 1968 VFP1_CM[0],VFP1_CM[1],VFP1_CM[2], 2446 IOUNSTABLE = 0; << 1969 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 2447 << 1970 2448 unstable_nuclei(AFP2, << 1971 if(IOUNSTABLE==1){ 2449 ZFP2, << 1972 AFP1 = afpnew; 2450 &afpnew, << 1973 ZFP1 = zfpnew; 2451 &zfpnew, << 1974 VFP1_CM[0] = VP1X; 2452 IOUNSTABLE, << 1975 VFP1_CM[1] = VP1Y; 2453 VFP2_CM[0], << 1976 VFP1_CM[2] = VP1Z; 2454 VFP2_CM[1], << 1977 for(G4int I = 0;I<ILOOP;I++){ 2455 VFP2_CM[2], << 1978 for(G4int IJ = 0; IJ<5; IJ++) 2456 &VP1X, << 1979 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 2457 &VP1Y, << 1980 } 2458 &VP1Z, << 1981 IEV_TAB = IEV_TAB + ILOOP; 2459 EV_TAB_TEMP, << 1982 } 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 1983 2480 // For the case of fission: << 1984 if(ftype>1){ 2481 if (ftype == 1 || ftype == 21) << 1985 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 1986 2515 IOUNSTABLE = 0; << 1987 unstable_nuclei(AFPIMF,ZFPIMF,&afpnew,&zfpnew,IOUNSTABLE, 2516 // ----------- Fragment 2 << 1988 VIMF_CM[0],VIMF_CM[1],VIMF_CM[2], 2517 unstable_nuclei(AFP2, << 1989 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 2518 ZFP2, << 1990 2519 &afpnew, << 1991 if(IOUNSTABLE==1){ 2520 &zfpnew, << 1992 AFPIMF = afpnew; 2521 IOUNSTABLE, << 1993 ZFPIMF = zfpnew; 2522 VFP2_CM[0], << 1994 VIMF_CM[0] = VP1X; 2523 VFP2_CM[1], << 1995 VIMF_CM[1] = VP1Y; 2524 VFP2_CM[2], << 1996 VIMF_CM[2] = VP1Z; 2525 &VP1X, << 1997 for(G4int I = 0;I<ILOOP;I++){ 2526 &VP1Y, << 1998 for(G4int IJ = 0; IJ<5; IJ++) 2527 &VP1Z, << 1999 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 2528 EV_TAB_TEMP, << 2000 } 2529 &ILOOP); << 2001 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 } 2002 } 2545 2003 2546 if (ftype == 21) << 2004 if(ftype>2){ 2547 { << 2005 IOUNSTABLE=0; 2548 IOUNSTABLE = 0; << 2006 2549 // ----------- Fragment IMF << 2007 unstable_nuclei(AFP2,ZFP2,&afpnew,&zfpnew,IOUNSTABLE, 2550 unstable_nuclei(AFPIMF, << 2008 VFP2_CM[0],VFP2_CM[1],VFP2_CM[2], 2551 ZFPIMF, << 2009 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 2552 &afpnew, << 2010 2553 &zfpnew, << 2011 if(IOUNSTABLE==1){ 2554 IOUNSTABLE, << 2012 AFP2 = afpnew; 2555 VIMF_CM[0], << 2013 ZFP2 = zfpnew; 2556 VIMF_CM[1], << 2014 VFP2_CM[0] = VP1X; 2557 VIMF_CM[2], << 2015 VFP2_CM[1] = VP1Y; 2558 &VP1X, << 2016 VFP2_CM[2] = VP1Z; 2559 &VP1Y, << 2017 for(G4int I = 0;I<ILOOP;I++){ 2560 &VP1Z, << 2018 for(G4int IJ = 0; IJ<5; IJ++) 2561 EV_TAB_TEMP, << 2019 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 2562 &ILOOP); << 2020 } 2563 << 2021 IEV_TAB = IEV_TAB + ILOOP; 2564 if (IOUNSTABLE == 1) << 2022 } 2565 { << 2023 }// ftype>2 2566 AFPIMF = afpnew; << 2024 }// 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 } 2025 } 2580 2026 2581 // Cross check << 2027 2582 if ((ftype == 1 || ftype == 21) && (AFP2 << 2028 // For the case of fission: 2583 { << 2029 if(ftype==1 || ftype==21){ 2584 std::cout << "ZFP1:" << ZFP1 << std:: << 2030 // ----------- RESOLVE UNSTABLE NUCLEI 2585 std::cout << "AFP1:" << AFP1 << std:: << 2031 IOUNSTABLE=0; 2586 std::cout << "ZFP2:" << ZFP2 << std:: << 2032 // ----------- Fragment 1 2587 std::cout << "AFP2:" << AFP2 << std:: << 2033 unstable_nuclei(AFP1,ZFP1,&afpnew,&zfpnew,IOUNSTABLE, 2588 } << 2034 VFP1_CM[0],VFP1_CM[1],VFP1_CM[2], 2589 << 2035 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 2590 // Put heavy residues in the EV_TAB a << 2036 2591 EV_TAB[IEV_TAB][0] = ZFP1; << 2037 if(IOUNSTABLE==1){ 2592 EV_TAB[IEV_TAB][1] = AFP1; << 2038 AFP1 = afpnew; 2593 EV_TAB[IEV_TAB][5] = SFP1; << 2039 ZFP1 = zfpnew; 2594 EV_TAB[IEV_TAB][2] = VFP1_CM[0]; << 2040 VFP1_CM[0] = VP1X; 2595 EV_TAB[IEV_TAB][3] = VFP1_CM[1]; << 2041 VFP1_CM[1] = VP1Y; 2596 EV_TAB[IEV_TAB][4] = VFP1_CM[2]; << 2042 VFP1_CM[2] = VP1Z; 2597 IEV_TAB = IEV_TAB + 1; << 2043 for(G4int I = 0;I<ILOOP;I++){ 2598 << 2044 for(G4int IJ = 0; IJ<5; IJ++) 2599 if (AFP2 > 0) << 2045 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; 2600 { << 2046 } 2601 EV_TAB[IEV_TAB][0] = ZFP2; << 2047 IEV_TAB = IEV_TAB + ILOOP; 2602 EV_TAB[IEV_TAB][1] = AFP2; << 2048 } 2603 EV_TAB[IEV_TAB][5] = SFP2; << 2049 2604 EV_TAB[IEV_TAB][2] = VFP2_CM[0]; << 2050 IOUNSTABLE=0; 2605 EV_TAB[IEV_TAB][3] = VFP2_CM[1]; << 2051 // ----------- Fragment 2 2606 EV_TAB[IEV_TAB][4] = VFP2_CM[2]; << 2052 unstable_nuclei(AFP2,ZFP2,&afpnew,&zfpnew,IOUNSTABLE, 2607 IEV_TAB = IEV_TAB + 1; << 2053 VFP2_CM[0],VFP2_CM[1],VFP2_CM[2], 2608 } << 2054 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); 2609 << 2055 2610 if (AFPIMF > 0) << 2056 if(IOUNSTABLE==1){ 2611 { << 2057 AFP2 = afpnew; 2612 EV_TAB[IEV_TAB][0] = ZFPIMF; << 2058 ZFP2 = zfpnew; 2613 EV_TAB[IEV_TAB][1] = AFPIMF; << 2059 VFP2_CM[0] = VP1X; 2614 EV_TAB[IEV_TAB][5] = SFPIMF; << 2060 VFP2_CM[1] = VP1Y; 2615 EV_TAB[IEV_TAB][2] = VIMF_CM[0]; << 2061 VFP2_CM[2] = VP1Z; 2616 EV_TAB[IEV_TAB][3] = VIMF_CM[1]; << 2062 for(G4int I = 0;I<ILOOP;I++){ 2617 EV_TAB[IEV_TAB][4] = VIMF_CM[2]; << 2063 for(G4int IJ = 0; IJ<5; IJ++) 2618 IEV_TAB = IEV_TAB + 1; << 2064 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; >> 2065 } >> 2066 IEV_TAB = IEV_TAB + ILOOP; >> 2067 } >> 2068 >> 2069 if(ftype==21){ >> 2070 IOUNSTABLE=0; >> 2071 // ----------- Fragment IMF >> 2072 unstable_nuclei(AFPIMF,ZFPIMF,&afpnew,&zfpnew,IOUNSTABLE, >> 2073 VIMF_CM[0],VIMF_CM[1],VIMF_CM[2], >> 2074 &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP); >> 2075 >> 2076 if(IOUNSTABLE==1){ >> 2077 AFPIMF = afpnew; >> 2078 ZFPIMF = zfpnew; >> 2079 VIMF_CM[0] = VP1X; >> 2080 VIMF_CM[1] = VP1Y; >> 2081 VIMF_CM[2] = VP1Z; >> 2082 for(G4int I = 0;I<ILOOP;I++){ >> 2083 for(G4int IJ = 0; IJ<5; IJ++) >> 2084 EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ]; >> 2085 } >> 2086 IEV_TAB = IEV_TAB + ILOOP; >> 2087 } >> 2088 }// ftype=21 2619 } 2089 } 2620 // Put the array of particles in the root << 2090 2621 FillData(IMULTBU, IEV_TAB); << 2091 // Cross check 2622 return; << 2092 if((ftype == 1 || ftype == 21) && (AFP2<=0 || AFP1<=0 || ZFP2<=0 || ZFP1<=0)){ >> 2093 std::cout << "ZFP1:" << ZFP1 << std::endl; >> 2094 std::cout << "AFP1:" << AFP1 << std::endl; >> 2095 std::cout << "ZFP2:" << ZFP2 << std::endl; >> 2096 std::cout << "AFP2:" << AFP2 << std::endl; >> 2097 } >> 2098 >> 2099 // Put heavy residues in the EV_TAB array >> 2100 EV_TAB[IEV_TAB][0] = ZFP1; >> 2101 EV_TAB[IEV_TAB][1] = AFP1; >> 2102 EV_TAB[IEV_TAB][5] = SFP1; >> 2103 EV_TAB[IEV_TAB][2] = VFP1_CM[0]; >> 2104 EV_TAB[IEV_TAB][3] = VFP1_CM[1]; >> 2105 EV_TAB[IEV_TAB][4] = VFP1_CM[2]; >> 2106 IEV_TAB = IEV_TAB + 1; >> 2107 >> 2108 if(AFP2>0){ >> 2109 EV_TAB[IEV_TAB][0] = ZFP2; >> 2110 EV_TAB[IEV_TAB][1] = AFP2; >> 2111 EV_TAB[IEV_TAB][5] = SFP2; >> 2112 EV_TAB[IEV_TAB][2] = VFP2_CM[0]; >> 2113 EV_TAB[IEV_TAB][3] = VFP2_CM[1]; >> 2114 EV_TAB[IEV_TAB][4] = VFP2_CM[2]; >> 2115 IEV_TAB = IEV_TAB + 1; >> 2116 } >> 2117 >> 2118 if(AFPIMF>0){ >> 2119 EV_TAB[IEV_TAB][0] = ZFPIMF; >> 2120 EV_TAB[IEV_TAB][1] = AFPIMF; >> 2121 EV_TAB[IEV_TAB][5] = SFPIMF; >> 2122 EV_TAB[IEV_TAB][2] = VIMF_CM[0]; >> 2123 EV_TAB[IEV_TAB][3] = VIMF_CM[1]; >> 2124 EV_TAB[IEV_TAB][4] = VIMF_CM[2]; >> 2125 IEV_TAB = IEV_TAB + 1; >> 2126 } >> 2127 // Put the array of particles in the root file of INCL >> 2128 FillData(IMULTBU,IEV_TAB); >> 2129 return; 2623 } 2130 } 2624 2131 2625 // Evaporation code 2132 // Evaporation code 2626 void G4Abla::initEvapora() 2133 void G4Abla::initEvapora() 2627 { 2134 { 2628 2135 2629 // 40 C BFPRO,S << 2136 // 40 C BFPRO,SNPRO,SPPRO,SHELL 2630 // 41 C << 2137 // 41 C 2631 // 42 C AP,ZP,AT,ZT - PROJECTIL << 2138 // 42 C AP,ZP,AT,ZT - PROJECTILE AND TARGET MASSES 2632 // 43 C EAP,BETA - BEAM ENER << 2139 // 43 C EAP,BETA - BEAM ENERGY PER NUCLEON, V/C 2633 // 44 C BMAXNUC - MAX. IMPA << 2140 // 44 C BMAXNUC - MAX. IMPACT PARAMETER FOR NUCL. REAC. 2634 // 45 C CRTOT,CRNUC - TOTAL AND << 2141 // 45 C CRTOT,CRNUC - TOTAL AND NUCLEAR REACTION CROSS SECTION 2635 // 46 C R_0,R_P,R_T, - RADIUS PA << 2142 // 46 C R_0,R_P,R_T, - RADIUS PARAMETER, PROJECTILE+ TARGET RADII 2636 // 47 C IMAX,IRNDM,PI - MAXIMUM N << 2143 // 47 C IMAX,IRNDM,PI - MAXIMUM NUMBER OF EVENTS, DUMMY, 3.141... 2637 // 48 C BFPRO - FISSION B << 2144 // 48 C BFPRO - FISSION BARRIER OF THE PROJECTILE 2638 // 49 C SNPRO - NEUTRON S << 2145 // 49 C SNPRO - NEUTRON SEPARATION ENERGY OF THE PROJECTILE 2639 // PROJECTILE 50 C SPPRO << 2146 // 50 C SPPRO - PROTON " " " " " 2640 // 51 C SHELL - GROUND ST << 2147 // 51 C SHELL - GROUND STATE SHELL CORRECTION 2641 // 52 << 2148 // 52 C--------------------------------------------------------------------- 2642 // C--------------------------------- << 2149 // 53 C 2643 // 53 C << 2150 // 54 C ENERGIES WIDTHS AND CROSS SECTIONS FOR EM EXCITATION 2644 // 54 C ENERGIES WIDTHS AND CROSS << 2151 // 55 C COMMON /EMDPAR/ EGDR,EGQR,FWHMGDR,FWHMGQR,CREMDE1,CREMDE2, 2645 // 55 C COMMON /EMDPAR/ EGDR,EGQR << 2152 // 56 C AE1,BE1,CE1,AE2,BE2,CE2,SR1,SR2,XR 2646 // 56 C AE1,BE1,C << 2153 // 57 C 2647 // 57 C << 2154 // 58 C EGDR,EGQR - MEAN ENERGY OF GDR AND GQR 2648 // 58 C EGDR,EGQR - MEAN EN << 2155 // 59 C FWHMGDR,FWHMGQR - FWHM OF GDR, GQR 2649 // 59 C FWHMGDR,FWHMGQR - FWHM OF << 2156 // 60 C CREMDE1,CREMDE2 - EM CROSS SECTION FOR E1 AND E2 2650 // 60 C CREMDE1,CREMDE2 - EM CROS << 2157 // 61 C AE1,BE1,CE1 - ARRAYS TO CALCULATE 2651 // 61 C AE1,BE1,CE1 - ARRAYS << 2158 // 62 C AE2,BE2,CE2 - THE EXCITATION ENERGY AFTER E.M. EXC. 2652 // 62 C AE2,BE2,CE2 - THE EXC << 2159 // 63 C SR1,SR2,XR - WITH MONTE CARLO 2653 // 63 C SR1,SR2,XR - WITH MO << 2160 // 64 C--------------------------------------------------------------------- 2654 // 64 << 2161 // 65 C 2655 // C--------------------------------- << 2162 // 66 C DEFORMATIONS AND G.S. SHELL EFFECTS 2656 // 65 C << 2163 // 67 C COMMON /ECLD/ ECGNZ,ECFNZ,VGSLD,ALPHA 2657 // 66 C DEFORMATIONS AND G.S. SHE << 2164 // 68 C 2658 // 67 C COMMON /ECLD/ ECGNZ,ECF << 2165 // 69 C ECGNZ - GROUND STATE SHELL CORR. FRLDM FOR A SPHERICAL G.S. 2659 // 68 C << 2166 // 70 C ECFNZ - SHELL CORRECTION FOR THE SADDLE POINT (NOW: == 0) 2660 // 69 C ECGNZ - GROUND STATE SHEL << 2167 // 71 C VGSLD - DIFFERENCE BETWEEN DEFORMED G.S. AND LDM VALUE 2661 // G.S. << 2168 // 72 C ALPHA - ALPHA GROUND STATE DEFORMATION (THIS IS NOT BETA2!) 2662 // 70 C ECFNZ - SHELL CORRECTION << 2169 // 73 C BETA2 = SQRT(5/(4PI)) * ALPHA 2663 // 71 C VGSLD - DIFFERENCE BETWEE << 2170 // 74 C--------------------------------------------------------------------- 2664 // 72 C ALPHA - ALPHA GROUND STAT << 2171 // 75 C 2665 // BETA2!) 73 C BETA2 = S << 2172 // 76 C ARRAYS FOR EXCITATION ENERGY BY STATISTICAL HOLE ENERY MODEL 2666 // C--------------------------------- << 2173 // 77 C COMMON /EENUC/ SHE, XHE 2667 // 75 C << 2174 // 78 C 2668 // 76 C ARRAYS FOR EXCITATION ENE << 2175 // 79 C SHE, XHE - ARRAYS TO CALCULATE THE EXC. ENERGY AFTER 2669 // MODEL 77 C COMMON /EENUC/ SHE << 2176 // 80 C ABRASION BY THE STATISTICAL HOLE ENERGY MODEL 2670 // XHE - ARRAYS TO CALCULATE THE EXC. << 2177 // 81 C--------------------------------------------------------------------- 2671 // THE STATISTICAL HOLE ENERGY MODEL << 2178 // 82 C 2672 // C--------------------------------- << 2179 // 83 C G.S. SHELL EFFECT 2673 // 82 C << 2180 // 84 C COMMON /EC2SUB/ ECNZ 2674 // 83 C G.S. SHELL EFFECT << 2181 // 85 C 2675 // 84 C COMMON /EC2SUB/ ECNZ << 2182 // 86 C ECNZ G.S. SHELL EFFECT FOR THE MASSES (IDENTICAL TO ECGNZ) 2676 // 85 C << 2183 // 87 C--------------------------------------------------------------------- 2677 // 86 C ECNZ G.S. SHELL EFFECT FO << 2184 // 2678 // 87 << 2185 2679 // C--------------------------------- << 2186 G4double MN = 939.5653301; 2680 // << 2187 G4double MP = 938.7829835; 2681 << 2188 2682 G4double MN = 939.5653301; << 2189 #ifdef ABLAXX_IN_GEANT4_MODE 2683 G4double MP = 938.7829835; << 2190 G4AblaDataFile *dataInterface = new G4AblaDataFile(); 2684 << 2191 #else 2685 G4AblaDataFile* dataInterface = new G4Abl << 2192 G4AblaDataFile *dataInterface = new G4AblaDataFile(theConfig); 2686 if (dataInterface->readData() == true) << 2193 #endif 2687 { << 2194 if(dataInterface->readData() == true) { 2688 if (verboseLevel > 0) << 2195 if(verboseLevel > 0) { 2689 { << 2196 // G4cout <<"G4Abla: Datafiles read successfully." << G4endl; 2690 // G4cout <<"G4Abla: Datafiles re << 2197 } 2691 } << 2198 } 2692 } << 2199 else { 2693 else << 2200 // G4Exception("ERROR: Failed to read datafiles."); 2694 { << 2201 } 2695 // G4Exception("ERROR: Failed to r << 2202 2696 } << 2203 for(G4int z = 0; z < 99; z++) { //do 30 z = 0,98,1 2697 << 2204 for(G4int n = 0; n < 154; n++) { //do 31 n = 0,153,1 2698 for (G4int z = 0; z < 99; z++) << 2205 ecld->ecfnz[n][z] = 0.e0; 2699 { // do 30 z = 0,98,1 << 2206 ec2sub->ecnz[n][z] = dataInterface->getEcnz(n,z); 2700 for (G4int n = 0; n < 154; n++) << 2207 ecld->ecgnz[n][z] = dataInterface->getEcnz(n,z); 2701 { // do 31 n = 0,153,1 << 2208 ecld->alpha[n][z] = dataInterface->getAlpha(n,z); 2702 ecld->ecfnz[n][z] = 0.e0; << 2209 ecld->vgsld[n][z] = dataInterface->getVgsld(n,z); 2703 ec2sub->ecnz[n][z] = dataInterfac << 2210 ecld->rms[n][z] = dataInterface->getRms(n,z); 2704 ecld->ecgnz[n][z] = dataInterface << 2211 } 2705 ecld->alpha[n][z] = dataInterface << 2212 } 2706 ecld->vgsld[n][z] = dataInterface << 2213 2707 ecld->rms[n][z] = dataInterface-> << 2214 for(G4int z = 0; z < 137; z++){ 2708 } << 2215 for(G4int n = 0; n < 251; n++){ 2709 } << 2216 ecld->beta2[n][z] = dataInterface->getBeta2(n,z); 2710 << 2217 ecld->beta4[n][z] = dataInterface->getBeta4(n,z); 2711 for (G4int iz = 0; iz < zcolsbeta; iz++) << 2218 } 2712 for (G4int in = 0; in < nrowsbeta; in << 2219 } 2713 { << 2220 2714 ecld->beta2[in][iz] = dataInterfa << 2221 for(G4int z = 0; z < 500; z++) { 2715 ecld->beta4[in][iz] = dataInterfa << 2222 for(G4int a = 0; a < 500; a++) { 2716 } << 2223 pace->dm[z][a] = dataInterface->getPace2(z,a); 2717 << 2224 } 2718 G4double mfrldm[lprows][lpcols]; << 2225 } 2719 // For 2 < Z < 12 we take "experimental" << 2226 2720 // calculated Read FRLDM tables << 2227 2721 for (G4int i = 1; i < lpcols; i++) << 2228 2722 { << 2229 G4double mfrldm[154][13]; 2723 for (G4int j = 1; j < lprows; j++) << 2230 // For 2 < Z < 12 we take "experimental" shell corrections instead of calculated 2724 { << 2231 // Read FRLDM tables 2725 if (dataInterface->getMexpID(j, i << 2232 for(G4int i=1;i<13;i++){ 2726 { << 2233 for(G4int j=1;j<154;j++){ 2727 masses->mexpiop[j][i] = 1; << 2234 if(dataInterface->getMexpID(j,i)==1){ 2728 } << 2235 masses->mexpiop[j][i]=1; 2729 else << 2236 }else{ 2730 { << 2237 masses->mexpiop[j][i]=0; 2731 masses->mexpiop[j][i] = 0; << 2238 } 2732 } << 2239 // LD masses (even-odd effect is later considered according to Ignatyuk) 2733 // LD masses (even-odd effect is << 2240 if(i==0 && j==0) 2734 if (i == 0 && j == 0) << 2241 mfrldm[j][i] = 0.; 2735 mfrldm[j][i] = 0.; << 2242 else 2736 else << 2243 mfrldm[j][i] = MP*i+MN*j+eflmac(i+j,i,1,0); 2737 mfrldm[j][i] = MP * i + MN * << 2244 } 2738 } << 2245 } 2739 } << 2246 2740 << 2247 G4double e0=0.; 2741 for (G4int i = 0; i < lpcols; i++) << 2248 for(G4int i=1;i<13;i++){ 2742 for (G4int j = 0; j < lprows; j++) << 2249 for(G4int j=1;j<154;j++){ 2743 masses->massexp[j][i] = dataInter << 2250 masses->bind[j][i]=0.; 2744 << 2251 if(masses->mexpiop[j][i]==1){ 2745 G4double e0 = 0.; << 2252 if(j<3){ 2746 for (G4int i = 1; i < lpcols; i++) << 2253 2747 { << 2254 ec2sub->ecnz[j][i] = 0.0; 2748 for (G4int j = 1; j < lprows; j++) << 2255 ecld->ecgnz[j][i] = ec2sub->ecnz[j][i]; 2749 { << 2256 masses->bind[j][i] = dataInterface->getMexp(j,i)-MP*i -MN*j; 2750 masses->bind[j][i] = 0.; << 2257 ecld->vgsld[j][i]=0.; 2751 if (masses->mexpiop[j][i] == 1) << 2258 2752 { << 2259 e0=0.; 2753 if (j < 30) << 2260 }else{ 2754 { << 2261 // For these nuclei, we take "experimental" ground-state shell corrections 2755 << 2262 // 2756 ec2sub->ecnz[j][i] = 0.0; << 2263 // Parametrization of CT model by Ignatyuk; note that E0 is shifted to correspond 2757 ecld->ecgnz[j][i] = ec2su << 2264 // to pairing shift in Fermi-gas model (there, energy is shifted taking odd-odd nuclei as bassis) 2758 masses->bind[j][i] = data << 2265 G4double para=0.; 2759 ecld->vgsld[j][i] = 0.; << 2266 parite(j+i,¶); 2760 << 2267 if(para<0.0){ 2761 e0 = 0.; << 2268 // e-o, o-e >> 2269 e0 = 0.285+11.17*std::pow(j+i,-0.464) -0.390-0.00058*(j+i); >> 2270 }else{ >> 2271 G4double parz=0.; >> 2272 parite(i,&parz); >> 2273 if (parz>0.0){ >> 2274 // e-e >> 2275 e0 = 22.34*std::pow(j+i,-0.464)-0.235; >> 2276 }else{ >> 2277 // o-o >> 2278 e0 = 0.0; >> 2279 } >> 2280 } >> 2281 // >> 2282 if((j==i)&&mod(j,2)==1&&mod(i,2)==1){ >> 2283 e0 = e0 - 30.0*(1.0/G4double(j+i)); 2762 } 2284 } 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 2285 2801 G4double delta_tot = ec2s << 2286 G4double delta_tot = ec2sub->ecnz[j][i] - ecld->vgsld[j][i]; 2802 ec2sub->ecnz[j][i] = data << 2287 ec2sub->ecnz[j][i] = dataInterface->getMexp(j,i) - (mfrldm[j][i] - e0); 2803 2288 2804 ecld->vgsld[j][i] = max(0 << 2289 ecld->vgsld[j][i] = max(0.0,ec2sub->ecnz[j][i] - delta_tot); 2805 ecld->ecgnz[j][i] = ec2su << 2290 ecld->ecgnz[j][i] = ec2sub->ecnz[j][i]; 2806 2291 2807 } // if j << 2292 }//if j 2808 } // if mexpiop << 2293 }//if mexpiop 2809 } << 2294 } 2810 } << 2295 } 2811 // << 2296 // 2812 delete dataInterface; << 2297 delete dataInterface; 2813 } 2298 } 2814 2299 2815 void G4Abla::SetParametersG4(G4int z, G4int a 2300 void G4Abla::SetParametersG4(G4int z, G4int a) 2816 { 2301 { 2817 // A and Z for the target << 2302 //A and Z for the target 2818 fiss->at = a; << 2303 fiss->at = a; 2819 fiss->zt = z; << 2304 fiss->zt = z; 2820 << 2305 2821 // switch-fission.1=on.0=off << 2306 // shell+pairing.0-1-2-3 for IMFs 2822 fiss->ifis = 1; << 2307 opt->optshpimf = 0; 2823 << 2308 2824 // shell+pairing.0-1-2-3 << 2309 //collective enhancement switched on 1 or off 0 in densn (qr=val or =1.) 2825 fiss->optshp = 3; << 2310 fiss->optcol = 1; 2826 if (fiss->zt < 84 && fiss->zt > 60) << 2311 if(fiss->zt<83 && fiss->zt>56){ 2827 fiss->optshp = 1; << 2312 fiss->optshp = 1; 2828 << 2313 } 2829 // optemd =0,1 0 no emd, 1 incl. emd << 2314 if(fiss->zt<=56){ 2830 opt->optemd = 1; << 2315 fiss->optcol = 0; 2831 // read(10,*,iostat=io) dum(10),optcha << 2316 fiss->optshp = 3; 2832 opt->optcha = 1; << 2317 } 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 } 2318 } 2874 2319 2875 void G4Abla::SetParameters() 2320 void G4Abla::SetParameters() 2876 { 2321 { 2877 /* << 2322 /* 2878 C IFIS = INTEGER SWITCH FOR FISSION << 2323 C IFIS = INTEGER SWITCH FOR FISSION 2879 C OPTSHP = INTEGER SWITCH FOR SHELL C << 2324 C OPTSHP = INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY 2880 C =0 NO MICROSCOPIC CORRECTION << 2325 C =0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY 2881 C =1 SHELL , NO PAIRING CORREC << 2326 C =1 SHELL , NO PAIRING CORRECTION 2882 C =2 PAIRING, NO SHELL CORRECT << 2327 C =2 PAIRING, NO SHELL CORRECTION 2883 C =3 SHELL AND PAIRING CORRECT << 2328 C =3 SHELL AND PAIRING CORRECTION IN MASSES AND ENERGY 2884 C OPTCOL =0,1 COLLECTIVE ENHANCEMENT << 2329 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 << 2330 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 << 2331 C BET = REAL REDUCED FRICTION COEFFICIENT / 10**(+21) S**(-1) 2887 C OPTXFIS= INTEGER 0,1,2 FOR MYERS & << 2332 C OPTXFIS= INTEGER 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV 2888 C FISSILITY PARAMETER. << 2333 C FISSILITY PARAMETER. 2889 C << 2334 C 2890 C NUCLEAR LEVEL DENSITIES: << 2335 C NUCLEAR LEVEL DENSITIES: 2891 C AV = REAL KOEFFICIENTS FOR CALC << 2336 C AV = REAL KOEFFICIENTS FOR CALCULATION OF A(TILDE) 2892 C AS = REAL LEVEL DENSITY PARAMET << 2337 C AS = REAL LEVEL DENSITY PARAMETER 2893 C AK = REAL << 2338 C AK = REAL 2894 */ << 2339 */ 2895 << 2340 2896 // switch-fission.1=on.0=off << 2341 // switch-fission.1=on.0=off 2897 fiss->ifis = 1; << 2342 fiss->ifis = 1; 2898 << 2343 2899 // shell+pairing.0-1-2-3 << 2344 // shell+pairing.0-1-2-3 2900 fiss->optshp = 3; << 2345 fiss->optshp = 3; 2901 if (fiss->zt < 84 && fiss->zt > 56) << 2346 if(fiss->zt<84 && fiss->zt>56) 2902 fiss->optshp = 1; << 2347 fiss->optshp = 1; 2903 << 2348 2904 // optemd =0,1 0 no emd, 1 incl. emd << 2349 // optemd =0,1 0 no emd, 1 incl. emd 2905 opt->optemd = 1; << 2350 opt->optemd = 1; 2906 // read(10,*,iostat=io) dum(10),optcha << 2351 // read(10,*,iostat=io) dum(10),optcha 2907 opt->optcha = 1; << 2352 opt->optcha = 1; 2908 << 2353 2909 // shell+pairing.0-1-2-3 for IMFs << 2354 // shell+pairing.0-1-2-3 for IMFs 2910 opt->optshpimf = 0; << 2355 opt->optshpimf = 0; 2911 opt->optimfallowed = 1; << 2356 opt->optimfallowed = 1; 2912 << 2357 2913 // nuclear.viscosity.(beta) << 2358 // nuclear.viscosity.(beta) 2914 fiss->bet = 4.5; << 2359 fiss->bet = 4.5; 2915 << 2360 2916 // collective enhancement switched on 1 o << 2361 //collective enhancement switched on 1 or off 0 in densn (qr=val or =1.) 2917 fiss->optcol = 1; << 2362 fiss->optcol = 1; 2918 if (fiss->zt <= 56) << 2363 if(fiss->zt<=56){ 2919 { << 2364 fiss->optcol = 0; 2920 fiss->optcol = 0; << 2365 fiss->optshp = 3; 2921 fiss->optshp = 3; << 2366 } 2922 } << 2367 //collective enhancement parameters 2923 // collective enhancement parameters << 2368 fiss->ucr = 40.; 2924 fiss->ucr = 40.; << 2369 fiss->dcr = 10.; 2925 fiss->dcr = 10.; << 2370 2926 << 2371 // switch for temperature constant model (CTM) 2927 // switch for temperature constant model << 2372 fiss->optct = 1; 2928 fiss->optct = 1; << 2373 2929 << 2374 ald->optafan = 0; 2930 ald->optafan = 0; << 2375 2931 << 2376 ald->av = 0.0730; 2932 ald->av = 0.0730; << 2377 ald->as = 0.0950; 2933 ald->as = 0.0950; << 2378 ald->ak = 0.0000; 2934 ald->ak = 0.0000; << 2379 2935 << 2380 fiss->optxfis = 3; 2936 fiss->optxfis = 3; << 2381 2937 << 2382 // Multi-fragmentation 2938 // Multi-fragmentation << 2383 T_freeze_out_in = -6.5; 2939 T_freeze_out_in = -6.5; << 2384 2940 } << 2385 } 2941 << 2386 2942 void G4Abla::mglw(G4double a, G4double z, G4d << 2387 void G4Abla::mglw(G4double a, G4double z, G4double *el) 2943 { << 2388 { 2944 // MODEL DE LA GOUTTE LIQUIDE DE C. F. WE << 2389 // MODEL DE LA GOUTTE LIQUIDE DE C. F. WEIZSACKER. 2945 // USUALLY AN OBSOLETE OPTION << 2390 // USUALLY AN OBSOLETE OPTION 2946 << 2391 2947 G4double xv = 0.0, xs = 0.0, xc = 0.0, xa << 2392 G4double xv = 0.0, xs = 0.0, xc = 0.0, xa = 0.0; 2948 << 2393 2949 if ((a <= 0.01) || (z < 0.01)) << 2394 if ((a <= 0.01) || (z < 0.01)) { 2950 { << 2395 (*el) = 1.0e38; 2951 (*el) = 1.0e38; << 2396 } 2952 } << 2397 else { 2953 else << 2398 xv = -15.56*a; 2954 { << 2399 xs = 17.23*std::pow(a,(2.0/3.0)); 2955 xv = -15.56 * a; << 2400 2956 xs = 17.23 * std::pow(a, (2.0 / 3.0)) << 2401 if (a > 1.0) { 2957 << 2402 xc = 0.7*z*(z-1.0)*std::pow((a-1.0),(-1.e0/3.e0)); 2958 if (a > 1.0) << 2403 } 2959 { << 2404 else { 2960 xc = 0.7 * z * (z - 1.0) * std::p << 2405 xc = 0.0; 2961 } << 2406 } 2962 else << 2407 } 2963 { << 2408 2964 xc = 0.0; << 2409 xa = 23.6*(std::pow((a-2.0*z),2)/a); 2965 } << 2410 (*el) = xv+xs+xc+xa; 2966 } << 2411 return; 2967 << 2412 } 2968 xa = 23.6 * (std::pow((a - 2.0 * z), 2) / << 2413 2969 (*el) = xv + xs + xc + xa; << 2414 void G4Abla::mglms(G4double a, G4double z, G4int refopt4, G4double *el) >> 2415 { >> 2416 // USING FUNCTION EFLMAC(IA,IZ,0) >> 2417 // >> 2418 // REFOPT4 = 0 : WITHOUT MICROSCOPIC CORRECTIONS >> 2419 // REFOPT4 = 1 : WITH SHELL CORRECTION >> 2420 // REFOPT4 = 2 : WITH PAIRING CORRECTION >> 2421 // REFOPT4 = 3 : WITH SHELL- AND PAIRING CORRECTION >> 2422 >> 2423 // 1839 C----------------------------------------------------------------------- >> 2424 // 1840 C A1 LOCAL MASS NUMBER (INTEGER VARIABLE OF A) >> 2425 // 1841 C Z1 LOCAL NUCLEAR CHARGE (INTEGER VARIABLE OF Z) >> 2426 // 1842 C REFOPT4 OPTION, SPECIFYING THE MASS FORMULA (SEE ABOVE) >> 2427 // 1843 C A MASS NUMBER >> 2428 // 1844 C Z NUCLEAR CHARGE >> 2429 // 1845 C DEL PAIRING CORRECTION >> 2430 // 1846 C EL BINDING ENERGY >> 2431 // 1847 C ECNZ( , ) TABLE OF SHELL CORRECTIONS >> 2432 // 1848 C----------------------------------------------------------------------- >> 2433 // 1849 C >> 2434 G4int a1 = idnint(a); >> 2435 G4int z1 = idnint(z); >> 2436 G4int n1 = a1-z1; >> 2437 >> 2438 if ( (a1 <= 0) || (z1 <= 0) || ((a1-z1) <= 0) ) { //then >> 2439 // modif pour recuperer une masse p et n correcte: >> 2440 (*el) = 1.e38; 2970 return; 2441 return; 2971 } << 2442 // goto mglms50; 2972 << 2443 } 2973 void G4Abla::mglms(G4double a, G4double z, G4 << 2444 else { 2974 { << 2445 // binding energy incl. pairing contr. is calculated from 2975 // USING FUNCTION EFLMAC(IA,IZ,0) << 2446 // function eflmac 2976 // << 2447 (*el) = eflmac(a1,z1,0,refopt4); 2977 // REFOPT4 = 0 : WITHOUT MICROSCOPIC CORR << 2448 2978 // REFOPT4 = 1 : WITH SHELL CORRECTION << 2449 if (refopt4 > 0) { 2979 // REFOPT4 = 2 : WITH PAIRING CORRECTION << 2450 if (refopt4 != 2) { 2980 // REFOPT4 = 3 : WITH SHELL- AND PAIRING << 2451 (*el) = (*el) + ec2sub->ecnz[a1-z1][z1]; 2981 << 2452 } 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 } 2453 } 3004 else << 2454 3005 { << 2455 if(z1>=90){ 3006 // binding energy incl. pairing contr << 2456 if(n1<=145){ 3007 // function eflmac << 2457 (*el) = (*el) + (12.552-0.1436*z1); 3008 (*el) = eflmac(a1, z1, 0, refopt4); << 2458 }else{ 3009 << 2459 if(n1>145&&n1<=152){ 3010 if (refopt4 > 0) << 2460 (*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 } 2461 } >> 2462 } 3032 } 2463 } 3033 return; << 2464 >> 2465 } >> 2466 return; 3034 } 2467 } 3035 2468 3036 G4double G4Abla::spdef(G4int a, G4int z, G4in 2469 G4double G4Abla::spdef(G4int a, G4int z, G4int optxfis) 3037 { 2470 { 3038 2471 3039 // INPUT: A,Z,OPTXFIS MASS AND CHARGE OF << 2472 // INPUT: A,Z,OPTXFIS MASS AND CHARGE OF A NUCLEUS, 3040 // OPTION FOR FISSILITY << 2473 // OPTION FOR FISSILITY 3041 // OUTPUT: SPDEF << 2474 // OUTPUT: SPDEF 3042 << 2475 3043 // ALPHA2 SADDLE POINT DEF. COHEN&SWIATEC << 2476 // ALPHA2 SADDLE POINT DEF. COHEN&SWIATECKI ANN.PHYS. 22 (1963) 406 3044 // RANGING FROM FISSILITY X=0.30 TO X=1.0 << 2477 // RANGING FROM FISSILITY X=0.30 TO X=1.00 IN STEPS OF 0.02 3045 << 2478 3046 G4int index = 0; << 2479 G4int index = 0; 3047 G4double x = 0.0, v = 0.0, dx = 0.0; << 2480 G4double x = 0.0, v = 0.0, dx = 0.0; 3048 << 2481 3049 const G4int alpha2Size = 37; << 2482 const G4int alpha2Size = 37; 3050 // The value 0.0 at alpha2[0] added by PK << 2483 // The value 0.0 at alpha2[0] added by PK. 3051 G4double alpha2[alpha2Size] = { 0.0, << 2484 G4double alpha2[alpha2Size] = {0.0, 2.5464e0, 2.4944e0, 2.4410e0, 2.3915e0, 2.3482e0, 3052 2.1982e0, << 2485 2.3014e0, 2.2479e0, 2.1982e0, 2.1432e0, 2.0807e0, 2.0142e0, 1.9419e0, 3053 1.6473e0, << 2486 1.8714e0, 1.8010e0, 1.7272e0, 1.6473e0, 1.5601e0, 1.4526e0, 1.3164e0, 3054 0.6360e0, << 2487 1.1391e0, 0.9662e0, 0.8295e0, 0.7231e0, 0.6360e0, 0.5615e0, 0.4953e0, 3055 0.1827e0, << 2488 0.4354e0, 0.3799e0, 0.3274e0, 0.2779e0, 0.2298e0, 0.1827e0, 0.1373e0, >> 2489 0.0901e0, 0.0430e0, 0.0000e0}; >> 2490 >> 2491 dx = 0.02; >> 2492 x = fissility(a,z,0,0.,0.,optxfis); >> 2493 >> 2494 v = (x - 0.3)/dx + 1.0; >> 2495 index = idnint(v); >> 2496 >> 2497 if (index < 1) { >> 2498 return(alpha2[1]); >> 2499 } >> 2500 >> 2501 if (index == 36) { >> 2502 return(alpha2[36]); >> 2503 } >> 2504 else { >> 2505 return(alpha2[index] + (alpha2[index+1] - alpha2[index]) / dx * ( x - (0.3e0 + dx*(index-1)))); >> 2506 } 3056 2507 3057 dx = 0.02; << 2508 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 } 2509 } 3079 2510 3080 G4double G4Abla::fissility(G4int a, G4int z, 2511 G4double G4Abla::fissility(G4int a, G4int z, G4int ny, G4double sn, G4double slam, G4int optxfis) 3081 { 2512 { 3082 // CALCULATION OF FISSILITY PARAMETER << 2513 // CALCULATION OF FISSILITY PARAMETER 3083 // << 2514 // 3084 // INPUT: A,Z INTEGER MASS & CHARGE OF NU << 2515 // INPUT: A,Z INTEGER MASS & CHARGE OF NUCLEUS 3085 // OPTXFIS = 0 : MYERS, SWIATECKI << 2516 // OPTXFIS = 0 : MYERS, SWIATECKI 3086 // 1 : DAHLINGER << 2517 // 1 : DAHLINGER 3087 // 2 : ANDREYEV << 2518 // 2 : ANDREYEV 3088 << 2519 3089 G4double aa = 0.0, zz = 0.0, i = 0.0, z2a << 2520 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; << 2521 G4double fissilityResult = 0.0; 3091 << 2522 3092 aa = G4double(a); << 2523 aa = G4double(a); 3093 zz = G4double(z); << 2524 zz = G4double(z); 3094 i = G4double(a - 2 * z) / aa; << 2525 i = G4double(a-2*z) / aa; 3095 z2a = zz * zz / aa - ny * (1115. - 939. + << 2526 z2a= zz*zz/aa-ny*(1115.-939.+sn-slam)/(0.7053*std::pow(a,2./3.)); 3096 << 2527 3097 // myers & swiatecki droplet modell << 2528 // myers & swiatecki droplet modell 3098 if (optxfis == 0) << 2529 if (optxfis == 0) { //then 3099 { // then << 2530 fissilityResult = std::pow(zz,2) / aa /50.8830e0 / (1.0e0 - 1.7826e0 * std::pow(i,2)); 3100 fissilityResult = std::pow(zz, 2) / a << 2531 } 3101 } << 2532 3102 << 2533 if (optxfis == 1) { 3103 if (optxfis == 1) << 2534 // dahlinger fit: 3104 { << 2535 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: << 2536 } 3106 fissilityResult = std::pow(zz, 2) / a << 2537 3107 std::pow((49.22e0 * << 2538 if (optxfis == 2) { 3108 } << 2539 // dubna fit: 3109 << 2540 fissilityResult = std::pow(zz,2) / aa /(48.e0*(1.e0 - 17.22e0*std::pow(i,4))); 3110 if (optxfis == 2) << 2541 } 3111 { << 2542 3112 // dubna fit: << 2543 if (optxfis == 3) { 3113 fissilityResult = std::pow(zz, 2) / a << 2544 // Fissiilty is calculated according to FRLDM, see Sierk, PRC 1984. 3114 } << 2545 C_S = 21.13 * (1.0 - 2.3*i*i); 3115 << 2546 R = 1.16 * std::pow(aa,1.0/3.0); 3116 if (optxfis == 3) << 2547 W = 0.704/R; 3117 { << 2548 G1 = 1.0 - 15.0/8.0*W+21.0/8.0*W*W*W; 3118 // Fissiilty is calculated according << 2549 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); << 2550 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); << 2551 A_CC = 3.0/5.0 * 1.44 * G / 1.16; 3121 W = 0.704 / R; << 2552 fissilityResult = z2a * A_CC/(2.0*C_S); 3122 G1 = 1.0 - 15.0 / 8.0 * W + 21.0 / 8. << 2553 } 3123 G2 = 1.0 + 9.0 / 2.0 * W + 7.0 * W * << 2554 3124 G = 1.0 - 5.0 * W * W * (G1 - 3.0 / 4 << 2555 if (fissilityResult > 1.0) { 3125 A_CC = 3.0 / 5.0 * 1.44 * G / 1.16; << 2556 fissilityResult = 1.0; 3126 fissilityResult = z2a * A_CC / (2.0 * << 2557 } 3127 } << 2558 3128 << 2559 if (fissilityResult < 0.0) { 3129 if (fissilityResult > 1.0) << 2560 fissilityResult = 0.0; 3130 { << 2561 } 3131 fissilityResult = 1.0; << 2562 3132 } << 2563 return fissilityResult; 3133 << 2564 } 3134 if (fissilityResult < 0.0) << 2565 3135 { << 2566 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; << 2567 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 } << 2568 { 3138 << 2569 G4double zf = zprf; 3139 return fissilityResult; << 2570 G4double af = aprf; 3140 } << 2571 G4double ee = (*ee_par); 3141 << 2572 G4double jprf = dint(jprf_par); 3142 void G4Abla::evapora(G4double zprf, << 2573 G4double mtota = (*mtota_par); 3143 G4double aprf, << 2574 G4double vleva = 0.; 3144 G4double* ee_par, << 2575 G4double vxeva = 0.; 3145 G4double jprf_par, << 2576 G4double vyeva = 0.; 3146 G4double* zf_par, << 2577 G4int ff = (*ff_par); 3147 G4double* af_par, << 2578 G4int fimf = (*fimf_par); 3148 G4double* mtota_par, << 2579 G4double tkeimf = (*tkeimf_par); 3149 G4double* vleva_par, << 2580 G4int inttype = (*inttype_par); 3150 G4double* vxeva_par, << 2581 G4int inum = (*inum_par); 3151 G4double* vyeva_par, << 2582 G4int NbLam0 = (*NbLam0_par); 3152 G4int* ff_par, << 2583 3153 G4int* fimf_par, << 2584 // 533 C 3154 G4double* fzimf, << 2585 // 534 C INPUT: 3155 G4double* faimf, << 2586 // 535 C 3156 G4double* tkeimf_par, << 2587 // 536 C ZPRF, APRF, EE(EE IS MODIFIED!), JPRF 3157 G4double* jprfout, << 2588 // 537 C 3158 G4int* inttype_par, << 2589 // 538 C PROJECTILE AND TARGET PARAMETERS + CROSS SECTIONS 3159 G4int* inum_par, << 2590 // 539 C COMMON /ABRAMAIN/ AP,ZP,AT,ZT,EAP,BETA,BMAXNUC,CRTOT,CRNUC, 3160 G4double EV_TEMP[indexpa << 2591 // 540 C R_0,R_P,R_T, IMAX,IRNDM,PI, 3161 G4int* iev_tab_temp_par, << 2592 // 541 C BFPRO,SNPRO,SPPRO,SHELL 3162 G4int* NbLam0_par) << 2593 // 542 C 3163 { << 2594 // 543 C AP,ZP,AT,ZT - PROJECTILE AND TARGET MASSES 3164 G4double zf = zprf; << 2595 // 544 C EAP,BETA - BEAM ENERGY PER NUCLEON, V/C 3165 G4double af = aprf; << 2596 // 545 C BMAXNUC - MAX. IMPACT PARAMETER FOR NUCL. REAC. 3166 G4double ee = (*ee_par); << 2597 // 546 C CRTOT,CRNUC - TOTAL AND NUCLEAR REACTION CROSS SECTION 3167 G4double jprf = dint(jprf_par); << 2598 // 547 C R_0,R_P,R_T, - RADIUS PARAMETER, PROJECTILE+ TARGET RADII 3168 G4double mtota = (*mtota_par); << 2599 // 548 C IMAX,IRNDM,PI - MAXIMUM NUMBER OF EVENTS, DUMMY, 3.141... 3169 G4double vleva = 0.; << 2600 // 549 C BFPRO - FISSION BARRIER OF THE PROJECTILE 3170 G4double vxeva = 0.; << 2601 // 550 C SNPRO - NEUTRON SEPARATION ENERGY OF THE PROJECTILE 3171 G4double vyeva = 0.; << 2602 // 551 C SPPRO - PROTON " " " " " 3172 G4int ff = (*ff_par); << 2603 // 552 C SHELL - GROUND STATE SHELL CORRECTION 3173 G4int fimf = (*fimf_par); << 2604 // 553 C 3174 G4double tkeimf = (*tkeimf_par); << 2605 // 554 C--------------------------------------------------------------------- 3175 G4int inttype = (*inttype_par); << 2606 // 555 C FISSION BARRIERS 3176 G4int inum = (*inum_par); << 2607 // 556 C COMMON /FB/ EFA 3177 G4int NbLam0 = (*NbLam0_par); << 2608 // 557 C EFA - ARRAY OF FISSION BARRIERS 3178 << 2609 // 558 C--------------------------------------------------------------------- 3179 // 533 C << 2610 // 559 C OUTPUT: 3180 // 534 C INPUT: << 2611 // 560 C ZF, AF, MTOTA, PLEVA, PTEVA, FF, INTTYPE, INUM 3181 // 535 C << 2612 // 561 C 3182 // 536 C ZPRF, APRF, EE(EE IS MODI << 2613 // 562 C ZF,AF - CHARGE AND MASS OF FINAL FRAGMENT AFTER EVAPORATION 3183 // 537 C << 2614 // 563 C MTOTA _ NUMBER OF EVAPORATED ALPHAS 3184 // 538 C PROJECTILE AND TARGET PAR << 2615 // 564 C PLEVA,PXEVA,PYEVA - MOMENTUM RECOIL BY EVAPORATION 3185 // 539 C COMMON /ABRAMAIN/ << 2616 // 565 C INTTYPE - TYPE OF REACTION 0/1 NUCLEAR OR ELECTROMAGNETIC 3186 // AP,ZP,AT,ZT,EAP,BETA,BMAXNUC,CRTOT, << 2617 // 566 C FF - 0/1 NO FISSION / FISSION EVENT 3187 // IMAX,IRNDM,PI, 541 C << 2618 // 567 C INUM - EVENTNUMBER 3188 // 542 C << 2619 // 568 C ____________________________________________________________________ 3189 // 543 C AP,ZP,AT,ZT - PROJECTIL << 2620 // 569 C / 3190 // 544 C EAP,BETA - BEAM ENER << 2621 // 570 C / CALCUL DE LA MASSE ET CHARGE FINALES D'UNE CHAINE D'EVAPORATION 3191 // 545 C BMAXNUC - MAX. IMPA << 2622 // 571 C / 3192 // 546 C CRTOT,CRNUC - TOTAL AND << 2623 // 572 C / PROCEDURE FOR CALCULATING THE FINAL MASS AND CHARGE VALUES OF A 3193 // 547 C R_0,R_P,R_T, - RADIUS PA << 2624 // 573 C / SPECIFIC EVAPORATION CHAIN, STARTING POINT DEFINED BY (APRF, ZPRF, 3194 // 548 C IMAX,IRNDM,PI - MAXIMUM N << 2625 // 574 C / EE) 3195 // 549 C BFPRO - FISSION B << 2626 // 575 C / On ajoute les 3 composantes de l'impulsion (PXEVA,PYEVA,PLEVA) 3196 // 550 C SNPRO - NEUTRON S << 2627 // 576 C / (actuellement PTEVA n'est pas correct; mauvaise norme...) 3197 // PROJECTILE 551 C SPPRO << 2628 // 577 C /____________________________________________________________________ 3198 // 552 C SHELL - GROUND ST << 2629 // 578 C 3199 // 553 C << 2630 // 612 C 3200 // 554 << 2631 // 613 C----------------------------------------------------------------------- 3201 // C---------------------------------- << 2632 // 614 C IRNDM DUMMY ARGUMENT FOR RANDOM-NUMBER FUNCTION 3202 // 555 C FISSION BARRIERS << 2633 // 615 C SORTIE LOCAL HELP VARIABLE TO END THE EVAPORATION CHAIN 3203 // 556 C COMMON /FB/ EFA << 2634 // 616 C ZF NUCLEAR CHARGE OF THE FRAGMENT 3204 // 557 C EFA - ARRAY OF FISSION << 2635 // 617 C ZPRF NUCLEAR CHARGE OF THE PREFRAGMENT 3205 // 558 << 2636 // 618 C AF MASS NUMBER OF THE FRAGMENT 3206 // C---------------------------------- << 2637 // 619 C APRF MASS NUMBER OF THE PREFRAGMENT 3207 // 559 C OUTPUT: << 2638 // 620 C EPSILN ENERGY BURNED IN EACH EVAPORATION STEP 3208 // 560 C ZF, AF, MTOTA, P << 2639 // 621 C MALPHA LOCAL MASS CONTRIBUTION TO MTOTA IN EACH EVAPORATION 3209 // 561 C << 2640 // 622 C STEP 3210 // 562 C ZF,AF - CHARGE AND MASS O << 2641 // 623 C EE EXCITATION ENERGY (VARIABLE) 3211 // EVAPORATION 563 C MTOTA _ NUMBE << 2642 // 624 C PROBP PROTON EMISSION PROBABILITY 3212 // PLEVA,PXEVA,PYEVA - MOMENTUM RECOIL << 2643 // 625 C PROBN NEUTRON EMISSION PROBABILITY 3213 // TYPE OF REACTION 0/1 NUCLEAR OR ELE << 2644 // 626 C PROBA ALPHA-PARTICLE EMISSION PROBABILITY 3214 // NO FISSION / FISSION EVENT 567 C << 2645 // 627 C PTOTL TOTAL EMISSION PROBABILITY 3215 // ___________________________________ << 2646 // 628 C E LOWEST PARTICLE-THRESHOLD ENERGY 3216 // C / 570 C / CALCUL DE LA MASSE << 2647 // 629 C SN NEUTRON SEPARATION ENERGY 3217 // D'EVAPORATION 571 C / << 2648 // 630 C SBP PROTON SEPARATION ENERGY PLUS EFFECTIVE COULOMB 3218 // 572 C / PROCEDURE FOR CALCULATING << 2649 // 631 C BARRIER 3219 // OF A << 2650 // 632 C SBA ALPHA-PARTICLE SEPARATION ENERGY PLUS EFFECTIVE 3220 // 573 C / SPECIFIC EVAPORATION CHAI << 2651 // 633 C COULOMB BARRIER 3221 // (APRF, ZPRF, 574 C / EE) 575 C << 2652 // 634 C BP EFFECTIVE PROTON COULOMB BARRIER 3222 // composantes de l'impulsion (PXEVA,P << 2653 // 635 C BA EFFECTIVE ALPHA COULOMB BARRIER 3223 // 576 C / (actuellement PTEVA n'e << 2654 // 636 C MTOTA TOTAL MASS OF THE EVAPORATED ALPHA PARTICLES 3224 // norme...) 577 C << 2655 // 637 C X UNIFORM RANDOM NUMBER FOR NUCLEAR CHARGE 3225 // /__________________________________ << 2656 // 638 C AMOINS LOCAL MASS NUMBER OF EVAPORATED PARTICLE 3226 // 578 C << 2657 // 639 C ZMOINS LOCAL NUCLEAR CHARGE OF EVAPORATED PARTICLE 3227 // 612 C << 2658 // 640 C ECP KINETIC ENERGY OF PROTON WITHOUT COULOMB 3228 // 613 << 2659 // 641 C REPULSION 3229 // C---------------------------------- << 2660 // 642 C ECN KINETIC ENERGY OF NEUTRON 3230 // 614 C IRNDM DUMMY A << 2661 // 643 C ECA KINETIC ENERGY OF ALPHA PARTICLE WITHOUT COULOMB 3231 // FUNCTION 615 C SORTIE LOCAL << 2662 // 644 C REPULSION 3232 // EVAPORATION CHAIN 616 C ZF << 2663 // 645 C PLEVA TRANSVERSAL RECOIL MOMENTUM OF EVAPORATION 3233 // FRAGMENT 617 C ZPRF << 2664 // 646 C PTEVA LONGITUDINAL RECOIL MOMENTUM OF EVAPORATION 3234 // PREFRAGMENT 618 C AF << 2665 // 647 C FF FISSION FLAG 3235 // C APRF MASS NUMBER << 2666 // 648 C INTTYPE INTERACTION TYPE FLAG 3236 // 620 C EPSILN ENERGY << 2667 // 649 C RNDX RECOIL MOMENTUM IN X-DIRECTION IN A SINGLE STEP 3237 // 621 C MALPHA LOCAL MASS CO << 2668 // 650 C RNDY RECOIL MOMENTUM IN Y-DIRECTION IN A SINGLE STEP 3238 // EVAPORATION 622 C << 2669 // 651 C RNDZ RECOIL MOMENTUM IN Z-DIRECTION IN A SINGLE STEP 3239 // EXCITATION ENERGY (VARIABLE) 624 C << 2670 // 652 C RNDN NORMALIZATION OF RECOIL MOMENTUM FOR EACH STEP 3240 // EMISSION PROBABILITY 625 C PRO << 2671 // 653 C----------------------------------------------------------------------- 3241 // PROBABILITY 626 C PROBA << 2672 // 654 C 3242 // PROBABILITY 627 C PTOTL << 2673 // 3243 // C E LOWEST PART << 2674 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 << 2675 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 << 2676 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 << 2677 G4double zimf= 0.0,aimf= 0.0,bimf= 0.0,sbimf= 0.0,timf= 0.0; 3247 // BARRIER 634 C BP << 2678 G4int itest = 0, sortie=0; 3248 // 635 C BA EFFECTI << 2679 G4double probf = 0.0; 3249 // 636 C MTOTA TOTAL M << 2680 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = 0.0; 3250 // PARTICLES 637 C X << 2681 G4double rnd = 0.0; 3251 // NUCLEAR CHARGE << 2682 G4double ef = 0.0; 3252 // 638 C AMOINS LOCAL MASS NU << 2683 G4double ts1 = 0.0; 3253 // 639 C ZMOINS LOCAL NUCLEAR << 2684 G4int fgamma = 0, gammadecay = 0, flamb0decay=0; 3254 // 640 C ECP KINETIC << 2685 G4double pc = 0.0, malpha = 0.0; 3255 // 641 C REPULS << 2686 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 << 2687 G4double tsum = 0.0; 3257 // 643 C ECA KINETIC << 2688 G4int twon; 3258 // COULOMB 644 C << 2689 3259 // TRANSVERSAL RECOIL MOMENTUM OF EVAP << 2690 const G4double c = 29.9792458; 3260 // RECOIL MOMENTUM OF EVAPORATION 647 << 2691 const G4double mu = 931.494; 3261 // FLAG 648 C INTTYPE I << 2692 const G4double mu2 = 931.494*931.494; 3262 // 649 C RNDX RECOIL << 2693 3263 // SINGLE STEP 650 C RNDY << 2694 G4double pleva = 0.0; 3264 // IN A SINGLE STEP 651 C RNDZ << 2695 G4double pxeva = 0.0; 3265 // Z-DIRECTION IN A SINGLE STEP << 2696 G4double pyeva = 0.0; 3266 // 652 C RNDN NORMALI << 2697 G4int IEV_TAB_TEMP=0; 3267 // EACH STEP 653 << 2698 3268 // C---------------------------------- << 2699 for(G4int I1=0;I1<200;I1++) 3269 // 654 C << 2700 for(G4int I2=0;I2<6;I2++) 3270 // << 2701 EV_TEMP[I1][I2] = 0.0; 3271 G4double epsiln = 0.0, probp = 0.0, probd << 2702 // 3272 probimf = 0.0, problamb0 = 0.0, << 2703 ff = 0; 3273 G4double sn = 0.0, sbp = 0.0, sbd = 0.0, << 2704 itest = 0; 3274 sp = 0.0, sd = 0.0, st = 0.0, sh << 2705 // 3275 G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, << 2706 evapora10: 3276 bd = 0.0, bt = 0.0, bhe = 0.0, b << 2707 // 3277 G4double zimf = 0.0, aimf = 0.0, bimf = 0 << 2708 // calculation of the probabilities for the different decay channels 3278 G4int itest = 0, sortie = 0; << 2709 // plus separation energies and kinetic energies of the particles 3279 G4double probf = 0.0; << 2710 // 3280 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = << 2711 if(ee<0.|| zf<3.)goto evapora100; 3281 G4double rnd = 0.0; << 2712 direct(zf,af,ee,jprf,&probp,&probd,&probt,&probn,&probhe,&proba,&probg,&probimf,&probf,&problamb0,&ptotl, 3282 G4double ef = 0.0; << 2713 &sn,&sbp,&sbd,&sbt,&sbhe,&sba,&slamb0, 3283 G4double ts1 = 0.0; << 2714 &ecn,&ecp,&ecd,&ect,&eche,&eca,&ecg,&eclamb0, 3284 G4int fgamma = 0, gammadecay = 0, flamb0d << 2715 &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; << 2716 &jprfn, &jprfp, &jprfd, &jprft, &jprfhe, &jprfa, &jprflamb0, &tsum, NbLam0); 3286 G4double jprfn = 0.0, jprfp = 0.0, jprfd << 2717 // 3287 G4double tsum = 0.0; << 2718 // HERE THE FINAL STEPS OF THE EVAPORATION ARE CALCULATED 3288 G4int twon; << 2719 // 3289 << 2720 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 2721 3460 // here the normal evaporation cascade st << 2722 e = dmin1(sba,sbhe,dmin1(sbt,sbhe,dmin1(sn,sbp,sbd))); 3461 2723 3462 // random number for the evaporation << 2724 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 2725 3465 itest = 0; << 2726 if(sortie==1){ 3466 if (x < proba) << 2727 if (probn!=0.0) { 3467 { << 2728 amoins = 1.0; 3468 // alpha evaporation << 2729 zmoins = 0.0; 3469 amoins = 4.0; << 2730 epsiln = sn + ecn; 3470 zmoins = 2.0; << 2731 pc = std::sqrt(std::pow((1.0 + (ecn)/9.3956e2),2.) - 1.0) * 9.3956e2; 3471 epsiln = sa + eca; << 2732 malpha = 0.0; 3472 pc = std::sqrt(std::pow((1.0 + eca / << 2733 fgamma = 0; 3473 malpha = 4.0; << 2734 fimf = 0; 3474 fgamma = 0; << 2735 flamb0decay=0; 3475 fimf = 0; << 2736 gammadecay = 0; 3476 ff = 0; << 2737 } 3477 flamb0decay = 0; << 2738 else if(probp!=0.0){ 3478 gammadecay = 0; << 2739 amoins = 1.0; 3479 jprf = jprfa; << 2740 zmoins = 1.0; 3480 } << 2741 epsiln = sp + ecp; 3481 else if (x < proba + probhe) << 2742 pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2.) - 1.0) * 9.3827e2; 3482 { << 2743 malpha = 0.0; 3483 // He3 evaporation << 2744 fgamma = 0; 3484 amoins = 3.0; << 2745 fimf = 0; 3485 zmoins = 2.0; << 2746 flamb0decay=0; 3486 epsiln = she + eche; << 2747 gammadecay = 0; 3487 pc = std::sqrt(std::pow((1.0 + eche / << 2748 } 3488 malpha = 0.0; << 2749 else if(probd!=0.0){ 3489 fgamma = 0; << 2750 amoins = 2.0; 3490 fimf = 0; << 2751 zmoins = 1.0; 3491 ff = 0; << 2752 epsiln = sd + ecd; 3492 flamb0decay = 0; << 2753 pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3; 3493 gammadecay = 0; << 2754 malpha = 0.0; 3494 jprf = jprfhe; << 2755 fgamma = 0; 3495 } << 2756 fimf = 0; 3496 else if (x < proba + probhe + probt) << 2757 flamb0decay=0; 3497 { << 2758 gammadecay = 0; 3498 // triton evaporation << 2759 } 3499 amoins = 3.0; << 2760 else if(probt!=0.0){ 3500 zmoins = 1.0; << 2761 amoins = 3.0; 3501 epsiln = st + ect; << 2762 zmoins = 1.0; 3502 pc = std::sqrt(std::pow((1.0 + ect / << 2763 epsiln = st + ect; 3503 malpha = 0.0; << 2764 pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3; 3504 fgamma = 0; << 2765 malpha = 0.0; 3505 fimf = 0; << 2766 fgamma = 0; 3506 ff = 0; << 2767 fimf = 0; 3507 flamb0decay = 0; << 2768 flamb0decay=0; 3508 gammadecay = 0; << 2769 gammadecay = 0; 3509 jprf = jprft; << 2770 } 3510 } << 2771 else if(probhe!=0.0){ 3511 else if (x < proba + probhe + probt + pro << 2772 amoins = 3.0; 3512 { << 2773 zmoins = 2.0; 3513 // deuteron evaporation << 2774 epsiln = she + eche; 3514 amoins = 2.0; << 2775 pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3; 3515 zmoins = 1.0; << 2776 malpha = 0.0; 3516 epsiln = sd + ecd; << 2777 fgamma = 0; 3517 pc = std::sqrt(std::pow((1.0 + ecd / << 2778 fimf = 0; 3518 malpha = 0.0; << 2779 flamb0decay=0; 3519 fgamma = 0; << 2780 gammadecay = 0; 3520 fimf = 0; << 2781 } 3521 ff = 0; << 2782 else{ if(proba!=0.0){ 3522 flamb0decay = 0; << 2783 amoins = 4.0; 3523 gammadecay = 0; << 2784 zmoins = 2.0; 3524 jprf = jprfd; << 2785 epsiln = sa + eca; 3525 } << 2786 pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3; 3526 else if (x < proba + probhe + probt + pro << 2787 malpha = 4.0; 3527 { << 2788 fgamma = 0; 3528 // proton evaporation << 2789 fimf = 0; 3529 amoins = 1.0; << 2790 flamb0decay=0; 3530 zmoins = 1.0; << 2791 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 } 2792 } 3645 else << 2793 } 3646 { << 2794 goto direct99; 3647 // fission << 2795 } 3648 // in case of fission-events the frag << 2796 3649 // before fission occurs with excitat << 2797 // here the normal evaporation cascade starts 3650 // fission fragment mass distribution << 2798 3651 << 2799 // random number for the evaporation 3652 amoins = 0.0; << 2800 x = G4AblaRandom::flat() * ptotl; 3653 zmoins = 0.0; << 2801 3654 epsiln = ef; << 2802 itest = 0; 3655 // << 2803 if (x < proba) { 3656 malpha = 0.0; << 2804 // alpha evaporation 3657 pc = 0.0; << 2805 amoins = 4.0; 3658 ff = 1; << 2806 zmoins = 2.0; 3659 fimf = 0; << 2807 epsiln = sa + eca; 3660 fgamma = 0; << 2808 pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3; 3661 flamb0decay = 0; << 2809 malpha = 4.0; 3662 gammadecay = 0; << 2810 fgamma = 0; 3663 } << 2811 fimf = 0; 3664 // << 2812 ff = 0; 3665 direct99: << 2813 flamb0decay=0; 3666 if (ee <= 0.01) << 2814 gammadecay = 0; 3667 ee = 0.01; << 2815 jprf=jprfa; 3668 // Davide Mancusi (DM) - 2010 << 2816 } 3669 if (gammadecay == 1 && ee < (epsiln + 0.0 << 2817 else if (x < proba+probhe) { 3670 { << 2818 // He3 evaporation >> 2819 amoins = 3.0; >> 2820 zmoins = 2.0; >> 2821 epsiln = she + eche; >> 2822 pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3; >> 2823 malpha = 0.0; >> 2824 fgamma = 0; >> 2825 fimf = 0; >> 2826 ff = 0; >> 2827 flamb0decay=0; >> 2828 gammadecay = 0; >> 2829 jprf=jprfhe; >> 2830 } >> 2831 else if (x < proba+probhe+probt) { >> 2832 // triton evaporation >> 2833 amoins = 3.0; >> 2834 zmoins = 1.0; >> 2835 epsiln = st + ect; >> 2836 pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3; >> 2837 malpha = 0.0; >> 2838 fgamma = 0; >> 2839 fimf = 0; >> 2840 ff = 0; >> 2841 flamb0decay=0; >> 2842 gammadecay = 0; >> 2843 jprf=jprft; >> 2844 } >> 2845 else if (x < proba+probhe+probt+probd) { >> 2846 // deuteron evaporation >> 2847 amoins = 2.0; >> 2848 zmoins = 1.0; >> 2849 epsiln = sd + ecd; >> 2850 pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3; >> 2851 malpha = 0.0; >> 2852 fgamma = 0; >> 2853 fimf = 0; >> 2854 ff = 0; >> 2855 flamb0decay=0; >> 2856 gammadecay = 0; >> 2857 jprf=jprfd; >> 2858 } >> 2859 else if (x < proba+probhe+probt+probd+probp) { >> 2860 // proton evaporation >> 2861 amoins = 1.0; >> 2862 zmoins = 1.0; >> 2863 epsiln = sp + ecp; >> 2864 pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2) - 1.0) * 9.3827e2; >> 2865 malpha = 0.0; >> 2866 fgamma = 0; >> 2867 fimf = 0; >> 2868 ff = 0; >> 2869 flamb0decay=0; >> 2870 gammadecay = 0; >> 2871 jprf=jprfp; >> 2872 } >> 2873 else if (x < proba+probhe+probt+probd+probp+probn) { >> 2874 // neutron evaporation >> 2875 amoins = 1.0; >> 2876 zmoins = 0.0; >> 2877 epsiln = sn + ecn; >> 2878 pc = std::sqrt(std::pow((1.0 + (ecn)/9.3956e2),2.) - 1.0) * 9.3956e2; >> 2879 malpha = 0.0; >> 2880 fgamma = 0; >> 2881 fimf = 0; >> 2882 ff = 0; >> 2883 flamb0decay=0; >> 2884 gammadecay = 0; >> 2885 jprf=jprfn; >> 2886 } >> 2887 else if (x < proba+probhe+probt+probd+probp+probn+problamb0) { >> 2888 // lambda0 evaporation >> 2889 amoins = 1.0; >> 2890 zmoins = 0.0; >> 2891 epsiln = slamb0 + eclamb0; >> 2892 pc = std::sqrt(std::pow((1.0 + (eclamb0)/11.1568e2),2.) - 1.0) * 11.1568e2; >> 2893 malpha = 0.0; >> 2894 fgamma = 0; >> 2895 fimf = 0; >> 2896 ff = 0; >> 2897 flamb0decay = 1; >> 2898 opt->nblan0 = opt->nblan0 -1; >> 2899 NbLam0 = NbLam0 -1; >> 2900 gammadecay = 0; >> 2901 jprf=jprflamb0; >> 2902 } >> 2903 else if (x < proba+probhe+probt+probd+probp+probn+problamb0+probg) { >> 2904 // gamma evaporation >> 2905 amoins = 0.0; >> 2906 zmoins = 0.0; >> 2907 epsiln = ecg; >> 2908 pc = ecg; >> 2909 malpha = 0.0; >> 2910 flamb0decay = 0; >> 2911 gammadecay = 1; >> 2912 //Next IF command is to shorten the calculations when gamma-emission is the only >> 2913 //possible channel >> 2914 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; >> 2915 fimf = 0; >> 2916 ff = 0; >> 2917 } >> 2918 else if (x < proba+probhe+probt+probd+probp+probn+problamb0+probg+probimf) { >> 2919 // imf evaporation >> 2920 // AIMF and ZIMF obtained from complete procedure (integration over all >> 2921 // possible Gamma(IMF) and then randomly picked >> 2922 >> 2923 G4int iloop=0; >> 2924 dir1973: >> 2925 imf(af,zf,tcn,ee,&zimf,&aimf,&bimf,&sbimf,&timf,jprf); >> 2926 iloop++; >> 2927 if(iloop>100)std::cout << "Problem in EVAPORA: IMF called > 100 times" << std::endl; >> 2928 if(zimf>=(zf-2.0)) goto dir1973; >> 2929 if(zimf>zf/2.0){ >> 2930 zimf = zf - zimf; >> 2931 aimf = af - aimf; >> 2932 } >> 2933 // These cases should in principle never happen >> 2934 if(zimf==0.0 || aimf==0.0 || sbimf>ee)std::cout << "warning: Look in EVAPORA CALL IMF" << std::endl; >> 2935 >> 2936 // I sample the total kinetic energy consumed by the system of two nuclei >> 2937 // from the distribution determined with the temperature at saddle point >> 2938 // TKEIMF is the kinetic energy in the centre of mass of IMF and its partner >> 2939 >> 2940 G4int ii=0; >> 2941 dir1235: >> 2942 tkeimf= fmaxhaz(timf); >> 2943 ii++; >> 2944 if(ii>100){ >> 2945 tkeimf=min(2.0*timf,ee-sbimf); >> 2946 goto dir1000; >> 2947 } >> 2948 if(tkeimf<=0.0)goto dir1235; >> 2949 if(tkeimf>(ee-sbimf) && timf>0.5)goto dir1235; >> 2950 dir1000: >> 2951 tkeimf = tkeimf + bimf; >> 2952 >> 2953 amoins = aimf; >> 2954 zmoins = zimf; >> 2955 epsiln = (sbimf-bimf) + tkeimf; >> 2956 pc = 0.0; >> 2957 malpha = 0.0; >> 2958 fgamma = 0; >> 2959 fimf = 1; >> 2960 ff = 0; >> 2961 flamb0decay = 0; >> 2962 gammadecay = 0; >> 2963 } >> 2964 else { >> 2965 // fission >> 2966 // in case of fission-events the fragment nucleus is the mother nucleus >> 2967 // before fission occurs with excitation energy above the fis.- barrier. >> 2968 // fission fragment mass distribution is calulated in subroutine fisdis >> 2969 >> 2970 amoins = 0.0; >> 2971 zmoins = 0.0; >> 2972 epsiln = ef; >> 2973 // >> 2974 malpha = 0.0; >> 2975 pc = 0.0; >> 2976 ff = 1; >> 2977 fimf = 0; >> 2978 fgamma = 0; >> 2979 flamb0decay = 0; >> 2980 gammadecay = 0; >> 2981 } >> 2982 // >> 2983 direct99: >> 2984 if (ee <= 0.01)ee = 0.01; >> 2985 // Davide Mancusi (DM) - 2010 >> 2986 if(gammadecay==1 && ee<(epsiln+0.010)){ 3671 epsiln = ee - 0.010; 2987 epsiln = ee - 0.010; 3672 // fgamma = 1; << 2988 // fgamma = 1; 3673 } << 2989 } 3674 2990 3675 if (epsiln < 0.0) << 2991 if(epsiln<0.0){ 3676 { << 2992 std::cout << "***WARNING epsilon<0***" << std::endl; 3677 std::cout << "***WARNING epsilon<0*** << 2993 //epsiln=0.; 3678 // epsiln=0.; << 2994 //PRINT*,IDECAYMODE,IDNINT(AF),IDNINT(ZF),EE,EPSILN 3679 // PRINT*,IDECAYMODE,IDNINT(AF),IDNIN << 2995 } 3680 } << 2996 // calculation of the daughter nucleus 3681 // calculation of the daughter nucleus << 2997 af = af - amoins; 3682 af = af - amoins; << 2998 zf = zf - zmoins; 3683 zf = zf - zmoins; << 2999 ee = ee - epsiln; 3684 ee = ee - epsiln; << 3000 if (ee <= 0.01)ee = 0.01; 3685 if (ee <= 0.01) << 3001 mtota = mtota + malpha; 3686 ee = 0.01; << 3002 3687 mtota = mtota + malpha; << 3003 3688 << 3004 //if(amoins==2 && zmoins==0)std::cout << ee << std::endl; 3689 // if(amoins==2 && zmoins==0)std::cout << << 3005 3690 << 3006 3691 secondneutron: << 3007 secondneutron: 3692 if (amoins == 2 && zmoins == 0) << 3008 if(amoins==2 && zmoins==0){twon=1;amoins=1;}else{ twon=0;} 3693 { << 3009 3694 twon = 1; << 3010 3695 amoins = 1; << 3011 // Determination of x,y,z components of momentum from known emission momentum PC 3696 } << 3012 if(ff==0 && fimf==0){ 3697 else << 3013 // 3698 { << 3014 if(flamb0decay==1){ 3699 twon = 0; << 3015 EV_TEMP[IEV_TAB_TEMP][0] = 0.; 3700 } << 3016 EV_TEMP[IEV_TAB_TEMP][1] = -2; 3701 << 3017 EV_TEMP[IEV_TAB_TEMP][5] = 1.; 3702 // Determination of x,y,z components of m << 3018 }else{ 3703 // PC << 3019 EV_TEMP[IEV_TAB_TEMP][0] = zmoins; 3704 if (ff == 0 && fimf == 0) << 3020 EV_TEMP[IEV_TAB_TEMP][1] = amoins; 3705 { << 3021 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 } 3022 } 3719 rnd = G4AblaRandom::flat(); 3023 rnd = G4AblaRandom::flat(); 3720 ctet1 = 2.0 * rnd - 1.0; << 3024 ctet1 = 2.0*rnd - 1.0; // z component: uniform probability between -1 and 1 3721 stet1 = std::sqrt(1.0 - std::pow(ctet << 3025 stet1 = std::sqrt(1.0 - std::pow(ctet1,2)); // component perpendicular to z 3722 rnd = G4AblaRandom::flat(); 3026 rnd = G4AblaRandom::flat(); 3723 phi1 = rnd * 2.0 * 3.141592654; << 3027 phi1 = rnd*2.0*3.141592654; // angle in x-y plane: uniform probability between 0 and 2*pi 3724 << 3028 G4double xcv = stet1*std::cos(phi1);// x component 3725 G4double xcv = stet1 * std::cos(phi1) << 3029 G4double ycv = stet1*std::sin(phi1);// y component 3726 G4double ycv = stet1 * std::sin(phi1) << 3030 G4double zcv = ctet1; // z component 3727 G4double zcv = ctet1; << 3031 // In the CM system 3728 << 3032 if(gammadecay==0){ 3729 if (gammadecay == 0) << 3033 // Light particle 3730 { << 3034 G4double ETOT_LP = std::sqrt(pc*pc + amoins*amoins * mu2); 3731 // Light particle << 3035 if(flamb0decay==1)ETOT_LP = std::sqrt(pc*pc + 1115.683*1115.683); 3732 G4double ETOT_LP = std::sqrt(pc * << 3036 EV_TEMP[IEV_TAB_TEMP][2] = c * pc * xcv / ETOT_LP; 3733 if (flamb0decay == 1) << 3037 EV_TEMP[IEV_TAB_TEMP][3] = c * pc * ycv / ETOT_LP; 3734 ETOT_LP = std::sqrt(pc * pc + << 3038 EV_TEMP[IEV_TAB_TEMP][4] = c * pc * zcv / ETOT_LP; 3735 EV_TEMP[IEV_TAB_TEMP][2] = c * pc << 3039 }else{ 3736 EV_TEMP[IEV_TAB_TEMP][3] = c * pc << 3040 // gamma ray 3737 EV_TEMP[IEV_TAB_TEMP][4] = c * pc << 3041 EV_TEMP[IEV_TAB_TEMP][2] = pc * xcv; 3738 } << 3042 EV_TEMP[IEV_TAB_TEMP][3] = pc * ycv; 3739 else << 3043 EV_TEMP[IEV_TAB_TEMP][4] = pc * zcv; 3740 { << 3044 } 3741 // gamma ray << 3045 G4double VXOUT=0.,VYOUT=0.,VZOUT=0.; 3742 EV_TEMP[IEV_TAB_TEMP][2] = pc * x << 3046 lorentz_boost(vxeva,vyeva,vleva, 3743 EV_TEMP[IEV_TAB_TEMP][3] = pc * y << 3047 EV_TEMP[IEV_TAB_TEMP][2],EV_TEMP[IEV_TAB_TEMP][3], 3744 EV_TEMP[IEV_TAB_TEMP][4] = pc * z << 3048 EV_TEMP[IEV_TAB_TEMP][4], 3745 } << 3049 &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; 3050 EV_TEMP[IEV_TAB_TEMP][2] = VXOUT; 3757 EV_TEMP[IEV_TAB_TEMP][3] = VYOUT; 3051 EV_TEMP[IEV_TAB_TEMP][3] = VYOUT; 3758 EV_TEMP[IEV_TAB_TEMP][4] = VZOUT; 3052 EV_TEMP[IEV_TAB_TEMP][4] = VZOUT; 3759 // Heavy residue << 3053 // Heavy residue 3760 if (gammadecay == 0) << 3054 if(gammadecay==0){ 3761 { << 3055 G4double v2 = std::pow(EV_TEMP[IEV_TAB_TEMP][2],2.) + 3762 G4double v2 = std::pow(EV_TEMP[IE << 3056 std::pow(EV_TEMP[IEV_TAB_TEMP][3],2.) + 3763 std::pow(EV_TEMP[IE << 3057 std::pow(EV_TEMP[IEV_TAB_TEMP][4],2.); 3764 G4double gamma = 1.0 / std::sqrt( << 3058 G4double gamma = 1.0/std::sqrt(1.0 - v2 / (c*c)); 3765 G4double etot_lp = amoins * mu * << 3059 G4double etot_lp = amoins*mu * gamma; 3766 pxeva = pxeva - EV_TEMP[IEV_TAB_T << 3060 pxeva = pxeva - EV_TEMP[IEV_TAB_TEMP][2] * etot_lp / c; 3767 pyeva = pyeva - EV_TEMP[IEV_TAB_T << 3061 pyeva = pyeva - EV_TEMP[IEV_TAB_TEMP][3] * etot_lp / c; 3768 pleva = pleva - EV_TEMP[IEV_TAB_T << 3062 pleva = pleva - EV_TEMP[IEV_TAB_TEMP][4] * etot_lp / c; 3769 } << 3063 }else{ 3770 else << 3064 // in case of gammas, EV_TEMP contains momentum components and not velocity 3771 { << 3065 pxeva = pxeva - EV_TEMP[IEV_TAB_TEMP][2]; 3772 // in case of gammas, EV_TEMP con << 3066 pyeva = pyeva - EV_TEMP[IEV_TAB_TEMP][3]; 3773 // velocity << 3067 pleva = pleva - EV_TEMP[IEV_TAB_TEMP][4]; 3774 pxeva = pxeva - EV_TEMP[IEV_TAB_T << 3068 } 3775 pyeva = pyeva - EV_TEMP[IEV_TAB_T << 3069 G4double pteva = std::sqrt(pxeva*pxeva + pyeva*pyeva); 3776 pleva = pleva - EV_TEMP[IEV_TAB_T << 3070 // To be checked: 3777 } << 3071 G4double etot = std::sqrt ( pleva*pleva + pteva*pteva + af*af * mu2 ); 3778 G4double pteva = std::sqrt(pxeva * px << 3072 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; 3073 vyeva = c * pyeva / etot; 3783 vleva = c * pleva / etot; 3074 vleva = c * pleva / etot; 3784 IEV_TAB_TEMP = IEV_TAB_TEMP + 1; 3075 IEV_TAB_TEMP = IEV_TAB_TEMP + 1; 3785 } << 3076 } 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 3077 3820 void G4Abla::direct(G4double zprf, << 3078 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 3079 4356 if (mod(j, 2) == 1 && mod(k, << 3080 // condition for end of evaporation 4357 { << 3081 if (zf < 3. || (ff == 1) || (fgamma == 1) || (fimf==1)) { 4358 if (j >= 144) << 3082 goto evapora100; 4359 { << 3083 } 4360 ef = ef - (13.662 * ( << 3084 goto evapora10; 4361 } << 3085 4362 } << 3086 evapora100: 4363 } << 3087 (*zf_par) = zf; 4364 } << 3088 (*af_par) = af; 4365 else << 3089 (*ee_par) = ee; 4366 { << 3090 (*faimf) = aimf; 4367 ef = G4double(sbfis); << 3091 (*fzimf) = zimf; 4368 } << 3092 (*jprfout) = jprf; 4369 // << 3093 (*tkeimf_par) = tkeimf; 4370 // TO AVOID NEGATIVE VALUES FOR IMPOS << 3094 (*mtota_par) = mtota; 4371 // THE FISSION BARRIER IS SET TO ZERO << 3095 (*vleva_par) = vleva; 4372 // << 3096 (*vxeva_par) = vxeva; 4373 if (ef < 0.0) << 3097 (*vyeva_par) = vyeva; 4374 ef = 0.0; << 3098 (*ff_par) = ff; 4375 fb->efa[j][k] = ef; << 3099 (*fimf_par) = fimf; 4376 // << 3100 (*inttype_par) = inttype; 4377 // Hyper-fission barrier << 3101 (*iev_tab_temp_par)= IEV_TAB_TEMP; 4378 // << 3102 (*inum_par) = inum; 4379 if (NbLam0 > 0) << 3103 (*NbLam0_par) = NbLam0; 4380 { << 3104 return; 4381 ef = ef + 0.51 * (1115. - 938. + << 3105 } 4382 } << 3106 4383 // << 3107 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 << 3108 { 4385 // << 3109 G4double probp = (*probp_par); 4386 (*ef_par) = ef; << 3110 G4double probd = (*probd_par); 4387 // << 3111 G4double probt = (*probt_par); 4388 // calculation of surface and curvatu << 3112 G4double probn = (*probn_par); 4389 // to calculate the level density par << 3113 G4double probhe = (*probhe_par); 4390 xx = fissility((k + j), k, NbLam0, sn << 3114 G4double proba = (*proba_par); 4391 y = 1.00 - xx; << 3115 G4double probg = (*probg_par); 4392 if (y < 0.0) << 3116 G4double probimf = (*probimf_par); 4393 y = 0.0; << 3117 G4double probf = (*probf_par); 4394 if (y > 1.0) << 3118 G4double problamb0 = (*problamb0_par); 4395 y = 1.0; << 3119 G4double ptotl = (*ptotl_par); 4396 bssp = bipol(1, y); << 3120 G4double sn = (*sn_par); 4397 bksp = bipol(2, y); << 3121 G4double sp = (*sp_par); 4398 } << 3122 G4double sd = (*sd_par); 4399 else << 3123 G4double st = (*st_par); 4400 { << 3124 G4double she = (*she_par); 4401 ef = 1.0e40; << 3125 G4double sa = (*sa_par); 4402 sbfis = 1.0e40; << 3126 G4double slamb0 = 0.0; 4403 bssp = 1.0; << 3127 G4double sbp = (*sbp_par); 4404 bksp = 1.0; << 3128 G4double sbd = (*sbd_par); 4405 } << 3129 G4double sbt = (*sbt_par); 4406 // << 3130 G4double sbhe = (*sbhe_par); 4407 // COMPOUND NUCLEUS LEVEL DENSITY << 3131 G4double sba = (*sba_par); 4408 // << 3132 G4double ecn = (*ecn_par); 4409 // AK 2007 - Now DENSNIV called with cor << 3133 G4double ecp = (*ecp_par); 4410 << 3134 G4double ecd = (*ecd_par); 4411 afp = idnint(a); << 3135 G4double ect = (*ect_par); 4412 iz = idnint(zprf); << 3136 G4double eche = (*eche_par); 4413 in = afp - iz; << 3137 G4double eca = (*eca_par); 4414 bshell = ecld->ecgnz[in][iz] - ecld->vgsl << 3138 G4double ecg = (*ecg_par); 4415 defbet = ecld->beta2[in][iz]; << 3139 G4double eclamb0 = (*eclamb0_par); 4416 << 3140 G4double bp = (*bp_par); 4417 iinert = 0.4 * 931.49 * 1.16 * 1.16 * std << 3141 G4double bd = (*bd_par); 4418 erot = jprf * jprf * 197.328 * 197.328 / << 3142 G4double bt = (*bt_par); 4419 erotcn = erot; << 3143 G4double bhe = (*bhe_par); 4420 << 3144 G4double ba = (*ba_par); 4421 bsbkbc(a, zprf, &bscn, &bkcn, &bccn); << 3145 G4double tsum = (*tsum_par); 4422 << 3146 4423 // if(ee > erot+emin){ << 3147 // CALCULATION OF PARTICLE-EMISSION PROBABILITIES & FISSION / 4424 densniv( << 3148 // BASED ON THE SIMPLIFIED FORMULAS FOR THE DECAY WIDTH BY / 4425 a, zprf, ee, 0.0, &densg, bshell, bsc << 3149 // MORETTO, ROCHESTER MEETING TO AVOID COMPUTING TIME / 4426 ftcn = temp; << 3150 // INTENSIVE INTEGRATION OF THE LEVEL DENSITIES / 4427 /* << 3151 // USES EFFECTIVE COULOMB BARRIERS AND AN AVERAGE KINETIC ENERGY/ 4428 //ecorcn = ecor; << 3152 // OF THE EVAPORATED PARTICLES / >> 3153 // COLLECTIVE ENHANCMENT OF THE LEVEL DENSITY IS INCLUDED / >> 3154 // DYNAMICAL HINDRANCE OF FISSION IS INCLUDED BY A STEP FUNCTION/ >> 3155 // APPROXIMATION. SEE A.R. JUNGHANS DIPLOMA THESIS / >> 3156 // SHELL AND PAIRING STRUCTURES IN THE LEVEL DENSITY IS INCLUDED/ >> 3157 >> 3158 // INPUT: >> 3159 // ZPRF,A,EE CHARGE, MASS, EXCITATION ENERGY OF COMPOUND >> 3160 // NUCLEUS >> 3161 // JPRF ROOT-MEAN-SQUARED ANGULAR MOMENTUM >> 3162 >> 3163 // DEFORMATIONS AND G.S. SHELL EFFECTS >> 3164 // COMMON /ECLD/ ECGNZ,ECFNZ,VGSLD,ALPHA >> 3165 >> 3166 // ECGNZ - GROUND STATE SHELL CORR. FRLDM FOR A SPHERICAL G.S. >> 3167 // ECFNZ - SHELL CORRECTION FOR THE SADDLE POINT (NOW: == 0) >> 3168 // VGSLD - DIFFERENCE BETWEEN DEFORMED G.S. AND LDM VALUE >> 3169 // ALPHA - ALPHA GROUND STATE DEFORMATION (THIS IS NOT BETA2!) >> 3170 // BETA2 = SQRT((4PI)/5) * ALPHA >> 3171 >> 3172 //OPTIONS AND PARAMETERS FOR FISSION CHANNEL >> 3173 //COMMON /FISS/ AKAP,BET,HOMEGA,KOEFF,IFIS, >> 3174 // OPTSHP,OPTXFIS,OPTLES,OPTCOL >> 3175 // >> 3176 // AKAP - HBAR**2/(2* MN * R_0**2) = 10 MEV, R_0 = 1.4 FM >> 3177 // BET - REDUCED NUCLEAR FRICTION COEFFICIENT IN (10**21 S**-1) >> 3178 // HOMEGA - CURVATURE OF THE FISSION BARRIER = 1 MEV >> 3179 // KOEFF - COEFFICIENT FOR THE LD FISSION BARRIER == 1.0 >> 3180 // IFIS - 0/1 FISSION CHANNEL OFF/ON >> 3181 // OPTSHP - INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY >> 3182 // = 0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY >> 3183 // = 1 SHELL , NO PAIRING >> 3184 // = 2 PAIRING, NO SHELL >> 3185 // = 3 SHELL AND PAIRING >> 3186 // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT SWITCHED ON/OFF >> 3187 // OPTXFIS- 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV >> 3188 // FISSILITY PARAMETER. >> 3189 // OPTLES - CONSTANT TEMPERATURE LEVEL DENSITY FOR A,Z > TH-224 >> 3190 // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT OFF/ON >> 3191 >> 3192 // LEVEL DENSITY PARAMETERS >> 3193 // COMMON /ALD/ AV,AS,AK,OPTAFAN >> 3194 // AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE >> 3195 // LEVEL DENSITY PARAMETER >> 3196 // OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1 >> 3197 // RECOMMENDED IS OPTAFAN = 0 >> 3198 >> 3199 // FISSION BARRIERS >> 3200 // COMMON /FB/ EFA >> 3201 // EFA - ARRAY OF FISSION BARRIERS >> 3202 >> 3203 >> 3204 // OUTPUT: PROBN,PROBP,PROBA,PROBF,PTOTL: >> 3205 // - EMISSION PROBABILITIES FOR N EUTRON, P ROTON, A LPHA >> 3206 // PARTICLES, F ISSION AND NORMALISATION >> 3207 // SN,SBP,SBA: SEPARATION ENERGIES N P A >> 3208 // INCLUDING EFFECTIVE BARRIERS >> 3209 // ECN,ECP,ECA,BP,BA >> 3210 // - AVERAGE KINETIC ENERGIES (2*T) AND EFFECTIVE BARRIERS >> 3211 >> 3212 G4double bk = 0.0; >> 3213 G4double bksp = 0.0; >> 3214 G4double bc = 0.0; >> 3215 G4int afp = 0; >> 3216 G4double het = 0.0; >> 3217 G4double at = 0.0; >> 3218 G4double bs = 0.0; >> 3219 G4double bssp = 0.0; >> 3220 G4double bshell = 0.0; >> 3221 G4double cf = 0.0; >> 3222 G4double defbet = 0.0; >> 3223 G4double densa = 0.0; >> 3224 G4double denshe = 0.0; >> 3225 G4double densg = 0.0; >> 3226 G4double densn = 0.0; >> 3227 G4double densp = 0.0; >> 3228 G4double densd = 0.0; >> 3229 G4double denst = 0.0; >> 3230 G4double denslamb0 = 0.0; >> 3231 G4double eer = 0.0; >> 3232 G4double ecor = 0.0; >> 3233 G4double ef = 0.0; >> 3234 G4double ft = 0.0; >> 3235 G4double timf = 0.0; >> 3236 G4double qr = 0.0; >> 3237 G4double qrcn = 0.0; >> 3238 G4double omegap=0.0; >> 3239 G4double omegad=0.0; >> 3240 G4double omegat=0.0; >> 3241 G4double omegahe=0.0; >> 3242 G4double omegaa=0.0; >> 3243 G4double ga = 0.0; >> 3244 G4double ghe = 0.0; >> 3245 G4double gf = 0.0; >> 3246 G4double gff = 0.0; >> 3247 G4double gn = 0.0; >> 3248 G4double gp = 0.0; >> 3249 G4double gd = 0.0; >> 3250 G4double gt = 0.0; >> 3251 G4double gg = 0.0; >> 3252 G4double glamb0 = 0.0; >> 3253 G4double gimf = 0.0; >> 3254 G4double gimf3 = 0.0; >> 3255 G4double gimf5 = 0.0; >> 3256 G4double bimf = 0.0; >> 3257 G4double bsimf = 0.0; >> 3258 G4double sbimf = 0.0; >> 3259 G4double densimf = 0.0; >> 3260 G4double defbetimf = 0.0; >> 3261 G4double b_imf = 0.0; >> 3262 G4double a_imf = 0.0; >> 3263 G4double omegaimf = 0.0; >> 3264 G4int izimf = 0; >> 3265 G4double zimf = 0.0; >> 3266 G4double gsum = 0.0; >> 3267 G4double gtotal=0.0; >> 3268 G4double hbar = 6.582122e-22; >> 3269 G4double emin = 0.0; >> 3270 G4int il = 0; >> 3271 G4int choice_fisspart = 0; >> 3272 G4double t_lapse=0.0; >> 3273 G4int imaxwell = 0; >> 3274 G4int in = 0; >> 3275 G4int iz = 0; >> 3276 G4int ind = 0; >> 3277 G4int izd = 0; >> 3278 G4int j = 0; >> 3279 G4int k = 0; >> 3280 G4double ma1z = 0.0; >> 3281 G4double mazz = 0.0; >> 3282 G4double ma2z = 0.0; >> 3283 G4double ma1z1 = 0.0; >> 3284 G4double ma2z1 = 0.0; >> 3285 G4double ma3z1 = 0.0; >> 3286 G4double ma3z2 = 0.0; >> 3287 G4double ma4z2 = 0.0; >> 3288 G4double maz = 0.0; >> 3289 G4double nt = 0.0; >> 3290 G4double pi = 3.1415926535; >> 3291 G4double pt = 0.0; >> 3292 G4double dt = 0.0; >> 3293 G4double tt = 0.0; >> 3294 G4double lamb0t = 0.0; >> 3295 G4double gtemp = 0.0; >> 3296 G4double rdt = 0.0; >> 3297 G4double rtt = 0.0; >> 3298 G4double rat = 0.0; >> 3299 G4double rhet = 0.0; >> 3300 G4double refmod = 0.0; >> 3301 G4double rnt = 0.0; >> 3302 G4double rpt = 0.0; >> 3303 G4double rlamb0t = 0.0; >> 3304 G4double sbfis = 1.e40; >> 3305 G4double segs = 0.0; >> 3306 G4double selmax = 0.0; >> 3307 G4double tauc = 0.0; >> 3308 G4double temp = 0.0; >> 3309 G4double ts1 = 0.0; >> 3310 G4double xx = 0.0; >> 3311 G4double y = 0.0; >> 3312 G4double k1 = 0.0; >> 3313 G4double omegasp=0.0; >> 3314 G4double homegasp=0.0; >> 3315 G4double omegags=0.0; >> 3316 G4double homegags=0.0; >> 3317 G4double pa = 0.0; >> 3318 G4double gamma = 0.0; >> 3319 G4double gfactor = 0.0; >> 3320 G4double bscn; >> 3321 G4double bkcn; >> 3322 G4double bccn; >> 3323 G4double ftcn=0.0; >> 3324 G4double mfcd; >> 3325 G4double jprfn=jprf; >> 3326 G4double jprfp=jprf; >> 3327 G4double jprfd=jprf; >> 3328 G4double jprft=jprf; >> 3329 G4double jprfhe=jprf; >> 3330 G4double jprfa=jprf; >> 3331 G4double jprflamb0=jprf; >> 3332 G4double djprf=0.0; >> 3333 G4double dlout=0.0; >> 3334 G4double sdlout=0.0; >> 3335 G4double iinert=0.0; >> 3336 G4double erot=0.0; >> 3337 G4double erotn=0.0; >> 3338 G4double erotp=0.0; >> 3339 G4double erotd=0.0; >> 3340 G4double erott=0.0; >> 3341 G4double erothe=0.0; >> 3342 G4double erota=0.0; >> 3343 G4double erotlamb0=0.0; >> 3344 G4double erotcn=0.0; >> 3345 // G4double ecorcn=0.0; >> 3346 G4double imfarg=0.0; >> 3347 G4double width_imf=0.0; >> 3348 G4int IDjprf=0; >> 3349 G4int fimf_allowed=opt->optimfallowed; >> 3350 >> 3351 if(itest==1){ >> 3352 >> 3353 } >> 3354 // Switch to calculate Maxwellian distribution of kinetic energies >> 3355 imaxwell = 1; >> 3356 *sortie = 0; >> 3357 >> 3358 // just a change of name until the end of this subroutine >> 3359 eer = ee; >> 3360 if (inum == 1) { >> 3361 ilast = 1; >> 3362 } >> 3363 // calculation of masses >> 3364 // refmod = 1 ==> myers,swiatecki model >> 3365 // refmod = 0 ==> weizsaecker model >> 3366 refmod = 1; // Default = 1 >> 3367 // >> 3368 if (refmod == 1) { >> 3369 mglms(a,zprf,fiss->optshp,&maz); >> 3370 mglms(a-1.0,zprf,fiss->optshp,&ma1z); >> 3371 mglms(a-2.0,zprf,fiss->optshp,&ma2z); >> 3372 mglms(a-1.0,zprf-1.0,fiss->optshp,&ma1z1); >> 3373 mglms(a-2.0,zprf-1.0,fiss->optshp,&ma2z1); >> 3374 mglms(a-3.0,zprf-1.0,fiss->optshp,&ma3z1); >> 3375 mglms(a-3.0,zprf-2.0,fiss->optshp,&ma3z2); >> 3376 mglms(a-4.0,zprf-2.0,fiss->optshp,&ma4z2); >> 3377 } >> 3378 else { >> 3379 mglw(a,zprf,&maz); >> 3380 mglw(a-1.0,zprf,&ma1z); >> 3381 mglw(a-1.0,zprf-1.0,&ma1z1); >> 3382 mglw(a-2.0,zprf-1.0,&ma2z1); >> 3383 mglw(a-3.0,zprf-1.0,&ma3z1); >> 3384 mglw(a-3.0,zprf-2.0,&ma3z2); >> 3385 mglw(a-4.0,zprf-2.0,&ma4z2); >> 3386 } >> 3387 >> 3388 if((a-1.)==3.0 && (zprf-1.0)==2.0) ma1z1=-7.7181660; >> 3389 if((a-1.)==4.0 && (zprf-1.0)==2.0) ma1z1=-28.295992; >> 3390 >> 3391 // separation energies >> 3392 sn = ma1z - maz; >> 3393 sp = ma1z1 - maz; >> 3394 sd = ma2z1 - maz - 2.2246; >> 3395 st = ma3z1 - maz - 8.481977; >> 3396 she = ma3z2 - maz - 7.7181660; >> 3397 sa = ma4z2 - maz - 28.295992; >> 3398 // >> 3399 if(NbLam0>1){ >> 3400 sn = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf,NbLam0); >> 3401 sp = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf-1.,NbLam0); >> 3402 sd = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-2.,zprf-1.,NbLam0); >> 3403 st = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-1.,NbLam0); >> 3404 she = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-2.,NbLam0); >> 3405 sa = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-4.,zprf-2.,NbLam0); >> 3406 slamb0 = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf,NbLam0-1); >> 3407 } >> 3408 if(NbLam0==1){ >> 3409 G4double deltasn = sn - (gethyperbinding(a,zprf,0)-gethyperbinding(a-1.,zprf,0)); >> 3410 G4double deltasp = sp - (gethyperbinding(a,zprf,0)-gethyperbinding(a-1.,zprf-1,0)); >> 3411 G4double deltasd = sd - (gethyperbinding(a,zprf,0)-gethyperbinding(a-2.,zprf-1,0)); >> 3412 G4double deltast = st - (gethyperbinding(a,zprf,0)-gethyperbinding(a-3.,zprf-1,0)); >> 3413 G4double deltashe = she - (gethyperbinding(a,zprf,0)-gethyperbinding(a-3.,zprf-2,0)); >> 3414 G4double deltasa = sa - (gethyperbinding(a,zprf,0)-gethyperbinding(a-4.,zprf-2,0)); >> 3415 >> 3416 sn = deltasn + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf,NbLam0); >> 3417 sp = deltasp + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf-1.,NbLam0); >> 3418 sd = deltasd + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-2.,zprf-1.,NbLam0); >> 3419 st = deltast + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-1.,NbLam0); >> 3420 she = deltashe + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-2.,NbLam0); >> 3421 sa = deltasa + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-4.,zprf-2.,NbLam0); >> 3422 slamb0 = gethyperseparation(a,zprf,NbLam0); >> 3423 } >> 3424 >> 3425 // coulomb barriers >> 3426 //Proton >> 3427 if (zprf <= 1.0e0 || a <= 1.0e0 || (a-zprf) < 0.0) { >> 3428 sbp = 1.0e75; >> 3429 bp = 1.0e75; >> 3430 }else{ >> 3431 barrs(idnint(zprf-1.),idnint(a-1.),1,1,&bp,&omegap); >> 3432 bp = max(bp,0.1); >> 3433 sbp = sp + bp; >> 3434 } >> 3435 >> 3436 //Deuteron >> 3437 if (zprf <= 1.0e0 || a <= 2.0e0 || (a-zprf) < 1.0) { >> 3438 sbd = 1.0e75; >> 3439 bd = 1.0e75; >> 3440 }else{ >> 3441 barrs(idnint(zprf-1.),idnint(a-2.),1,2,&bd,&omegad); >> 3442 bd = max(bd,0.1); >> 3443 sbd = sd + bd; >> 3444 } >> 3445 >> 3446 //Triton >> 3447 if (zprf <= 1.0e0 || a <= 3.0e0 || (a-zprf) < 2.0) { >> 3448 sbt = 1.0e75; >> 3449 bt = 1.0e75; >> 3450 }else{ >> 3451 barrs(idnint(zprf-1.),idnint(a-3.),1,3,&bt,&omegat); >> 3452 bt = max(bt,0.1); >> 3453 sbt = st + bt; >> 3454 } >> 3455 >> 3456 //Alpha >> 3457 if (a-4.0<=0.0 || zprf<=2.0 || (a-zprf)<2.0) { >> 3458 sba = 1.0e+75; >> 3459 ba = 1.0e+75; >> 3460 }else{ >> 3461 barrs(idnint(zprf-2.),idnint(a-4.),2,4,&ba,&omegaa); >> 3462 ba = max(ba,0.1); >> 3463 sba = sa + ba; >> 3464 } >> 3465 >> 3466 //He3 >> 3467 if (a-3.0 <= 0.0 || zprf<=2.0 || (a-zprf)<1.0) { >> 3468 sbhe = 1.0e+75; >> 3469 bhe = 1.0e+75; >> 3470 }else{ >> 3471 barrs(idnint(zprf-2.),idnint(a-3.),2,3,&bhe,&omegahe); >> 3472 bhe = max(bhe,0.1); >> 3473 sbhe = she + bhe; >> 3474 } >> 3475 >> 3476 // Dealing with particle-unbound systems >> 3477 emin = dmin1(sba,sbhe,dmin1(sbt,sbhe,dmin1(sn,sbp,sbd))); >> 3478 >> 3479 if(emin<=0.0){ >> 3480 *sortie = 1; >> 3481 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); >> 3482 goto direct70; >> 3483 } >> 3484 // >> 3485 k = idnint(zprf); >> 3486 j = idnint(a - zprf); >> 3487 if (fiss->ifis > 0) { >> 3488 // now ef is calculated from efa that depends on the subroutine >> 3489 // barfit which takes into account the modification on the ang. mom. >> 3490 // note *** shell correction (ecgnz) >> 3491 il = idnint(jprf); >> 3492 barfit(k,k+j,il,&sbfis,&segs,&selmax); >> 3493 if ((fiss->optshp == 1) || (fiss->optshp == 3)) { >> 3494 ef = G4double(sbfis) - ecld->ecgnz[j][k]; >> 3495 // JLRS - Nov 2016 - Corrected values of fission barriers for actinides >> 3496 if(k==90){ >> 3497 if(mod(j,2)==1){ >> 3498 ef = ef*(4.5114-2.2687*(a-zprf)/zprf); 4429 }else{ 3499 }else{ 4430 // If EE < EROT, only gamma emission can << 3500 ef = ef*(3.3931-1.5338*(a-zprf)/zprf); 4431 probf = 0.0; << 3501 } 4432 probp = 0.0; << 3502 } 4433 probd = 0.0; << 3503 if(k==92){ 4434 probt = 0.0; << 3504 if((a-zprf)/zprf>1.52)ef=ef*(1.1222-0.10886*(a-zprf)/zprf)-0.1; 4435 probn = 0.0; << 3505 } 4436 probhe = 0.0; << 3506 if(k>=94&&k<=98&&j<158){// Data in this range have been tested 4437 proba = 0.0; << 3507 // e-e 4438 probg = 1.0; << 3508 if(mod(j,2)==0&&mod(k,2)==0){ 4439 probimf = 0.0; << 3509 if(k>=94){ef = ef-(11.54108*(a-zprf)/zprf-18.074);} 4440 //c JLRS 03/2017 - Added this calculation << 3510 } 4441 //C According to A. Ignatyuk, GG : << 3511 // O-O 4442 //C Here BS=BK=1, as this was assumed in << 3512 if(mod(j,2)==1&&mod(k,2)==1){ 4443 pa = (ald->av)*a + (ald->as)*std << 3513 if(k>=95){ef = ef-(14.567*(a-zprf)/zprf-23.266);} 4444 (ald->ak)*std::pow(a,1./3.); gamma = 2.5 << 3514 } 4445 = 1.+gamma*ecld->ecgnz[in][iz]; if(gfacto << 3515 // Odd A 4446 } << 3516 if(mod(j,2)==0&&mod(k,2)==1){ 4447 // << 3517 if(j>=144){ef = ef-(13.662*(a-zprf)/zprf-21.656);} 4448 gtemp = 17.60/(std::pow(a,0.699) << 3518 } 4449 ecg = 4.0 * gtemp; << 3519 4450 // << 3520 if(mod(j,2)==1&&mod(k,2)==0){ 4451 goto direct70; << 3521 if(j>=144){ef = ef-(13.662*(a-zprf)/zprf-21.656);} 4452 } << 3522 } 4453 */ << 3523 } 4454 << 3524 } 4455 // ------------------------------------- << 3525 else { 4456 // LEVEL DENSITIES AND TEMPERATURE << 3526 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 } 3527 } 4967 else << 3528 // 4968 { << 3529 // TO AVOID NEGATIVE VALUES FOR IMPOSSIBLE NUCLEI 4969 denshe = 0.0; << 3530 // THE FISSION BARRIER IS SET TO ZERO IF SMALLER THAN ZERO. 4970 eche = 0.0; << 3531 // 4971 het = 0.0; << 3532 if (ef < 0.0)ef = 0.0; 4972 } << 3533 fb->efa[j][k]=ef; 4973 exi1005: << 3534 // 4974 << 3535 // Hyper-fission barrier 4975 // LEVEL DENSITY AND TEMPERATURE IN THE L << 3536 // 4976 // << 3537 if(NbLam0>0){ 4977 // - Reduction of angular momentum due to << 3538 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 } 3539 } 5050 else << 3540 // 5051 { << 3541 // Set fission barrier 5052 denslamb0 = 0.0; << 3542 // 5053 eclamb0 = 0.0; << 3543 (*ef_par) = ef; 5054 lamb0t = 0.0; << 3544 // 5055 } << 3545 // calculation of surface and curvature integrals needed to 5056 exi1006: << 3546 // to calculate the level density parameter at the saddle point 5057 << 3547 xx = fissility((k+j),k,NbLam0,sn,slamb0,fiss->optxfis); 5058 // Decay widths for particles << 3548 y = 1.00 - xx; 5059 if (densg > 0.) << 3549 if(y<0.0) y = 0.0; 5060 { << 3550 if(y>1.0) y = 1.0; 5061 // << 3551 bssp = bipol(1,y); 5062 // CALCULATION OF THE PARTIAL DECAY W << 3552 bksp = bipol(2,y); 5063 // USED FOR BOTH THE TIME SCALE AND T << 3553 } 5064 // << 3554 else { 5065 // AKAP = HBAR**2/(2* MN * R_0** << 3555 ef = 1.0e40; 5066 // << 3556 sbfis = 1.0e40; 5067 // AK, KHS 2005 - Energy-dependen inv << 3557 bssp = 1.0; 5068 // of << 3558 bksp = 1.0; 5069 // Coulomb barrier for << 3559 } 5070 // JLRS 2017 - Implementation in abla << 3560 // 5071 << 3561 // COMPOUND NUCLEUS LEVEL DENSITY 5072 if (densn <= 0.0) << 3562 // 5073 { << 3563 // 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 3564 5134 G4int izcn = 0, incn = 0, inmin = 0, << 3565 afp = idnint(a); 5135 G4double aimf, mares, maimf; << 3566 iz = idnint(zprf); >> 3567 in = afp - iz; >> 3568 bshell = ecld->ecgnz[in][iz]- ecld->vgsld[in][iz]; >> 3569 defbet = ecld->beta2[in][iz]; >> 3570 >> 3571 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); >> 3572 erot = jprf * jprf * 197.328 * 197.328 /(2. * iinert); >> 3573 erotcn = erot; >> 3574 >> 3575 bsbkbc(a,zprf,&bscn,&bkcn,&bccn); >> 3576 >> 3577 // if(ee > erot+emin){ >> 3578 densniv(a,zprf,ee,0.0,&densg,bshell,bscn,bkcn,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprf,0,&qrcn); >> 3579 ftcn = temp; >> 3580 /* >> 3581 //ecorcn = ecor; >> 3582 }else{ >> 3583 // If EE < EROT, only gamma emission can take place >> 3584 probf = 0.0; >> 3585 probp = 0.0; >> 3586 probd = 0.0; >> 3587 probt = 0.0; >> 3588 probn = 0.0; >> 3589 probhe = 0.0; >> 3590 proba = 0.0; >> 3591 probg = 1.0; >> 3592 probimf = 0.0; >> 3593 //c JLRS 03/2017 - Added this calculation >> 3594 //C According to A. Ignatyuk, GG : >> 3595 //C Here BS=BK=1, as this was assumed in the parameterization >> 3596 pa = (ald->av)*a + (ald->as)*std::pow(a,2./3.) + (ald->ak)*std::pow(a,1./3.); >> 3597 gamma = 2.5 * pa * std::pow(a,-4./3.); >> 3598 gfactor = 1.+gamma*ecld->ecgnz[in][iz]; >> 3599 if(gfactor<=0.){ >> 3600 gfactor = 0.0; >> 3601 } >> 3602 // >> 3603 gtemp = 17.60/(std::pow(a,0.699) * std::sqrt(gfactor)); >> 3604 ecg = 4.0 * gtemp; >> 3605 // >> 3606 goto direct70; >> 3607 } >> 3608 */ >> 3609 >> 3610 // --------------------------------------------------------------- >> 3611 // LEVEL DENSITIES AND TEMPERATURES OF THE FINAL STATES >> 3612 // --------------------------------------------------------------- >> 3613 // >> 3614 // MVR - in case of charged particle emission temperature >> 3615 // comes from random kinetic energy from a Maxwelliam distribution >> 3616 // if option imaxwell = 1 (otherwise E=2T) >> 3617 // >> 3618 // AK - LEVEL DENSITY AND TEMPERATURE AT THE SADDLE POINT -> now calculated in the subroutine FISSION_WIDTH >> 3619 // >> 3620 // >> 3621 // LEVEL DENSITY AND TEMPERATURE IN THE NEUTRON DAUGHTER >> 3622 // >> 3623 // KHS, AK 2007 - Reduction of angular momentum due to orbital angular momentum of emitted fragment >> 3624 // JLRS Nov-2016 - Added these caculations in abla++ 5136 3625 5137 if (fimf_allowed == 0 || zprf <= 5.0 << 3626 if (in >= 2) { 5138 { << 3627 ind=idnint(a)-idnint(zprf)-1; 5139 gimf = 0.0; << 3628 izd=idnint(zprf); 5140 } << 3629 if(jprf>0.10){ 5141 else << 3630 lorb(a,a-1.,jprf,ee-sn,&dlout,&sdlout); 5142 { << 3631 djprf = gausshaz(1,dlout,sdlout); 5143 // Estimate the total decay << 3632 if(IDjprf==1) djprf = 0.0; 5144 // By using the logarithmic << 3633 jprfn = jprf + djprf; 5145 << 3634 jprfn = dint(std::abs(jprfn)); // The nucleus just turns the other way around 5146 mglms(a, zprf, opt->optshpimf, &m << 3635 } 5147 << 3636 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; 5148 gimf3 = 0.0; << 3637 defbet = ecld->beta2[ind][izd]; 5149 zimf = 3.0; << 3638 5150 izimf = 3; << 3639 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 << 3640 erotn = jprfn * jprfn * 197.328 * 197.328 /(2. * iinert); 5152 izcn = idnint(zprf); // Z of << 3641 bsbkbc(a-1.,zprf,&bs,&bk,&bc); 5153 incn = idnint(a) - izcn; // N of << 3642 5154 << 3643 // level density and temperature in the neutron daughter 5155 isostab_lim(izimf, &inmin, << 3644 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 << 3645 nt = temp; 5157 isostab_lim(izcn - izimf, << 3646 ecn=0.0; 5158 &inmi, << 3647 if(densn>0.){ 5159 &inma); << 3648 G4int IS=0; 5160 << 3649 if(imaxwell == 1){ 5161 inmin = max(inmin, incn - inma); << 3650 rnt = nt; 5162 inmax = min(inmax, incn - inmi); << 3651 dir1234: 5163 << 3652 ecn=fvmaxhaz_neut(rnt); 5164 inmax = max(inmax, inmin); // In << 3653 IS++; 5165 << 3654 if(IS>100){std::cout << "WARNING: FVMAXHAZ_NEUT CALLED MORE THAN 100 TIMES" << std::endl; 5166 for (G4int iaimf = izimf + inmin; << 3655 goto exi1000; 5167 { << 3656 } 5168 aimf = G4double(iaimf); << 3657 if(ecn>(ee-sn)){ 5169 if (aimf >= a || zimf >= zprf << 3658 if((ee-sn)<rnt) 5170 { << 3659 ecn = ee-sn; 5171 width_imf = 0.0; << 3660 else 5172 } << 3661 goto dir1234; 5173 else << 3662 } 5174 { << 3663 if(ecn<=0.0) goto dir1234; 5175 // Q-values << 3664 }else{ 5176 mglms(a - aimf, zprf - zi << 3665 ecn = 2.0 * nt; 5177 mglms(aimf, zimf, opt->op << 3666 } 5178 // Bass barrier << 3667 } 5179 barrs(idnint(zprf - zimf) << 3668 } 5180 sbimf = maimf + mares - m << 3669 else { 5181 // Rotation energy << 3670 densn = 0.0; 5182 defbetimf = ecld->beta2[i << 3671 ecn = 0.0; 5183 ecld->beta2[i << 3672 nt = 0.0; 5184 << 3673 } 5185 iinert = 0.40 * 931.490 * << 3674 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 3675 5333 direct2007: << 3676 // LEVEL DENSITY AND TEMPERATURE IN THE PROTON DAUGHTER 5334 if (gimf < 1.e-10) << 3677 // 5335 gimf = 0.0; << 3678 // Reduction of angular momentum due to orbital angular momentum of emitted fragment 5336 } // if fimf_allowed << 3679 if (iz >= 2) { 5337 // << 3680 ind=idnint(a)-idnint(zprf); 5338 // c JLRS 2016 - Added this calcula << 3681 izd=idnint(zprf)-1; 5339 // C AK 2004 - Gamma width << 3682 if(jprf>0.10){ 5340 // C According to A. Ignatyuk, GG : << 3683 lorb(a,a-1.,jprf,ee-sbp,&dlout,&sdlout); 5341 // C Here BS=BK=1, as this was assume << 3684 djprf = gausshaz(1,dlout,sdlout); 5342 pa = (ald->av) * a + (ald->as) * std: << 3685 if(IDjprf==1) djprf = 0.0; 5343 gamma = 2.5 * pa * std::pow(a, -4. / << 3686 jprfp = jprf + djprf; 5344 gfactor = 1. + gamma * ecld->ecgnz[in << 3687 jprfp = dint(std::abs(jprfp)); // The nucleus just turns the other way around 5345 if (gfactor <= 0.) << 3688 } 5346 { << 3689 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; 5347 gfactor = 0.0; << 3690 defbet =ecld->beta2[ind][izd]; 5348 } << 3691 5349 // << 3692 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) * << 3693 erotp = jprfp * jprfp * 197.328 * 197.328 /(2. * iinert); 5351 // << 3694 5352 // C If one switches gammas off, one << 3695 bsbkbc(a-1.,zprf-1.,&bs,&bk,&bc); 5353 // through the fission barrier. << 3696 5354 gg = 0.624e-9 * std::pow(a, 1.6) * st << 3697 // level density and temperature in the proton daughter 5355 // gammaemission==1 << 3698 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 << 3699 pt = temp; 5357 // c "oridnary" nuclei (A. Ignatyuk, << 3700 ecp = 0.; 5358 if (gammaemission == 1) << 3701 if(densp>0.){ 5359 { << 3702 G4int IS=0; 5360 gg = 2.0 * gg; << 3703 if(imaxwell == 1){ 5361 } << 3704 rpt = pt; 5362 ecg = 4.0 * gtemp; << 3705 dir1235: 5363 // << 3706 ecp=fvmaxhaz(rpt); 5364 // << 3707 IS++; 5365 gsum = ga + ghe + gd + gt + gp + gn + << 3708 if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl; >> 3709 goto exi1001; >> 3710 } >> 3711 if(ecp>(ee-sbp)){ >> 3712 if((ee-sbp)<rpt) >> 3713 ecp = ee-sbp; >> 3714 else >> 3715 goto dir1235; >> 3716 } >> 3717 if(ecp<=0.0) goto dir1235; >> 3718 ecp = ecp + bp; >> 3719 }else{ >> 3720 ecp = 2.0 * pt + bp; >> 3721 } >> 3722 } >> 3723 } >> 3724 else { >> 3725 densp = 0.0; >> 3726 ecp = 0.0; >> 3727 pt = 0.0; >> 3728 } >> 3729 exi1001: 5366 3730 5367 // std::cout << gn << " " << gd << " << 3731 // FINAL LEVEL DENSITY AND TEMPERATURE AFTER DEUTERON EMISSION >> 3732 // >> 3733 // Reduction of angular momentum due to orbital angular momentum of emitted fragment >> 3734 if ((in >= 2) && (iz >= 2)) { >> 3735 ind=idnint(a)-idnint(zprf)-1; >> 3736 izd=idnint(zprf)-1; >> 3737 if(jprf>0.10){ >> 3738 lorb(a,a-2.,jprf,ee-sbd,&dlout,&sdlout); >> 3739 djprf = gausshaz(1,dlout,sdlout); >> 3740 if(IDjprf==1) djprf = 0.0; >> 3741 jprfd = jprf + djprf; >> 3742 jprfd = dint(std::abs(jprfd)); // The nucleus just turns the other way around >> 3743 } >> 3744 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; >> 3745 defbet = ecld->beta2[ind][izd]; >> 3746 >> 3747 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); >> 3748 erotd = jprfd * jprfd * 197.328 * 197.328 /(2. * iinert); >> 3749 >> 3750 bsbkbc(a-2.,zprf-1.,&bs,&bk,&bc); >> 3751 >> 3752 // level density and temperature in the deuteron daughter >> 3753 densniv(a-2.0,zprf-1.0e0,ee,sbd,&densd,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfd,0,&qr); >> 3754 >> 3755 dt = temp; >> 3756 ecd = 0.0; >> 3757 if(densd>0.){ >> 3758 G4int IS=0; >> 3759 if(imaxwell == 1){ >> 3760 rdt = dt; >> 3761 dir1236: >> 3762 ecd=fvmaxhaz(rdt); >> 3763 IS++; >> 3764 if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl; >> 3765 goto exi1002; >> 3766 } >> 3767 if(ecd>(ee-sbd)){ >> 3768 if((ee-sbd)<rdt) >> 3769 ecd = ee-sbd; >> 3770 else >> 3771 goto dir1236; >> 3772 } >> 3773 if(ecd<=0.0) goto dir1236; >> 3774 ecd = ecd + bd; >> 3775 }else{ >> 3776 ecd = 2.0 * dt + bd; >> 3777 } >> 3778 } >> 3779 } >> 3780 else { >> 3781 densd = 0.0; >> 3782 ecd = 0.0; >> 3783 dt = 0.0; >> 3784 } >> 3785 exi1002: 5368 3786 5369 if (gsum > 0.0) << 3787 // FINAL LEVEL DENSITY AND TEMPERATURE AFTER TRITON EMISSION 5370 { << 3788 // 5371 ts1 = hbar / gsum; << 3789 // Reduction of angular momentum due to orbital angular momentum of emitted fragment 5372 } << 3790 if ((in >= 3) && (iz >= 2)) { 5373 else << 3791 ind=idnint(a)-idnint(zprf)-2; 5374 { << 3792 izd=idnint(zprf)-1; 5375 ts1 = 1.0e99; << 3793 if(jprf>0.10){ 5376 goto direct69; << 3794 lorb(a,a-3.,jprf,ee-sbt,&dlout,&sdlout); 5377 } << 3795 djprf = gausshaz(1,dlout,sdlout); 5378 // << 3796 if(IDjprf==1) djprf = 0.0; 5379 // Case of nuclei below Businaro-Gall << 3797 jprft = jprf + djprf; 5380 if (fiss->ifis == 0 || (zprf * zprf / << 3798 jprft = dint(std::abs(jprft)); // The nucleus just turns the other way around 5381 { << 3799 } 5382 goto direct69; << 3800 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; 5383 } << 3801 defbet = ecld->beta2[ind][izd]; 5384 // << 3802 5385 // Calculation of the fission decay w << 3803 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 << 3804 erott = jprft * jprft * 197.328 * 197.328 /(2. * iinert); 5387 // << 3805 5388 defbet = y; << 3806 bsbkbc(a-3.,zprf-1.,&bs,&bk,&bc); 5389 fission_width(zprf, a, ee, bssp, bksp << 3807 5390 ft = temp; << 3808 // level density and temperature in the triton daughter 5391 // << 3809 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 << 3810 5393 // For them fission is the only decay << 3811 tt = temp; 5394 if (ef <= 0.0) << 3812 ect=0.; 5395 { << 3813 if(denst>0.){ 5396 probf = 1.0; << 3814 G4int IS=0; 5397 probp = 0.0; << 3815 if(imaxwell == 1){ 5398 probd = 0.0; << 3816 rtt = tt; 5399 probt = 0.0; << 3817 dir1237: 5400 probn = 0.0; << 3818 ect=fvmaxhaz(rtt); 5401 probhe = 0.0; << 3819 IS++; 5402 proba = 0.0; << 3820 if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl; 5403 probg = 0.0; << 3821 goto exi1003; 5404 probimf = 0.0; << 3822 } 5405 problamb0 = 0.0; << 3823 if(ect>(ee-sbt)){ 5406 goto direct70; << 3824 if((ee-sbt)<rtt) 5407 } << 3825 ect = ee-sbt; 5408 << 3826 else 5409 if (fiss->bet <= 0.) << 3827 goto dir1237; 5410 { << 3828 } 5411 gtotal = ga + ghe + gp + gd + gt << 3829 if(ect<=0.0) goto dir1237; 5412 if (gtotal <= 0.0) << 3830 ect = ect + bt; 5413 { << 3831 }else{ 5414 probf = 0.0; << 3832 ect = 2.0 * tt + bt; 5415 probp = 0.0; << 3833 } 5416 probd = 0.0; << 3834 } 5417 probt = 0.0; << 3835 } 5418 probn = 0.0; << 3836 else { 5419 probhe = 0.0; << 3837 denst = 0.0; 5420 proba = 0.0; << 3838 ect = 0.0; 5421 probg = 0.0; << 3839 tt = 0.0; 5422 probimf = 0.0; << 3840 } 5423 problamb0 = 0.0; << 3841 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 3842 5615 void G4Abla::densniv(G4double a, << 3843 // LEVEL DENSITY AND TEMPERATURE IN THE ALPHA DAUGHTER 5616 G4double z, << 3844 // 5617 G4double ee, << 3845 // Reduction of angular momentum due to orbital angular momentum of emitted fragment 5618 G4double esous, << 3846 if ((in >= 3) && (iz >= 3)) { 5619 G4double* dens, << 3847 ind=idnint(a)-idnint(zprf)-2; 5620 G4double bshell, << 3848 izd=idnint(zprf)-2; 5621 G4double bsin, << 3849 if(jprf>0.10){ 5622 G4double bkin, << 3850 lorb(a,a-4.,jprf,ee-sba,&dlout,&sdlout); 5623 G4double* temp, << 3851 djprf = gausshaz(1,dlout,sdlout); 5624 G4int optshp, << 3852 if(IDjprf==1) djprf = 0.0; 5625 G4int optcol, << 3853 jprfa = jprf + djprf; 5626 G4double defbet, << 3854 jprfa = dint(std::abs(jprfa)); // The nucleus just turns the other way around 5627 G4double* ecor, << 3855 } 5628 G4double jprf, << 3856 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; 5629 G4int ifis, << 3857 defbet = ecld->beta2[ind][izd]; 5630 G4double* qr) << 3858 5631 { << 3859 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 << 3860 erota = jprfa * jprfa * 197.328 * 197.328 /(2. * iinert); 5633 // 1499 C INPUT: << 3861 5634 // 1500 C A,EE,ESOUS,OPTSHP << 3862 bsbkbc(a-4.,zprf-2.,&bs,&bk,&bc); 5635 // 1501 C << 3863 5636 // 1502 C LEVEL DENSITY PARAMETERS << 3864 // level density and temperature in the alpha daughter 5637 // 1503 C COMMON /ALD/ AV,AS,AK, << 3865 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 << 3866 5639 // 1505 C LEVEL DENSITY << 3867 at = temp; 5640 // 1506 C OPTAFAN - 0/1 AF/AN >=1 << 3868 eca = 0.0; 5641 // 1507 C RECOMMENDED IS << 3869 if(densa>0.){ 5642 // 1508 << 3870 G4int IS=0; 5643 // C----------------------------------- << 3871 if(imaxwell == 1){ 5644 // 1509 C OUTPUT: DENS,TEMP << 3872 rat = at; 5645 // 1510 C << 3873 dir1238: 5646 // 1511 C << 3874 eca=fvmaxhaz(rat); 5647 // ____________________________________ << 3875 IS++; 5648 // C / 1513 C / PROCEDURE FOR CALCU << 3876 if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl; 5649 // COMPOUND NUCLEUS 1514 C << 3877 goto exi1004; 5650 // /___________________________________ << 3878 } 5651 // 1515 C << 3879 if(eca>(ee-sba)){ 5652 // 1516 INTEGER AFP,IZ,OPTSHP,OPT << 3880 if((ee-sba)<rat) 5653 // 1517 REAL*8 << 3881 eca = ee-sba; 5654 // A,EE,ESOUS,DENS,E,Y0,Y1,Y2,Y01,Y11,Y << 3882 else 5655 // C=====INSERTED BY KUDYAEV=========== << 3883 goto dir1238; 5656 // 1519 COMMON /ALD/ AV,AS,AK,OPT << 3884 } 5657 // 1520 REAL*8 << 3885 if(eca<=0.0) goto dir1238; 5658 // ECR,ER,DELTAU,Z,DELTPP,PARA,PARZ,FE, << 3886 eca = eca + ba; 5659 // 1521 REAL*8 << 3887 }else{ 5660 // BSHELL,DELTA0,AV,AK,AS,PONNIV,PONFE, << 3888 eca = 2.0 * at + ba; 5661 // C=================================== << 3889 } 5662 // 1523 C << 3890 } 5663 // 1524 C << 3891 } 5664 // 1525 << 3892 else { 5665 // C----------------------------------- << 3893 densa = 0.0; 5666 // 1526 C A MASS NU << 3894 eca = 0.0; 5667 // 1527 C EE EXCITAT << 3895 at = 0.0; 5668 // 1528 C ESOUS SEPARAT << 3896 } 5669 // BARRIER << 3897 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 3898 5947 y01 = pa / y11; << 3899 // FINAL LEVEL DENSITY AND TEMPERATURE AFTER 3HE EMISSION 5948 fdens = fdens * std::pow((y01 / y << 3900 // 5949 ftemp = ftemp * std::pow((y01 / y << 3901 // Reduction of angular momentum due to orbital angular momentum of emitted fragment 5950 } << 3902 if ((in >= 2) && (iz >= 3)) { 5951 } << 3903 ind=idnint(a)-idnint(zprf)-1; 5952 else << 3904 izd=idnint(zprf)-2; 5953 { << 3905 if(jprf>0.10){ 5954 ponniv = 2.0 * std::sqrt(pa * fecor); << 3906 lorb(a,a-3.,jprf,ee-sbhe,&dlout,&sdlout); 5955 if (ponniv > 700.0) << 3907 djprf = gausshaz(1,dlout,sdlout); 5956 { << 3908 if(IDjprf==1) djprf = 0.0; 5957 ponniv = 700.0; << 3909 jprfhe = jprf + djprf; 5958 } << 3910 jprfhe = dint(std::abs(jprfhe)); // The nucleus just turns the other way around 5959 // fermi gas state density << 3911 } 5960 fdens = 0.1477045 * std::exp(ponniv) << 3912 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; 5961 ftemp = std::sqrt(fecor / pa); << 3913 defbet = ecld->beta2[ind][izd]; 5962 } << 3914 5963 // << 3915 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; << 3916 erothe = jprfhe * jprfhe * 197.328 * 197.328 /(2. * iinert); 5965 tfm = ftemp; << 3917 5966 // << 3918 bsbkbc(a-3.,zprf-2.,&bs,&bk,&bc); 5967 if (IOPTCT == 0) << 3919 5968 goto densniv100; << 3920 // level density and temperature in the he3 daughter 5969 tempct = 17.60 / (std::pow(a, 0.699) * st << 3921 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 << 3922 5971 // PRC 80 (2009) 054310 << 3923 het = temp; 5972 << 3924 eche = 0.0; 5973 // - CONSTANT-TEMPERATURE LEVEL DENSITY P << 3925 if(denshe>0.){ 5974 if (e < 30.) << 3926 G4int IS=0; 5975 { << 3927 if(imaxwell == 1){ 5976 if (a > 0.0) << 3928 rhet = het; 5977 { << 3929 dir1239: 5978 if (optshp >= 2) << 3930 eche=fvmaxhaz(rhet); 5979 { << 3931 IS++; 5980 // Parametrization of CT mode << 3932 if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl; 5981 // correspond to pairing shif << 3933 goto exi1005; 5982 // shifted taking odd-odd nuc << 3934 } 5983 // as bassis) << 3935 if(eche>(ee-sbhe)){ 5984 // e-o, o-e << 3936 if((ee-sbhe)<rhet) 5985 if (IPARITE == 1) << 3937 eche = ee-sbhe; 5986 { << 3938 else 5987 e0 = 0.285 + 11.17 * std: << 3939 goto dir1239; 5988 } << 3940 } 5989 // e-e << 3941 if(eche<=0.0) goto dir1239; 5990 if (IPARITE == 2) << 3942 eche = eche + bhe; 5991 { << 3943 }else{ 5992 e0 = 22.34 * std::pow(a, << 3944 eche = 2.0 * het + bhe; 5993 } << 3945 } 5994 // o-o << 3946 } 5995 if (IPARITE == 0) << 3947 } 5996 { << 3948 else { 5997 e0 = 0.0; << 3949 denshe = 0.0; 5998 } << 3950 eche = 0.0; >> 3951 het = 0.0; >> 3952 } >> 3953 exi1005: 5999 3954 6000 ponniv = (ein - e0) / tempct; << 3955 // LEVEL DENSITY AND TEMPERATURE IN THE LAMBDA0 DAUGHTER 6001 if (ifis != 1) << 3956 // 6002 ponniv = max(0.0, (ein - << 3957 // - Reduction of angular momentum due to orbital angular momentum of emitted fragment 6003 if (ponniv > 700.0) << 3958 // JLRS Jun-2017 - Added these caculations in abla++ 6004 { << 6005 ponniv = 700.0; << 6006 } << 6007 densct = std::exp(ponniv) / t << 6008 3959 6009 elim = ein; << 3960 if (in >= 2 && NbLam0>0) { >> 3961 ind=idnint(a)-idnint(zprf)-1; >> 3962 izd=idnint(zprf); >> 3963 if(jprf>0.10){ >> 3964 lorb(a,a-1.,jprf,ee-slamb0,&dlout,&sdlout); >> 3965 djprf = gausshaz(1,dlout,sdlout); >> 3966 if(IDjprf==1) djprf = 0.0; >> 3967 jprflamb0 = jprf + djprf; >> 3968 jprflamb0 = dint(std::abs(jprflamb0)); // The nucleus just turns the other way around >> 3969 } >> 3970 bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd]; >> 3971 defbet = ecld->beta2[ind][izd]; >> 3972 >> 3973 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); >> 3974 erotlamb0 = jprflamb0 * jprflamb0 * 197.328 * 197.328 /(2. * iinert); >> 3975 bsbkbc(a-1.,zprf,&bs,&bk,&bc); >> 3976 >> 3977 // level density and temperature in the neutron daughter >> 3978 densniv(a-1.0,zprf,ee,slamb0,&denslamb0,bshell, bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprflamb0,0,&qr); >> 3979 lamb0t = temp; >> 3980 eclamb0=0.0; >> 3981 if(denslamb0>0.){ >> 3982 G4int IS=0; >> 3983 if(imaxwell == 1){ >> 3984 rlamb0t = lamb0t; >> 3985 dir1240: >> 3986 eclamb0=fvmaxhaz_neut(rlamb0t); >> 3987 IS++; >> 3988 if(IS>100){std::cout << "WARNING: FVMAXHAZ_NEUT CALLED MORE THAN 100 TIMES" << std::endl; >> 3989 goto exi1006; >> 3990 } >> 3991 if(eclamb0>(ee-slamb0)){ >> 3992 if((ee-slamb0)<rlamb0t) >> 3993 eclamb0 = ee-slamb0; >> 3994 else >> 3995 goto dir1240; >> 3996 } >> 3997 if(eclamb0<=0.0) goto dir1240; >> 3998 }else{ >> 3999 eclamb0 = 2.0 * lamb0t; >> 4000 } >> 4001 } >> 4002 } >> 4003 else { >> 4004 denslamb0 = 0.0; >> 4005 eclamb0 = 0.0; >> 4006 lamb0t = 0.0; >> 4007 } >> 4008 exi1006: 6010 4009 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 4010 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 4011 6055 if (ein >= ecr && tfm >= temp << 4012 // Decay widths for particles 6056 { << 4013 if ( densg > 0.) { 6057 ftemp = tfm; << 4014 // 6058 } << 4015 // CALCULATION OF THE PARTIAL DECAY WIDTH 6059 else << 4016 // USED FOR BOTH THE TIME SCALE AND THE EVAPORATION DECAY WIDTH 6060 { << 4017 // 6061 ftemp = tempct; << 4018 // AKAP = HBAR**2/(2* MN * R_0**2) = 10 MEV *** input param *** 6062 } << 4019 // 6063 } << 4020 // AK, KHS 2005 - Energy-dependen inverse cross sections included, influence of 6064 } << 4021 // Coulomb barrier for LCP, tunnelling for LCP 6065 } << 4022 // JLRS 2017 - Implementation in abla++ >> 4023 >> 4024 if(densn<=0.0){ >> 4025 gn = 0.0; >> 4026 }else{ >> 4027 gn = width(a,zprf,1.0,0.0,nt,0.0,sn,ee-erotn)* densn/densg; >> 4028 } >> 4029 if(densp<=0.0){ >> 4030 gp = 0.0; >> 4031 }else{ >> 4032 gp = width(a,zprf,1.0,1.0,pt,bp,sbp,ee-erotp)*densp/densg* pen(a, 1.0, omegap, pt); >> 4033 } >> 4034 if(densd<=0.0){ >> 4035 gd = 0.0; >> 4036 }else{ >> 4037 gd = width(a,zprf,2.0,1.0,dt,bd,sbd,ee-erotd)*densd/densg* pen(a, 2.0, omegad, dt); >> 4038 } >> 4039 if(denst<=0.0){ >> 4040 gt = 0.0; >> 4041 }else{ >> 4042 gt = width(a,zprf,3.0,1.0,tt,bt,sbt,ee-erott)*denst/densg* pen(a, 3.0, omegat, tt); >> 4043 } >> 4044 if(denshe<=0.0){ >> 4045 ghe = 0.0; >> 4046 }else{ >> 4047 ghe =width(a,zprf,3.0,2.0,het,bhe,sbhe,ee-erothe) * denshe/densg* pen(a, 3.0, omegahe, het); >> 4048 } >> 4049 if(densa<=0.0){ >> 4050 ga = 0.0; >> 4051 }else{ >> 4052 ga = width(a,zprf,4.0,2.0,at,ba,sba,ee-erota) * densa/densg* pen(a, 4.0, omegaa, at); >> 4053 } >> 4054 if(denslamb0<=0.0){ >> 4055 glamb0 = 0.0; >> 4056 }else{ >> 4057 glamb0 = width(a,zprf,1.0,-2.0,lamb0t,0.0,slamb0,ee-erotlamb0)* denslamb0/densg; >> 4058 } >> 4059 >> 4060 // ************************** >> 4061 // * Treatment of IMFs * >> 4062 // * KHS, AK, MVR 2005-2006 * >> 4063 // ************************** >> 4064 >> 4065 G4int izcn=0,incn=0,inmin=0,inmax=0,inmi=0,inma=0; >> 4066 G4double aimf,mares,maimf; >> 4067 >> 4068 if(fimf_allowed==0 || zprf<=5.0 || a<=7.0){ >> 4069 gimf = 0.0; >> 4070 }else{ >> 4071 // Estimate the total decay width for IMFs (Z >= 3) >> 4072 // By using the logarithmic slope between GIMF3 and GIMF5 >> 4073 >> 4074 mglms(a,zprf,opt->optshpimf,&mazz); >> 4075 >> 4076 gimf3 = 0.0; >> 4077 zimf = 3.0; >> 4078 izimf = 3; >> 4079 // *** Find the limits that both IMF and partner are bound : >> 4080 izcn = idnint(zprf); // Z of CN >> 4081 incn = idnint(a) - izcn; // N of CN >> 4082 >> 4083 isostab_lim(izimf,&inmin,&inmax); // Bound isotopes for IZIMF from INMIN to INIMFMA >> 4084 isostab_lim(izcn-izimf,&inmi,&inma); // Daughter nucleus after IMF emission, >> 4085 // limits of bound isotopes >> 4086 inmin = max(inmin,incn-inma); // Both IMF and daughter must be bound >> 4087 inmax = min(inmax,incn-inmi); // " >> 4088 >> 4089 inmax = max(inmax,inmin); // In order to keep the variables below >> 4090 >> 4091 for(G4int iaimf=izimf+inmin;iaimf<=izimf+inmax;iaimf++){ >> 4092 aimf=G4double(iaimf); >> 4093 if(aimf>=a || zimf>=zprf){ >> 4094 width_imf = 0.0; >> 4095 }else{ >> 4096 // Q-values >> 4097 mglms(a-aimf,zprf-zimf,opt->optshpimf,&mares); >> 4098 mglms(aimf,zimf,opt->optshpimf,&maimf); >> 4099 // Bass barrier >> 4100 barrs(idnint(zprf-zimf),idnint(a-aimf),izimf,idnint(aimf),&bimf,&omegaimf); >> 4101 sbimf = maimf+mares-mazz+bimf+getdeltabinding(a,NbLam0); >> 4102 // Rotation energy >> 4103 defbetimf = ecld->beta2[idnint(aimf-zimf)][idnint(zimf)]+ecld->beta2[idnint(a-aimf-zprf+zimf)][idnint(zprf-zimf)]; >> 4104 >> 4105 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)); >> 4106 >> 4107 erot = jprf * jprf * 197.328 * 197.328 /(2.0 * iinert); >> 4108 >> 4109 // Width >> 4110 if(densg==0.0 || ee < (sbimf + erot)){ >> 4111 width_imf = 0.0; >> 4112 }else{ >> 4113 // To take into account that at the barrier the system is deformed: >> 4114 // BSIMF = ((A-AIMF)**(2.D0/3.D0) + AIMF**(2.D0/3.D0))/A**(2.D0/3.D0) >> 4115 bsimf = bscn; >> 4116 densniv(a,zprf,ee,sbimf,&densimf,0.0,bsimf,1.0,&timf,0,0,defbetimf,&ecor,jprf,2,&qr); >> 4117 >> 4118 imfarg = (sbimf+erotcn-erot)/timf; >> 4119 if(imfarg > 200.0) imfarg = 200.0; >> 4120 >> 4121 // For IMF - The available phase space is given by the level densities in CN at the >> 4122 // barrier; applaying MOrretto -> G=WIDTH*ro_CN(E-SBIMF)/ro_CN(E). >> 4123 // Constant temperature approximation: ro(E+dE)/ro(E)=exp(dE/T) >> 4124 // Ratio DENSIMF/DENSCN is included to take into account that at the barrier system >> 4125 // is deformed. If (above) BSIMF = 1 no deformation is considered and this ratio >> 4126 // is equal to 1. >> 4127 width_imf = 0.0; >> 4128 // >> 4129 width_imf = width(a,zprf,aimf,zimf,timf,bimf,sbimf,ee-erot)*std::exp(-imfarg)*qr/qrcn; >> 4130 }// if densg >> 4131 }// if aimf >> 4132 gimf3 = gimf3 + width_imf; >> 4133 }// for IAIMF >> 4134 >> 4135 // zimf = 5 >> 4136 gimf5 = 0.0; >> 4137 zimf = 5.0; >> 4138 izimf = 5; >> 4139 // *** Find the limits that both IMF and partner are bound : >> 4140 izcn = idnint(zprf); // Z of CN >> 4141 incn = idnint(a) - izcn; // N of CN >> 4142 >> 4143 isostab_lim(izimf,&inmin,&inmax); // Bound isotopes for IZIMF from INMIN to INIMFMA >> 4144 isostab_lim(izcn-izimf,&inmi,&inma); // Daughter nucleus after IMF emission, >> 4145 // limits of bound isotopes >> 4146 inmin = max(inmin,incn-inma); // Both IMF and daughter must be bound >> 4147 inmax = min(inmax,incn-inmi); // " >> 4148 >> 4149 inmax = max(inmax,inmin); // In order to keep the variables below >> 4150 >> 4151 for(G4int iaimf=izimf+inmin;iaimf<=izimf+inmax;iaimf++){ >> 4152 aimf=G4double(iaimf); >> 4153 if(aimf>=a || zimf>=zprf){ >> 4154 width_imf = 0.0; >> 4155 }else{ >> 4156 // Q-values >> 4157 mglms(a-aimf,zprf-zimf,opt->optshpimf,&mares); >> 4158 mglms(aimf,zimf,opt->optshpimf,&maimf); >> 4159 // Bass barrier >> 4160 barrs(idnint(zprf-zimf),idnint(a-aimf),izimf,idnint(aimf),&bimf,&omegaimf); >> 4161 sbimf = maimf+mares-mazz+bimf+getdeltabinding(a,NbLam0); >> 4162 // Rotation energy >> 4163 defbetimf = ecld->beta2[idnint(aimf-zimf)][idnint(zimf)]+ecld->beta2[idnint(a-aimf-zprf+zimf)][idnint(zprf-zimf)]; 6066 4164 6067 densniv100: << 4165 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 4166 6069 if (fdens == 0.0) << 4167 erot = jprf * jprf * 197.328 * 197.328 /(2.0 * iinert); 6070 { << 4168 // 6071 if (a > 0.0) << 4169 // Width 6072 { << 4170 if(densg==0.0 || ee < (sbimf + erot)){ 6073 // Parametrization of CT model by << 4171 width_imf = 0.0; 6074 ftemp = 17.60 / (std::pow(a, 0.69 << 4172 }else{ 6075 // ftemp = 1.0 / ( (0.0570 + 0.0 << 4173 // To take into account that at the barrier the system is deformed: 6076 // from PRC 80 (2009) 054310 << 4174 // BSIMF = ((A-AIMF)**(2.D0/3.D0) + AIMF**(2.D0/3.D0))/A**(2.D0/3.D0) 6077 } << 4175 bsimf = bscn; 6078 else << 4176 densniv(a,zprf,ee,sbimf,&densimf,0.0,bsimf,1.0,&timf,0,0,defbetimf,&ecor,jprf,2,&qr); 6079 { << 4177 // 6080 ftemp = 0.5; << 4178 imfarg = (sbimf+erotcn-erot)/timf; 6081 } << 4179 if(imfarg > 200.0) imfarg = 200.0; 6082 } << 4180 // 6083 // << 4181 // For IMF - The available phase space is given by the level densities in CN at the 6084 // spin cutoff parameter << 4182 // barrier; applaying MOrretto -> G=WIDTH*ro_CN(E-SBIMF)/ro_CN(E). 6085 /* << 4183 // Constant temperature approximation: ro(E+dE)/ro(E)=exp(dE/T) 6086 C PERPENDICULAR AND PARALLEL MOMENT OF IN << 4184 // 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 << 4185 // is deformed. If (above) BSIMF = 1 no deformation is considered and this ratio 6088 c in units 1/MeV << 4186 // is equal to 1. 6089 */ << 4187 width_imf = 0.0; 6090 fnorm = std::pow(1.16, 2) * 931.49 * 1.e- << 4188 width_imf = width(a,zprf,aimf,zimf,timf,bimf,sbimf,ee-erot)*std::exp(-imfarg)*qr/qrcn;//*densimf/densg; 6091 << 4189 }// if densg 6092 if (ifis == 0 || ifis == 2) << 4190 }// if aimf 6093 { << 4191 gimf5 = gimf5 + width_imf; 6094 /* << 4192 }// for IAIMF 6095 C GROUND STATE: << 4193 // 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 << 4194 // Int(A_IMF*ZIMF**B_IMF)(3->ZPRF) 6097 macr. nucl. phys.) C alpha2 = sqrt(5/ << 4195 6098 */ << 4196 if(gimf3<=0.0 || gimf5<=0.0){ 6099 fp_per = 0.4 * std::pow(a, 5.0 / 3.0) << 4197 gimf = 0.0; 6100 fp_par = 0.40 * std::pow(a, 5.0 / 3.0 << 4198 b_imf = -100.0; 6101 } << 4199 a_imf = 0.0; 6102 else << 4200 }else{ 6103 { << 4201 // 6104 if (ifis == 1) << 4202 b_imf = (std::log10(gimf3) - std::log10(gimf5))/(std::log10(3.0)-std::log10(5.0)); 6105 { << 4203 // 6106 /* << 4204 if(b_imf >= -1.01) b_imf = -1.01; 6107 C SADDLE POINT << 4205 if(b_imf <= -100.0) { 6108 C See Hasse&Myer, p. 100 << 4206 b_imf = -100.0; 6109 C Perpendicular moment of inertia << 4207 a_imf = 0.0; 6110 */ << 4208 gimf = 0.0; 6111 fp_per = 2.0 / 5.0 * std::pow(a, << 4209 goto direct2007; 6112 (1.0 + 7.0 / 6.0 * defbe << 4210 } 6113 // Parallel moment of inertia << 4211 // 6114 fp_par = 2.0 / 5.0 * std::pow(a, << 4212 a_imf = gimf3 / std::pow(3.0,b_imf); 6115 (1.0 - 7.0 / 3.0 * defbe << 4213 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 } 4214 } 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 4215 6273 G4double G4Abla::eflmac(G4int ia, G4int iz, G << 4216 direct2007: 6274 { << 4217 if(gimf < 1.e-10) gimf = 0.0; 6275 // CHANGED TO CALCULATE TOTAL BINDING ENE << 4218 }// if fimf_allowed 6276 // SWITCH FOR PAIRING INCLUDED AS WELL. << 4219 // 6277 // BINDING = EFLMAC(IA,IZ,0,OPTSHP) << 4220 //c JLRS 2016 - Added this calculation 6278 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EE << 4221 //C AK 2004 - Gamma width 6279 // A.J. 15.07.96 << 4222 //C According to A. Ignatyuk, GG : 6280 << 4223 //C Here BS=BK=1, as this was assumed in the parameterization 6281 // this function will calculate the liqui << 4224 pa = (ald->av)*a + (ald->as)*std::pow(a,2./3.) + (ald->ak)*std::pow(a,1./3.); 6282 // configuration according to the preprin << 4225 gamma = 2.5 * pa * std::pow(a,-4./3.); 6283 // MASSES and DEFORMATIONS by P. M"oller << 4226 gfactor = 1.+gamma*ecld->ecgnz[in][iz]; 6284 // All constants are taken from this publ << 4227 if(gfactor<=0.){ 6285 << 4228 gfactor = 0.0; 6286 // Parameters: << 4229 } 6287 // a: nuclear mass number << 4230 // 6288 // z: nuclear charge << 4231 gtemp = 17.60/(std::pow(a,0.699) * std::sqrt(gfactor)); 6289 // flag: 0 - return mass excess << 4232 // 6290 // otherwise - return pairing (= << 4233 //C If one switches gammas off, one should also switch off tunneling through the fission barrier. 6291 << 4234 gg = 0.624e-9*std::pow(a,1.6)*std::pow(gtemp,5.); 6292 G4double eflmacResult = 0.0; << 4235 //gammaemission==1 6293 << 4236 //C For fission fragments, GG is ~ 2 times larger than for 6294 if (ia == 0) << 4237 //c "oridnary" nuclei (A. Ignatyuk, private communication). 6295 return eflmacResult; << 4238 if(gammaemission==1){ 6296 << 4239 gg = 2.0 * gg; 6297 G4int in = 0; << 4240 } 6298 G4double z = 0.0, n = 0.0, a = 0.0, av = << 4241 ecg = 4.0 * gtemp; 6299 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 << 4242 // 6300 G4double ff = 0.0, ca = 0.0, w = 0.0, efl << 4243 // 6301 G4double r0 = 0.0, kf = 0.0, ks = 0.0; << 4244 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 4245 6348 z = G4double(iz); << 4246 //std::cout << gn << " " << gd << " " << gp << std::endl; 6349 a = G4double(ia); << 6350 in = ia - iz; << 6351 n = G4double(in); << 6352 4247 6353 if (flag == 1) << 4248 if (gsum > 0.0) { 6354 { << 4249 ts1 = hbar / gsum; 6355 goto eflmac311; << 4250 } >> 4251 else { >> 4252 ts1 = 1.0e99; >> 4253 goto direct69; >> 4254 } >> 4255 // >> 4256 //Case of nuclei below Businaro-Gallone mass asymmetry point >> 4257 if(fiss->ifis==0 || (zprf*zprf/a<=22.74 && zprf<60.)){ >> 4258 goto direct69; 6356 } 4259 } >> 4260 // >> 4261 // Calculation of the fission decay width >> 4262 // Deformation is calculated using the fissility >> 4263 // >> 4264 defbet = y; >> 4265 fission_width(zprf,a,ee,bssp,bksp,ef,y,&gf,&temp,jprf,0,1,fiss->optcol,fiss->optshp,densg); >> 4266 ft=temp; >> 4267 // >> 4268 // Case of very heavy nuclei that have no fission barrier >> 4269 // For them fission is the only decay channel available >> 4270 if(ef<=0.0){ >> 4271 probf = 1.0; >> 4272 probp = 0.0; >> 4273 probd = 0.0; >> 4274 probt = 0.0; >> 4275 probn = 0.0; >> 4276 probhe = 0.0; >> 4277 proba = 0.0; >> 4278 probg = 0.0; >> 4279 probimf = 0.0; >> 4280 problamb0 = 0.0; >> 4281 goto direct70; >> 4282 } >> 4283 >> 4284 if(fiss->bet<=0.){ >> 4285 gtotal = ga + ghe + gp + gd + gt + gn + gg +gimf + gf + glamb0; >> 4286 if(gtotal<=0.0){ >> 4287 probf = 0.0; >> 4288 probp = 0.0; >> 4289 probd = 0.0; >> 4290 probt = 0.0; >> 4291 probn = 0.0; >> 4292 probhe = 0.0; >> 4293 proba = 0.0; >> 4294 probg = 0.0; >> 4295 probimf = 0.0; >> 4296 problamb0 = 0.0; >> 4297 goto direct70; >> 4298 }else{ >> 4299 probf = gf/gtotal; >> 4300 probn = gn/gtotal; >> 4301 probp = gp/gtotal; >> 4302 probd = gd/gtotal; >> 4303 probt = gt/gtotal; >> 4304 probhe = ghe/gtotal; >> 4305 proba = ga/gtotal; >> 4306 probg = gg/gtotal; >> 4307 probimf = gimf/gtotal; >> 4308 problamb0 = glamb0/gtotal; >> 4309 goto direct70; >> 4310 } >> 4311 } >> 4312 }else{ >> 4313 goto direct69; >> 4314 } >> 4315 // >> 4316 if (inum > ilast) { // new event means reset the time scale >> 4317 tsum = 0.; >> 4318 } >> 4319 // >> 4320 // kramers factor for the dynamical hindrances of fission >> 4321 fomega_sp(a,y,&mfcd,&omegasp,&homegasp); >> 4322 cf = cram(fiss->bet,homegasp); >> 4323 // >> 4324 // We calculate the transient time >> 4325 fomega_gs(a,zprf,&k1,&omegags,&homegags); >> 4326 tauc=tau(fiss->bet,homegags,ef,ft); >> 4327 gf=gf*cf; >> 4328 // >> 4329 /* >> 4330 c The subroutine part_fiss calculates the fission width GFF that corresponds to the time >> 4331 c dependence of the probability distribution obtained by solving the FOKKER-PLANCK eq >> 4332 c using a nucleus potential that is approximated by a parabola. It also gives the >> 4333 c decay time for this step T_LAPSE that includes all particle decay channels and the >> 4334 c fission channel. And it decides whether the nucleus decays by particle evaporation >> 4335 c CHOICE_FISSPART = 1 or fission CHOICE_FISSPART = 2 >> 4336 */ >> 4337 // >> 4338 part_fiss(fiss->bet,gsum,gf,y,tauc,ts1,tsum, &choice_fisspart,zprf,a,ft,&t_lapse,&gff); >> 4339 gf = gff; >> 4340 // >> 4341 // We accumulate in TSUM the mean decay for this step including all particle decay channels and fission >> 4342 tsum = tsum + t_lapse; 6357 4343 6358 if (iz < 13 && in < 3) << 4344 // If fission occurs 6359 { << 4345 if(choice_fisspart==2){ 6360 if (masses->mexpiop[in][iz] == 1) << 4346 probf = 1.0; 6361 { << 4347 probp = 0.0; 6362 return masses->bind[in][iz]; << 4348 probd = 0.0; >> 4349 probt = 0.0; >> 4350 probn = 0.0; >> 4351 probhe = 0.0; >> 4352 proba = 0.0; >> 4353 probg = 0.0; >> 4354 probimf = 0.0; >> 4355 problamb0 = 0.0; >> 4356 goto direct70; >> 4357 }else{ >> 4358 // If particle evaporation occurs >> 4359 // The probabilities for the different decays are calculated taking into account the fission width GFF that corresponds to this step >> 4360 >> 4361 gtotal=ga + ghe + gp + gd + gt + gn + gimf + gg + glamb0; >> 4362 if(gtotal<=0.0){ >> 4363 probf = 0.0; >> 4364 probp = 0.0; >> 4365 probd = 0.0; >> 4366 probt = 0.0; >> 4367 probn = 0.0; >> 4368 probhe = 0.0; >> 4369 proba = 0.0; >> 4370 probg = 0.0; >> 4371 probimf = 0.0; >> 4372 problamb0 = 0.0; >> 4373 goto direct70; >> 4374 }else{ >> 4375 probf = 0.0; >> 4376 probn = gn/gtotal; >> 4377 probp = gp/gtotal; >> 4378 probd = gd/gtotal; >> 4379 probt = gt/gtotal; >> 4380 probhe = ghe/gtotal; >> 4381 proba = ga/gtotal; >> 4382 probg = gg/gtotal; >> 4383 probimf = gimf/gtotal; >> 4384 problamb0 = glamb0/gtotal; >> 4385 goto direct70; 6363 } 4386 } 6364 } 4387 } 6365 << 4388 // 6366 eflmac311: << 4389 direct69: 6367 << 4390 gtotal = ga + ghe + gp + gd + gt + gn + gg + gimf + glamb0; 6368 c1 = 3.0 / 5.0 * esq / r0; << 4391 if(gtotal<=0.0){ 6369 c4 = 5.0 / 4.0 * std::pow((3.0 / (2.0 * p << 4392 probf = 0.0; 6370 kf = std::pow((9.0 * pi * z / (4.0 * a)), << 4393 probp = 0.0; 6371 << 4394 probd = 0.0; 6372 ff = -1.0 / 8.0 * rp * rp * esq / std::po << 4395 probt = 0.0; 6373 (145.0 / 48.0 - 327.0 / 2880.0 * std << 4396 probn = 0.0; 6374 1527.0 / 1209600.0 * std::pow(kf, 4 << 4397 probhe = 0.0; 6375 i = (n - z) / a; << 4398 proba = 0.0; 6376 << 4399 probg = 0.0; 6377 x0 = r0 * std::pow(a, (1.0 / 3.0)) / ay; << 4400 probimf = 0.0; 6378 y0 = r0 * std::pow(a, (1.0 / 3.0)) / aden << 4401 problamb0 = 0.0; 6379 << 4402 }else{ 6380 b1 = 1.0 - 3.0 / (std::pow(x0, 2)) + (1.0 << 4403 probf = 0.0; 6381 << 4404 probn = gn/gtotal; 6382 b3 = 1.0 - 5.0 / std::pow(y0, 2) * << 4405 probp = gp/gtotal; 6383 (1.0 - 15.0 / (8.0 * y0) + << 4406 probd = gd/gtotal; 6384 3.0 / 4.0 * (1.0 + 9.0 / << 4407 probt = gt/gtotal; 6385 std::exp(-2.0 * y0)); << 4408 probhe = ghe/gtotal; 6386 << 4409 proba = ga/gtotal; 6387 // now calculation of total binding energ << 4410 probg = gg/gtotal; 6388 << 4411 probimf = gimf/gtotal; 6389 efl = -1.0 * av * (1.0 - kv * i * i) * a << 4412 problamb0 = glamb0/gtotal; 6390 c1 * z * z * b3 / std::pow(a, (1.0 << 4413 } 6391 ff * std::pow(z, 2) / a - ca * (n - << 4414 6392 << 4415 direct70: 6393 efl = efl + w * std::abs(i); << 4416 ptotl = probp+probd+probt+probn+probhe+proba+probg+probimf+probf+problamb0; 6394 << 4417 // 6395 // pairing is made optional << 4418 ee = eer; 6396 if (optshp >= 2) << 4419 ilast = inum; 6397 { << 4420 6398 // average pairing << 4421 // Return values: 6399 if (in == iz && (mod(in, 2) == 1) && << 4422 (*probp_par) = probp; 6400 { << 4423 (*probd_par) = probd; 6401 efl = efl + w / a; << 4424 (*probt_par) = probt; 6402 } << 4425 (*probn_par) = probn; 6403 << 4426 (*probhe_par) = probhe; 6404 // AK 2008 - Parametrization of CT mo << 4427 (*proba_par) = proba; 6405 // The following part has been introd << 4428 (*probg_par) = probg; 6406 // between pairing in masses and leve << 4429 (*probimf_par) = probimf; 6407 // AK 2010 note that E0 is shifted t << 4430 (*problamb0_par) = problamb0; 6408 // Fermi-gas model (there, energy is << 4431 (*probf_par) = probf; 6409 // as bassis) << 4432 (*ptotl_par) = ptotl; 6410 << 4433 (*sn_par) = sn; 6411 G4double para = 0.; << 4434 (*sp_par) = sp; 6412 parite(a, ¶); << 4435 (*sd_par) = sd; 6413 << 4436 (*st_par) = st; 6414 if (para < 0.0) << 4437 (*she_par) = she; 6415 { << 4438 (*sa_par) = sa; 6416 // e-o, o-e << 4439 (*slamb0_par) = slamb0; 6417 e0 = 0.285 + 11.17 * std::pow(a, << 4440 (*sbp_par) = sbp; >> 4441 (*sbd_par) = sbd; >> 4442 (*sbt_par) = sbt; >> 4443 (*sbhe_par) = sbhe; >> 4444 (*sba_par) = sba; >> 4445 (*ecn_par) = ecn; >> 4446 (*ecp_par) = ecp; >> 4447 (*ecd_par) = ecd; >> 4448 (*ect_par) = ect; >> 4449 (*eche_par) = eche; >> 4450 (*eca_par) = eca; >> 4451 (*ecg_par) = ecg; >> 4452 (*eclamb0_par) = eclamb0; >> 4453 (*bp_par) = bp; >> 4454 (*bd_par) = bd; >> 4455 (*bt_par) = bt; >> 4456 (*bhe_par) = bhe; >> 4457 (*ba_par) = ba; >> 4458 (*tcn) = ftcn; >> 4459 (*ts1_par) = ts1; >> 4460 (*jprfn_par) = jprfn; >> 4461 (*jprfp_par) = jprfp; >> 4462 (*jprfd_par) = jprfd; >> 4463 (*jprft_par) = jprft; >> 4464 (*jprfhe_par) = jprfhe; >> 4465 (*jprfa_par) = jprfa; >> 4466 (*jprflamb0_par) = jprflamb0; >> 4467 (*tsum_par) = tsum; >> 4468 return; >> 4469 } >> 4470 >> 4471 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) >> 4472 { >> 4473 // 1498 C >> 4474 // 1499 C INPUT: >> 4475 // 1500 C A,EE,ESOUS,OPTSHP,BS,BK,BSHELL,DEFBET >> 4476 // 1501 C >> 4477 // 1502 C LEVEL DENSITY PARAMETERS >> 4478 // 1503 C COMMON /ALD/ AV,AS,AK,OPTAFAN >> 4479 // 1504 C AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE >> 4480 // 1505 C LEVEL DENSITY PARAMETER >> 4481 // 1506 C OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1 >> 4482 // 1507 C RECOMMENDED IS OPTAFAN = 0 >> 4483 // 1508 C--------------------------------------------------------------------- >> 4484 // 1509 C OUTPUT: DENS,TEMP >> 4485 // 1510 C >> 4486 // 1511 C ____________________________________________________________________ >> 4487 // 1512 C / >> 4488 // 1513 C / PROCEDURE FOR CALCULATING THE STATE DENSITY OF A COMPOUND NUCLEUS >> 4489 // 1514 C /____________________________________________________________________ >> 4490 // 1515 C >> 4491 // 1516 INTEGER AFP,IZ,OPTSHP,OPTCOL,J,OPTAFAN >> 4492 // 1517 REAL*8 A,EE,ESOUS,DENS,E,Y0,Y1,Y2,Y01,Y11,Y21,PA,BS,BK,TEMP >> 4493 // 1518 C=====INSERTED BY KUDYAEV=============================================== >> 4494 // 1519 COMMON /ALD/ AV,AS,AK,OPTAFAN >> 4495 // 1520 REAL*8 ECR,ER,DELTAU,Z,DELTPP,PARA,PARZ,FE,HE,ECOR,ECOR1,Pi6 >> 4496 // 1521 REAL*8 BSHELL,DELTA0,AV,AK,AS,PONNIV,PONFE,DEFBET,QR,SIG,FP >> 4497 // 1522 C======================================================================= >> 4498 // 1523 C >> 4499 // 1524 C >> 4500 // 1525 C----------------------------------------------------------------------- >> 4501 // 1526 C A MASS NUMBER OF THE DAUGHTER NUCLEUS >> 4502 // 1527 C EE EXCITATION ENERGY OF THE MOTHER NUCLEUS >> 4503 // 1528 C ESOUS SEPARATION ENERGY PLUS EFFECTIVE COULOMB BARRIER >> 4504 // 1529 C DENS STATE DENSITY OF DAUGHTER NUCLEUS AT EE-ESOUS-EC >> 4505 // 1530 C BSHELL SHELL CORRECTION >> 4506 // 1531 C TEMP NUCLEAR TEMPERATURE >> 4507 // 1532 C E LOCAL EXCITATION ENERGY OF THE DAUGHTER NUCLEUS >> 4508 // 1533 C E1 LOCAL HELP VARIABLE >> 4509 // 1534 C Y0,Y1,Y2,Y01,Y11,Y21 >> 4510 // 1535 C LOCAL HELP VARIABLES >> 4511 // 1536 C PA LOCAL STATE-DENSITY PARAMETER >> 4512 // 1537 C EC KINETIC ENERGY OF EMITTED PARTICLE WITHOUT >> 4513 // 1538 C COULOMB REPULSION >> 4514 // 1539 C IDEN FAKTOR FOR SUBSTRACTING KINETIC ENERGY IDEN*TEMP >> 4515 // 1540 C DELTA0 PAIRING GAP 12 FOR GROUND STATE >> 4516 // 1541 C 14 FOR SADDLE POINT >> 4517 // 1542 C EITERA HELP VARIABLE FOR TEMPERATURE ITERATION >> 4518 // 1543 C----------------------------------------------------------------------- >> 4519 // 1544 C >> 4520 // 1545 C >> 4521 G4double delta0 = 0.0; >> 4522 G4double deltau = 0.0; >> 4523 G4double deltpp = 0.0; >> 4524 G4double e = 0.0; >> 4525 G4double e0 = 0.0; >> 4526 G4double ecor1 = 0.0; >> 4527 G4double ecr = 10.0; >> 4528 G4double fe = 0.0; >> 4529 G4double he = 0.0; >> 4530 G4double pa = 0.0; >> 4531 G4double para = 0.0; >> 4532 G4double parz = 0.0; >> 4533 G4double ponfe = 0.0; >> 4534 G4double ponniv = 0.0; >> 4535 G4double fqr = 1.0; >> 4536 G4double y01 = 0.0; >> 4537 G4double y11 = 0.0; >> 4538 G4double y2 = 0.0; >> 4539 G4double y21 = 0.0; >> 4540 G4double y1 = 0.0; >> 4541 G4double y0 = 0.0; >> 4542 G4double fnorm=0.0; >> 4543 G4double fp_per=0.; >> 4544 G4double fp_par=0.; >> 4545 G4double sig_per=0.; >> 4546 G4double sig_par=0.; >> 4547 G4double sigma2; >> 4548 G4double jfact=1.; >> 4549 G4double erot=0.; >> 4550 G4double fdens=0.; >> 4551 G4double fecor=0.; >> 4552 G4double BSHELLCT=0.; >> 4553 G4double gamma=0.; >> 4554 G4double ftemp=0.0; >> 4555 G4double tempct=0.0; >> 4556 G4double densfm = 0.0; >> 4557 G4double densct = 0.0; >> 4558 G4double ein=0.; >> 4559 G4double elim; >> 4560 G4double tfm; >> 4561 G4double bs=bsin; >> 4562 G4double bk=bkin; >> 4563 G4int IPARITE; >> 4564 G4int IOPTCT=fiss->optct; >> 4565 // >> 4566 G4double pi6 = std::pow(3.1415926535,2) / 6.0; >> 4567 G4double pi = 3.1415926535; >> 4568 // >> 4569 G4int afp=idnint(a); >> 4570 G4int iz=idnint(z); >> 4571 G4int in=afp-iz; >> 4572 // >> 4573 if(ifis!=1){ >> 4574 BSHELLCT = ecld->ecgnz[in][iz]; >> 4575 }else{ >> 4576 BSHELLCT = 0.0; >> 4577 } >> 4578 if(afp<=20) BSHELLCT = 0.0; >> 4579 // >> 4580 parite(a,¶); >> 4581 if (para < 0.0){ >> 4582 // Odd A >> 4583 IPARITE=1; >> 4584 }else{ >> 4585 // Even A >> 4586 parite(z,&parz); >> 4587 if(parz > 0.0){ >> 4588 // Even Z, even N >> 4589 IPARITE=2; >> 4590 }else{ >> 4591 // Odd Z, odd N >> 4592 IPARITE=0; >> 4593 } >> 4594 } >> 4595 // >> 4596 ein = ee - esous; >> 4597 // >> 4598 if(ein>1.e30){ >> 4599 fdens = 0.0; >> 4600 ftemp = 0.5; >> 4601 goto densniv100; >> 4602 } >> 4603 // >> 4604 e = ee - esous; >> 4605 // >> 4606 if(e<0.0&&ifis!=1){ // TUNNELING >> 4607 fdens = 0.0; >> 4608 densfm = 0.0; >> 4609 densct = 0.0; >> 4610 if(ald->optafan == 1) { >> 4611 pa = (ald->av)*a + (ald->as)*std::pow(a,(2.e0/3.e0)) + (ald->ak)*std::pow(a,(1.e0/3.e0)); >> 4612 }else { >> 4613 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 } 4614 } 6419 else << 4615 gamma = 2.5 * pa * std::pow(a,-4.0/3.0); 6420 { << 4616 fecor=0.0; 6421 G4double parz = 0.; << 4617 goto densniv100; 6422 parite(z, &parz); << 4618 } 6423 if (parz > 0.0) << 4619 // 6424 { << 4620 if(ifis==0&&bs!=1.0){ 6425 // e-e << 4621 // - With increasing excitation energy system in getting less and less deformed: 6426 e0 = 22.34 * std::pow(a, -0.4 << 4622 G4double ponq = (e-100.0)/5.0; 6427 } << 4623 if(ponq>700.0) ponq = 700.0; 6428 else << 4624 bs = 1.0/(1.0+std::exp(-ponq)) + 1.0/(1.0+std::exp(ponq)) * bsin; 6429 { << 4625 bk = 1.0/(1.0+std::exp(-ponq)) + 1.0/(1.0+std::exp(ponq)) * bkin; 6430 // o-o << 4626 } 6431 e0 = 0.0; << 4627 // 6432 } << 4628 // level density parameter >> 4629 if(ald->optafan == 1) { >> 4630 pa = (ald->av)*a + (ald->as)*std::pow(a,(2.e0/3.e0)) + (ald->ak)*std::pow(a,(1.e0/3.e0)); >> 4631 } >> 4632 else { >> 4633 pa = (ald->av)*a + (ald->as)*bs*std::pow(a,(2.e0/3.e0)) + (ald->ak)*bk*std::pow(a,(1.e0/3.e0)); >> 4634 } >> 4635 // >> 4636 gamma = 2.5 * pa * std::pow(a,-4.0/3.0); >> 4637 // >> 4638 // AK - 2009 - trial, in order to have transition to constant-temperature approach >> 4639 // Idea - at the phase transition superfluid-normal fluid, TCT = TEMP, and this >> 4640 // determines critical energy for pairing. >> 4641 if(a>0.0){ >> 4642 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)); >> 4643 } >> 4644 >> 4645 // pairing corrections >> 4646 if (ifis == 1) { >> 4647 delta0 = 14; >> 4648 } >> 4649 else { >> 4650 delta0 = 12; >> 4651 } >> 4652 >> 4653 // shell corrections >> 4654 if (optshp > 0) { >> 4655 deltau = bshell; >> 4656 if (optshp == 2) { >> 4657 deltau = 0.0; >> 4658 } >> 4659 if (optshp >= 2) { >> 4660 // pairing energy shift with condensation energy a.r.j. 10.03.97 >> 4661 //deltpp = -0.25e0* (delta0/pow(sqrt(a),2)) * pa /pi6 + 2.e0*delta0/sqrt(a); >> 4662 deltpp = -0.25e0* std::pow((delta0/std::sqrt(a)),2) * pa /pi6 + 22.34e0*std::pow(a,-0.464)-0.235; >> 4663 // Odd A >> 4664 if (IPARITE == 1) { >> 4665 //e = e - delta0/sqrt(a); >> 4666 e=e-(0.285+11.17*std::pow(a,-0.464)-0.390-0.00058*a);//-30./a;//FIXME >> 4667 } >> 4668 // Even Z, even N >> 4669 if(IPARITE==2){ >> 4670 e=e-(22.34*std::pow(a,-0.464)-0.235);//-30./a;//FIXME >> 4671 } >> 4672 // Odd Z, odd N >> 4673 if(IPARITE==0){ >> 4674 if(in==iz){ >> 4675 // e = e; >> 4676 }else{ >> 4677 // e = e-30./a; 6433 } 4678 } 6434 efl = efl - e0; << 4679 } 6435 // end if for pairing term << 4680 } else { >> 4681 deltpp = 0.0; 6436 } 4682 } >> 4683 }else { >> 4684 deltau = 0.0; >> 4685 deltpp = 0.0; >> 4686 } >> 4687 >> 4688 if(e < 0.0){ >> 4689 e = 0.0; >> 4690 ftemp = 0.5; >> 4691 } >> 4692 >> 4693 // washing out is made stronger >> 4694 ponfe = -2.5*pa*e*std::pow(a,(-4.0/3.0)); >> 4695 >> 4696 if (ponfe < -700.0) { >> 4697 ponfe = -700.0; >> 4698 } >> 4699 fe = 1.0 - std::exp(ponfe); >> 4700 if (e < ecr) { >> 4701 // priv. comm. k.-h. schmidt >> 4702 he = 1.0 - std::pow((1.0 - e/ecr),2); >> 4703 } >> 4704 else { >> 4705 he = 1.0; >> 4706 } >> 4707 // Excitation energy corrected for pairing and shell effects >> 4708 // washing out with excitation energy is included. >> 4709 fecor = e + deltau*fe + deltpp*he; >> 4710 if (fecor <= 0.1) { >> 4711 fecor = 0.1; >> 4712 } >> 4713 // iterative procedure according to grossjean and feldmeier >> 4714 // to avoid the singularity e = 0 >> 4715 if (ee < 5.0) { >> 4716 y1 = std::sqrt(pa*fecor); >> 4717 for(G4int j = 0; j < 5; j++) { >> 4718 y2 = pa*fecor*(1.e0-std::exp(-y1)); >> 4719 y1 = std::sqrt(y2); >> 4720 } >> 4721 y0 = pa/y1; >> 4722 ftemp=1.0/y0; >> 4723 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; >> 4724 if (fecor < 1.0) { >> 4725 ecor1=1.0; >> 4726 y11 = std::sqrt(pa*ecor1); >> 4727 for(G4int j = 0; j < 7; j++) { >> 4728 y21 = pa*ecor1*(1.0-std::exp(-y11)); >> 4729 y11 = std::sqrt(y21); >> 4730 } 6437 4731 6438 eflmacResult = efl; << 4732 y01 = pa/y11; >> 4733 fdens = fdens*std::pow((y01/y0),1.5); >> 4734 ftemp = ftemp*std::pow((y01/y0),1.5); >> 4735 } >> 4736 } >> 4737 else { >> 4738 ponniv = 2.0*std::sqrt(pa*fecor); >> 4739 if (ponniv > 700.0) { >> 4740 ponniv = 700.0; >> 4741 } >> 4742 // fermi gas state density >> 4743 fdens = 0.1477045 * std::exp(ponniv)/(std::pow(pa,0.25)*std::pow(fecor,1.25)); >> 4744 ftemp = std::sqrt(fecor/pa); >> 4745 } >> 4746 // >> 4747 densfm = fdens; >> 4748 tfm = ftemp; >> 4749 // >> 4750 if(IOPTCT==0) goto densniv100; >> 4751 tempct = 17.60/( std::pow(a,0.699) * std::sqrt(1.+gamma*BSHELLCT)); >> 4752 //tempct = 1.0 / ( (0.0570 + 0.00193*BSHELLCT) * pow(a,0.6666667)); // from PRC 80 (2009) 054310 >> 4753 >> 4754 // - CONSTANT-TEMPERATURE LEVEL DENSITY PARAMETER (ONLY AT LOW ENERGIES) >> 4755 if(e<30.){ >> 4756 if(a>0.0){ >> 4757 if(optshp>=2){ >> 4758 // Parametrization of CT model by Ignatyuk; note that E0 is shifted to correspond >> 4759 // to pairing shift in Fermi-gas model (there, energy is shifted taking odd-odd nuclei >> 4760 // as bassis) >> 4761 // e-o, o-e >> 4762 if (IPARITE == 1) { e0 = 0.285+11.17*std::pow(a,-0.464) - 0.390-0.00058*a;} >> 4763 // e-e >> 4764 if (IPARITE == 2) { e0 = 22.34*std::pow(a,-0.464)-0.235;} >> 4765 // o-o >> 4766 if (IPARITE == 0){ e0 = 0.0;} >> 4767 >> 4768 ponniv = (ein-e0)/tempct; >> 4769 if(ifis!=1) ponniv = max(0.0,(ein-e0)/tempct); >> 4770 if(ponniv>700.0){ ponniv = 700.0;} >> 4771 densct = std::exp(ponniv)/tempct*std::exp(0.079*BSHELLCT/tempct); >> 4772 >> 4773 elim = ein; >> 4774 >> 4775 if(elim>=ecr&&densfm<=densct){ >> 4776 fdens = densfm; >> 4777 // IREGCT = 0; >> 4778 }else{ >> 4779 fdens = densct; >> 4780 // IREGCT = 1; >> 4781 // ecor = min(ein-e0,0.10); >> 4782 } >> 4783 if(elim>=ecr&&tfm>=tempct){ >> 4784 ftemp = tfm; >> 4785 }else{ >> 4786 ftemp = tempct; >> 4787 } >> 4788 }else{ >> 4789 // Case of no pairing considered >> 4790 // ETEST = PA * TEMPCT**2 >> 4791 ponniv = (ein)/tempct; >> 4792 if(ponniv>700.0){ ponniv = 700.0;} >> 4793 densct = std::exp(ponniv)/tempct; >> 4794 >> 4795 if(ein>=ecr && densfm<=densct){ >> 4796 fdens = densfm; >> 4797 ftemp = tfm; >> 4798 // IREGCT = 0; >> 4799 }else{ >> 4800 fdens = densct; >> 4801 ftemp = tempct; >> 4802 // ECOR = DMIN1(EIN,0.1D0) >> 4803 } >> 4804 >> 4805 if(ein>=ecr && tfm>=tempct){ >> 4806 ftemp = tfm; >> 4807 }else{ >> 4808 ftemp = tempct; >> 4809 } >> 4810 } >> 4811 } >> 4812 } >> 4813 >> 4814 >> 4815 densniv100: >> 4816 >> 4817 if(fdens==0.0){ >> 4818 if(a>0.0){ >> 4819 // Parametrization of CT model by Ignatyuk done for masses > 20 >> 4820 ftemp = 17.60/( std::pow(a,0.699) * std::sqrt(1.0+gamma*BSHELLCT)); >> 4821 // ftemp = 1.0 / ( (0.0570 + 0.00193*BSHELLCT) * pow(a,0.6666667)); // from PRC 80 (2009) 054310 >> 4822 }else{ >> 4823 ftemp = 0.5; >> 4824 } >> 4825 } >> 4826 // >> 4827 // spin cutoff parameter >> 4828 /* >> 4829 C PERPENDICULAR AND PARALLEL MOMENT OF INERTIA >> 4830 c fnorm = R0*M0/hbar**2 = 1.16fm*931.49MeV/c**2 /(6.582122e-22 MeVs)**2 and is >> 4831 c in units 1/MeV >> 4832 */ >> 4833 fnorm = std::pow(1.16,2)*931.49*1.e-2/(9.0* std::pow(6.582122,2)); >> 4834 >> 4835 if(ifis==0 || ifis==2){ >> 4836 /* >> 4837 C GROUND STATE: >> 4838 C FP_PER ~ 1+0.5*alpha2, FP_PAR ~ 1-alpha2 (Hasse & Myers, Geom. relat. macr. nucl. phys.) >> 4839 C alpha2 = sqrt(5/(4*pi))*beta2 >> 4840 */ >> 4841 fp_per = 0.4*std::pow(a,5.0/3.0)*fnorm*(1.0+0.50*defbet*std::sqrt(5.0/(4.0*pi))); >> 4842 fp_par = 0.40*std::pow(a,5.0/3.0)*fnorm*(1.0-defbet*std::sqrt(5.0/(4.0*pi))); >> 4843 >> 4844 }else{ >> 4845 if(ifis==1){ >> 4846 /* >> 4847 C SADDLE POINT >> 4848 C See Hasse&Myer, p. 100 >> 4849 C Perpendicular moment of inertia >> 4850 */ >> 4851 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)); >> 4852 // Parallel moment of inertia >> 4853 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)); >> 4854 }else{ >> 4855 if(ifis==20){ >> 4856 // IMF - two fragments in contact; it is asumed that both are spherical. >> 4857 // See Hasse&Myers, p.106 >> 4858 // Here, DEFBET = R1/R2, where R1 and R2 are radii of IMF and its partner >> 4859 // Perpendicular moment of inertia >> 4860 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); >> 4861 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); >> 4862 } >> 4863 } >> 4864 } >> 4865 if(fp_par<0.0)fp_par=0.0; >> 4866 if(fp_per<0.0)fp_per=0.0; >> 4867 // >> 4868 sig_per = std::sqrt(fp_per * ftemp); >> 4869 sig_par = std::sqrt(fp_par * ftemp); >> 4870 // >> 4871 sigma2 = sig_per*sig_per + sig_par*sig_par; >> 4872 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)); >> 4873 erot = jprf*jprf/(2.0*std::sqrt(fp_par*fp_par+fp_per*fp_per)); >> 4874 // >> 4875 // collective enhancement >> 4876 if (optcol == 1) { >> 4877 qrot(z,a,defbet,sig_per,fecor-erot,&fqr); >> 4878 } >> 4879 else { >> 4880 fqr = 1.0; >> 4881 } >> 4882 // >> 4883 fdens = fdens * fqr *jfact; >> 4884 // >> 4885 if(fdens<1e-300)fdens=0.0; >> 4886 // >> 4887 *dens =fdens; >> 4888 *ecor=fecor; >> 4889 *temp=ftemp; >> 4890 *qr=fqr; >> 4891 } >> 4892 >> 4893 void G4Abla::qrot(G4double z, G4double a, G4double bet, G4double sig, G4double u, G4double *qr) >> 4894 { >> 4895 /* >> 4896 C QROT INCLUDING DAMPING >> 4897 C >> 4898 C INPUT: Z,A,DEFBET,SIG,U >> 4899 C >> 4900 C OUTPUT: QR - COLLECTIVE ENHANCEMENT FACTOR >> 4901 C >> 4902 C SEE JUNGHANS ET AL., NUCL. PHYS. A 629 (1998) 635 >> 4903 C >> 4904 C >> 4905 C FR(U) EXPONENTIAL FUNCTION TO DEFINE DAMPING >> 4906 C UCR CRITICAL ENERGY FOR DAMPING >> 4907 C DCR WIDTH OF DAMPING >> 4908 C DEFBET BETA-DEFORMATION ! >> 4909 C SIG PERPENDICULAR SPIN CUTOFF FACTOR >> 4910 C U ENERGY >> 4911 C QR COEFFICIENT OF COLLECTIVE ENHANCEMENT >> 4912 C A MASS NUMBER >> 4913 C Z CHARGE NUMBER >> 4914 C >> 4915 */ >> 4916 // JLRS: July 2016: new values for the collective parameters >> 4917 // >> 4918 >> 4919 G4double ucr = fiss->ucr; // Critical energy for damping. >> 4920 G4double dcr = fiss->dcr; // Width of damping. >> 4921 G4double ponq = 0.0, dn = 0.0, n = 0.0, dz = 0.0; >> 4922 G4int distn,distz,ndist, zdist; >> 4923 G4int nmn[8]= {2, 8, 14, 20, 28, 50, 82, 126}; >> 4924 G4int nmz[8]= {2, 8, 14, 20, 28, 50, 82, 126}; >> 4925 // >> 4926 sig = sig*sig; >> 4927 // >> 4928 if(std::abs(bet)<=0.15){ >> 4929 goto qrot10; >> 4930 }else{ >> 4931 goto qrot11; >> 4932 } >> 4933 // >> 4934 qrot10: >> 4935 n = a - z; >> 4936 distn = 10000000; >> 4937 distz = 10000000; >> 4938 >> 4939 for(G4int i =0;i<8;i++){ >> 4940 ndist = std::fabs(idnint(n) - nmn[i]); >> 4941 if(ndist < distn) distn = ndist; >> 4942 zdist = std::fabs(idnint(z) - nmz[i]); >> 4943 if(zdist < distz) distz = zdist; >> 4944 } >> 4945 >> 4946 dz = G4float(distz); >> 4947 dn = G4float(distn); >> 4948 >> 4949 bet = 0.022 + 0.003*dn + 0.002*dz; >> 4950 >> 4951 sig = 75.0*std::pow(bet,2.) * sig; >> 4952 >> 4953 // NO VIBRATIONAL ENHANCEMENT >> 4954 qrot11: >> 4955 ponq = (u - ucr)/dcr; >> 4956 >> 4957 if (ponq > 700.0) { >> 4958 ponq = 700.0; >> 4959 } >> 4960 if (sig < 1.0) { >> 4961 sig = 1.0; >> 4962 } >> 4963 (*qr) = 1.0/(1.0 + std::exp(ponq)) * (sig - 1.0) + 1.0; >> 4964 >> 4965 if ((*qr) < 1.0) { >> 4966 (*qr) = 1.0; >> 4967 } 6439 4968 6440 return eflmacResult; << 4969 return; 6441 } 4970 } 6442 4971 6443 void G4Abla::appariem(G4double a, G4double z, << 4972 void G4Abla::lpoly(G4double x, G4int n, G4double pl[]) 6444 { 4973 { 6445 // CALCUL DE LA CORRECTION, DUE A L'APPAR << 4974 // THIS SUBROUTINE CALCULATES THE ORDINARY LEGENDRE POLYNOMIALS OF 6446 // LIAISON D'UN NOYAU << 4975 // ORDER 0 TO N-1 OF ARGUMENT X AND STORES THEM IN THE VECTOR PL. 6447 // PROCEDURE FOR CALCULATING THE PAIRING << 4976 // THEY ARE CALCULATED BY RECURSION RELATION FROM THE FIRST TWO 6448 // ENERGY OF A SPECIFIC NUCLEUS << 4977 // POLYNOMIALS. 6449 << 4978 // WRITTEN BY A.J.SIERK LANL T-9 FEBRUARY, 1984 6450 G4double para = 0.0, parz = 0.0; << 4979 // NOTE: PL AND X MUST BE DOUBLE PRECISION ON 32-BIT COMPUTERS! 6451 // A MASS NUMBER << 4980 6452 // Z NUCLEAR CHARGE << 4981 pl[0] = 1.0; 6453 // PARA HELP VARIABLE FOR PA << 4982 pl[1] = x; 6454 // PARZ HELP VARIABLE FOR PA << 4983 6455 // DEL PAIRING CORRECTION << 4984 for(G4int i = 2; i < n; i++) { 6456 << 4985 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, ¶); << 4986 } 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 } 4987 } 6476 4988 6477 void G4Abla::parite(G4double n, G4double* par << 4989 G4double G4Abla::eflmac(G4int ia, G4int iz, G4int flag, G4int optshp) 6478 { 4990 { 6479 // CALCUL DE LA PARITE DU NOMBRE N << 4991 // CHANGED TO CALCULATE TOTAL BINDING ENERGY INSTEAD OF MASS EXCESS. 6480 // << 4992 // SWITCH FOR PAIRING INCLUDED AS WELL. 6481 // PROCEDURE FOR CALCULATING THE PARITY O << 4993 // BINDING = EFLMAC(IA,IZ,0,OPTSHP) 6482 // RETURNS -1 IF N IS ODD AND +1 IF N IS << 4994 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EEX/FRLDM.C 6483 << 4995 // A.J. 15.07.96 6484 G4double n1 = 0.0, n2 = 0.0, n3 = 0.0; << 4996 6485 << 4997 // this function will calculate the liquid-drop nuclear mass for spheri 6486 // N NUMBER TO BE TESTED << 4998 // configuration according to the preprint NUCLEAR GROUND-STATE 6487 // N1,N2 HELP VARIABLES << 4999 // MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p. 6488 // PAR HELP VARIABLE FOR PA << 5000 // All constants are taken from this publication for consistency. 6489 << 5001 6490 n3 = G4double(idnint(n)); << 5002 // Parameters: 6491 n1 = n3 / 2.0; << 5003 // a: nuclear mass number 6492 n2 = n1 - dint(n1); << 5004 // z: nuclear charge 6493 << 5005 // flag: 0 - return mass excess 6494 if (n2 > 0.0) << 5006 // otherwise - return pairing (= -1/2 dpn + 1/2 (Dp + Dn)) 6495 { << 5007 6496 (*par) = -1.0; << 5008 G4double eflmacResult = 0.0; 6497 } << 5009 6498 else << 5010 if(ia==0)return eflmacResult; 6499 { << 5011 6500 (*par) = 1.0; << 5012 G4int in = 0; 6501 } << 5013 G4double z = 0.0, n = 0.0, a = 0.0, av = 0.0, as = 0.0; >> 5014 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 = 0.0, b3 = 0.0; >> 5015 G4double ff = 0.0, ca = 0.0, w = 0.0, efl = 0.0; >> 5016 G4double r0 = 0.0, kf = 0.0, ks = 0.0; >> 5017 G4double kv = 0.0, rp = 0.0, ay = 0.0, aden = 0.0, x0 = 0.0, y0 = 0.0; >> 5018 G4double esq = 0.0, ael = 0.0, i = 0.0, e0 = 0.0; >> 5019 G4double pi = 3.141592653589793238e0; >> 5020 >> 5021 // fundamental constants >> 5022 // electronic charge squared >> 5023 esq = 1.4399764; >> 5024 >> 5025 // constants from considerations other than nucl. masses >> 5026 // electronic binding >> 5027 ael = 1.433e-5; >> 5028 >> 5029 // proton rms radius >> 5030 rp = 0.8; >> 5031 >> 5032 // nuclear radius constant >> 5033 r0 = 1.16; >> 5034 >> 5035 // range of yukawa-plus-expon. potential >> 5036 ay = 0.68; >> 5037 >> 5038 // range of yukawa function used to generate >> 5039 // nuclear charge distribution >> 5040 aden= 0.70; >> 5041 >> 5042 // wigner constant >> 5043 w = 30.0; >> 5044 >> 5045 // adjusted parameters >> 5046 // volume energy >> 5047 av = 16.00126; >> 5048 >> 5049 // volume asymmetry >> 5050 kv = 1.92240; >> 5051 >> 5052 // surface energy >> 5053 as = 21.18466; >> 5054 >> 5055 // surface asymmetry >> 5056 ks = 2.345; >> 5057 // a^0 constant >> 5058 a0 = 2.615; >> 5059 >> 5060 // charge asymmetry >> 5061 ca = 0.10289; >> 5062 >> 5063 z = G4double(iz); >> 5064 a = G4double(ia); >> 5065 in = ia - iz; >> 5066 n = G4double(in); >> 5067 >> 5068 if(flag==1){goto eflmac311;} >> 5069 >> 5070 if(iz<13&&in<3){ >> 5071 if(masses->mexpiop[in][iz]==1){ >> 5072 return masses->bind[in][iz]; >> 5073 } >> 5074 } >> 5075 >> 5076 eflmac311: >> 5077 >> 5078 c1 = 3.0/5.0*esq/r0; >> 5079 c4 = 5.0/4.0*std::pow((3.0/(2.0*pi)),(2.0/3.0)) * c1; >> 5080 kf = std::pow((9.0*pi*z/(4.0*a)),(1.0/3.0))/r0; >> 5081 >> 5082 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)); >> 5083 i = (n-z)/a; >> 5084 >> 5085 x0 = r0 * std::pow(a,(1.0/3.0)) / ay; >> 5086 y0 = r0 * std::pow(a,(1.0/3.0)) / aden; >> 5087 >> 5088 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); >> 5089 >> 5090 b3 = 1.0 - 5.0/std::pow(y0,2) * (1.0 - 15.0/(8.0*y0) + 21.0/(8.0 * std::pow(y0,3)) >> 5091 - 3.0/4.0 * (1.0 + 9.0/(2.0*y0) + 7.0/std::pow(y0,2) >> 5092 + 7.0/(2.0 * std::pow(y0,3))) * std::exp(-2.0*y0)); >> 5093 >> 5094 // now calculation of total binding energy a.j. 16.7.96 >> 5095 >> 5096 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 >> 5097 + 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)) >> 5098 + ff*std::pow(z,2)/a -ca*(n-z) - ael * std::pow(z,(2.39e0)); >> 5099 >> 5100 efl = efl + w*std::abs(i); >> 5101 >> 5102 // pairing is made optional >> 5103 if (optshp >= 2) { >> 5104 // average pairing >> 5105 if (in==iz && (mod(in,2) == 1) && (mod(iz,2) == 1) && in>0.) { >> 5106 efl = efl + w/a; >> 5107 } >> 5108 >> 5109 // AK 2008 - Parametrization of CT model by Ignatyuk; >> 5110 // The following part has been introduced in order to have correspondance >> 5111 // between pairing in masses and level densities; >> 5112 // AK 2010 note that E0 is shifted to correspond to pairing shift in >> 5113 // Fermi-gas model (there, energy is shifted taking odd-odd nuclei >> 5114 // as bassis) >> 5115 >> 5116 G4double para=0.; >> 5117 parite(a,¶); >> 5118 >> 5119 if(para<0.0){ >> 5120 // e-o, o-e >> 5121 e0 = 0.285+11.17*std::pow(a,-0.464) -0.390-0.00058*(a); >> 5122 }else{ >> 5123 G4double parz=0.; >> 5124 parite(z,&parz); >> 5125 if (parz>0.0){ >> 5126 // e-e >> 5127 e0 = 22.34*std::pow(a,-0.464)-0.235; >> 5128 }else{ >> 5129 // o-o >> 5130 e0 = 0.0; >> 5131 } >> 5132 } >> 5133 efl = efl - e0; >> 5134 // end if for pairing term >> 5135 } >> 5136 >> 5137 eflmacResult = efl; >> 5138 >> 5139 return eflmacResult; >> 5140 } >> 5141 >> 5142 void G4Abla::appariem(G4double a, G4double z, G4double *del) >> 5143 { >> 5144 // CALCUL DE LA CORRECTION, DUE A L'APPARIEMENT, DE L'ENERGIE DE >> 5145 // LIAISON D'UN NOYAU >> 5146 // PROCEDURE FOR CALCULATING THE PAIRING CORRECTION TO THE BINDING >> 5147 // ENERGY OF A SPECIFIC NUCLEUS >> 5148 >> 5149 G4double para = 0.0, parz = 0.0; >> 5150 // A MASS NUMBER >> 5151 // Z NUCLEAR CHARGE >> 5152 // PARA HELP VARIABLE FOR PARITY OF A >> 5153 // PARZ HELP VARIABLE FOR PARITY OF Z >> 5154 // DEL PAIRING CORRECTION >> 5155 >> 5156 parite(a, ¶); >> 5157 >> 5158 if (para < 0.0) { >> 5159 (*del) = 0.0; >> 5160 } >> 5161 else { >> 5162 parite(z, &parz); >> 5163 if (parz > 0.0) { >> 5164 (*del) = -12.0/std::sqrt(a); >> 5165 } >> 5166 else { >> 5167 (*del) = 12.0/std::sqrt(a); >> 5168 } >> 5169 } >> 5170 } >> 5171 >> 5172 void G4Abla::parite(G4double n, G4double *par) >> 5173 { >> 5174 // CALCUL DE LA PARITE DU NOMBRE N >> 5175 // >> 5176 // PROCEDURE FOR CALCULATING THE PARITY OF THE NUMBER N. >> 5177 // RETURNS -1 IF N IS ODD AND +1 IF N IS EVEN >> 5178 >> 5179 G4double n1 = 0.0, n2 = 0.0, n3 = 0.0; >> 5180 >> 5181 // N NUMBER TO BE TESTED >> 5182 // N1,N2 HELP VARIABLES >> 5183 // PAR HELP VARIABLE FOR PARITY OF N >> 5184 >> 5185 n3 = G4double(idnint(n)); >> 5186 n1 = n3/2.0; >> 5187 n2 = n1 - dint(n1); >> 5188 >> 5189 if (n2 > 0.0) { >> 5190 (*par) = -1.0; >> 5191 } >> 5192 else { >> 5193 (*par) = 1.0; >> 5194 } 6502 } 5195 } 6503 5196 6504 G4double G4Abla::tau(G4double bet, G4double h 5197 G4double G4Abla::tau(G4double bet, G4double homega, G4double ef, G4double t) 6505 { 5198 { 6506 // INPUT : BET, HOMEGA, EF, T << 5199 // INPUT : BET, HOMEGA, EF, T 6507 // OUTPUT: TAU - RISE TIME IN WHICH THE F << 5200 // OUTPUT: TAU - RISE TIME IN WHICH THE FISSION WIDTH HAS REACHED 6508 // 90 PERCENT OF ITS FINAL << 5201 // 90 PERCENT OF ITS FINAL VALUE 6509 // << 5202 // 6510 // BETA - NUCLEAR VISCOSITY << 5203 // BETA - NUCLEAR VISCOSITY 6511 // HOMEGA - CURVATURE OF POTENTIAL << 5204 // HOMEGA - CURVATURE OF POTENTIAL 6512 // EF - FISSION BARRIER << 5205 // EF - FISSION BARRIER 6513 // T - NUCLEAR TEMPERATURE << 5206 // T - NUCLEAR TEMPERATURE 6514 << 5207 6515 G4double tauResult = 0.0; << 5208 G4double tauResult = 0.0; 6516 << 5209 6517 G4double tlim = 8.e0 * ef; << 5210 G4double tlim = 8.e0 * ef; 6518 if (t > tlim) << 5211 if (t > tlim) { 6519 { << 5212 t = tlim; 6520 t = tlim; << 5213 } 6521 } << 5214 // 6522 // << 5215 if (bet/(std::sqrt(2.0)*10.0*(homega/6.582122)) <= 1.0) { 6523 if (bet / (std::sqrt(2.0) * 10.0 * (homeg << 5216 tauResult = std::log(10.0*ef/t)/(bet*1.0e21); 6524 { << 5217 } 6525 tauResult = std::log(10.0 * ef / t) / << 5218 else { 6526 } << 5219 tauResult = std::log(10.0*ef/t)/ (2.0*std::pow((10.0*homega/6.582122),2))*(bet*1.0e-21); 6527 else << 5220 } //end if 6528 { << 6529 tauResult = std::log(10.0 * ef / t) / << 6530 } // end if << 6531 5221 6532 return tauResult; << 5222 return tauResult; 6533 } 5223 } 6534 5224 6535 G4double G4Abla::cram(G4double bet, G4double 5225 G4double G4Abla::cram(G4double bet, G4double homega) 6536 { 5226 { 6537 // INPUT : BET, HOMEGA NUCLEAR VISCOSITY << 5227 // INPUT : BET, HOMEGA NUCLEAR VISCOSITY + CURVATURE OF POTENTIAL 6538 // OUTPUT: KRAMERS FAKTOR - REDUCTION OF << 5228 // OUTPUT: KRAMERS FAKTOR - REDUCTION OF THE FISSION PROBABILITY 6539 // INDEPENDENT << 5229 // INDEPENDENT OF EXCITATION ENERGY 6540 << 5230 6541 G4double rel = bet / (20.0 * homega / 6.5 << 5231 G4double rel = bet/(20.0*homega/6.582122); 6542 G4double cramResult = std::sqrt(1.0 + std << 5232 G4double cramResult = std::sqrt(1.0 + std::pow(rel,2)) - rel; 6543 // limitation introduced 6.1.2000 by << 5233 // limitation introduced 6.1.2000 by khs 6544 << 5234 6545 if (cramResult > 1.0) << 5235 if (cramResult > 1.0) { 6546 { << 5236 cramResult = 1.0; 6547 cramResult = 1.0; << 5237 } 6548 } << 6549 5238 6550 return cramResult; << 5239 return cramResult; 6551 } 5240 } 6552 5241 6553 G4double G4Abla::bipol(G4int iflag, G4double 5242 G4double G4Abla::bipol(G4int iflag, G4double y) 6554 { 5243 { 6555 // CALCULATION OF THE SURFACE BS OR CURVA << 5244 // CALCULATION OF THE SURFACE BS OR CURVATURE BK OF A NUCLEUS 6556 // RELATIVE TO THE SPHERICAL CONFIGURATIO << 5245 // RELATIVE TO THE SPHERICAL CONFIGURATION 6557 // BASED ON MYERS, DROPLET MODEL FOR ARB << 5246 // BASED ON MYERS, DROPLET MODEL FOR ARBITRARY SHAPES 6558 << 5247 6559 // INPUT: IFLAG - 0/1 BK/BS CALCULATION << 5248 // INPUT: IFLAG - 0/1 BK/BS CALCULATION 6560 // Y - (1 - X) COMPLEMENT OF T << 5249 // Y - (1 - X) COMPLEMENT OF THE FISSILITY 6561 << 5250 6562 // LINEAR INTERPOLATION OF BS BK TABLE << 5251 // LINEAR INTERPOLATION OF BS BK TABLE 6563 << 5252 6564 G4int i = 0; << 5253 G4int i = 0; 6565 << 5254 6566 G4double bipolResult = 0.0; << 5255 G4double bipolResult = 0.0; 6567 << 5256 6568 const G4int bsbkSize = 54; << 5257 const G4int bsbkSize = 54; 6569 << 5258 6570 G4double bk[bsbkSize] = { << 5259 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 << 5260 1.04576,1.06099,1.07910,1.10056,1.12603,1.15651,1.19348, 6572 1.10056, 1.12603, 1.15651, 1.19348, 1 << 5261 1.23915,1.29590,1.35951,1.41013,1.44103,1.46026,1.47339, 6573 1.48308, 1.49068, 1.49692, 1.50226, 1 << 5262 1.48308,1.49068,1.49692,1.50226,1.50694,1.51114,1.51502, 6574 1.53177, 1.53490, 1.53803, 1.54117, 1 << 5263 1.51864,1.52208,1.52539,1.52861,1.53177,1.53490,1.53803, 6575 1.56980, 1.57413, 1.57860, 1.58301, 1 << 5264 1.54117,1.54473,1.54762,1.55096,1.55440,1.55798,1.56173, 6576 }; // Zeroes at bk[0], and at << 5265 1.56567,1.56980,1.57413,1.57860,1.58301,1.58688,1.58688, 6577 // the end added by PK << 5266 1.58688,1.58740,1.58740, 0.0}; //Zeroes at bk[0], and at the end added by PK 6578 << 5267 6579 G4double bs[bsbkSize] = { 0.0, 1.0000 << 5268 G4double bs[bsbkSize] = {0.0, 1.00000,1.00086,1.00338,1.00750,1.01319, 6580 1.05195, 1.0660 << 5269 1.02044,1.02927,1.03974, 6581 1.26532, 1.2761 << 5270 1.05195,1.06604,1.08224,1.10085,1.12229,1.14717,1.17623,1.20963, 6582 1.28235, 1.2814 << 5271 1.24296,1.26532,1.27619,1.28126,1.28362,1.28458,1.28477,1.28450, 6583 1.27314, 1.2721 << 5272 1.28394,1.28320,1.28235,1.28141,1.28042,1.27941,1.27837,1.27732, 6584 1.26418, 1.2632 << 5273 1.27627,1.27522,1.27418,1.27314,1.27210,1.27108,1.27006,1.26906, 6585 << 5274 1.26806,1.26707,1.26610,1.26514,1.26418,1.26325,1.26233,1.26147, 6586 i = idint(y / (2.0e-02)) + 1; << 5275 1.26147,1.26147,1.25992,1.25992, 0.0}; 6587 << 5276 6588 if ((i + 1) >= bsbkSize) << 5277 i = idint(y/(2.0e-02)) + 1; 6589 { << 5278 6590 if (verboseLevel > 2) << 5279 if((i + 1) >= bsbkSize) { 6591 { << 5280 if(verboseLevel > 2) { 6592 // G4cout <<"G4Abla error: index << 5281 // G4cout <<"G4Abla error: index " << i + 1 << " is greater than array size permits." << G4endl; 6593 // size permits." << G4endl; << 5282 } 6594 } << 5283 bipolResult = 0.0; 6595 bipolResult = 0.0; << 5284 } 6596 } << 5285 else { 6597 else << 5286 if (iflag == 1) { 6598 { << 5287 bipolResult = bs[i] + (bs[i+1] - bs[i])/2.0e-02 * (y - 2.0e-02*(i - 1)); 6599 if (iflag == 1) << 5288 } 6600 { << 5289 else { 6601 bipolResult = bs[i] + (bs[i + 1] << 5290 bipolResult = bk[i] + (bk[i+1] - bk[i])/2.0e-02 * (y - 2.0e-02*(i - 1)); 6602 } << 5291 } 6603 else << 5292 } 6604 { << 5293 6605 bipolResult = bk[i] + (bk[i + 1] << 5294 return bipolResult; 6606 } << 5295 } 6607 } << 5296 6608 << 5297 void G4Abla::fomega_sp(G4double AF,G4double Y,G4double *MFCD,G4double *sOMEGA,G4double *sHOMEGA) 6609 return bipolResult; << 5298 { >> 5299 /* >> 5300 c Y 1 - Fissility >> 5301 c OMEGA Frequency at the ground state, in units 1.e-21 s >> 5302 */ >> 5303 G4double OMEGA,HOMEGA,ES0,MR02; >> 5304 >> 5305 ES0 = 20.760*std::pow(AF,2.0/3.0); >> 5306 // In units 1.e-42 MeVs**2; r0 = 1.175e-15 m, u=931.49MeV/c**2=103.4MeV*s**2/m**2 >> 5307 // divided by 1.e-4 to go from 1.e-46 to 1.e-42 >> 5308 MR02 = std::pow(AF,5.0/3.0)*1.0340*0.010*1.175*1.175; >> 5309 // Determination of the inertia of the fission collective degree of freedom >> 5310 (*MFCD) = MR02 * 3.0/10.0*(1.0+3.0*Y); >> 5311 // Omega at saddle >> 5312 OMEGA = std::sqrt(ES0/MR02)*std::sqrt(8.0/3.0*Y*(1.0+304.0*Y/255.0)); >> 5313 // >> 5314 HOMEGA = 6.58122*OMEGA/10.0; >> 5315 // >> 5316 (*sOMEGA)=OMEGA; >> 5317 (*sHOMEGA)=HOMEGA; >> 5318 // >> 5319 return; 6610 } 5320 } 6611 5321 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 5322 6638 void G4Abla::fomega_gs(G4double AF, G4double << 5323 void G4Abla::fomega_gs(G4double AF,G4double ZF,G4double *K1,G4double *sOMEGA,G4double *sHOMEGA) 6639 { 5324 { 6640 /* << 5325 /* 6641 c Y 1 - Fissility << 5326 c Y 1 - Fissility 6642 c OMEGA Frequency at the gro << 5327 c OMEGA Frequency at the ground state, in units 1.e-21 s 6643 */ << 5328 */ 6644 G4double OMEGA, HOMEGA, MR02, MINERT, C, << 5329 G4double OMEGA,HOMEGA,MR02,MINERT,C,fk1; 6645 // << 5330 // 6646 MR02 = std::pow(AF, 5.0 / 3.0) * 1.0340 * << 5331 MR02 = std::pow(AF,5.0/3.0)*1.0340*0.01*1.175*1.175; 6647 MINERT = 3. * MR02 / 10.0; << 5332 MINERT = 3.*MR02/10.0; 6648 C = 17.9439 * (1. - 1.7826 * std::pow((AF << 5333 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) - << 5334 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); << 5335 OMEGA = std::sqrt(fk1/MINERT); 6651 HOMEGA = 6.58122 * OMEGA / 10.0; << 5336 HOMEGA = 6.58122*OMEGA/10.0; 6652 // << 5337 // 6653 (*K1) = fk1; << 5338 (*K1)=fk1; 6654 (*sOMEGA) = OMEGA; << 5339 (*sOMEGA)=OMEGA; 6655 (*sHOMEGA) = HOMEGA; << 5340 (*sHOMEGA)=HOMEGA; 6656 // << 5341 // 6657 return; << 5342 return; 6658 } 5343 } 6659 5344 6660 void G4Abla::barrs(G4int Z1, G4int A1, G4int << 5345 void G4Abla::barrs(G4int Z1,G4int A1,G4int Z2,G4int A2,G4double *sBARR,G4double *sOMEGA) 6661 { /* << 5346 {/* 6662 C AK 2004 - Barriers for LCP and IMF are cal << 5347 C AK 2004 - Barriers for LCP and IMF are calculated now according to the 6663 according to the C Bass model (Nuc << 5348 C Bass model (Nucl. Phys. A (1974)) 6664 C KHS 2007 - To speed up, barriers are read << 5349 C KHS 2007 - To speed up, barriers are read from tabels; in case thermal 6665 case thermal C expansion is consi << 5350 C expansion is considered, barriers are calculated. 6666 are calculated. C INPUT: C EA - Excitatio << 5351 C INPUT: 6667 nucleon C Z11, A11 - Charge and mass of daug << 5352 C EA - Excitation energy per nucleon 6668 Z22, A22 - Charge and mass of LCP or IMF << 5353 C Z11, A11 - Charge and mass of daughter nucleus 6669 C << 5354 C Z22, A22 - Charge and mass of LCP or IMF 6670 C OUTPUT: << 5355 C 6671 C BARR - Barrier << 5356 C OUTPUT: 6672 C OMEGA - Curvature of the potential << 5357 C BARR - Barrier 6673 C << 5358 C OMEGA - Curvature of the potential 6674 C BASS MODEL NPA 1974 - used only if expansi << 5359 C 6675 (OPTEXP=1) C or one w << 5360 C BASS MODEL NPA 1974 - used only if expansion is considered (OPTEXP=1) 6676 explicitly (OPTBAR=1) C October 2011 - AK - << 5361 C or one wants this model explicitly (OPTBAR=1) 6677 parametrization of the barrier and its posit << 5362 C October 2011 - AK - new parametrization of the barrier and its position, 6678 et al., NPA 868 (2011) 1; this is now C defa << 5363 C see W.W. Qu et al., NPA 868 (2011) 1; this is now 6679 (OPTBAR=0) << 5364 C default option (OPTBAR=0) 6680 c << 5365 c 6681 c November 2016 - JLRS - Added this function << 5366 c November 2016 - JLRS - Added this function from abla07v4 6682 c << 5367 c 6683 */ << 5368 */ 6684 G4double BARR, OMEGA, RMAX; << 5369 G4double BARR, OMEGA, RMAX; 6685 RMAX = 1.1 * (ecld->rms[A1 - Z1][Z1] + ec << 5370 RMAX = 1.1 * (ecld->rms[A1-Z1][Z1]+ecld->rms[A2-Z2][Z2]) + 2.8; 6686 BARR = 1.345 * Z1 * Z2 / RMAX; << 5371 BARR = 1.345 * Z1 * Z2 / RMAX; 6687 // C Omega according to Avishai: << 5372 //C Omega according to Avishai: 6688 OMEGA = 4.5 / 197.3287; << 5373 OMEGA = 4.5 / 197.3287; 6689 5374 6690 // if(Z1<60){ 5375 // if(Z1<60){ 6691 // if(Z2==1 && A2==2) BARR = BARR * 1.1; 5376 // if(Z2==1 && A2==2) BARR = BARR * 1.1; 6692 // if(Z2==1 && A2==3) BARR = BARR * 1.1; 5377 // if(Z2==1 && A2==3) BARR = BARR * 1.1; 6693 // if(Z2==2 && A2==3) BARR = BARR * 1.3 << 5378 // if(Z2==2 && A2==3) BARR = BARR * 1.3; 6694 // if(Z2==2 && A2==4) BARR = BARR * 1.1; 5379 // if(Z2==2 && A2==4) BARR = BARR * 1.1; 6695 // } 5380 // } 6696 5381 6697 (*sOMEGA) = OMEGA; << 5382 (*sOMEGA)=OMEGA; 6698 (*sBARR) = BARR; << 5383 (*sBARR)=BARR; 6699 // << 5384 // 6700 return; << 5385 return; 6701 } 5386 } 6702 5387 6703 void G4Abla::barfit(G4int iz, G4int ia, G4int << 5388 void G4Abla::barfit(G4int iz, G4int ia, G4int il, G4double *sbfis, G4double *segs, G4double *selmax) 6704 { 5389 { 6705 // 2223 C VERSION FOR 32BIT COMPUTE << 5390 // 2223 C VERSION FOR 32BIT COMPUTER 6706 // 2224 C THIS SUBROUTINE RETURNS T << 5391 // 2224 C THIS SUBROUTINE RETURNS THE BARRIER HEIGHT BFIS, THE 6707 // 2225 C GROUND-STATE ENERGY SEGS, << 5392 // 2225 C GROUND-STATE ENERGY SEGS, IN MEV, AND THE ANGULAR MOMENTUM 6708 // 2226 C AT WHICH THE FISSION BARR << 5393 // 2226 C AT WHICH THE FISSION BARRIER DISAPPEARS, LMAX, IN UNITS OF 6709 // 2227 C H-BAR, WHEN CALLED WITH I << 5394 // 2227 C H-BAR, WHEN CALLED WITH INTEGER AGUMENTS IZ, THE ATOMIC 6710 // 2228 C NUMBER, IA, THE ATOMIC MA << 5395 // 2228 C NUMBER, IA, THE ATOMIC MASS NUMBER, AND IL, THE ANGULAR 6711 // 2229 C MOMENTUM IN UNITS OF H-BA << 5396 // 2229 C MOMENTUM IN UNITS OF H-BAR. (PLANCK'S CONSTANT DIVIDED BY 6712 // 2230 C 2*PI). << 5397 // 2230 C 2*PI). 6713 // 2231 C << 5398 // 2231 C 6714 // 2232 C THE FISSION BARRIER FO << 5399 // 2232 C THE FISSION BARRIER FO IL = 0 IS CALCULATED FROM A 7TH 6715 // 2233 C ORDER FIT IN TWO VARIABLE << 5400 // 2233 C ORDER FIT IN TWO VARIABLES TO 638 CALCULATED FISSION 6716 // 2234 C BARRIERS FOR Z VALUES FRO << 5401 // 2234 C BARRIERS FOR Z VALUES FROM 20 TO 110. THESE 638 BARRIERS ARE 6717 // ARE 2235 C FIT WITH AN RMS DEVIA << 5402 // 2235 C FIT WITH AN RMS DEVIATION OF 0.10 MEV BY THIS 49-PARAMETER 6718 // 2236 C FUNCTION. << 5403 // 2236 C FUNCTION. 6719 // 2237 C IF BARFIT IS CALLED WITH << 5404 // 2237 C IF BARFIT IS CALLED WITH (IZ,IA) VALUES OUTSIDE THE RANGE OF 6720 // OF 2238 C THE BARRIER HEIGHT IS << 5405 // 2238 C THE BARRIER HEIGHT IS SET TO 0.0, AND A MESSAGE IS PRINTED 6721 // 2239 C ON THE DEFAULT OUTPUT FIL << 5406 // 2239 C ON THE DEFAULT OUTPUT FILE. 6722 // 2240 C << 5407 // 2240 C 6723 // 2241 C FOR IL VALUES NOT EQUA << 5408 // 2241 C FOR IL VALUES NOT EQUAL TO ZERO, THE VALUES OF L AT WHICH 6724 // WHICH 2242 C THE BARRIER IS 80% << 5409 // 2242 C THE BARRIER IS 80% AND 20% OF THE L=0 VALUE ARE RESPECTIVELY 6725 // RESPECTIVELY << 5410 // 2243 C FIT TO 20-PARAMETER FUNCTIONS OF Z AND A, OVER A MORE 6726 // 2243 C FIT TO 20-PARAMETER FUNCT << 5411 // 2244 C RESTRICTED RANGE OF A VALUES, THAN IS THE CASE FOR L = 0. 6727 // 2244 C RESTRICTED RANGE OF A VAL << 5412 // 2245 C THE VALUE OF L WHERE THE BARRIER DISAPPEARS, LMAX IS FIT TO 6728 // 2245 C THE VALUE OF L WHERE THE << 5413 // 2246 C A 24-PARAMETER FUNCTION OF Z AND A, WITH THE SAME RANGE OF 6729 // TO 2246 C A 24-PARAMETER FUNCTI << 5414 // 2247 C Z AND A VALUES AS L-80 AND L-20. 6730 // 2247 C Z AND A VALUES AS L-80 AN << 5415 // 2248 C ONCE AGAIN, IF AN (IZ,IA) PAIR IS OUTSIDE OF THE RANGE OF 6731 // 2248 C ONCE AGAIN, IF AN (IZ, << 5416 // 2249 C VALIDITY OF THE FIT, THE BARRIER VALUE IS SET TO 0.0 AND A 6732 // OF 2249 C VALIDITY OF THE FIT, << 5417 // 2250 C MESSAGE IS PRINTED. THESE THREE VALUES (BFIS(L=0),L-80, AND 6733 // 2250 C MESSAGE IS PRINTED. THESE << 5418 // 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 << 5419 // 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 << 5420 // 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 << 5421 // 2254 C FOR THE REGION L < L-20. 6737 // FIT 2254 C FOR THE REGION L < L- << 5422 // 2255 C 6738 // GROUND STATE ENERGIES ARE CALCULATED << 5423 // 2256 C THE GROUND STATE ENERGIES ARE CALCULATED FROM A 6739 // IN Z, A, AND L TO 214 GROUND-STATE E << 5424 // 2257 C 120-PARAMETER FIT IN Z, A, AND L TO 214 GROUND-STATE ENERGIES 6740 // AND A VALUES. << 5425 // 2258 C FOR 36 DIFFERENT Z AND A VALUES. 6741 // 2259 C (THE RANGE OF Z AND A IS << 5426 // 2259 C (THE RANGE OF Z AND A IS THE SAME AS FOR L-80, L-20, AND 6742 // 2260 C L-MAX) << 5427 // 2260 C L-MAX) 6743 // 2261 C << 5428 // 2261 C 6744 // 2262 C THE CALCULATED BARRIER << 5429 // 2262 C THE CALCULATED BARRIERS FROM WHICH THE FITS WERE MADE WERE 6745 // WERE 2263 C CALCULATED IN 1983- << 5430 // 2263 C CALCULATED IN 1983-1984 BY A. J. SIERK OF LOS ALAMOS 6746 // ALAMOS 2264 C NATIONAL LABORATO << 5431 // 2264 C NATIONAL LABORATORY GROUP T-9, USING YUKAWA-PLUS-EXPONENTIAL 6747 // YUKAWA-PLUS-EXPONENTIAL << 5432 // 2265 C G4DOUBLE FOLDED NUCLEAR ENERGY, EXACT COULOMB DIFFUSENESS 6748 // 2265 C G4DOUBLE FOLDED NUCLEAR E << 5433 // 2266 C CORRECTIONS, AND DIFFUSE-MATTER MOMENTS OF INERTIA. 6749 // 2266 C CORRECTIONS, AND DIFFUSE- << 5434 // 2267 C THE PARAMETERS OF THE MODEL R-0 = 1.16 FM, AS 21.13 MEV, 6750 // 2267 C THE PARAMETERS OF THE MOD << 5435 // 2268 C KAPPA-S = 2.3, A = 0.68 FM. 6751 // 2268 C KAPPA-S = 2.3, A = 0.68 F << 5436 // 2269 C THE DIFFUSENESS OF THE MATTER AND CHARGE DISTRIBUTIONS USED 6752 // 2269 C THE DIFFUSENESS OF THE MA << 5437 // 2270 C CORRESPONDS TO A SURFACE DIFFUSENESS PARAMETER (DEFINED BY 6753 // USED 2270 C CORRESPONDS TO A SU << 5438 // 2271 C MYERS) OF 0.99 FM. THE CALCULATED BARRIERS FOR L = 0 ARE 6754 // (DEFINED BY 2271 C MYERS) OF 0.9 << 5439 // 2272 C ACCURATE TO A LITTLE LESS THAN 0.1 MEV; THE OUTPUT FROM 6755 // 0 ARE 2272 C ACCURATE TO A LITTL << 5440 // 2273 C THIS SUBROUTINE IS A LITTLE LESS ACCURATE. WORST ERRORS MAY BE 6756 // FROM 2273 C THIS SUBROUTINE IS << 5441 // 2274 C AS LARGE AS 0.5 MEV; CHARACTERISTIC UNCERTAINY IS IN THE RANGE 6757 // ERRORS MAY BE << 5442 // 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 << 5443 // 2276 C FROM THE 214 INPUT VALUES IS 0.20 MEV. THE MAXIMUM ERROR 6759 // RANGE << 5444 // 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 << 5445 // 2278 C IS PROLATE, AND MAY BE GREATER THAN 1.0 MEV FOR VERY NEUTRON 6761 // 2276 C FROM THE 214 INPUT VALUES << 5446 // 2279 C DEFICIENT NUCLEI, WITH L NEAR LMAX. FOR MOST NUCLEI LIKELY TO 6762 // 2277 C OCCURS FOR LIGHT NUCLEI I << 5447 // 2280 C BE ENCOUNTERED IN REAL EXPERIMENTS, THE MAXIMUM ERROR IS 6763 // STATE << 5448 // 2281 C CLOSER TO 0.5 MEV, AGAIN FOR LIGHT NUCLEI AND L NEAR LMAX. 6764 // 2278 C IS PROLATE, AND MAY BE GR << 5449 // 2282 C 6765 // NEUTRON << 5450 // 2283 C WRITTEN BY A. J. SIERK, LANL T-9 6766 // 2279 C DEFICIENT NUCLEI, WITH L << 5451 // 2284 C VERSION 1.0 FEBRUARY, 1984 6767 // TO 2280 C BE ENCOUNTERED IN REA << 5452 // 2285 C 6768 // 2281 C CLOSER TO 0.5 MEV, AGAIN << 5453 // 2286 C THE FOLLOWING IS NECESSARY FOR 32-BIT MACHINES LIKE DEC VAX, 6769 // 2282 C << 5454 // 2287 C IBM, ETC 6770 // 2283 C WRITTEN BY A. J. SIERK, L << 5455 6771 // 2284 C VERSION 1.0 FEBRUARY, 198 << 5456 G4double pa[7],pz[7],pl[10]; 6772 // 2285 C << 5457 for(G4int init_i = 0; init_i < 7; init_i++) { 6773 // 2286 C THE FOLLOWING IS NECESSAR << 5458 pa[init_i] = 0.0; 6774 // VAX, 2287 C IBM, ETC << 5459 pz[init_i] = 0.0; 6775 << 5460 } 6776 G4double pa[7], pz[7], pl[10]; << 5461 for(G4int init_i = 0; init_i < 10; init_i++) { 6777 for (G4int init_i = 0; init_i < 7; init_i << 5462 pl[init_i] = 0.0; 6778 { << 5463 } 6779 pa[init_i] = 0.0; << 5464 6780 pz[init_i] = 0.0; << 5465 G4double a = 0.0, z = 0.0, amin = 0.0, amax = 0.0, amin2 = 0.0; 6781 } << 5466 G4double amax2 = 0.0, aa = 0.0, zz = 0.0, bfis = 0.0; 6782 for (G4int init_i = 0; init_i < 10; init_ << 5467 G4double bfis0 = 0.0, ell = 0.0, el = 0.0, egs = 0.0, el80 = 0.0, el20 = 0.0; 6783 { << 5468 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; << 5469 G4double aj = 0.0, ak = 0.0, a1 = 0.0, a2 = 0.0; 6785 } << 5470 6786 << 5471 G4int i = 0, j = 0, k = 0, m = 0; 6787 G4double a = 0.0, z = 0.0, amin = 0.0, am << 5472 G4int l = 0; 6788 G4double amax2 = 0.0, aa = 0.0, zz = 0.0, << 5473 6789 G4double bfis0 = 0.0, ell = 0.0, el = 0.0 << 5474 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 << 5475 {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 << 5476 {-3.26367e+3, 1.62447e+3, 1.36856e+3, 1.31731e+3, 1.53372e+2}, 6792 << 5477 {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; << 5478 6794 G4int l = 0; << 5479 G4double elmcof[4][5] = {{1.84542e+3,-5.64002e+3, 5.66730e+3,-3.15150e+3, 9.54160e+2}, 6795 << 5480 {-2.24577e+3, 8.56133e+3,-9.67348e+3, 5.81744e+3,-1.86997e+3}, 6796 G4double emncof[4][5] = { { -9.01100e+2, << 5481 {2.79772e+3,-8.73073e+3, 9.19706e+3,-4.91900e+3, 1.37283e+3}, 6797 { 1.35355e+4, - << 5482 {-3.01866e+1, 1.41161e+3,-2.85919e+3, 2.13016e+3,-6.49072e+2}}; 6798 { -3.26367e+3, << 5483 6799 { 7.48863e+3, - << 5484 G4double emxcof[4][6] = {{9.43596e4,-2.241997e5,2.223237e5,-1.324408e5,4.68922e4,-8.83568e3}, 6800 << 5485 {-1.655827e5,4.062365e5,-4.236128e5,2.66837e5,-9.93242e4,1.90644e4}, 6801 G4double elmcof[4][5] = { { 1.84542e+3, - << 5486 {1.705447e5,-4.032e5,3.970312e5,-2.313704e5,7.81147e4,-1.322775e4}, 6802 { -2.24577e+3, << 5487 {-9.274555e4,2.278093e5,-2.422225e5,1.55431e5,-5.78742e4,9.97505e3}}; 6803 { 2.79772e+3, - << 5488 6804 { -3.01866e+1, << 5489 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 << 5490 {-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 << 5491 {1.37543304e+6,-3.65808988e+6, 5.47798999e+6,-3.78109283e+6, 1.84131765e+6, 1.53669695e+4,-6.96817834e+4}, 6807 { -1.655827e5, << 5492 {-8.56559835e+5, 2.48872266e+6,-4.07349128e+6, 3.12835899e+6, -1.62394090e+6, 1.19797378e+5, 4.25737058e+4}, 6808 { 1.705447e5, - << 5493 {3.28723311e+5,-1.09892175e+6, 2.03997269e+6,-1.77185718e+6, 9.96051545e+5,-1.53305699e+5,-1.12982954e+4}, 6809 { -9.274555e4, << 5494 {4.15850238e+4, 7.29653408e+4,-4.93776346e+5, 6.01254680e+5, -4.01308292e+5, 9.65968391e+4,-3.49596027e+3}, 6810 << 5495 {-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] = { << 5496 6812 { 5.11819909e+5, -1.30303186e+6, 1.90 << 5497 const G4int sizex = 5; 6813 { -1.13269453e+6, 2.97764590e+6, -4.5 << 5498 const G4int sizey = 6; 6814 { 1.37543304e+6, -3.65808988e+6, 5.47 << 5499 const G4int sizez = 4; 6815 { -8.56559835e+5, 2.48872266e+6, -4.0 << 5500 6816 { 3.28723311e+5, -1.09892175e+6, 2.03 << 5501 G4double egscof[sizey][sizey][sizez]; 6817 { 4.15850238e+4, 7.29653408e+4, -4.93 << 5502 6818 { -1.82751044e+5, 3.91386300e+5, -3.0 << 5503 G4double egs1[sizey][sizex] = {{1.927813e5, 7.666859e5, 6.628436e5, 1.586504e5,-7.786476e3}, 6819 }; << 5504 {-4.499687e5,-1.784644e6,-1.546968e6,-4.020658e5,-3.929522e3}, 6820 << 5505 {4.667741e5, 1.849838e6, 1.641313e6, 5.229787e5, 5.928137e4}, 6821 const G4int sizex = 5; << 5506 {-3.017927e5,-1.206483e6,-1.124685e6,-4.478641e5,-8.682323e4}, 6822 const G4int sizey = 6; << 5507 {1.226517e5, 5.015667e5, 5.032605e5, 2.404477e5, 5.603301e4}, 6823 const G4int sizez = 4; << 5508 {-1.752824e4,-7.411621e4,-7.989019e4,-4.175486e4,-1.024194e4}}; 6824 << 5509 6825 G4double egscof[sizey][sizey][sizez]; << 5510 G4double egs2[sizey][sizex] = {{-6.459162e5,-2.903581e6,-3.048551e6,-1.004411e6,-6.558220e4}, 6826 << 5511 {1.469853e6, 6.564615e6, 6.843078e6, 2.280839e6, 1.802023e5}, 6827 G4double egs1[sizey][sizex] = { { 1.92781 << 5512 {-1.435116e6,-6.322470e6,-6.531834e6,-2.298744e6,-2.639612e5}, 6828 { -4.4996 << 5513 {8.665296e5, 3.769159e6, 3.899685e6, 1.520520e6, 2.498728e5}, 6829 { 4.66774 << 5514 {-3.302885e5,-1.429313e6,-1.512075e6,-6.744828e5,-1.398771e5}, 6830 { -3.0179 << 5515 {4.958167e4, 2.178202e5, 2.400617e5, 1.167815e5, 2.663901e4}}; 6831 { 1.22651 << 5516 6832 { -1.7528 << 5517 G4double egs3[sizey][sizex] = {{3.117030e5, 1.195474e6, 9.036289e5, 6.876190e4,-6.814556e4}, 6833 << 5518 {-7.394913e5,-2.826468e6,-2.152757e6,-2.459553e5, 1.101414e5}, 6834 G4double egs2[sizey][sizex] = { { -6.4591 << 5519 {7.918994e5, 3.030439e6, 2.412611e6, 5.228065e5, 8.542465e3}, 6835 { 1.46985 << 5520 {-5.421004e5,-2.102672e6,-1.813959e6,-6.251700e5,-1.184348e5}, 6836 { -1.4351 << 5521 {2.370771e5, 9.459043e5, 9.026235e5, 4.116799e5, 1.001348e5}, 6837 { 8.66529 << 5522 {-4.227664e4,-1.738756e5,-1.795906e5,-9.292141e4,-2.397528e4}}; 6838 { -3.3028 << 5523 6839 { 4.95816 << 5524 G4double egs4[sizey][sizex] = {{-1.072763e5,-5.973532e5,-6.151814e5, 7.371898e4, 1.255490e5}, 6840 << 5525 {2.298769e5, 1.265001e6, 1.252798e6,-2.306276e5,-2.845824e5}, 6841 G4double egs3[sizey][sizex] = { { 3.11703 << 5526 {-2.093664e5,-1.100874e6,-1.009313e6, 2.705945e5, 2.506562e5}, 6842 { -7.3949 << 5527 {1.274613e5, 6.190307e5, 5.262822e5,-1.336039e5,-1.115865e5}, 6843 { 7.91899 << 5528 {-5.715764e4,-2.560989e5,-2.228781e5,-3.222789e3, 1.575670e4}, 6844 { -5.4210 << 5529 {1.189447e4, 5.161815e4, 4.870290e4, 1.266808e4, 2.069603e3}}; 6845 { 2.37077 << 5530 6846 { -4.2276 << 5531 for(i = 0; i < sizey; i++) { 6847 << 5532 for(j = 0; j < sizex; j++) { 6848 G4double egs4[sizey][sizex] = { { -1.0727 << 5533 egscof[i][j][0] = egs1[i][j]; 6849 { 2.29876 << 5534 egscof[i][j][1] = egs2[i][j]; 6850 { -2.0936 << 5535 egscof[i][j][2] = egs3[i][j]; 6851 { 1.27461 << 5536 egscof[i][j][3] = egs4[i][j]; 6852 { -5.7157 << 5537 } 6853 { 1.18944 << 5538 } 6854 << 5539 6855 for (i = 0; i < sizey; i++) << 5540 // the program starts here 6856 { << 5541 if (iz < 19 || iz > 111) { 6857 for (j = 0; j < sizex; j++) << 5542 goto barfit900; 6858 { << 5543 } 6859 egscof[i][j][0] = egs1[i][j]; << 5544 6860 egscof[i][j][1] = egs2[i][j]; << 5545 if(iz > 102 && il > 0) { 6861 egscof[i][j][2] = egs3[i][j]; << 5546 goto barfit902; 6862 egscof[i][j][3] = egs4[i][j]; << 5547 } 6863 } << 5548 6864 } << 5549 z=G4double(iz); 6865 << 5550 a=G4double(ia); 6866 // the program starts here << 5551 el=G4double(il); 6867 if (iz < 19 || iz > 122) << 5552 amin= 1.2e0*z + 0.01e0*z*z; 6868 { << 5553 amax= 5.8e0*z - 0.024e0*z*z; 6869 goto barfit900; << 5554 6870 } << 5555 if(a < amin || a > amax) { 6871 << 5556 goto barfit910; 6872 if (iz > 122 && il > 0) << 5557 } 6873 { << 5558 6874 goto barfit902; << 5559 // angul.mom.zero barrier 6875 } << 5560 aa=2.5e-3*a; 6876 << 5561 zz=1.0e-2*z; 6877 z = G4double(iz); << 5562 ell=1.0e-2*el; 6878 a = G4double(ia); << 5563 bfis0 = 0.0; 6879 el = G4double(il); << 5564 lpoly(zz,7,pz); 6880 amin = 1.2e0 * z + 0.01e0 * z * z; << 5565 lpoly(aa,7,pa); 6881 amax = 5.8e0 * z - 0.024e0 * z * z; << 5566 6882 << 5567 for(i = 0; i < 7; i++) { //do 10 i=1,7 6883 if (a < amin || a > amax) << 5568 for(j = 0; j < 7; j++) { //do 10 j=1,7 6884 { << 5569 bfis0=bfis0+elzcof[j][i]*pz[i]*pa[j]; 6885 goto barfit910; << 5570 } 6886 } << 5571 } 6887 << 5572 6888 // angul.mom.zero barrier << 5573 bfis=bfis0; 6889 aa = 2.5e-3 * a; << 5574 6890 zz = 1.0e-2 * z; << 5575 (*sbfis)=bfis; 6891 ell = 1.0e-2 * el; << 5576 egs=0.0; 6892 bfis0 = 0.0; << 5577 (*segs)=egs; 6893 lpoly(zz, 7, pz); << 5578 6894 lpoly(aa, 7, pa); << 5579 // values of l at which the barrier 6895 << 5580 // is 20%(el20) and 80%(el80) of l=0 value 6896 for (i = 0; i < 7; i++) << 5581 amin2 = 1.4e0*z + 0.009e0*z*z; 6897 { // do 10 i=1,7 << 5582 amax2 = 20.e0 + 3.0e0*z; 6898 for (j = 0; j < 7; j++) << 5583 6899 { // do 10 j=1,7 << 5584 if((a < amin2-5.e0 || a > amax2+10.e0) && il > 0) { 6900 bfis0 = bfis0 + elzcof[j][i] * pz << 5585 goto barfit920; 6901 } << 5586 } 6902 } << 5587 6903 << 5588 lpoly(zz,5,pz); 6904 bfis = bfis0; << 5589 lpoly(aa,4,pa); 6905 << 5590 el80=0.0; 6906 (*sbfis) = bfis; << 5591 el20=0.0; 6907 egs = 0.0; << 5592 elmax=0.0; 6908 (*segs) = egs; << 5593 6909 << 5594 for(i = 0; i < 4; i++) { 6910 // values of l at which the barrier << 5595 for(j = 0; j < 5; j++) { 6911 // is 20%(el20) and 80%(el80) of l=0 valu << 5596 el80 = el80 + elmcof[i][j]*pz[j]*pa[i]; 6912 amin2 = 1.4e0 * z + 0.009e0 * z * z; << 5597 el20 = el20 + emncof[i][j]*pz[j]*pa[i]; 6913 amax2 = 20.e0 + 3.0e0 * z; << 5598 } 6914 << 5599 } 6915 if ((a < amin2 - 5.e0 || a > amax2 + 10.e << 5600 6916 { << 5601 sel80 = el80; 6917 goto barfit920; << 5602 sel20 = el20; 6918 } << 5603 6919 << 5604 // value of l (elmax) where barrier disapp. 6920 lpoly(zz, 5, pz); << 5605 lpoly(zz,6,pz); 6921 lpoly(aa, 4, pa); << 5606 lpoly(ell,9,pl); 6922 el80 = 0.0; << 5607 6923 el20 = 0.0; << 5608 for(i = 0; i < 4; i++) { //do 30 i= 1,4 6924 elmax = 0.0; << 5609 for(j = 0; j < 6; j++) { //do 30 j=1,6 6925 << 5610 elmax = elmax + emxcof[i][j]*pz[j]*pa[i]; 6926 for (i = 0; i < 4; i++) << 5611 } 6927 { << 5612 } 6928 for (j = 0; j < 5; j++) << 5613 6929 { << 5614 (*selmax)=elmax; 6930 el80 = el80 + elmcof[i][j] * pz[j << 5615 6931 el20 = el20 + emncof[i][j] * pz[j << 5616 // value of barrier at ang.mom. l 6932 } << 5617 if(il < 1){ 6933 } << 5618 return; 6934 << 5619 } 6935 sel80 = el80; << 5620 6936 sel20 = el20; << 5621 x = sel20/(*selmax); 6937 << 5622 y = sel80/(*selmax); 6938 // value of l (elmax) where barrier disap << 5623 6939 lpoly(zz, 6, pz); << 5624 if(el <= sel20) { 6940 lpoly(ell, 9, pl); << 5625 // low l 6941 << 5626 q = 0.2/(std::pow(sel20,2)*std::pow(sel80,2)*(sel20-sel80)); 6942 for (i = 0; i < 4; i++) << 5627 qa = q*(4.0*std::pow(sel80,3) - std::pow(sel20,3)); 6943 { // do 30 i= 1,4 << 5628 qb = -q*(4.0*std::pow(sel80,2) - std::pow(sel20,2)); 6944 for (j = 0; j < 6; j++) << 5629 bfis = bfis*(1.0 + qa*std::pow(el,2) + qb*std::pow(el,3)); 6945 { // do 30 j=1,6 << 5630 } 6946 elmax = elmax + emxcof[i][j] * pz << 5631 else { 6947 } << 5632 // high l 6948 } << 5633 aj = (-20.0*std::pow(x,5) + 25.e0*std::pow(x,4) - 4.0)*std::pow((y-1.0),2)*y*y; 6949 << 5634 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; << 5635 q = 0.2/(std::pow((y-x)*((1.0-x)*(1.0-y)*x*y),2)); 6951 << 5636 qa = q*(aj*y - ak*x); 6952 // value of barrier at ang.mom. l << 5637 qb = -q*(aj*(2.0*y + 1.0) - ak*(2.0*x + 1.0)); 6953 if (il < 1) << 5638 z = el/(*selmax); 6954 { << 5639 a1 = 4.0*std::pow(z,5) - 5.0*std::pow(z,4) + 1.0; 6955 return; << 5640 a2 = qa*(2.e0*z + 1.e0); 6956 } << 5641 bfis=bfis*(a1 + (z - 1.e0)*(a2 + qb*z)*z*z*(z - 1.e0)); 6957 << 5642 } 6958 x = sel20 / (*selmax); << 5643 6959 y = sel80 / (*selmax); << 5644 if(bfis <= 0.0) { 6960 << 5645 bfis=0.0; 6961 if (el <= sel20) << 5646 } 6962 { << 5647 6963 // low l << 5648 if(el > (*selmax)) { 6964 q = 0.2 / (std::pow(sel20, 2) * std:: << 5649 bfis=0.0; 6965 qa = q * (4.0 * std::pow(sel80, 3) - << 5650 } 6966 qb = -q * (4.0 * std::pow(sel80, 2) - << 5651 (*sbfis)=bfis; 6967 bfis = bfis * (1.0 + qa * std::pow(el << 5652 6968 } << 5653 // now calculate rotating ground state energy 6969 else << 5654 if(el > (*selmax)) { 6970 { << 5655 return; 6971 // high l << 5656 } 6972 aj = (-20.0 * std::pow(x, 5) + 25.e0 << 5657 6973 ak = (-20.0 * std::pow(y, 5) + 25.0 * << 5658 for(k = 0; k < 4; k++) { 6974 q = 0.2 / (std::pow((y - x) * ((1.0 - << 5659 for(l = 0; l < 6; l++) { 6975 qa = q * (aj * y - ak * x); << 5660 for(m = 0; m < 5; m++) { 6976 qb = -q * (aj * (2.0 * y + 1.0) - ak << 5661 egs = egs + egscof[l][m][k]*pz[l]*pa[k]*pl[2*m]; 6977 z = el / (*selmax); << 5662 } 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 } 5663 } 7026 (*segs) = 0.0; << 5664 } 7027 (*selmax) = 0.0; << 7028 return; << 7029 << 7030 barfit902: << 7031 (*sbfis) = 0.0; << 7032 (*segs) = 0.0; << 7033 (*selmax) = 0.0; << 7034 return; << 7035 5665 7036 barfit910: << 5666 (*segs)=egs; 7037 (*sbfis) = 0.0; << 5667 if((*segs) < 0.0) { 7038 (*segs) = 0.0; << 5668 (*segs)=0.0; 7039 (*selmax) = 0.0; << 5669 } 7040 return; << 5670 7041 << 5671 return; 7042 barfit920: << 5672 7043 (*sbfis) = 0.0; << 5673 barfit900: //continue 7044 (*segs) = 0.0; << 5674 (*sbfis)=0.0; 7045 (*selmax) = 0.0; << 5675 // for z<19 sbfis set to 1.0e3 7046 return; << 5676 if (iz < 19) { >> 5677 (*sbfis) = 1.0e3; >> 5678 } >> 5679 (*segs)=0.0; >> 5680 (*selmax)=0.0; >> 5681 return; >> 5682 >> 5683 barfit902: >> 5684 (*sbfis)=0.0; >> 5685 (*segs)=0.0; >> 5686 (*selmax)=0.0; >> 5687 return; >> 5688 >> 5689 barfit910: >> 5690 (*sbfis)=0.0; >> 5691 (*segs)=0.0; >> 5692 (*selmax)=0.0; >> 5693 return; >> 5694 >> 5695 barfit920: >> 5696 (*sbfis)=0.0; >> 5697 (*segs)=0.0; >> 5698 (*selmax)=0.0; >> 5699 return; 7047 } 5700 } 7048 5701 7049 G4double G4Abla::erf(G4double x) 5702 G4double G4Abla::erf(G4double x) 7050 { 5703 { 7051 G4double ferf; << 5704 G4double ferf; 7052 5705 7053 if (x < 0.) << 5706 if(x<0.){ 7054 { << 5707 ferf=-gammp(0.5,x*x); 7055 ferf = -gammp(0.5, x * x); << 5708 }else{ 7056 } << 5709 ferf=gammp(0.5,x*x);; 7057 else << 5710 } 7058 { << 5711 return ferf; 7059 ferf = gammp(0.5, x * x); << 7060 ; << 7061 } << 7062 return ferf; << 7063 } 5712 } 7064 5713 7065 G4double G4Abla::gammp(G4double a, G4double x 5714 G4double G4Abla::gammp(G4double a, G4double x) 7066 { 5715 { 7067 G4double fgammp; << 5716 G4double fgammp; 7068 G4double gammcf, gamser, gln = 0.; << 5717 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 5718 7121 void G4Abla::gser(G4double* gamser, G4double << 5719 if(x<0.0 || a<=0.0)std::cout << "G4Abla::gammp = bad arguments in gammp" << std::endl; 7122 { << 5720 if(x<a+1.){ 7123 G4double fgamser, ap, sum, del; << 5721 gser(&gamser,a,x,gln); 7124 G4double eps = 3e-7; << 5722 fgammp=gamser; 7125 G4int itmax = 100; << 5723 }else{ 7126 << 5724 gcf(&gammcf,a,x,gln); 7127 gln = gammln(a); << 5725 fgammp=1.-gammcf; 7128 if (x <= 0.) << 5726 } 7129 { << 5727 return fgammp; 7130 if (x < 0.) << 5728 } 7131 std::cout << "G4Abla::gser = x < << 5729 7132 (*gamser) = 0.0; << 5730 void G4Abla::gcf(G4double *gammcf,G4double a,G4double x,G4double gln) 7133 return; << 5731 { 7134 } << 5732 G4double fgammcf,del; 7135 ap = a; << 5733 G4double eps=3e-7; 7136 sum = 1. / a; << 5734 G4double fpmin=1e-30; 7137 del = sum; << 5735 G4int itmax=100; 7138 for (G4int n = 0; n < itmax; n++) << 5736 G4double an,b,c,d,h; 7139 { << 5737 7140 ap = ap + 1.; << 5738 gln=gammln(a); 7141 del = del * x / ap; << 5739 b=x+1.-a; 7142 sum = sum + del; << 5740 c=1./fpmin; 7143 if (std::fabs(del) < std::fabs(sum) * << 5741 d=1./b; 7144 goto dir1; << 5742 h=d; 7145 } << 5743 for(G4int i=1;i<=itmax;i++){ 7146 std::cout << "a too large, ITMAX too smal << 5744 an=-i*(i-a); 7147 dir1: << 5745 b=b+2.; 7148 fgamser = sum * std::exp(-x + a * std::lo << 5746 d=an*d+b; 7149 (*gamser) = fgamser; << 5747 if(std::fabs(d)<fpmin)d=fpmin; 7150 return; << 5748 c=b+an/c; >> 5749 if(std::fabs(c)<fpmin)c=fpmin; >> 5750 d=1.0/d; >> 5751 del=d*c; >> 5752 h=h*del; >> 5753 if(std::fabs(del-1.)<eps)goto dir1; >> 5754 } >> 5755 std::cout << "a too large, ITMAX too small in gcf" << std::endl; >> 5756 dir1: >> 5757 fgammcf=std::exp(-x+a*std::log(x)-gln)*h; >> 5758 (*gammcf)=fgammcf; >> 5759 return; >> 5760 } >> 5761 >> 5762 void G4Abla::gser(G4double *gamser,G4double a,G4double x,G4double gln) >> 5763 { >> 5764 G4double fgamser,ap,sum,del; >> 5765 G4double eps=3e-7; >> 5766 G4int itmax=100; >> 5767 >> 5768 gln=gammln(a); >> 5769 if(x<=0.){ >> 5770 if(x<0.)std::cout << "G4Abla::gser = x < 0 in gser" << std::endl; >> 5771 (*gamser)=0.0; >> 5772 return; >> 5773 } >> 5774 ap=a; >> 5775 sum=1./a; >> 5776 del=sum; >> 5777 for(G4int n=0;n<itmax;n++){ >> 5778 ap=ap+1.; >> 5779 del=del*x/ap; >> 5780 sum=sum+del; >> 5781 if(std::fabs(del)<std::fabs(sum)*eps)goto dir1; >> 5782 } >> 5783 std::cout << "a too large, ITMAX too small in gser" << std::endl; >> 5784 dir1: >> 5785 fgamser=sum*std::exp(-x+a*std::log(x)-gln); >> 5786 (*gamser)=fgamser; >> 5787 return; 7151 } 5788 } 7152 5789 7153 G4double G4Abla::gammln(G4double xx) 5790 G4double G4Abla::gammln(G4double xx) 7154 { 5791 { 7155 G4double fgammln, x, ser, tmp, y; << 5792 G4double fgammln,x,ser,tmp,y; 7156 G4double cof[6] = { 76.18009172947146, - << 5793 G4double cof[6]={76.18009172947146,-86.50532032941677,24.01409824083091, 7157 -1.231739572450155, 0 << 5794 -1.231739572450155,0.1208650973866179e-2,-0.5395239384953e-5}; 7158 G4double stp = 2.5066282746310005; << 5795 G4double stp=2.5066282746310005; 7159 << 5796 7160 x = xx; << 5797 x=xx; 7161 y = x; << 5798 y=x; 7162 tmp = x + 5.5; << 5799 tmp=x+5.5; 7163 tmp = (x + 0.5) * std::log(tmp) - tmp; << 5800 tmp=(x+0.5)*std::log(tmp)-tmp; 7164 ser = 1.000000000190015; << 5801 ser=1.000000000190015; 7165 for (G4int j = 0; j < 6; j++) << 5802 for(G4int j=0;j<6;j++){ 7166 { << 5803 y=y+1.; 7167 y = y + 1.; << 5804 ser=ser+cof[j]/y; 7168 ser = ser + cof[j] / y; << 5805 } 7169 } << 7170 5806 7171 return fgammln = tmp + std::log(stp * ser << 5807 return fgammln=tmp+std::log(stp*ser/x); 7172 } 5808 } 7173 5809 >> 5810 7174 G4double G4Abla::fd(G4double E) 5811 G4double G4Abla::fd(G4double E) 7175 { 5812 { 7176 // DISTRIBUTION DE MAXWELL << 5813 // DISTRIBUTION DE MAXWELL 7177 5814 7178 return (E * std::exp(-E)); << 5815 return (E*std::exp(-E)); 7179 } 5816 } 7180 5817 7181 G4double G4Abla::f(G4double E) 5818 G4double G4Abla::f(G4double E) 7182 { 5819 { 7183 // FONCTION INTEGRALE DE FD(E) << 5820 // FONCTION INTEGRALE DE FD(E) 7184 return (1.0 - (E + 1.0) * std::exp(-E)); << 5821 return (1.0 - (E + 1.0) * std::exp(-E)); 7185 } 5822 } 7186 5823 7187 G4double G4Abla::fmaxhaz(G4double x) 5824 G4double G4Abla::fmaxhaz(G4double x) 7188 { 5825 { 7189 return (-x * std::log(G4AblaRandom::flat( << 5826 return ( -x*std::log(G4AblaRandom::flat()) -x*std::log(G4AblaRandom::flat()) -x*std::log(G4AblaRandom::flat()) ) ; 7190 x * std::log(G4AblaRandom::flat() << 7191 } 5827 } 7192 5828 7193 G4double G4Abla::fmaxhaz_old(G4double T) 5829 G4double G4Abla::fmaxhaz_old(G4double T) 7194 { 5830 { 7195 // tirage aleatoire dans une maxwellienne << 5831 // tirage aleatoire dans une maxwellienne 7196 // t : temperature << 5832 // t : temperature 7197 // << 5833 // 7198 // declaration des variables << 5834 // declaration des variables 7199 // << 5835 // 7200 << 5836 7201 const G4int pSize = 101; << 5837 const G4int pSize = 101; 7202 G4double p[pSize]; << 5838 G4double p[pSize]; 7203 << 5839 7204 // ial generateur pour le cascade (et les << 5840 // ial generateur pour le cascade (et les iy pour eviter les correlations) 7205 G4int i = 0; << 5841 G4int i = 0; 7206 G4int itest = 0; << 5842 G4int itest = 0; 7207 // programme principal << 5843 // programme principal 7208 << 5844 7209 // calcul des p(i) par approximation de n << 5845 // calcul des p(i) par approximation de newton 7210 p[pSize - 1] = 8.0; << 5846 p[pSize-1] = 8.0; 7211 G4double x = 0.1; << 5847 G4double x = 0.1; 7212 G4double x1 = 0.0; << 5848 G4double x1 = 0.0; 7213 G4double y = 0.0; << 5849 G4double y = 0.0; 7214 << 5850 7215 if (itest == 1) << 5851 if (itest == 1) { 7216 { << 5852 goto fmaxhaz120; 7217 goto fmaxhaz120; << 5853 } 7218 } << 5854 7219 << 5855 for(i = 1; i <= 99; i++) { 7220 for (i = 1; i <= 99; i++) << 5856 fmaxhaz20: 7221 { << 5857 x1 = x - (f(x) - G4double(i)/100.0)/fd(x); 7222 fmaxhaz20: << 5858 x = x1; 7223 x1 = x - (f(x) - G4double(i) / 100.0) << 5859 if (std::fabs(f(x) - G4double(i)/100.0) < 1e-5) { 7224 x = x1; << 5860 goto fmaxhaz100; 7225 if (std::fabs(f(x) - G4double(i) / 10 << 5861 } 7226 { << 5862 goto fmaxhaz20; 7227 goto fmaxhaz100; << 5863 fmaxhaz100: 7228 } << 5864 p[i] = x; 7229 goto fmaxhaz20; << 5865 } //end do 7230 fmaxhaz100: << 5866 7231 p[i] = x; << 5867 // itest = 1; 7232 } // end do << 5868 itest = 0; 7233 << 5869 // tirage aleatoire et calcul du x correspondant 7234 // itest = 1; << 5870 // par regression lineaire 7235 itest = 0; << 5871 fmaxhaz120: 7236 // tirage aleatoire et calcul du x corres << 7237 // par regression lineaire << 7238 fmaxhaz120: << 7239 y = G4AblaRandom::flat(); 5872 y = G4AblaRandom::flat(); 7240 i = nint(y * 100); << 5873 i = nint(y*100); 7241 5874 7242 // 2590 c ici on evite froidement les d << 5875 // 2590 c ici on evite froidement les depassements de tableaux....(a.b. 3/9/99) 7243 // 3/9/99) << 5876 if(i == 0) { 7244 if (i == 0) << 5877 goto fmaxhaz120; 7245 { << 5878 } 7246 goto fmaxhaz120; << 5879 7247 } << 5880 if (i == 1) { 7248 << 5881 x = p[i]*y*100; 7249 if (i == 1) << 5882 } 7250 { << 5883 else { 7251 x = p[i] * y * 100; << 5884 x = (p[i] - p[i-1])*(y*100 - i) + p[i]; 7252 } << 5885 } 7253 else << 5886 7254 { << 5887 return(x*T); 7255 x = (p[i] - p[i - 1]) * (y * 100 - i) << 5888 } 7256 } << 5889 7257 << 5890 G4double G4Abla::pace2(G4double a, G4double z) 7258 return (x * T); << 5891 { 7259 } << 5892 // PACE2 7260 << 5893 // Cette fonction retourne le defaut de masse du noyau A,Z en MeV 7261 void G4Abla::guet(G4double* x_par, G4double* << 5894 // Revisee pour a, z flottants 25/4/2002 = 7262 { << 5895 7263 // TABLE DE MASSES ET FORMULE DE MASSE TI << 5896 G4double fpace2 = 0.0; 7264 // Gives the theoritical value for mass e << 5897 7265 // Revisee pour x, z flottants 25/4/2002 << 5898 G4int ii = idint(a+0.5); 7266 << 5899 G4int jj = idint(z+0.5); 7267 // real*8 x,z << 5900 7268 // dimension q(0:50,0:70) << 5901 if(ii <= 0 || jj < 0) { 7269 G4double x = (*x_par); << 5902 fpace2=0.; 7270 G4double z = (*z_par); << 5903 return fpace2; 7271 G4double find = (*find_par); << 5904 } 7272 << 5905 7273 const G4int qrows = 50; << 5906 if(jj > 300) { 7274 const G4int qcols = 70; << 5907 fpace2=0.0; 7275 G4double q[qrows][qcols]; << 5908 } 7276 for (G4int init_i = 0; init_i < qrows; in << 5909 else { 7277 { << 5910 fpace2=pace->dm[ii][jj]; 7278 for (G4int init_j = 0; init_j < qcols << 5911 } 7279 { << 5912 fpace2=fpace2/1000.; 7280 q[init_i][init_j] = 0.0; << 5913 7281 } << 5914 if(pace->dm[ii][jj] == 0.) { 7282 } << 5915 if(ii < 12) { 7283 << 5916 fpace2=-500.; 7284 G4int ix = G4int(std::floor(x + 0.5)); << 5917 } 7285 G4int iz = G4int(std::floor(z + 0.5)); << 5918 else { 7286 G4double zz = iz; << 5919 guet(&a, &z, &fpace2); 7287 G4double xx = ix; << 5920 fpace2=fpace2-ii*931.5; 7288 find = 0.0; << 5921 fpace2=fpace2/1000.; 7289 G4double avol = 15.776; << 5922 } 7290 G4double asur = -17.22; << 5923 } 7291 G4double ac = -10.24; << 5924 7292 G4double azer = 8.0; << 5925 return fpace2; 7293 G4double xjj = -30.03; << 5926 } 7294 G4double qq = -35.4; << 5927 7295 G4double c1 = -0.737; << 5928 void G4Abla::guet(G4double *x_par, G4double *z_par, G4double *find_par) 7296 G4double c2 = 1.28; << 5929 { 7297 << 5930 // TABLE DE MASSES ET FORMULE DE MASSE TIRE DU PAPIER DE BRACK-GUET 7298 if (ix <= 7) << 5931 // Gives the theoritical value for mass excess... 7299 { << 5932 // Revisee pour x, z flottants 25/4/2002 7300 q[0][1] = 939.50; << 5933 7301 q[1][1] = 938.21; << 5934 //real*8 x,z 7302 q[1][2] = 1876.1; << 5935 // dimension q(0:50,0:70) 7303 q[1][3] = 2809.39; << 5936 G4double x = (*x_par); 7304 q[2][4] = 3728.34; << 5937 G4double z = (*z_par); 7305 q[2][3] = 2809.4; << 5938 G4double find = (*find_par); 7306 q[2][5] = 4668.8; << 5939 7307 q[2][6] = 5606.5; << 5940 const G4int qrows = 50; 7308 q[3][5] = 4669.1; << 5941 const G4int qcols = 70; 7309 q[3][6] = 5602.9; << 5942 G4double q[qrows][qcols]; 7310 q[3][7] = 6535.27; << 5943 for(G4int init_i = 0; init_i < qrows; init_i++) { 7311 q[4][6] = 5607.3; << 5944 for(G4int init_j = 0; init_j < qcols; init_j++) { 7312 q[4][7] = 6536.1; << 5945 q[init_i][init_j] = 0.0; 7313 q[5][7] = 6548.3; << 5946 } 7314 find = q[iz][ix]; << 5947 } 7315 } << 5948 7316 else << 5949 G4int ix=G4int(std::floor(x+0.5)); 7317 { << 5950 G4int iz=G4int(std::floor(z+0.5)); 7318 G4double xneu = xx - zz; << 5951 G4double zz = iz; 7319 G4double si = (xneu - zz) / xx; << 5952 G4double xx = ix; 7320 G4double x13 = std::pow(xx, .333); << 5953 find = 0.0; 7321 G4double ee1 = c1 * zz * zz / x13; << 5954 G4double avol = 15.776; 7322 G4double ee2 = c2 * zz * zz / xx; << 5955 G4double asur = -17.22; 7323 G4double aux = 1. + (9. * xjj / 4. / << 5956 G4double ac = -10.24; 7324 G4double ee3 = xjj * xx * si * si / a << 5957 G4double azer = 8.0; 7325 G4double ee4 = avol * xx + asur * (st << 5958 G4double xjj = -30.03; 7326 G4double tota = ee1 + ee2 + ee3 + ee4 << 5959 G4double qq = -35.4; 7327 find = 939.55 * xneu + 938.77 * zz - << 5960 G4double c1 = -0.737; 7328 } << 5961 G4double c2 = 1.28; 7329 << 5962 7330 (*x_par) = x; << 5963 if(ix <= 7) { 7331 (*z_par) = z; << 5964 q[0][1]=939.50; 7332 (*find_par) = find; << 5965 q[1][1]=938.21; >> 5966 q[1][2]=1876.1; >> 5967 q[1][3]=2809.39; >> 5968 q[2][4]=3728.34; >> 5969 q[2][3]=2809.4; >> 5970 q[2][5]=4668.8; >> 5971 q[2][6]=5606.5; >> 5972 q[3][5]=4669.1; >> 5973 q[3][6]=5602.9; >> 5974 q[3][7]=6535.27; >> 5975 q[4][6]=5607.3; >> 5976 q[4][7]=6536.1; >> 5977 q[5][7]=6548.3; >> 5978 find=q[iz][ix]; >> 5979 } >> 5980 else { >> 5981 G4double xneu=xx-zz; >> 5982 G4double si=(xneu-zz)/xx; >> 5983 G4double x13=std::pow(xx,.333); >> 5984 G4double ee1=c1*zz*zz/x13; >> 5985 G4double ee2=c2*zz*zz/xx; >> 5986 G4double aux=1.+(9.*xjj/4./qq/x13); >> 5987 G4double ee3=xjj*xx*si*si/aux; >> 5988 G4double ee4=avol*xx+asur*(std::pow(xx,.666))+ac*x13+azer; >> 5989 G4double tota = ee1 + ee2 + ee3 + ee4; >> 5990 find = 939.55*xneu+938.77*zz - tota; >> 5991 } >> 5992 >> 5993 (*x_par) = x; >> 5994 (*z_par) = z; >> 5995 (*find_par) = find; 7333 } 5996 } 7334 // 5997 // 7335 5998 7336 void G4Abla::FillData(G4int IMULTBU, G4int IE << 5999 void G4Abla::FillData(G4int IMULTBU,G4int IEV_TAB){ 7337 { << 7338 6000 7339 const G4double c = 29.9792458; 6001 const G4double c = 29.9792458; 7340 const G4double fmp = 938.27231, fmn = 939 << 6002 const G4double fmp = 938.27231,fmn=939.56563,fml=1115.683; 7341 6003 7342 varntp->ntrack = IMULTBU + IEV_TAB; 6004 varntp->ntrack = IMULTBU + IEV_TAB; 7343 6005 7344 for (G4int i = 0; i < IMULTBU; i++) << 6006 G4int intp=0; 7345 { << 7346 6007 7347 G4int iz = nint(BU_TAB[i][7]); << 6008 for(G4int i=0;i<IMULTBU;i++){ 7348 G4int ia = nint(BU_TAB[i][8]); << 6009 7349 G4int is = nint(BU_TAB[i][11]); << 6010 G4int iz = nint(BU_TAB[i][7]); 7350 << 6011 G4int ia = nint(BU_TAB[i][8]); 7351 Ainit = Ainit + ia; << 6012 G4int is = nint(BU_TAB[i][11]); 7352 Zinit = Zinit + iz; << 6013 7353 Sinit = Sinit - is; << 6014 Ainit = Ainit + ia; 7354 << 6015 Zinit = Zinit + iz; 7355 varntp->zvv.push_back(iz); << 6016 Sinit = Sinit - is; 7356 varntp->avv.push_back(ia); << 6017 7357 varntp->svv.push_back(-1 * is); << 6018 varntp->zvv[intp] = iz; 7358 varntp->itypcasc.push_back(0); << 6019 varntp->avv[intp] = ia; 7359 << 6020 varntp->svv[intp] = -1*is; 7360 G4double v2 = BU_TAB[i][4] * BU_TAB[i << 6021 varntp->itypcasc[intp] = 0; 7361 G4double gamma = std::sqrt(1.0 - v2 / << 6022 7362 G4double avvmass = iz * fmp + (ia - i << 6023 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; << 6024 G4double gamma = std::sqrt(1.0 - v2 / (c*c)); 7364 varntp->pxlab.push_back(etot * BU_TAB << 6025 G4double avvmass = iz*fmp + (ia-iz-is)*fmn + is*fml + eflmac(ia,iz,0,3); 7365 varntp->pylab.push_back(etot * BU_TAB << 6026 G4double etot = avvmass / gamma; 7366 varntp->pzlab.push_back(etot * BU_TAB << 6027 varntp->pxlab[intp] = etot * BU_TAB[i][4] / c; 7367 varntp->enerj.push_back(etot - avvmas << 6028 varntp->pylab[intp] = etot * BU_TAB[i][5] / c; 7368 } << 6029 varntp->pzlab[intp] = etot * BU_TAB[i][6] / c; 7369 << 6030 varntp->enerj[intp] = etot - avvmass; 7370 for (G4int i = 0; i < IEV_TAB; i++) << 6031 intp++; 7371 { << 6032 } 7372 << 6033 7373 G4int iz = nint(EV_TAB[i][0]); << 6034 7374 G4int ia = nint(EV_TAB[i][1]); << 6035 for(G4int i=0;i<IEV_TAB;i++){ 7375 G4int is = EV_TAB[i][5]; << 6036 7376 << 6037 G4int iz = nint(EV_TAB[i][0]); 7377 varntp->itypcasc.push_back(0); << 6038 G4int ia = nint(EV_TAB[i][1]); 7378 << 6039 G4int is = EV_TAB[i][5]; 7379 if (ia > 0) << 6040 7380 { // normal particles << 6041 varntp->itypcasc[intp] = 0; 7381 varntp->zvv.push_back(iz); << 6042 7382 varntp->avv.push_back(ia); << 6043 if(ia>0){// normal particles 7383 varntp->svv.push_back(-1 * is); << 6044 varntp->zvv[intp] = iz; 7384 Ainit = Ainit + ia; << 6045 varntp->avv[intp] = ia; 7385 Zinit = Zinit + iz; << 6046 varntp->svv[intp] = -1*is; 7386 Sinit = Sinit - is; << 6047 Ainit = Ainit + ia; 7387 G4double v2 = EV_TAB[i][2] * EV_T << 6048 Zinit = Zinit + iz; 7388 G4double gamma = std::sqrt(1.0 - << 6049 Sinit = Sinit - is; 7389 G4double avvmass = iz * fmp + (ia << 6050 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; << 6051 G4double gamma = std::sqrt(1.0 - v2 / (c*c)); 7391 varntp->pxlab.push_back(etot * EV << 6052 G4double avvmass = iz*fmp + (ia-iz-is)*fmn + is*fml + eflmac(ia,iz,0,3); 7392 varntp->pylab.push_back(etot * EV << 6053 G4double etot = avvmass / gamma; 7393 varntp->pzlab.push_back(etot * EV << 6054 varntp->pxlab[intp] = etot * EV_TAB[i][2] / c; 7394 varntp->enerj.push_back(etot - av << 6055 varntp->pylab[intp] = etot * EV_TAB[i][3] / c; 7395 } << 6056 varntp->pzlab[intp] = etot * EV_TAB[i][4] / c; 7396 else if (ia == -2) << 6057 varntp->enerj[intp] = etot - avvmass; 7397 { // lambda0 << 6058 }else if(ia==-2){// lambda0 7398 varntp->zvv.push_back(0); << 6059 varntp->zvv[intp] = 0; 7399 varntp->avv.push_back(1); << 6060 varntp->avv[intp] = 1; 7400 varntp->svv.push_back(-1); << 6061 varntp->svv[intp] = -1; 7401 Ainit = Ainit + 1; << 6062 Ainit = Ainit + 1; 7402 Sinit = Sinit - 1; << 6063 Sinit = Sinit - 1; 7403 G4double v2 = EV_TAB[i][2] * EV_T << 6064 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 - << 6065 G4double gamma = std::sqrt(1.0 - v2 / (c*c)); 7405 G4double avvmass = fml; << 6066 G4double avvmass = fml; 7406 G4double etot = avvmass / gamma; << 6067 G4double etot = avvmass / gamma; 7407 varntp->pxlab.push_back(etot * EV << 6068 varntp->pxlab[intp] = etot * EV_TAB[i][2] / c; 7408 varntp->pylab.push_back(etot * EV << 6069 varntp->pylab[intp] = etot * EV_TAB[i][3] / c; 7409 varntp->pzlab.push_back(etot * EV << 6070 varntp->pzlab[intp] = etot * EV_TAB[i][4] / c; 7410 varntp->enerj.push_back(etot - av << 6071 varntp->enerj[intp] = etot - avvmass; 7411 } << 6072 }else{// photons 7412 else << 6073 varntp->zvv[intp] = iz; 7413 { // photons << 6074 varntp->avv[intp] = ia; 7414 varntp->zvv.push_back(iz); << 6075 varntp->svv[intp] = 0; 7415 varntp->avv.push_back(ia); << 6076 Ainit = Ainit + ia; 7416 varntp->svv.push_back(0); << 6077 Zinit = Zinit + iz; 7417 Ainit = Ainit + ia; << 6078 Sinit = Sinit - is; 7418 Zinit = Zinit + iz; << 6079 varntp->pxlab[intp] = EV_TAB[i][2]; 7419 Sinit = Sinit - is; << 6080 varntp->pylab[intp] = EV_TAB[i][3]; 7420 varntp->pxlab.push_back(EV_TAB[i] << 6081 varntp->pzlab[intp] = EV_TAB[i][4]; 7421 varntp->pylab.push_back(EV_TAB[i] << 6082 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] << 6083 } 7423 varntp->enerj.push_back( << 6084 intp++; 7424 std::sqrt(EV_TAB[i][2] * EV_T << 7425 } << 7426 } 6085 } 7427 // << 6086 // 7428 return; << 6087 return; 7429 } 6088 } 7430 6089 7431 // Utilities 6090 // Utilities 7432 6091 7433 G4double G4Abla::min(G4double a, G4double b) 6092 G4double G4Abla::min(G4double a, G4double b) 7434 { 6093 { 7435 if (a < b) << 6094 if(a < b) { 7436 { << 6095 return a; 7437 return a; << 6096 } 7438 } << 6097 else { 7439 else << 6098 return b; 7440 { << 6099 } 7441 return b; << 7442 } << 7443 } 6100 } 7444 6101 7445 G4int G4Abla::min(G4int a, G4int b) 6102 G4int G4Abla::min(G4int a, G4int b) 7446 { 6103 { 7447 if (a < b) << 6104 if(a < b) { 7448 { << 6105 return a; 7449 return a; << 6106 } 7450 } << 6107 else { 7451 else << 6108 return b; 7452 { << 6109 } 7453 return b; << 7454 } << 7455 } 6110 } 7456 6111 7457 G4double G4Abla::max(G4double a, G4double b) 6112 G4double G4Abla::max(G4double a, G4double b) 7458 { 6113 { 7459 if (a > b) << 6114 if(a > b) { 7460 { << 6115 return a; 7461 return a; << 6116 } 7462 } << 6117 else { 7463 else << 6118 return b; 7464 { << 6119 } 7465 return b; << 7466 } << 7467 } 6120 } 7468 6121 7469 G4int G4Abla::max(G4int a, G4int b) 6122 G4int G4Abla::max(G4int a, G4int b) 7470 { 6123 { 7471 if (a > b) << 6124 if(a > b) { 7472 { << 6125 return a; 7473 return a; << 6126 } 7474 } << 6127 else { 7475 else << 6128 return b; 7476 { << 6129 } 7477 return b; << 6130 } 7478 } << 6131 >> 6132 G4double G4Abla::DSIGN(G4double a, G4double b){ >> 6133 // A function that assigns the sign of the second argument to the >> 6134 // absolute value of the first >> 6135 >> 6136 if(b>=0){ >> 6137 return std::abs(a); >> 6138 }else{ >> 6139 return -1.0*std::abs(a); >> 6140 } >> 6141 return 0; >> 6142 } >> 6143 >> 6144 G4int G4Abla::ISIGN(G4int a, G4int b){ >> 6145 // A function that assigns the sign of the second argument to the >> 6146 // absolute value of the first >> 6147 >> 6148 if(b>=0){ >> 6149 return std::abs(a); >> 6150 }else{ >> 6151 return -1*std::abs(a); >> 6152 } >> 6153 return 0; 7479 } 6154 } 7480 6155 7481 G4double G4Abla::DSIGN(G4double a, G4double b << 6156 G4int G4Abla::nint(G4double number) 7482 { 6157 { 7483 // A function that assigns the sign of th << 6158 G4double intpart = 0.0; 7484 // absolute value of the first << 6159 G4double fractpart = 0.0; 7485 << 6160 fractpart = std::modf(number, &intpart); 7486 if (b >= 0) << 6161 if(number == 0) { 7487 { << 7488 return std::abs(a); << 7489 } << 7490 else << 7491 { << 7492 return -1.0 * std::abs(a); << 7493 } << 7494 return 0; 6162 return 0; 7495 } << 6163 } 7496 << 6164 if(number > 0) { 7497 G4int G4Abla::ISIGN(G4int a, G4int b) << 6165 if(fractpart < 0.5) { 7498 { << 6166 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 } 6167 } 7510 return 0; << 6168 else { 7511 } << 6169 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 } 6170 } 7533 if (number < 0) << 6171 } 7534 { << 6172 if(number < 0) { 7535 if (fractpart < -0.5) << 6173 if(fractpart < -0.5) { 7536 { << 6174 return G4int(std::floor(number)); 7537 return G4int(std::floor(number)); << 6175 } 7538 } << 6176 else { 7539 else << 6177 return G4int(std::ceil(number)); 7540 { << 7541 return G4int(std::ceil(number)); << 7542 } << 7543 } 6178 } >> 6179 } 7544 6180 7545 return G4int(std::floor(number)); << 6181 return G4int(std::floor(number)); 7546 } 6182 } 7547 6183 7548 G4int G4Abla::secnds(G4int x) 6184 G4int G4Abla::secnds(G4int x) 7549 { 6185 { 7550 time_t mytime; << 6186 time_t mytime; 7551 tm* mylocaltime; << 6187 tm *mylocaltime; 7552 6188 7553 time(&mytime); << 6189 time(&mytime); 7554 mylocaltime = localtime(&mytime); << 6190 mylocaltime = localtime(&mytime); 7555 6191 7556 if (x == 0) << 6192 if(x == 0) { 7557 { << 6193 return(mylocaltime->tm_hour*60*60 + mylocaltime->tm_min*60 + mylocaltime->tm_sec); 7558 return (mylocaltime->tm_hour * 60 * 6 << 6194 } 7559 } << 6195 else { 7560 else << 6196 return(mytime - x); 7561 { << 6197 } 7562 return G4int(mytime - x); << 7563 } << 7564 } 6198 } 7565 6199 7566 G4int G4Abla::mod(G4int a, G4int b) 6200 G4int G4Abla::mod(G4int a, G4int b) 7567 { 6201 { 7568 if (b != 0) << 6202 if(b != 0) { 7569 { << 6203 return a%b; 7570 return a % b; << 6204 } 7571 } << 6205 else { 7572 else << 6206 return 0; 7573 { << 6207 } 7574 return 0; << 7575 } << 7576 } 6208 } 7577 6209 7578 G4double G4Abla::dint(G4double x) 6210 G4double G4Abla::dint(G4double x) 7579 { 6211 { 7580 G4double value = 0.0; << 6212 G4double value = 0.0; 7581 /* << 6213 /* 7582 if(a < 0.0) { << 6214 if(a < 0.0) { 7583 value = double(std::ceil(a)); << 6215 value = double(std::ceil(a)); 7584 } << 6216 } 7585 else { << 6217 else { 7586 value = double(std::floor(a)); << 6218 value = double(std::floor(a)); 7587 } << 6219 } 7588 */ << 6220 */ 7589 if (x - std::floor(x) <= std::ceil(x) - x << 6221 if(x-std::floor(x) <= std::ceil(x)-x) 7590 value = G4double(std::floor(x)); << 6222 value = G4double(std::floor(x)); 7591 else << 6223 else 7592 value = G4double(std::ceil(x)); << 6224 value = G4double(std::ceil(x)); 7593 6225 7594 return value; << 6226 return value; 7595 } 6227 } 7596 6228 7597 G4int G4Abla::idint(G4double x) 6229 G4int G4Abla::idint(G4double x) 7598 { 6230 { 7599 G4int value = 0; << 6231 G4int value = 0; 7600 if (x - std::floor(x) <= std::ceil(x) - x << 6232 if(x-std::floor(x) <= std::ceil(x)-x) 7601 value = G4int(std::floor(x)); << 6233 value = G4int(std::floor(x)); 7602 else << 6234 else 7603 value = G4int(std::ceil(x)); << 6235 value = G4int(std::ceil(x)); 7604 6236 7605 return value; << 6237 return value; 7606 } 6238 } 7607 6239 7608 G4int G4Abla::idnint(G4double x) 6240 G4int G4Abla::idnint(G4double x) 7609 { 6241 { 7610 if (x - std::floor(x) <= std::ceil(x) - x << 6242 if(x-std::floor(x) <= std::ceil(x)-x) 7611 return G4int(std::floor(x)); << 6243 return G4int(std::floor(x)); 7612 else << 6244 else 7613 return G4int(std::ceil(x)); << 6245 return G4int(std::ceil(x)); 7614 } 6246 } 7615 6247 7616 G4double G4Abla::dmin1(G4double a, G4double b 6248 G4double G4Abla::dmin1(G4double a, G4double b, G4double c) 7617 { 6249 { 7618 if (a < b && a < c) << 6250 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; 6251 return a; >> 6252 } >> 6253 if(b < a && b < c) { >> 6254 return b; >> 6255 } >> 6256 if(c < a && c < b) { >> 6257 return c; >> 6258 } >> 6259 return a; >> 6260 } >> 6261 >> 6262 G4double G4Abla::utilabs(G4double a) >> 6263 { >> 6264 return std::abs(a); 7631 } 6265 } 7632 6266 7633 G4double G4Abla::utilabs(G4double a) { return << 7634 6267 7635 G4double G4Abla::width(G4double AMOTHER, << 6268 G4double G4Abla::width(G4double AMOTHER,G4double ZMOTHER,G4double APART,G4double ZPART,G4double TEMP,G4double B1,G4double SB1,G4double EXC) 7636 G4double ZMOTHER, << 6269 { 7637 G4double APART, << 6270 /* 7638 G4double ZPART, << 6271 * Implemented by JLRS for Abla c++: 06/11/2016 7639 G4double TEMP, << 6272 * 7640 G4double B1, << 6273 C Last update: 7641 G4double SB1, << 6274 C 28/10/13 - JLRS - from abrablav4 (AK) 7642 G4double EXC) << 6275 */ 7643 { << 6276 G4int IZPART,IAPART,NMOTHER; 7644 /* << 6277 G4double B,HBAR,PI,RGEOM,MPART,SB; 7645 * Implemented by JLRS for Abla c++: 06/11 << 6278 G4double BKONST,C,C2,G,APARTNER,MU; 7646 * << 6279 G4double INT1,INT2,INT3,AKONST,EARG,R0,MPARTNER; 7647 C Last update: << 6280 G4double AEXP; 7648 C 28/10/13 - JLRS - from abrablav4 << 6281 G4double ARG; 7649 */ << 6282 G4double PAR_A1=0.,PAR_B1=0.,FACT=1.; 7650 G4int IZPART, IAPART, NMOTHER; << 6283 G4double fwidth=0.; 7651 G4double B, HBAR, PI, RGEOM, MPART, SB; << 6284 G4int idlamb0=0; 7652 G4double BKONST, C, C2, G, APARTNER, MU; << 6285 PI=3.141592654; 7653 G4double INT1, INT2, INT3, AKONST, EARG, << 6286 7654 G4double AEXP; << 6287 if(ZPART==-2.){ 7655 G4double ARG; << 6288 ZPART=0.; 7656 G4double PAR_A1 = 0., PAR_B1 = 0., FACT = << 6289 idlamb0=1; 7657 G4double fwidth = 0.; << 6290 } 7658 G4int idlamb0 = 0; << 6291 7659 PI = 3.141592654; << 6292 IZPART = idnint(ZPART); 7660 << 6293 IAPART = idnint(APART); 7661 if (ZPART == -2.) << 6294 7662 { << 6295 B = B1; 7663 ZPART = 0.; << 6296 SB = SB1; 7664 idlamb0 = 1; << 6297 NMOTHER = idnint(AMOTHER-ZMOTHER); 7665 } << 6298 7666 << 6299 PAR_A1 = 0.0; 7667 IZPART = idnint(ZPART); << 6300 PAR_B1 = 0.0; 7668 IAPART = idnint(APART); << 6301 7669 << 6302 if(SB>EXC){ 7670 B = B1; << 6303 return fwidth=0.0; 7671 SB = SB1; << 6304 }else{ 7672 NMOTHER = idnint(AMOTHER - ZMOTHER); << 6305 // in MeV*s 7673 << 6306 HBAR = 6.582122e-22; 7674 PAR_A1 = 0.0; << 6307 // HBAR2 = HBAR * HBAR 7675 PAR_B1 = 0.0; << 6308 // in m/s 7676 << 6309 C = 2.99792458e8; 7677 if (SB > EXC) << 6310 C2 = C * C; 7678 { << 6311 APARTNER = AMOTHER - APART; 7679 return fwidth = 0.0; << 6312 MPARTNER = APARTNER * 931.49 / C2; 7680 } << 6313 7681 else << 6314 // g=(2s+1) 7682 { << 6315 if(IAPART==1&&IZPART==0){ 7683 // in MeV*s << 6316 G = 2.0; 7684 HBAR = 6.582122e-22; << 6317 MPART = 939.56 / C2; 7685 // HBAR2 = HBAR * HBAR << 6318 if(idlamb0==1)MPART = 1115.683 / C2; 7686 // in m/s << 6319 }else{ 7687 C = 2.99792458e8; << 6320 if(IAPART==1&&IZPART==1){ 7688 C2 = C * C; << 6321 G = 2.0; 7689 APARTNER = AMOTHER - APART; << 6322 MPART = 938.27 / C2; 7690 MPARTNER = APARTNER * 931.49 / C2; << 6323 } 7691 << 6324 else{ 7692 // g=(2s+1) << 6325 if(IAPART==2&&IZPART==0){ 7693 if (IAPART == 1 && IZPART == 0) << 6326 G = 1.0; 7694 { << 6327 MPART = 2.*939.56 / C2; >> 6328 }else{ >> 6329 if(IAPART==2&&IZPART==1){ >> 6330 G = 3.0; >> 6331 MPART = 1876.10 / C2; >> 6332 }else{ >> 6333 if(IAPART==3&&IZPART==1){ >> 6334 G = 2.0; >> 6335 MPART = 2809.39 / C2; >> 6336 }else{ >> 6337 if(IAPART==3&&IZPART==2){ 7695 G = 2.0; 6338 G = 2.0; 7696 MPART = 939.56 / C2; << 6339 MPART = 2809.37 / C2; 7697 if (idlamb0 == 1) << 6340 }else{ 7698 MPART = 1115.683 / C2; << 6341 if(IAPART==4&&IZPART==2){ 7699 } << 6342 G = 1.0; 7700 else << 6343 MPART = 3728.35 / C2; 7701 { << 6344 }else{ 7702 if (IAPART == 1 && IZPART == 1) << 6345 // IMF 7703 { << 6346 G = 1.0; 7704 G = 2.0; << 6347 MPART = APART * 931.49 / C2; 7705 MPART = 938.27 / C2; << 6348 } 7706 } << 6349 } 7707 else << 6350 } 7708 { << 6351 } 7709 if (IAPART == 2 && IZPART == << 6352 } 7710 { << 6353 } 7711 G = 1.0; << 6354 }//end g 7712 MPART = 2. * 939.56 / C2; << 6355 7713 } << 6356 // Relative mass in MeV*s^2/m^2 7714 else << 6357 MU = MPARTNER * MPART / (MPARTNER + MPART); 7715 { << 6358 // in m 7716 if (IAPART == 2 && IZPART << 6359 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 6360 7755 // Relative mass in MeV*s^2/m^2 << 6361 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 6362 7760 RGEOM = R0 * (std::pow(APART, 1.0 / 3 << 6363 // in m*sqrt(MeV) >> 6364 AKONST = HBAR*std::sqrt(1.0 / MU); 7761 6365 7762 // in m*sqrt(MeV) << 6366 // in 1/(MeV*m^2) 7763 AKONST = HBAR * std::sqrt(1.0 / MU); << 6367 BKONST = MPART / ( PI * PI * HBAR * HBAR); >> 6368 // >> 6369 // USING ANALYTICAL APPROXIMATION 7764 6370 7765 // in 1/(MeV*m^2) << 6371 INT1 = 2.0 * std::pow(TEMP,3.) / (2.0 * TEMP + B); 7766 BKONST = MPART / (PI * PI * HBAR * HB << 7767 // << 7768 // USING ANALYTICAL APPROXIMATION << 7769 6372 7770 INT1 = 2.0 * std::pow(TEMP, 3.) / (2. << 6373 ARG = std::sqrt(B/TEMP); >> 6374 EARG = (erf(ARG) - 1.0); >> 6375 if(std::abs(EARG)<1.e-9) EARG = 0.0; >> 6376 if(B==0.0){ >> 6377 INT2 = 0.5 * std::sqrt(PI) * std::pow(TEMP,3.0/2.0); >> 6378 }else{ >> 6379 AEXP = B/TEMP; >> 6380 if(AEXP>700.0) AEXP = 700.0; >> 6381 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; >> 6382 if(INT2<0.0) INT2 = 0.0; >> 6383 // For very low temperatures when EARG=0, INT2 get unreasonably high values >> 6384 // comming from the first term. Therefore, for these cases INT2 is set to 0. >> 6385 if(EARG==0.0) INT2 = 0.0; >> 6386 }//if B >> 6387 >> 6388 INT3 = 2.0*TEMP*TEMP*TEMP / (2.0*TEMP*TEMP + 4.0*B*TEMP + B*B); >> 6389 >> 6390 if(IZPART<-1.0&&ZMOTHER<151.0){ >> 6391 // IF(IZPART.LT.1)THEN >> 6392 // For neutrons, the width is given by a mean value between geometrical and QM values; >> 6393 // Only QM contribution (Rgeom -> Rgeom + Rlamda) seems to be too strong for neutrons >> 6394 fwidth = PI * BKONST * G * std::sqrt((RGEOM * RGEOM * INT1 + 2.0 * AKONST * RGEOM * INT2 + AKONST * AKONST * INT3) * RGEOM * RGEOM * INT1); 7771 6395 7772 ARG = std::sqrt(B / TEMP); << 6396 }else{ 7773 EARG = (erf(ARG) - 1.0); << 6397 fwidth = PI * BKONST * G *(RGEOM * RGEOM * INT1 + 2.0 * AKONST * RGEOM * INT2 + AKONST * AKONST * INT3); 7774 if (std::abs(EARG) < 1.e-9) << 6398 } 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 6399 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 6400 7876 if (fwidth <= 0.0) << 6401 // To correct for too high values of analytical width compared to 7877 { << 6402 // numerical solution for energies close to the particle threshold: 7878 std::cout << "LOOK IN PARTICLE_WI << 6403 if(IZPART<3.0){ 7879 std::cout << "ACN,APART :" << AMO << 6404 if(AMOTHER<155.0){ 7880 std::cout << "EXC,TEMP,B,SB :" << << 6405 PAR_A1=std::exp(2.302585*0.2083*std::exp(-0.01548472*AMOTHER))-0.05; 7881 std::cout << "INTi, i=1-3 :" << I << 6406 PAR_B1 = 0.59939389 + 0.00915657 * AMOTHER; 7882 std::cout << " " << std::endl; << 6407 }else{ 7883 } << 6408 if(AMOTHER>154.0&&AMOTHER<195.0){ >> 6409 PAR_A1=1.0086961-8.629e-5*AMOTHER; >> 6410 PAR_B1 = 1.5329331 + 0.00302074 * AMOTHER; >> 6411 }else{ >> 6412 if(AMOTHER>194.0&&AMOTHER<208.0){ >> 6413 PAR_A1=9.8356347-0.09294663*AMOTHER+2.441e-4*AMOTHER*AMOTHER; >> 6414 PAR_B1 = 7.7701987 - 0.02897401 * AMOTHER; >> 6415 }else{ >> 6416 if(AMOTHER>207.0&&AMOTHER<228.0){ >> 6417 PAR_A1=15.107385-0.12414415*AMOTHER+2.7222e-4*AMOTHER*AMOTHER; >> 6418 PAR_B1=-64.078009+0.56813179*AMOTHER-0.00121078*AMOTHER*AMOTHER; >> 6419 }else{ >> 6420 if(AMOTHER>227.0){ >> 6421 if(mod(NMOTHER,2)==0&&NMOTHER>147.){ >> 6422 PAR_A1 = 2.0*(0.9389118 + 6.4559e-5 * AMOTHER); >> 6423 }else{ >> 6424 if(mod(NMOTHER,2)==1)PAR_A1 = 3.0*(0.9389118 + 6.4559e-5 * AMOTHER); >> 6425 } >> 6426 PAR_B1 = 2.1507177 + 0.00146119 * AMOTHER; >> 6427 } >> 6428 } >> 6429 } >> 6430 } >> 6431 } >> 6432 FACT = std::exp((2.302585*PAR_A1*std::exp(-PAR_B1*(EXC-SB)))); >> 6433 if(FACT<1.0) FACT = 1.0; >> 6434 if(IZPART<-1.&&ZMOTHER<151.0){ >> 6435 // IF(IZPART.LT.1)THEN >> 6436 fwidth = fwidth / std::sqrt(FACT); >> 6437 }else{ >> 6438 fwidth = fwidth / FACT; >> 6439 } >> 6440 }//if IZPART<3.0 >> 6441 >> 6442 if(fwidth<=0.0){ >> 6443 std::cout <<"LOOK IN PARTICLE_WIDTH!" << std::endl; >> 6444 std::cout <<"ACN,APART :"<< AMOTHER << APART << std::endl; >> 6445 std::cout <<"EXC,TEMP,B,SB :" << EXC << " " << TEMP << " " << B << " " << SB << std::endl; >> 6446 std::cout <<"INTi, i=1-3 :" << INT1 << " " << INT2 << " " << INT3 << std::endl; >> 6447 std::cout <<" " << std::endl; >> 6448 } 7884 6449 7885 } // if SB>EXC << 6450 }//if SB>EXC 7886 return fwidth; << 6451 return fwidth; 7887 } 6452 } 7888 6453 7889 G4double G4Abla::pen(G4double A, G4double ap, 6454 G4double G4Abla::pen(G4double A, G4double ap, G4double omega, G4double T) 7890 { 6455 { 7891 // JLRS: 06/11/2016 << 6456 // JLRS: 06/11/2016 7892 // CORRECTIONS FOR BARRIER PENETRATION << 6457 // CORRECTIONS FOR BARRIER PENETRATION 7893 // AK, KHS 2005 - Energy-dependen inverse << 6458 // AK, KHS 2005 - Energy-dependen inverse cross sections included, influence of 7894 // of << 6459 // Coulomb barrier for LCP, tunnelling for LCP 7895 // Coulomb barrier for LCP << 7896 6460 7897 G4double fpen = 0., MU, HO; << 6461 G4double fpen=0., MU, HO; 7898 6462 7899 // REDUCED MASSES (IN MeV/C**2) << 6463 // REDUCED MASSES (IN MeV/C**2) 7900 MU = (A - ap) * ap / A; << 6464 MU = (A - ap) * ap / A; 7901 6465 7902 // ENERGY OF THE INVERSE PARABOLA AT THE << 6466 // ENERGY OF THE INVERSE PARABOLA AT THE POTENTIAL BARRIER (hbar*omega); 7903 // HERE hbar = 197.3287 fm*MeV/c, omega i << 6467 // HERE hbar = 197.3287 fm*MeV/c, omega is in c/fm 7904 HO = 197.3287 * omega; << 6468 HO = 197.3287 * omega; 7905 6469 7906 if (T <= 0.0) << 6470 if(T<=0.0){ 7907 { << 6471 fpen = 0.0; 7908 fpen = 0.0; << 6472 }else{ 7909 } << 6473 fpen=std::pow(10.0,4.e-4*std::pow(T/(HO*HO*std::pow(MU,0.25)),-4.3/2.3026)); 7910 else << 6474 } 7911 { << 7912 fpen = std::pow(10.0, 4.e-4 * std::po << 7913 } << 7914 6475 7915 return fpen; << 6476 return fpen; 7916 } 6477 } 7917 6478 7918 void G4Abla::bsbkbc(G4double A, G4double Z, G << 6479 void G4Abla::bsbkbc(G4double A,G4double Z,G4double *BS,G4double *BK,G4double *BC) 7919 { 6480 { 7920 // Calculate BS and BK needed for a level << 6481 // Calculate BS and BK needed for a level-density parameter: 7921 // BETA2 and BETA4 = quadrupole and hexad << 6482 // BETA2 and BETA4 = quadrupole and hexadecapole deformation 7922 6483 7923 G4double PI = 3.14159265; << 6484 G4double PI = 3.14159265; 7924 G4int IZ = idnint(Z); << 6485 G4int IZ = idnint(Z); 7925 G4int IN = idnint(A - Z); << 6486 G4int IN = idnint(A - Z); 7926 // alphaN = sqrt(2*N/(4*pi))*BetaN << 6487 // alphaN = sqrt(2*N/(4*pi))*BetaN 7927 G4double ALPHA2 = std::sqrt(5.0 / (4.0 * << 6488 G4double ALPHA2 = std::sqrt(5.0/(4.0*PI))*ecld->beta2[IN][IZ]; 7928 G4double ALPHA4 = std::sqrt(9.0 / (4.0 * << 6489 G4double ALPHA4 = std::sqrt(9.0/(4.0*PI))*ecld->beta4[IN][IZ]; 7929 6490 7930 (*BS) = 1.0 + 0.4 * ALPHA2 * ALPHA2 - 4.0 << 6491 (*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 6492 7933 (*BK) = 1.0 + 0.4 * ALPHA2 * ALPHA2 + 16. << 6493 (*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 6494 7936 (*BC) = 0.0; << 6495 (*BC)=0.0; 7937 6496 7938 return; << 6497 return; 7939 } 6498 } 7940 6499 7941 G4double G4Abla::fvmaxhaz(G4double T) << 6500 G4double G4Abla::fvmaxhaz( G4double T) 7942 { 6501 { 7943 // Random generator according to a distri << 6502 // Random generator according to a distribution similar to a 7944 // Maxwell distribution with quantum-mech << 6503 // Maxwell distribution with quantum-mech. x-section for charged particles according to KHS 7945 // according to KHS << 6504 // Y = X**(1.5E0) / (B+X) * EXP(-X/T) (approximation:) 7946 // Y = X**(1.5E0) / (B+X) * EXP(-X/T << 6505 7947 << 6506 return (3.0 * T * std::pow(-1.*std::log(G4AblaRandom::flat()) * std::log(G4AblaRandom::flat())*std::log(G4AblaRandom::flat()),0.333333)); 7948 return ( << 6507 } 7949 3.0 * T * << 6508 7950 std::pow(-1. * std::log(G4AblaRandom: << 6509 G4double G4Abla::func_trans(G4double TIME,G4double ZF,G4double AF,G4double bet,G4double Y,G4double FT,G4double T_0) 7951 0.333333)); << 6510 { 7952 } << 6511 /* 7953 << 6512 c This function determines the fission width as a function o time 7954 G4double << 6513 c according to the analytical solution of the FPE for the probability distribution 7955 G4Abla::func_trans(G4double TIME, G4doubl << 6514 c at the barrier when the nucleus potential is aproximated by a parabolic 7956 { << 6515 c potential. It is taken from S. Chandrasekhar, Rev. Mod. Phys. 15 (1943) 1 7957 /* << 6516 c 7958 c This function determines the fission << 6517 c***********************INPUT PARAMETERS********************************* 7959 c according to the analytical solution << 6518 c Time Time at which we evaluate the fission width 7960 distribution c at the barrier when the << 6519 c ZF Z of nucleus 7961 parabolic c potential. It is taken from << 6520 C AF A of nucleus 7962 (1943) 1 << 6521 c BET Reduced dissipation coefficient 7963 c << 6522 c FT Nuclear temperature 7964 c***********************INPUT PARAMETERS* << 6523 C************************************************************************** 7965 c Time Time at which we ev << 6524 C********************************OUTPUT*********************************** 7966 c ZF Z of nucleus << 6525 C Fission decay width at the corresponding time of the decay cascade 7967 C AF A of nucleus << 6526 C************************************************************************* 7968 c BET Reduced dissipation << 6527 c****************************OTHER VARIABLES****************************** 7969 c FT Nuclear temperature << 6528 C SIGMA_SQR Square of the width of the prob. distribution 7970 C**************************************** << 6529 C XB Deformation of the nucleus at the saddle point 7971 C********************************OUTPUT** << 6530 c NORM Normalization factor of the probability distribution 7972 C Fission decay width at the correspond << 6531 c W Probability distribution at the saddle deformation XB 7973 C**************************************** << 6532 c W_INFIN Probability distr. at XB at infinite time 7974 c****************************OTHER VARIAB << 6533 c MFCD Mass of the fission collective degree of freedom 7975 C SIGMA_SQR Square of the width << 6534 C************************************************************************* 7976 C XB Deformation of the n << 6535 */ 7977 c NORM Normalization factor << 6536 G4double PI = 3.14159; 7978 c W Probability distribu << 6537 G4double DEFO_INIT,OMEGA,HOMEGA,OMEGA_GS,HOMEGA_GS,K1,MFCD; 7979 c W_INFIN Probability distr. a << 6538 G4double BET1,XACT,SIGMA_SQR,W_EXP,XB,NORM,SIGMA_SQR_INF,W_INFIN,W; 7980 c MFCD Mass of the fission << 6539 G4double FUNC_TRANS,LOG_SLOPE_INF,LOG_SLOPE_ABS; 7981 C**************************************** << 6540 // 7982 */ << 6541 // Influence of initial deformation 7983 G4double PI = 3.14159; << 6542 // Initial alpha2 deformation (GS) 7984 G4double DEFO_INIT, OMEGA, HOMEGA, OMEGA_ << 6543 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 << 6544 // 7986 G4double FUNC_TRANS, LOG_SLOPE_INF, LOG_S << 6545 fomega_sp(AF,Y,&MFCD,&OMEGA,&HOMEGA); 7987 // << 6546 fomega_gs(AF,ZF,&K1,&OMEGA_GS,&HOMEGA_GS); 7988 // Influence of initial deformation << 6547 // 7989 // Initial alpha2 deformation (GS) << 6548 // Determination of the square of the width of the probability distribution 7990 DEFO_INIT = std::sqrt(5.0 / (4.0 * PI)) * << 6549 // For the overdamped regime BET**2 > 4*OMEGA**2 7991 // << 6550 if((bet*bet)>4.0*OMEGA_GS*OMEGA_GS){ 7992 fomega_sp(AF, Y, &MFCD, &OMEGA, &HOMEGA); << 6551 BET1=std::sqrt(bet*bet-4.0*OMEGA_GS*OMEGA_GS); 7993 fomega_gs(AF, ZF, &K1, &OMEGA_GS, &HOMEGA << 6552 // 7994 // << 6553 // REMEMBER THAT HOMEGA IS ACTUALLY HBAR*HOMEGA1=1MeV 7995 // Determination of the square of the wid << 6554 // SO THAT HOMEGA1 = HOMEGA/HBAR 7996 // For the overdamped regime BET**2 > 4*O << 6555 // 7997 if ((bet * bet) > 4.0 * OMEGA_GS * OMEGA_ << 6556 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 { << 6557 // 7999 BET1 = std::sqrt(bet * bet - 4.0 * OM << 6558 // Evolution of the mean x-value (KHS March 2006) 8000 // << 6559 XACT = DEFO_INIT *std::exp(-0.5*(bet-BET1)*1.e21*(TIME-T_0)); 8001 // REMEMBER THAT HOMEGA IS ACTUALLY H << 6560 // 8002 // SO THAT HOMEGA1 = HOMEGA/HBAR << 6561 }else{ 8003 // << 6562 // For the underdamped regime BET**2 < 4*HOMEGA**2 BET1 becomes a complex number 8004 SIGMA_SQR = << 6563 // and the expression with sinh and cosh can be transformed in one with sin and cos 8005 (FT / K1) * << 6564 BET1=std::sqrt(4.0*OMEGA_GS*OMEGA_GS-bet*bet); 8006 (1.0 - << 6565 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 << 6566 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 << 6567 } 8009 (0.5 * (std::exp(0.50 * (BET1 << 6568 8010 (bet / BET1 * 0.50 * (std::exp( << 6569 // Determination of the deformation at the saddle point according to 8011 1. * std::exp(-bet * 1.e21 * TI << 6570 // "Geometrical relationships of Macroscopic Nucl. Phys." from Hass and Myers page 100 8012 // << 6571 // This corresponds to alpha2 deformation. 8013 // Evolution of the mean x-value (KHS << 6572 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 << 6573 // 8015 // << 6574 // Determination of the probability distribution at the saddle deformation 8016 } << 6575 // 8017 else << 6576 if(SIGMA_SQR>0.0){ 8018 { << 6577 NORM = 1./std::sqrt(2.*PI*SIGMA_SQR); 8019 // For the underdamped regime BET**2 << 6578 // 8020 // number and the expression with sin << 6579 W_EXP = -1.*(XB - XACT)*(XB - XACT)/(2.0 * SIGMA_SQR); 8021 // with sin and cos << 6580 if(W_EXP<(-708.0) ) W_EXP = -708.0; 8022 BET1 = std::sqrt(4.0 * OMEGA_GS * OME << 6581 W = NORM * std::exp( W_EXP ) * FT / (K1 * SIGMA_SQR); 8023 SIGMA_SQR = FT / K1 * << 6582 }else{ 8024 (1. - std::exp(-1.0 * bet << 6583 W = 0.0; 8025 (bet * bet / (B << 6584 } 8026 bet / BET1 * s << 6585 // 8027 XACT = DEFO_INIT * std::cos(0.5 * BET << 6586 // Determination of the fission decay width, we assume we are in the overdamped regime 8028 } << 6587 // 8029 << 6588 SIGMA_SQR_INF = FT/K1; 8030 // Determination of the deformation at th << 6589 W_EXP = -XB*XB/(2.0 * SIGMA_SQR_INF); 8031 // "Geometrical relationships of Macrosco << 6590 if(W_EXP<(-708.0))W_EXP = -708.0; 8032 // page 100 This corresponds to alpha2 de << 6591 W_INFIN = std::exp(W_EXP)/std::sqrt(2.0*PI*SIGMA_SQR_INF); 8033 XB = 7. / 3. * Y - 938. / 765. * Y * Y + << 6592 FUNC_TRANS = W / W_INFIN; 8034 // << 6593 // 8035 // Determination of the probability distr << 6594 // Correction for the variation of the mean velocity at the fission barrier 8036 // << 6595 // (see B. Jurado et al, Nucl. Phys. A747, p. 14) 8037 if (SIGMA_SQR > 0.0) << 6596 // 8038 { << 6597 LOG_SLOPE_INF = cram(bet,HOMEGA)*bet*MFCD*OMEGA/FT; 8039 NORM = 1. / std::sqrt(2. * PI * SIGMA << 6598 LOG_SLOPE_ABS = (XB-XACT)/SIGMA_SQR-XB/SIGMA_SQR_INF+cram(bet,HOMEGA)*bet*MFCD*OMEGA/FT; 8040 // << 6599 // 8041 W_EXP = -1. * (XB - XACT) * (XB - XAC << 6600 FUNC_TRANS = FUNC_TRANS * LOG_SLOPE_ABS/LOG_SLOPE_INF; 8042 if (W_EXP < (-708.0)) << 6601 // 8043 W_EXP = -708.0; << 6602 return FUNC_TRANS; 8044 W = NORM * std::exp(W_EXP) * FT / (K1 << 6603 } 8045 } << 6604 8046 else << 6605 8047 { << 6606 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; << 6607 { 8049 } << 6608 /* 8050 // << 6609 C THIS SUBROUTINE IS AIMED TO CHOOSE BETWEEN PARTICLE EMISSION 8051 // Determination of the fission decay wid << 6610 C AND FISSION 8052 // overdamped regime << 6611 C WE USE MONTE-CARLO METHODS AND SAMPLE TIME BETWEEN T=0 AND T=1.5*TAUF 8053 // << 6612 c TO SIMULATE THE TRANSIENT TIME WITH 30 STEPS (0.05*TAUF EACH) 8054 SIGMA_SQR_INF = FT / K1; << 6613 C FOR t>1.5*TAUF , GF=CONSTANT=ASYMPTOTICAL VALUE (INCLUDING KRAMERS FACTOR) 8055 W_EXP = -XB * XB / (2.0 * SIGMA_SQR_INF); << 6614 c------------------------------------------------------------------------ 8056 if (W_EXP < (-708.0)) << 6615 c Modifications introduced by BEATRIZ JURADO 18/10/01: 8057 W_EXP = -708.0; << 6616 c 1. Now this subrutine is included in the rutine direct 8058 W_INFIN = std::exp(W_EXP) / std::sqrt(2.0 << 6617 c 2. TSUM does not include the current particle decay time 8059 FUNC_TRANS = W / W_INFIN; << 6618 C 3. T_LAPSE is the time until decay, taken as an output variable 8060 // << 6619 C 4. GF_LOC is also taken as an output variable 8061 // Correction for the variation of the me << 6620 C 5. BET (Diss. Coeff.) and HOMEGA (Frequency at the ground state 8062 // (see B. Jurado et al, Nucl. Phys. A74 << 6621 c are included as input variables because they are needed for FUNC_TRANS 8063 // << 6622 C----------------------------------------------------------------------- 8064 LOG_SLOPE_INF = cram(bet, HOMEGA) * bet * << 6623 C ON INPUT: 8065 LOG_SLOPE_ABS = (XB - XACT) / SIGMA_SQR - << 6624 C GP Partial particle decay width 8066 // << 6625 C GF Asymptotic value of Gamma-f, including Kramers factor 8067 FUNC_TRANS = FUNC_TRANS * LOG_SLOPE_ABS / << 6626 C AF Mass number of nucleus 8068 // << 6627 C TAUF Transient time 8069 return FUNC_TRANS; << 6628 C TS1 Partial particle decay time for the next step 8070 } << 6629 C TSUM Total sum of partial particle decay times, including 8071 << 6630 C the next expected one, which is in competition 8072 void G4Abla::part_fiss(G4double BET, << 6631 C with fission now 8073 G4double GP, << 6632 C ZF Z of nucleus 8074 G4double GF, << 6633 C AF A of nucleus 8075 G4double Y, << 6634 C----------------------------------------------------------------------- 8076 G4double TAUF, << 6635 C ON OUTPUT: 8077 G4double TS1, << 6636 C CHOICE Key for decay mode: 0 = no decay (only internal) 8078 G4double TSUM, << 6637 C 1 = evaporation 8079 G4int* CHOICE, << 6638 C 2 = fission 8080 G4double ZF, << 6639 C----------------------------------------------------------------------- 8081 G4double AF, << 6640 C VARIABLES: 8082 G4double FT, << 6641 C GP Partial particle decay width 8083 G4double* T_LAPSE, << 6642 C GF Asymptotic value of Gamma-f, including Kramers factor 8084 G4double* GF_LOC) << 6643 C TAUF Transient time 8085 { << 6644 C TS1 Partial particle decay time 8086 /* << 6645 C TSUM Total sum of partial particle decay times 8087 C THIS SUBROUTINE IS AIMED TO CHOOSE << 6646 C CHOICE Key for decay mode 8088 C AND FISSION << 6647 C ZF Z of nucleus 8089 C WE USE MONTE-CARLO METHODS AND SAMP << 6648 C AF A of nucleus 8090 c TO SIMULATE THE TRANSIENT TIME WITH 30 << 6649 C FT Used for Fermi function in FUNC_TRANS 8091 C FOR t>1.5*TAUF , GF=CONSTANT=ASYMPT << 6650 C STEP_LENGTH Step in time to sample different decays 8092 FACTOR) << 6651 C BEGIN_TIME Total sum of partial particle decay times, excluding 8093 c---------------------------------------- << 6652 C the next expected one, which is in competition 8094 c Modifications introduced by BEATRIZ << 6653 C with fission now 8095 c 1. Now this subrutine is included in << 6654 C LOC_TIME_BEGIN Begin of time interval considered in one step 8096 c 2. TSUM does not include the current << 6655 C LOC_TIME_END End of time interval considered in one step 8097 C 3. T_LAPSE is the time until decay, << 6656 C GF_LOC In-grow function for fission width, 8098 C 4. GF_LOC is also taken as an output << 6657 c normalized to asymptotic value 8099 C 5. BET (Diss. Coeff.) and HOMEGA (Fr << 6658 C TS2 Effective partial fission decay time in one time step 8100 c are included as input variables b << 6659 C HBAR hbar 8101 C---------------------------------------- << 6660 C T_LAPSE Effective decay time in one time step 8102 C ON INPUT: << 6661 C REAC_PROB Reaction probability in one time step 8103 C GP Partial partic << 6662 C X Help variable for random generator 8104 C GF Asymptotic val << 6663 C------------------------------------------------------------------------ 8105 factor C AF Mass nu << 6664 */ 8106 Transient time C TS1 << 6665 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 << 6666 G4double HBAR=6.582122e-22; 8108 times, including C << 6667 G4int fchoice=0; 8109 is in competition C << 6668 G4double fGF_LOC=0.,fT_LAPSE=0.; 8110 Z of nucleus C AF A << 6669 // 8111 C---------------------------------------- << 6670 if(GF<=0.0){ 8112 C ON OUTPUT: << 6671 *CHOICE = 1; 8113 C CHOICE Key for decay << 6672 *T_LAPSE=TS1; 8114 C << 6673 *GF_LOC = 0.0; 8115 C << 6674 goto direct107; 8116 C---------------------------------------- << 6675 } 8117 C VARIABLES: << 6676 // 8118 C GP Partial partic << 6677 fomega_gs(AF,ZF,&K1,&OMEGA,&HOMEGA); 8119 C GF Asymptotic val << 6678 // 8120 factor C TAUF Transie << 6679 // **************************************************************** 8121 decay time C TSUM Tot << 6680 // Calculation of the shift in time due to the initial conditions 8122 times C CHOICE Key for << 6681 // 8123 C AF A of nucleus << 6682 // Overdamped regime 8124 C FT Used for Fermi << 6683 if(BET*BET>4.0*OMEGA*OMEGA){ 8125 C STEP_LENGTH Step in time t << 6684 // REMEMBER THAT HOMEGA IS ACTUALLY HBAR*HOMEGA1=1MeV 8126 C BEGIN_TIME Total sum of p << 6685 // SO THAT HOMEGA1 = HOMEGA/HBAR 8127 excluding C << 6686 // Additional factor 1/16 proposed by KHS on 14/7/2010. Takes into 8128 competition C << 6687 // account the fact that the curvature of the potential is ~16 times 8129 Begin of time interval considered in one << 6688 // larger than what predicted by the liquid drop model, because of 8130 of time interval considered in one step C << 6689 // shell effects. 8131 function for fission width, c << 6690 t_0 = BET*1.e21*HBAR*HBAR/(4.*HOMEGA*FT)/16.; 8132 asymptotic value C TS2 << 6691 }else{ 8133 time in one time step C HBAR << 6692 // Underdamped regime 8134 Effective decay time in one time step C << 6693 if(((2.*FT-HOMEGA/16.)>0.000001) && BET>0.0){ 8135 probability in one time step C X << 6694 // Additional factor 1/16 proposed by KHS on 14/7/2010. Takes into 8136 random generator << 6695 // account the fact that the curvature of the potential is ~16 times 8137 C---------------------------------------- << 6696 // larger than what predicted by the liquid drop model, because of 8138 */ << 6697 // shell effects. 8139 G4double K1, OMEGA, HOMEGA, t_0, STEP_LEN << 6698 t_0 = (std::log(2.*FT/(2.*FT-HOMEGA/16.)))/(BET*1.e21); 8140 << 6699 }else{ 8141 G4double HBAR = 6.582122e-22; << 6700 // Neglect fission transients if the time shift t_0 is too 8142 G4int fchoice = 0; << 6701 // large. Suppresses large, spurious fission cross section at very 8143 G4double fGF_LOC = 0., fT_LAPSE = 0.; << 6702 // low excitation energy in p+Ta. 8144 // << 6703 // 8145 if (GF <= 0.0) << 6704 fchoice = 0; 8146 { << 6705 goto direct106; 8147 *CHOICE = 1; << 6706 } 8148 *T_LAPSE = TS1; << 6707 } 8149 *GF_LOC = 0.0; << 6708 // ********************************************************************+ 8150 goto direct107; << 6709 fchoice = 0; 8151 } << 6710 STEP_LENGTH = 1.5*TAUF/50.; 8152 // << 6711 // 8153 fomega_gs(AF, ZF, &K1, &OMEGA, &HOMEGA); << 6712 // AT FIRST WE CACULATE THE REAL CURRENT TIME 8154 // << 6713 // TSUM includes only the time elapsed in the previous steps 8155 // ************************************** << 6714 // 8156 // Calculation of the shift in time du << 6715 BEGIN_TIME = TSUM + t_0; 8157 // << 6716 // 8158 // Overdamped regime << 6717 if(BEGIN_TIME<0.0) std::cout << "CURRENT TIME < 0" << BEGIN_TIME << std::endl; 8159 if (BET * BET > 4.0 * OMEGA * OMEGA) << 6718 // 8160 { << 6719 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; 6720 LOC_TIME_BEGIN = BEGIN_TIME; 8205 // << 6721 // 8206 while ((LOC_TIME_BEGIN < 1.5 * TAUF) << 6722 while((LOC_TIME_BEGIN<1.5*TAUF)&&fchoice==0){ 8207 { << 8208 6723 8209 LOC_TIME_END = LOC_TIME_BEGIN + S << 6724 LOC_TIME_END = LOC_TIME_BEGIN + STEP_LENGTH; 8210 // << 6725 // 8211 // NOW WE ESTIMATE THE MEAN VALUE << 6726 // NOW WE ESTIMATE THE MEAN VALUE OF THE FISSION WIDTH WITHIN THE SMALL INTERVAL 8212 // INTERVAL << 6727 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 << 6728 // 8214 func_trans(LOC_TIME_EN << 6729 fGF_LOC = fGF_LOC * GF; 8215 2.0; << 6730 8216 // << 6731 // TS2 IS THE MEAN DECAY TIME OF THE FISSION CHANNEL 8217 fGF_LOC = fGF_LOC * GF; << 6732 if(fGF_LOC>0.0){ 8218 << 6733 TS2 = HBAR/fGF_LOC; 8219 // TS2 IS THE MEAN DECAY TIME OF << 6734 }else{ 8220 if (fGF_LOC > 0.0) << 6735 TS2 = 0.0; 8221 { << 6736 } 8222 TS2 = HBAR / fGF_LOC; << 6737 // 8223 } << 6738 if(TS2>0.0){ 8224 else << 6739 LAMBDA = 1.0/TS1 + 1.0/TS2; 8225 { << 6740 }else{ 8226 TS2 = 0.0; << 6741 LAMBDA = 1.0/TS1; 8227 } << 6742 } 8228 // << 6743 // 8229 if (TS2 > 0.0) << 6744 // This is the probability to survive the decay at this step 8230 { << 6745 REAC_PROB = std::exp(-1.0*STEP_LENGTH*LAMBDA); 8231 LAMBDA = 1.0 / TS1 + 1.0 / TS << 6746 // I GENERATE A RANDOM NUMBER 8232 } << 6747 X = G4AblaRandom::flat(); 8233 else << 6748 if(X>REAC_PROB){ 8234 { << 6749 // THEN THE EVAPORATION OR FISSION HAS OCCURED 8235 LAMBDA = 1.0 / TS1; << 6750 FISS_PROB = fGF_LOC / (fGF_LOC+GP); >> 6751 X = G4AblaRandom::flat(); >> 6752 // WRITE(6,*)'X=',X >> 6753 if(X<FISS_PROB){ >> 6754 // FISSION OCCURED >> 6755 fchoice = 2; >> 6756 }else{ >> 6757 // EVAPORATION OCCURED >> 6758 fchoice = 1; >> 6759 } >> 6760 }// if x >> 6761 LOC_TIME_BEGIN = LOC_TIME_END; >> 6762 }// while >> 6763 // Take the real decay time of this decay step >> 6764 fT_LAPSE = LOC_TIME_END - BEGIN_TIME; >> 6765 }// if BEGIN_TIME >> 6766 // >> 6767 // NOW, IF NOTHING HAPPENED DURING TRANSIENT TIME >> 6768 direct106: >> 6769 if(fchoice==0){ >> 6770 fGF_LOC=GF; >> 6771 FISS_PROB = GF / (GF+GP); >> 6772 >> 6773 // Added for cases where already at the beginning BEGIN_TIME > 1.5d0*TAUF >> 6774 if(GF>0.0){ >> 6775 TS2 = HBAR/GF; >> 6776 }else{ >> 6777 TS2 = 0.0; >> 6778 } >> 6779 >> 6780 if(TS2>0.0){ >> 6781 LAMBDA = 1./TS1 + 1./TS2; >> 6782 }else{ >> 6783 LAMBDA = 1./TS1; 8236 } 6784 } 8237 // << 6785 // 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(); 6786 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 6787 8282 if (TS2 > 0.0) << 6788 if(X<FISS_PROB){ 8283 { << 6789 // FISSION OCCURED 8284 LAMBDA = 1. / TS1 + 1. / TS2; << 6790 fchoice = 2; 8285 } << 6791 }else{ 8286 else << 6792 // EVAPORATION OCCURED 8287 { << 6793 fchoice = 1; 8288 LAMBDA = 1. / TS1; << 6794 } 8289 } << 6795 // 8290 // << 6796 //TIRAGE ALEATOIRE DANS UNE EXPONENTIELLLE : Y=EXP(-X/T) 8291 X = G4AblaRandom::flat(); << 6797 // EXPOHAZ=-T*LOG(HAZ(K)) >> 6798 fT_LAPSE = fT_LAPSE -1.0/LAMBDA*std::log(G4AblaRandom::flat()); >> 6799 } >> 6800 // >> 6801 direct107: 8292 6802 8293 if (X < FISS_PROB) << 6803 (*T_LAPSE)=fT_LAPSE; 8294 { << 6804 (*GF_LOC)=fGF_LOC; 8295 // FISSION OCCURED << 6805 (*CHOICE)=fchoice; 8296 fchoice = 2; << 6806 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 } 6807 } 8316 6808 8317 G4double G4Abla::tunnelling(G4double A, << 6809 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, << 6810 { 8319 G4double Y, << 6811 // Subroutine to caluclate fission width with included effects 8320 G4double EE, << 6812 // of tunnelling through the fission barrier 8321 G4double EF, << 6813 8322 G4double TEMP, << 6814 G4double PI = 3.14159; 8323 G4double DENSG, << 6815 G4int IZ, IN; 8324 G4double DENSF, << 6816 G4double MFCD,OMEGA,HOMEGA1,HOMEGA2=0.,GFTUN; 8325 G4double ENH_FACT << 6817 G4double E1,E2,EXP_FACT,CORR_FUNCT,FACT1,FACT2,FACT3; 8326 { << 6818 8327 // Subroutine to caluclate fission width << 6819 IZ = idnint(ZPRF); 8328 // of tunnelling through the fission barr << 6820 IN = idnint(A-ZPRF); 8329 << 6821 8330 G4double PI = 3.14159; << 6822 // For low energies system "sees" LD barrier 8331 G4int IZ, IN; << 6823 fomega_sp(A,Y,&MFCD,&OMEGA,&HOMEGA1); 8332 G4double MFCD, OMEGA, HOMEGA1, HOMEGA2 = << 6824 8333 G4double E1, E2, EXP_FACT, CORR_FUNCT, FA << 6825 if(mod(IN,2)==0&&mod(IZ,2)==0){ // e-e 8334 << 6826 // Due to pairing gap, even-even nuclei cannot tunnel for excitation energy lower 8335 IZ = idnint(ZPRF); << 6827 // than pairing gap (no levels at which system can be) 8336 IN = idnint(A - ZPRF); << 6828 EE = EE - 12.0/std::sqrt(A); 8337 << 6829 HOMEGA2 = 1.04; 8338 // For low energies system "sees" LD barr << 6830 } 8339 fomega_sp(A, Y, &MFCD, &OMEGA, &HOMEGA1); << 6831 8340 << 6832 if(mod(IN,2)==1&&mod(IZ,2)==1){ // o-o 8341 if (mod(IN, 2) == 0 && mod(IZ, 2) == 0) << 6833 HOMEGA2 = 0.65; 8342 { // e-e << 6834 } 8343 // Due to pairing gap, even-even nucl << 6835 8344 // lower than pairing gap (no levels << 6836 if(mod(IN,2)==1&&mod(IZ,2)==0){ // o-e 8345 EE = EE - 12.0 / std::sqrt(A); << 6837 HOMEGA2 = 0.8; 8346 HOMEGA2 = 1.04; << 6838 } 8347 } << 6839 8348 << 6840 if(mod(IN,2)==0&&mod(IZ,2)==1){ // e-0 8349 if (mod(IN, 2) == 1 && mod(IZ, 2) == 1) << 6841 HOMEGA2 = 0.8; 8350 { // o-o << 6842 } 8351 HOMEGA2 = 0.65; << 6843 8352 } << 6844 E1 = EF + HOMEGA1/2.0/PI*std::log(HOMEGA1*(2.0*PI+HOMEGA2)/4.0/PI/PI); 8353 << 6845 8354 if (mod(IN, 2) == 1 && mod(IZ, 2) == 0) << 6846 E2 = EF + HOMEGA2/(2.0*PI)*std::log(1.0+2.0*PI/HOMEGA2); 8355 { // o-e << 6847 8356 HOMEGA2 = 0.8; << 6848 // AKH May 2013 - Due to approximations in the analytical integration, at energies 8357 } << 6849 // just above barrier Pf was to low, at energies below 8358 << 6850 // barrier it was somewhat higher. LInes below are supposed to correct for this. 8359 if (mod(IN, 2) == 0 && mod(IZ, 2) == 1) << 6851 // Factor 0.20 in EXP_FACT comes from the slope of the Pf(Eexc) (Gavron's data) 8360 { // e-0 << 6852 // around fission barrier. 8361 HOMEGA2 = 0.8; << 6853 EXP_FACT = (EE-EF)/(HOMEGA2/(2.0*PI)); 8362 } << 6854 if(EXP_FACT>700.0) EXP_FACT = 700.0; 8363 << 6855 CORR_FUNCT = HOMEGA1 * (1.0-1.0/(1.0+std::exp(EXP_FACT))); 8364 E1 = EF + HOMEGA1 / 2.0 / PI * std::log(H << 6856 if(mod(IN,2)==0&&mod(IZ,2)==0){ 8365 << 6857 CORR_FUNCT = HOMEGA1 * (1.0-1.0/(1.0+std::exp(EXP_FACT))); 8366 E2 = EF + HOMEGA2 / (2.0 * PI) * std::log << 6858 } 8367 << 6859 8368 // AKH May 2013 - Due to approximations i << 6860 FACT1 = HOMEGA1/(2.0*PI*TEMP+HOMEGA1); 8369 // energies just above barrier Pf was to << 6861 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 << 6862 FACT3 = HOMEGA2/(2.0*PI*TEMP-HOMEGA2); 8371 // in EXP_FACT comes from the slope of th << 6863 8372 // fission barrier. << 6864 if(EE<E1){ 8373 EXP_FACT = (EE - EF) / (HOMEGA2 / (2.0 * << 6865 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) << 6866 }else{ 8375 EXP_FACT = 700.0; << 6867 if(EE>=E1&&EE<E2){ 8376 CORR_FUNCT = HOMEGA1 * (1.0 - 1.0 / (1.0 << 6868 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) << 6869 }else{ 8378 { << 6870 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 } 6871 } 8400 else << 6872 } 8401 { << 6873 GFTUN = GFTUN/std::exp(EE/TEMP)*DENSF*ENH_FACT/DENSG/2.0/PI; 8402 GFTUN = std::exp(EE / TEMP) * (1. << 6874 GFTUN = GFTUN * CORR_FUNCT; 8403 std::exp(E2 / TEMP) * (1. << 6875 return GFTUN; 8404 std::exp(E2 / TEMP) * (0. << 6876 } 8405 std::exp(E1 / TEMP) * (0. << 6877 8406 FACT1 * (std::exp(E1 / TE << 6878 8407 std::exp(-2.0 * << 6879 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 } << 6880 { 8409 } << 6881 // 8410 GFTUN = GFTUN / std::exp(EE / TEMP) * DEN << 6882 G4double FNORM,MASS_ASYM_SADD_B,FP_PER,FP_PAR,SIG_PER_SP,SIG_PAR_SP; 8411 GFTUN = GFTUN * CORR_FUNCT; << 6883 G4double Z2OVERA,ftemp,fgf,DENSF,ECOR,EROT,qr; 8412 return GFTUN; << 6884 G4double DCR,UCR,ENH_FACTA,ENH_FACTB,ENH_FACT,PONFE; 8413 } << 6885 G4double PI = 3.14159; 8414 << 6886 8415 void G4Abla::fission_width(G4double ZPRF, << 6887 DCR = fiss->dcr; 8416 G4double A, << 6888 UCR = fiss->ucr; 8417 G4double EE, << 6889 Z2OVERA = ZPRF * ZPRF / A; 8418 G4double BS, << 6890 8419 G4double BK, << 6891 // Nuclei below Businaro-Gallone point do not go through fission 8420 G4double EF, << 6892 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; 6893 (*GF) = 0.0; 8445 (*TEMP) = 0.5; 6894 (*TEMP) = 0.5; 8446 return; 6895 return; 8447 } << 6896 } 8448 6897 8449 // Level density above SP << 6898 // Level density above SP 8450 // Saddle-point deformation is defbet as << 6899 // Saddle-point deformation is defbet as above. But, FP_PER and FP_PAR 8451 // are calculated for fission in DENSNIV << 6900 // are calculated for fission in DENSNIV acc to Myers and Hasse, and their 8452 // parametrization is done as function of << 6901 // parametrization is done as function of y 8453 densniv(A, ZPRF, EE, EF, &DENSF, 0.0, BS, << 6902 densniv(A,ZPRF,EE,EF,&DENSF,0.0,BS,BK,&ftemp,OPTSHP,0,Y,&ECOR,JPR,1,&qr); 8454 << 6903 8455 if (OPTCOL == 0) << 6904 if(OPTCOL==0){ 8456 { << 6905 fgf= DENSF/DENSG/PI/2.0*ftemp; 8457 fgf = DENSF / DENSG / PI / 2.0 * ftem << 6906 (*TEMP)=ftemp; 8458 (*TEMP) = ftemp; << 6907 (*GF)= fgf; 8459 (*GF) = fgf; << 6908 return; 8460 return; << 6909 } 8461 } << 8462 6910 8463 // FP = 2/5*M0*R0**2/HBAR**2 * A**(5/3) * << 6911 // FP = 2/5*M0*R0**2/HBAR**2 * A**(5/3) * (1 + DEFBET/3) 8464 // FP is used to calculate the spin-cutof << 6912 // FP is used to calculate the spin-cutoff parameter SIG=FP*TEMP/hbar**2; hbar**2 8465 // hbar**2 is, therefore, included in FP << 6913 // is, therefore, included in FP in order to avoid problems with large exponents 8466 // exponents The factor fnorm inlcudes th << 6914 // The factor fnorm inlcudes then R0, M0 and hbar**2 - 8467 // R0*M0/hbar**2 = 1.2fm*931.49MeV/c**2 / << 6915 // fnorm = R0*M0/hbar**2 = 1.2fm*931.49MeV/c**2 /(6.582122e-22 MeVs)**2 and is 8468 // units 1/MeV << 6916 // in units 1/MeV 8469 FNORM = 1.2 * 1.2 * 931.49 * 1.e-2 / (9.0 << 6917 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 << 6918 // 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 << 6919 // Perpendicular moment of inertia 8472 FP_PER = 2.0 / 5.0 * std::pow(A, 5.0 / 3. << 6920 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 << 6921 8474 // AK - Jan 2011 - following line is need << 6922 // AK - Jan 2011 - following line is needed, as for these nuclei it seems that 8475 // FP_PER calculated according to above f << 6923 // FP_PER calculated according to above formula has too large values, leading to too 8476 // to too large ENH_FACT << 6924 // large ENH_FACT 8477 if (Z2OVERA <= 30.0) << 6925 if(Z2OVERA<=30.0) FP_PER = 6.50; 8478 FP_PER = 6.50; << 6926 8479 << 6927 // Parallel moment of inertia 8480 // Parallel moment of inertia << 6928 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. << 6929 if(FP_PAR<0.0) FP_PAR = 0.0; 8482 if (FP_PAR < 0.0) << 6930 8483 FP_PAR = 0.0; << 6931 EROT = JPR * JPR / (2.0 * std::sqrt(FP_PAR*FP_PAR + FP_PER*FP_PER)); 8484 << 6932 if(IEROT==1) EROT = 0.0; 8485 EROT = JPR * JPR / (2.0 * std::sqrt(FP_PA << 6933 8486 if (IEROT == 1) << 6934 // Perpendicular spin cut-off parameter 8487 EROT = 0.0; << 6935 SIG_PER_SP = std::sqrt(FP_PER * ftemp); 8488 << 6936 8489 // Perpendicular spin cut-off parameter << 6937 if(SIG_PER_SP<1.0) SIG_PER_SP = 1.0; 8490 SIG_PER_SP = std::sqrt(FP_PER * ftemp); << 6938 8491 << 6939 // Parallel spin cut-off parameter 8492 if (SIG_PER_SP < 1.0) << 6940 SIG_PAR_SP = std::sqrt(FP_PAR * ftemp); 8493 SIG_PER_SP = 1.0; << 6941 ENH_FACT = 1.0; 8494 << 6942 // 8495 // Parallel spin cut-off parameter << 6943 if(A>223.0){ 8496 SIG_PAR_SP = std::sqrt(FP_PAR * ftemp); << 6944 MASS_ASYM_SADD_B = 2.0; 8497 ENH_FACT = 1.0; << 6945 }else{ 8498 // << 6946 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 } 6947 } 8526 else << 6948 8527 { << 6949 // actinides with low barriers 8528 // super-heavy nuclei (only barr << 6950 if(Z2OVERA>35.&&Z2OVERA<=(110.*110./298.0)){ 8529 ENH_FACT = std::sqrt(8.0 * PI) * << 6951 // Barrier A is axial asymmetric >> 6952 ENH_FACTA = std::sqrt(8.0*PI) * SIG_PER_SP*SIG_PER_SP * SIG_PAR_SP; >> 6953 // Barrier B is axial symmetric >> 6954 ENH_FACTB = MASS_ASYM_SADD_B * SIG_PER_SP*SIG_PER_SP; >> 6955 // Total enhancement >> 6956 ENH_FACT = ENH_FACTA * ENH_FACTB / (ENH_FACTA + ENH_FACTB); >> 6957 }else{ >> 6958 // nuclei with high fission barriers (only barrier B plays a role, axial symmetric) >> 6959 if(Z2OVERA<=35.){ >> 6960 ENH_FACT = MASS_ASYM_SADD_B*SIG_PER_SP*SIG_PER_SP; >> 6961 }else{ >> 6962 // super-heavy nuclei (only barrier A plays a role, axial asymmetric) >> 6963 ENH_FACT = std::sqrt(8.0*PI) * SIG_PER_SP*SIG_PER_SP* SIG_PAR_SP; 8530 } 6964 } 8531 } << 6965 } 8532 6966 8533 // Fading-out with excitation energy abov << 6967 // Fading-out with excitation energy above the saddle point: 8534 PONFE = (ECOR - UCR - EROT) / DCR; << 6968 PONFE = (ECOR-UCR-EROT)/DCR; 8535 if (PONFE > 700.) << 6969 if(PONFE>700.) PONFE = 700.0; 8536 PONFE = 700.0; << 6970 // Fading-out according to Junghans: 8537 // Fading-out according to Junghans: << 6971 ENH_FACT = 1.0/(1.0+std::exp(PONFE))*ENH_FACT+1.0; 8538 ENH_FACT = 1.0 / (1.0 + std::exp(PONFE)) << 6972 8539 << 6973 if(ENH_FACT<1.0)ENH_FACT = 1.0; 8540 if (ENH_FACT < 1.0) << 6974 fgf= DENSF/DENSG/PI/2.0*ftemp*ENH_FACT; 8541 ENH_FACT = 1.0; << 6975 8542 fgf = DENSF / DENSG / PI / 2.0 * ftemp * << 6976 // Tunneling 8543 << 6977 if(EE<EF+1.){ 8544 // Tunneling << 6978 fgf=tunnelling(A,ZPRF,Y,EE,EF,ftemp,DENSG,DENSF,ENH_FACT); 8545 if (EE < EF) << 6979 } 8546 { << 6980 // 8547 fgf = tunnelling(A, ZPRF, Y, EE, EF, << 6981 (*GF)= fgf; 8548 } << 6982 (*TEMP)=ftemp; 8549 // << 6983 return; 8550 (*GF) = fgf; << 8551 (*TEMP) = ftemp; << 8552 return; << 8553 } 6984 } 8554 6985 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 6986 8593 *LORBITAL = -1. * THETA_ORBITAL * (LMOTHE << 6987 void G4Abla::lorb(G4double AMOTHER,G4double ADAUGHTER,G4double LMOTHER,G4double EEFINAL,G4double *LORBITAL,G4double *SIGMA_LORBITAL) >> 6988 { >> 6989 >> 6990 G4double AFRAGMENT,S4FINAL,ALEVDENS; >> 6991 G4double THETA_MOTHER,THETA_ORBITAL; >> 6992 >> 6993 /* >> 6994 C Values on input: >> 6995 C AMOTHER mass of mother nucleus >> 6996 C ADAUGHTER mass of daughter fragment >> 6997 C LMOTHER angular momentum of mother (may be real) >> 6998 C EEFINAL excitation energy after emission >> 6999 C (sum of daughter and fragment) >> 7000 C >> 7001 C Values on output: >> 7002 C LORBITAL mean value of orbital angular momentum >> 7003 C (assumed to be fully aligned with LMOTHER) >> 7004 C SIGMA_LORBITAL standard deviation of the orbital angular momentum >> 7005 */ >> 7006 if (EEFINAL<=0.01) EEFINAL = 0.01; >> 7007 AFRAGMENT = AMOTHER - ADAUGHTER; >> 7008 ALEVDENS = 0.073*AMOTHER + 0.095*std::pow(AMOTHER,2.0/3.0); >> 7009 S4FINAL = ALEVDENS * EEFINAL; >> 7010 if(S4FINAL <= 0.0 || S4FINAL > 100000.){ >> 7011 std::cout<< "S4FINAL:" << S4FINAL << ALEVDENS << EEFINAL << idnint(AMOTHER) << idnint(AFRAGMENT) << std::endl; >> 7012 } >> 7013 THETA_MOTHER = 0.0111 * std::pow(AMOTHER,1.66667); >> 7014 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 7015 8595 *SIGMA_LORBITAL = std::sqrt(std::sqrt(S4F << 7016 *LORBITAL = -1.* THETA_ORBITAL * (LMOTHER / THETA_MOTHER + std::sqrt(S4FINAL) /(ALEVDENS*LMOTHER)); 8596 7017 8597 return; << 7018 *SIGMA_LORBITAL = std::sqrt(std::sqrt(S4FINAL) * THETA_ORBITAL / ALEVDENS); >> 7019 >> 7020 return; 8598 } 7021 } 8599 7022 8600 // Random generator according to a distributi 7023 // Random generator according to a distribution similar to a 8601 // Maxwell distribution with quantum-mech. x- << 7024 // Maxwell distribution with quantum-mech. x-section for neutrons according to KHS 8602 // KHS << 8603 // Y = SQRT(X) * EXP(-X/T) (approximatio 7025 // Y = SQRT(X) * EXP(-X/T) (approximation:) 8604 G4double G4Abla::fvmaxhaz_neut(G4double x) << 7026 G4double G4Abla::fvmaxhaz_neut(G4double x){ 8605 { << 8606 7027 8607 return (2.0 * x * std::sqrt(std::log(G4Ab << 7028 return (2.0 * x * std::sqrt(std::log(G4AblaRandom::flat()) * std::log(G4AblaRandom::flat()))); 8608 } 7029 } 8609 7030 8610 void G4Abla::imf(G4double ACN, << 7031 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, << 7032 { 8612 G4double TEMP, << 7033 // input variables (compound nucleus) Acn, Zcn, Temp, EE 8613 G4double EE, << 7034 // output variable (IMF) Zimf,Aimf,Bimf,Sbimf,IRNDM 8614 G4double* ZIMF, << 7035 // 8615 G4double* AIMF, << 7036 // SBIMF = separation energy + coulomb barrier 8616 G4double* BIMF, << 7037 // 8617 G4double* SBIMF, << 7038 // SDW(Z) is the sum over all isotopes for a given Z of the decay widths 8618 G4double* TIMF, << 7039 // DW(Z,A) is the decay width of a certain nuclide 8619 G4double JPRF) << 7040 // 8620 { << 7041 // Last update: 8621 // input variables (compound nucleus) << 7042 // 28/10/13 - JLRS - from abrablav4 (AK) 8622 // output variable (IMF) Zimf,Aimf,Bi << 7043 // 13/11/16 - JLRS - Included this function in Abla++ 8623 // << 7044 8624 // SBIMF = separation energy + coulom << 7045 G4int IZIMFMAX=0; 8625 // << 7046 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 << 7047 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 << 7048 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 // << 7049 G4double PI = 3.141592653589793238; 8629 // Last update: << 7050 G4double ZIMF_1=0.0; 8630 // 28/10/13 - JLRS - from abr << 7051 G4double SDWprevious=0,SUMDW_TOT=0,SUM_Z=0,X=0,SUMDW_N_TOT=0,XX=0; 8631 // 13/11/16 - JLRS - Included << 7052 G4double SDW[98]; 8632 << 7053 G4double DW[98][251]; 8633 G4int IZIMFMAX = 0; << 7054 G4double BBIMF[98][251]; 8634 G4int iz = 0, in = 0, IZIMF = 0, INMI = 0 << 7055 G4double SSBIMF[98][251]; 8635 INNMAX = 0, INMIN = 0, IAIMF = 0, I << 7056 G4int OPTSHPIMF=opt->optshpimf; 8636 G4double BS = 0, BK = 0, BC = 0, BSHELL = << 7057 8637 AIMF_1, OMEGAP = 0, fBIMF = 0.0, << 7058 // Initialization 8638 G4double DENSCN = 0, TEMPCN = 0, ECOR = 0 << 7059 for (G4int ia = 0; ia < 98; ia++) 8639 QRCN = 0, DENSIMF = 0, fTIMF = 0 << 7060 for (G4int ib = 0; ib < 251; ib++) { 8640 G4double PI = 3.141592653589793238; << 7061 BBIMF[ia][ib] = 0.0; 8641 G4double ZIMF_1 = 0.0; << 7062 SSBIMF[ia][ib] = 0.0; 8642 G4double SDWprevious = 0, SUMDW_TOT = 0, << 7063 } 8643 G4double SDW[98]; << 7064 8644 G4double DW[98][251]; << 7065 // take the half of the CN and transform it in integer (floor it) 8645 G4double BBIMF[98][251]; << 7066 IZIMFMAX = idnint(ZCN / 2.0); 8646 G4double SSBIMF[98][251]; << 7067 8647 G4int OPTSHPIMF = opt->optshpimf; << 7068 if(IZIMFMAX<3){ 8648 << 7069 std::cout << "CHARGE_IMF line 46" << std::endl; 8649 // Initialization << 7070 std::cout << "Problem: IZIMFMAX < 3 " << std::endl; 8650 for (G4int ia = 0; ia < 98; ia++) << 7071 std::cout << "ZCN,IZIMFMAX," << ZCN << "," << IZIMFMAX << std::endl; 8651 for (G4int ib = 0; ib < 251; ib++) << 7072 } 8652 { << 7073 8653 BBIMF[ia][ib] = 0.0; << 7074 iz = idnint(ZCN); 8654 SSBIMF[ia][ib] = 0.0; << 7075 in = idnint(ACN) - iz; 8655 } << 7076 BSHELL = ecld->ecgnz[in][iz]- ecld->vgsld[in][iz]; 8656 << 7077 DEFBET = ecld->beta2[in][iz]; 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 7078 8793 DW[IZIMF][IAIMF] = WIDTH_IMF; << 7079 bsbkbc(ACN,ZCN,&BS,&BK,&BC); 8794 7080 8795 } // for INIMF << 7081 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 7082 8800 // Loop to calculate where the gamma << 7083 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; << 7084 EROTCN = JPRF * JPRF * 197.328 * 197.328 /(2. * IINERT); 8802 IZSTOP = 0; << 7085 // >> 7086 for(IZIMF=3;IZIMF<=IZIMFMAX;IZIMF++){ >> 7087 >> 7088 SDW[IZIMF] = 0.0; >> 7089 ZIMF_1 = 1.0*IZIMF; >> 7090 >> 7091 // *** Find the limits that both IMF and partner are bound : >> 7092 >> 7093 isostab_lim(IZIMF,&INIMFMI,&INIMFMA);// Bound isotopes for IZIMF from INMIN to INIMFMA >> 7094 // Idea - very proton-rich nuclei can live long enough to evaporate IMF before decaying: >> 7095 INIMFMI = max(1,INIMFMI-2); >> 7096 >> 7097 IZCN = idnint(ZCN); // Z of CN >> 7098 INCN = idnint(ACN) - IZCN; // N of CN >> 7099 >> 7100 isostab_lim(IZCN-IZIMF,&INMI,&INMA); // Daughter nucleus after IMF emission, >> 7101 // limits of bound isotopes >> 7102 INMI = max(1,INMI-2); >> 7103 INMIN = max(INIMFMI,INCN-INMA); // Both IMF and daughter must be bound >> 7104 INNMAX = min(INIMFMA,INCN-INMI); // " >> 7105 >> 7106 ILIMMAX = max(INNMAX,INMIN); // In order to keep the variables below >> 7107 // *** >> 7108 >> 7109 for(G4int INIMF=INMIN;INIMF<=ILIMMAX;INIMF++){ // Range of possible IMF isotopes >> 7110 IAIMF = IZIMF + INIMF; >> 7111 DW[IZIMF][IAIMF] = 0.0; >> 7112 AIMF_1 = 1.0*(IAIMF); >> 7113 >> 7114 // Q-values >> 7115 mglms(ACN-AIMF_1,ZCN-ZIMF_1,OPTSHPIMF,&MARES); >> 7116 mglms(AIMF_1,ZIMF_1,OPTSHPIMF,&MAIMF); >> 7117 mglms(ACN,ZCN,OPTSHPIMF,&MAZ); >> 7118 >> 7119 // Barrier >> 7120 if(ACN<=AIMF_1){ >> 7121 SSBIMF[IZIMF][IAIMF] = 1.e37; >> 7122 }else{ >> 7123 barrs(idnint(ZCN-ZIMF_1),idnint(ACN-AIMF_1),idnint(ZIMF_1),idnint(AIMF_1),&fBIMF,&OMEGAP); >> 7124 SSBIMF[IZIMF][IAIMF] = MAIMF + MARES - MAZ + fBIMF; >> 7125 BBIMF[IZIMF][IAIMF] = fBIMF; >> 7126 } >> 7127 >> 7128 // ***** Width ********************* >> 7129 DEFBETIMF = ecld->beta2[idnint(AIMF_1-ZIMF_1)][idnint(ZIMF_1)]+ecld->beta2[idnint(ACN-AIMF_1-ZCN+ZIMF_1)][idnint(ZCN-ZIMF_1)]; >> 7130 >> 7131 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)); >> 7132 >> 7133 EROT = JPRF * JPRF * 197.328 * 197.328 /(2.0 * IINERT); >> 7134 >> 7135 // IF(IEROT.EQ.1) EROT = 0.D0 >> 7136 if (EE<(SSBIMF[IZIMF][IAIMF]+EROT) || DENSCN<=0.0){ >> 7137 WIDTH_IMF = 0.0; >> 7138 // PRINT*,IDNINT(ACN),IDNINT(ZCN),IZIMF,IAIMF >> 7139 }else{ >> 7140 // here the temperature at "saddle point" is used >> 7141 // Increase of the level densitiy at the barrier due to deformation; see comment in ABLA >> 7142 // BSIMF = ((ACN-AIMF_1)**(2.D0/3.D0) + AIMF_1**(2.D0/3.D0))/ >> 7143 // & ACN**(2.D0/3.D0) >> 7144 BSIMF = BS; >> 7145 densniv(ACN,ZCN,EE,SSBIMF[IZIMF][IAIMF],&DENSIMF,0.0,BSIMF,1.0,&fTIMF,0,0,DEFBETIMF,&ECOR,JPRF,2,&QR); >> 7146 IMFARG = (SSBIMF[IZIMF][IAIMF]+EROTCN-EROT)/fTIMF; >> 7147 if(IMFARG>200.0) IMFARG = 200.0; >> 7148 >> 7149 WIDTH1 = width(ACN,ZCN,AIMF_1,ZIMF_1,fTIMF,fBIMF,SSBIMF[IZIMF][IAIMF],EE-EROT); >> 7150 >> 7151 WIDTH_IMF = WIDTH1 * std::exp(-IMFARG) * QR / QRCN; >> 7152 >> 7153 if(WIDTH_IMF<=0.0){ >> 7154 std::cout << "GAMMA_IMF=0 -> LOOK IN GAMMA_IMF CALCULATIONS!" << std::endl; >> 7155 std::cout << "ACN,ZCN,AIMF,ZIMF:" << idnint(ACN) << "," << idnint(ZCN) << "," << idnint(AIMF_1) << "," << idnint(ZIMF_1) << std::endl; >> 7156 std::cout << "SSBIMF,TIMF :" << SSBIMF[IZIMF][IAIMF] << "," << fTIMF << std::endl; >> 7157 std::cout << "DEXP(-IMFARG) = " << std::exp(-IMFARG) << std::endl; >> 7158 std::cout << "WIDTH1 =" << WIDTH1 << std::endl; >> 7159 } >> 7160 }// if ee >> 7161 >> 7162 SDW[IZIMF] = SDW[IZIMF] + WIDTH_IMF; >> 7163 >> 7164 DW[IZIMF][IAIMF] = WIDTH_IMF; >> 7165 >> 7166 }// for INIMF >> 7167 }// for IZIMF >> 7168 // End loop to calculate the decay widths ************************ >> 7169 // *************************************************************** >> 7170 >> 7171 // Loop to calculate where the gamma of IMF has the minimum ****** >> 7172 SDWprevious = 1.e20; >> 7173 IZSTOP = 0; 8803 7174 8804 for (G4int III_ZIMF = 3; III_ZIMF <= IZIM << 7175 for(G4int III_ZIMF=3;III_ZIMF<=IZIMFMAX;III_ZIMF++){ 8805 { << 8806 7176 8807 if (SDW[III_ZIMF] == 0.0) << 7177 if(SDW[III_ZIMF]==0.0){ 8808 { << 7178 IZSTOP = III_ZIMF - 1; 8809 IZSTOP = III_ZIMF - 1; << 8810 goto imfs30; 7179 goto imfs30; 8811 } 7180 } 8812 7181 8813 if (SDW[III_ZIMF] > SDWprevious) << 7182 if(SDW[III_ZIMF]>SDWprevious){ 8814 { << 8815 IZSTOP = III_ZIMF - 1; 7183 IZSTOP = III_ZIMF - 1; 8816 goto imfs30; 7184 goto imfs30; 8817 } << 7185 }else{ 8818 else << 8819 { << 8820 SDWprevious = SDW[III_ZIMF]; 7186 SDWprevious = SDW[III_ZIMF]; 8821 } 7187 } 8822 7188 8823 } // for III_ZIMF << 7189 }// for III_ZIMF 8824 << 8825 imfs30: << 8826 << 8827 if (IZSTOP <= 6) << 8828 { << 8829 IZSTOP = IZIMFMAX; << 8830 goto imfs15; << 8831 } << 8832 7190 8833 A1PAR = std::log10(SDW[IZSTOP] / SDW[IZST << 7191 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 7192 8840 // End loop to calculate where gamma << 7193 if(IZSTOP<=6){ >> 7194 IZSTOP = IZIMFMAX; >> 7195 goto imfs15; >> 7196 } 8841 7197 8842 for (G4int II_ZIMF = IZSTOP; II_ZIMF <= I << 7198 A1PAR = std::log10(SDW[IZSTOP]/SDW[IZSTOP-2])/std::log10((1.0*IZSTOP)/(1.0*IZSTOP-2.0)); 8843 { << 7199 A2PAR = std::log10(SDW[IZSTOP]) - A1PAR * std::log10(1.0*(IZSTOP)); 8844 SDW[II_ZIMF] = std::pow(10.0, A2PAR) << 7200 if(A2PAR>0.)A2PAR=-1.*A2PAR; 8845 if (SDW[II_ZIMF] < 0.0) << 7201 if(A1PAR>0.)A1PAR=-1.*A1PAR; 8846 SDW[II_ZIMF] = 0.0; << 7202 8847 } << 7203 // End loop to calculate where gamma of IMF has the minimum >> 7204 >> 7205 for(G4int II_ZIMF = IZSTOP;II_ZIMF<=IZIMFMAX;II_ZIMF++){ >> 7206 SDW[II_ZIMF] = std::pow(10.0,A2PAR) * std::pow(1.0*II_ZIMF,A1PAR); // Power-low >> 7207 if(SDW[II_ZIMF]<0.0) SDW[II_ZIMF] = 0.0; >> 7208 } 8848 7209 8849 imfs15: << 7210 imfs15: 8850 7211 8851 // Sum of all decay widths (for normal << 7212 // Sum of all decay widths (for normalisation) 8852 SUMDW_TOT = 0.0; << 7213 SUMDW_TOT = 0.0; 8853 for (G4int I_ZIMF = 3; I_ZIMF <= IZIMFMAX << 7214 for(G4int I_ZIMF = 3;I_ZIMF<=IZIMFMAX;I_ZIMF++){ 8854 { << 8855 SUMDW_TOT = SUMDW_TOT + SDW[I_ZIMF]; 7215 SUMDW_TOT = SUMDW_TOT + SDW[I_ZIMF]; 8856 } << 7216 } 8857 if (SUMDW_TOT <= 0.0) << 7217 if(SUMDW_TOT<=0.0){ 8858 { << 8859 std::cout << "*********************" 7218 std::cout << "*********************" << std::endl; 8860 std::cout << "IMF function" << std::e << 7219 std::cout << "IMF function" << std::endl; 8861 std::cout << "SUM of decay widths = " << 7220 std::cout << "SUM of decay widths = " << SUMDW_TOT << " IZIMFMAX = " << IZIMFMAX << std::endl; 8862 std::cout << "IZSTOP = " << IZSTOP << << 7221 std::cout << "IZSTOP = " << IZSTOP << std::endl; 8863 } << 7222 } 8864 << 7223 8865 // End of Sum of all decay widths (for << 7224 // End of Sum of all decay widths (for normalisation) 8866 << 7225 8867 // Loop to sample the nuclide that is << 7226 // Loop to sample the nuclide that is emitted ******************** 8868 // ------- sample Z ----------- << 7227 // ------- sample Z ----------- 8869 imfs10: << 7228 imfs10: 8870 X = haz(1) * SUMDW_TOT; << 7229 X = haz(1)*SUMDW_TOT; 8871 << 7230 8872 // IF(X.EQ.0.D0) PRINT*,'WARNING: X= << 7231 // IF(X.EQ.0.D0) PRINT*,'WARNING: X=0',XRNDM,SUMDW_TOT 8873 SUM_Z = 0.0; << 7232 SUM_Z = 0.0; 8874 fZIMF = 0.0; << 7233 fZIMF = 0.0; 8875 IZMEM = 0; << 7234 IZMEM = 0; 8876 << 7235 8877 for (G4int IZ = 3; IZ <= IZIMFMAX; IZ++) << 7236 for(G4int IZ = 3;IZ<=IZIMFMAX;IZ++){ 8878 { << 7237 SUM_Z = SUM_Z + SDW[IZ]; 8879 SUM_Z = SUM_Z + SDW[IZ]; << 7238 if(X<SUM_Z){ 8880 if (X < SUM_Z) << 7239 fZIMF = 1.0*IZ; 8881 { << 8882 fZIMF = 1.0 * IZ; << 8883 IZMEM = IZ; 7240 IZMEM = IZ; 8884 goto imfs20; 7241 goto imfs20; 8885 } << 7242 } 8886 } // for IZ << 7243 }//for IZ 8887 << 8888 imfs20: << 8889 7244 8890 // ------- sample N ----------- << 7245 imfs20: 8891 7246 8892 isostab_lim(IZMEM, &INMINMEM, &INMAXMEM); << 7247 // ------- sample N ----------- 8893 INMINMEM = max(1, INMINMEM - 2); << 8894 7248 8895 isostab_lim(IZCN - IZMEM, &INMI, << 7249 isostab_lim(IZMEM,&INMINMEM,&INMAXMEM); 8896 &INMA); // Daughter nucleus a << 7250 INMINMEM = max(1,INMINMEM-2); 8897 INMI = max(1, INMI - 2); << 7251 8898 // limits of bound isotopes << 7252 isostab_lim(IZCN-IZMEM,&INMI,&INMA); // Daughter nucleus after IMF emission, 8899 << 7253 INMI = max(1,INMI-2); 8900 INMINMEM = max(INMINMEM, INCN - INMA); // << 7254 // limits of bound isotopes 8901 INMAXMEM = min(INMAXMEM, INCN - INMI); // << 7255 8902 << 7256 INMINMEM = max(INMINMEM,INCN-INMA); // Both IMF and daughter must be bound 8903 INMAXMEM = max(INMINMEM, INMAXMEM); << 7257 INMAXMEM = min(INMAXMEM,INCN-INMI); // " 8904 << 7258 8905 IA = 0; << 7259 INMAXMEM = max(INMINMEM,INMAXMEM); 8906 SUMDW_N_TOT = 0.0; << 7260 8907 for (G4int IIINIMF = INMINMEM; IIINIMF <= << 7261 IA = 0; 8908 { << 7262 SUMDW_N_TOT = 0.0; 8909 IA = IZMEM + IIINIMF; << 7263 for(G4int IIINIMF = INMINMEM;IIINIMF<=INMAXMEM;IIINIMF++){ 8910 if (IZMEM >= 3 && IZMEM <= 95 && IA > << 7264 IA = IZMEM + IIINIMF; 8911 { << 7265 if(IZMEM>=3&&IZMEM<=95&&IA>=4&&IA<=250){ 8912 SUMDW_N_TOT = SUMDW_N_TOT + DW[IZ << 7266 SUMDW_N_TOT = SUMDW_N_TOT + DW[IZMEM][IA]; 8913 } << 7267 }else{ 8914 else << 7268 std::cout << "CHARGE IMF OUT OF RANGE" << IZMEM << ", " << IA << ", " << idnint(ACN) << ", " << idnint(ZCN) << ", " << TEMP << std::endl; 8915 { << 7269 } 8916 std::cout << "CHARGE IMF OUT OF R << 7270 } 8917 << ", " << TEMP << std: << 8918 } << 8919 } << 8920 7271 8921 XX = haz(1) * SUMDW_N_TOT; << 7272 XX = haz(1)*SUMDW_N_TOT; 8922 IIA = 0; << 7273 IIA = 0; 8923 SUM_A = 0.0; << 7274 SUM_A = 0.0; 8924 for (G4int IINIMF = INMINMEM; IINIMF <= I << 7275 for(G4int IINIMF = INMINMEM;IINIMF<=INMAXMEM; IINIMF++){ 8925 { << 8926 IIA = IZMEM + IINIMF; 7276 IIA = IZMEM + IINIMF; 8927 // SUM_A = SUM_A + DW[IZ][IIA]; << 7277 // SUM_A = SUM_A + DW[IZ][IIA]; //FIXME 8928 SUM_A = SUM_A + DW[IZMEM][IIA]; 7278 SUM_A = SUM_A + DW[IZMEM][IIA]; 8929 if (XX < SUM_A) << 7279 if(XX<SUM_A){ 8930 { << 7280 fAIMF = G4double(IIA); 8931 fAIMF = G4double(IIA); << 7281 goto imfs25; 8932 goto imfs25; << 8933 } 7282 } 8934 } << 7283 } 8935 7284 8936 imfs25: << 7285 imfs25: 8937 // CHECK POINT 1 << 7286 // CHECK POINT 1 8938 NIMF = fAIMF - fZIMF; << 7287 NIMF = fAIMF - fZIMF; 8939 << 7288 8940 if ((ACN - ZCN - NIMF) <= 0.0 || (ZCN - f << 7289 if((ACN-ZCN-NIMF)<=0.0 || (ZCN-fZIMF) <= 0.0){ 8941 { << 7290 std::cout << "IMF Partner unstable:" << std::endl; 8942 std::cout << "IMF Partner unstable:" << 7291 std::cout << "System: Acn,Zcn,NCN:" << std::endl; 8943 std::cout << "System: Acn,Zcn,NCN:" < << 7292 std::cout << idnint(ACN) << ", " << idnint(ZCN) << ", " << idnint(ACN-ZCN) << std::endl; 8944 std::cout << idnint(ACN) << ", " << i << 7293 std::cout << "IMF: A,Z,N:" << std::endl; 8945 std::cout << "IMF: A,Z,N:" << std::en << 7294 std::cout << idnint(fAIMF) << ", " << idnint(fZIMF) << ", " << idnint(fAIMF-fZIMF) << std::endl; 8946 std::cout << idnint(fAIMF) << ", " << << 7295 std::cout << "Partner: A,Z,N:" << std::endl; 8947 std::cout << "Partner: A,Z,N:" << std << 7296 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 7297 std::cout << "----nmin,nmax" << INMINMEM << ", " << INMAXMEM << std::endl; 8951 std::cout << "----- warning: Zimf=" < 7298 std::cout << "----- warning: Zimf=" << fZIMF << " Aimf=" << fAIMF << std::endl; 8952 std::cout << "----- look in subroutin 7299 std::cout << "----- look in subroutine IMF" << std::endl; 8953 std::cout << "ACN,ZCN,ZIMF,AIMF,temp, << 7300 std::cout << "ACN,ZCN,ZIMF,AIMF,temp,EE,JPRF::" << ACN << ", " << ZCN << ", " << fZIMF << ", " << fAIMF << ", " << TEMP << ", " << EE << ", " << JPRF << std::endl; 8954 << TEMP << ", " << EE << ", << 7301 std::cout << "-IZSTOP,IZIMFMAX:" << IZSTOP << ", " << IZIMFMAX << std::endl; 8955 std::cout << "-IZSTOP,IZIMFMAX:" << I << 7302 std::cout << "----X,SUM_Z,SUMDW_TOT:" << X << ", " << SUM_Z << ", " << SUMDW_TOT << std::endl; 8956 std::cout << "----X,SUM_Z,SUMDW_TOT:" << 7303 //for(int III_ZIMF=3;III_ZIMF<=IZIMFMAX;III_ZIMF++) 8957 // for(int III_ZIMF=3;III_ZIMF<=IZIMF << 7304 // std::cout << "-**Z,SDW:" << III_ZIMF << ", " << SDW[III_ZIMF] << std::endl; 8958 // std::cout << "-**Z,SDW:" << II << 8959 // std::endl; << 8960 7305 8961 goto imfs10; << 7306 goto imfs10; 8962 } << 7307 } 8963 if (fZIMF >= ZCN || fAIMF >= ACN || fZIMF << 7308 if(fZIMF>=ZCN || fAIMF>=ACN || fZIMF<=2 || fAIMF<=3){ 8964 { << 8965 std::cout << "----nmin,nmax" << INMIN 7309 std::cout << "----nmin,nmax" << INMINMEM << ", " << INMAXMEM << std::endl; 8966 std::cout << "----- warning: Zimf=" < 7310 std::cout << "----- warning: Zimf=" << fZIMF << " Aimf=" << fAIMF << std::endl; 8967 std::cout << "----- look in subroutin 7311 std::cout << "----- look in subroutine IMF" << std::endl; 8968 std::cout << "ACN,ZCN,ZIMF,AIMF,temp, << 7312 std::cout << "ACN,ZCN,ZIMF,AIMF,temp,EE,JPRF:" << ACN << ", " << ZCN << ", " << fZIMF << ", " << fAIMF << ", " << TEMP << ", " << EE << ", " << JPRF << std::endl; 8969 << TEMP << ", " << EE << ", << 7313 std::cout << "-IZSTOP,IZIMFMAX:" << IZSTOP << ", " << IZIMFMAX << std::endl; 8970 std::cout << "-IZSTOP,IZIMFMAX:" << I << 7314 std::cout << "----X,SUM_Z,SUMDW_TOT:" << X << ", " << SUM_Z << ", " << SUMDW_TOT << std::endl; 8971 std::cout << "----X,SUM_Z,SUMDW_TOT:" << 7315 for(int III_ZIMF=3;III_ZIMF<=IZIMFMAX;III_ZIMF++) 8972 for (int III_ZIMF = 3; III_ZIMF <= IZ << 7316 std::cout << "-**Z,SDW:" << III_ZIMF << ", " << SDW[III_ZIMF] << std::endl; 8973 std::cout << "-**Z,SDW:" << III_Z << 8974 7317 8975 fZIMF = 3.0; // provisorisch AK << 7318 fZIMF = 3.0; // provisorisch AK 8976 fAIMF = 4.0; 7319 fAIMF = 4.0; 8977 } << 7320 } >> 7321 >> 7322 // Characteristics of selected IMF (AIMF, ZIMF, BIMF, SBIMF, TIMF) >> 7323 fSBIMF = SSBIMF[idnint(fZIMF)][idnint(fAIMF)]; >> 7324 fBIMF = BBIMF[idnint(fZIMF)][idnint(fAIMF)]; >> 7325 >> 7326 if((ZCN-fZIMF)<=0.0)std::cout << "CHARGE_IMF ZIMF > ZCN" << std::endl; >> 7327 if((ACN-fAIMF)<=0.0)std::cout << "CHARGE_IMF AIMF > ACN" << std::endl; >> 7328 >> 7329 BSHELL = ecld->ecgnz[idnint(ACN-ZCN-NIMF)][idnint(ZCN-fZIMF)] -ecld->vgsld[idnint(ACN-ZCN-NIMF)][idnint(ZCN-fZIMF)]; >> 7330 >> 7331 DEFBET = ecld->beta2[idnint(ACN-ZCN-NIMF)][idnint(ZCN-fZIMF)]; >> 7332 EEDAUG = (EE - fSBIMF) * (ACN - fAIMF) / ACN; >> 7333 bsbkbc(ACN - fAIMF,ZCN-fZIMF,&BS,&BK,&BC); >> 7334 densniv(ACN-fAIMF,ZCN-fZIMF,EEDAUG,0.0,&DENSIMF,BSHELL,BS,BK,&fTIMF,0,0,DEFBET,&ECOR,0.0,0,&QR); 8978 7335 8979 // Characteristics of selected IMF (AIMF, << 7336 if(fSBIMF>EE){ 8980 fSBIMF = SSBIMF[idnint(fZIMF)][idnint(fAI << 7337 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 7338 std::cout << "----- look in subroutine IMF" << std::endl; 9001 std::cout << "IMF will be resampled" 7339 std::cout << "IMF will be resampled" << std::endl; 9002 goto imfs10; << 7340 goto imfs10; 9003 } << 7341 } 9004 (*ZIMF) = fZIMF; << 7342 (*ZIMF) = fZIMF; 9005 (*AIMF) = fAIMF; << 7343 (*AIMF) = fAIMF; 9006 (*SBIMF) = fSBIMF; << 7344 (*SBIMF) = fSBIMF; 9007 (*BIMF) = fBIMF; << 7345 (*BIMF) = fBIMF; 9008 (*TIMF) = fTIMF; << 7346 (*TIMF) = fTIMF; 9009 return; << 7347 return; 9010 } << 7348 } 9011 << 7349 9012 void G4Abla::isostab_lim(G4int z, G4int* nmin << 7350 void G4Abla::isostab_lim(G4int z, G4int *nmin, G4int *nmax) 9013 { << 7351 { 9014 << 7352 9015 G4int VISOSTAB[191][2] = { << 7353 G4int VISOSTAB[191][2]={ 9016 { 0, 7 }, { 1, 8 }, { 1, 9 }, << 7354 {0 , 7 }, 9017 { 6, 22 }, { 6, 28 }, { 7, 28 } << 7355 {1 , 8 }, 9018 { 11, 38 }, { 10, 42 }, { 13, 50 << 7356 {1 , 9 }, 9019 { 19, 60 }, { 19, 62 }, { 21, 64 << 7357 {2 , 12 }, 9020 { 27, 78 }, { 29, 82 }, { 33, 82 << 7358 {2 , 14 }, 9021 { 40, 92 }, { 38, 96 }, { 42, 102 << 7359 {2 , 16 }, 9022 { 49, 116 }, { 46, 118 }, { 52, 120 << 7360 {3 , 18 }, 9023 { 60, 126 }, { 58, 130 }, { 62, 132 << 7361 {4 , 22 }, 9024 { 70, 148 }, { 70, 152 }, { 73, 152 << 7362 {6 , 22 }, 9025 { 82, 166 }, { 80, 166 }, { 85, 168 << 7363 {6 , 28 }, 9026 { 96, 184 }, { 95, 184 }, { 99, 184 << 7364 {7 , 28 }, 9027 { 115, 204 }, { 110, 206 }, { 119, 21 << 7365 {7 , 30 }, 9028 }; << 7366 {8 , 28 }, >> 7367 {8 , 36 }, >> 7368 {10 , 38 }, >> 7369 {10 , 40 }, >> 7370 {11 , 38 }, >> 7371 {10 , 42 }, >> 7372 {13 , 50 }, >> 7373 {14 , 50 }, >> 7374 {15 , 52 }, >> 7375 {16 , 52 }, >> 7376 {17 , 54 }, >> 7377 {18 , 54 }, >> 7378 {19 , 60 }, >> 7379 {19 , 62 }, >> 7380 {21 , 64 }, >> 7381 {20 , 66 }, >> 7382 {23 , 66 }, >> 7383 {24 , 70 }, >> 7384 {25 , 70 }, >> 7385 {26 , 74 }, >> 7386 {27 , 78 }, >> 7387 {29 , 82 }, >> 7388 {33 , 82 }, >> 7389 {31 , 82 }, >> 7390 {35 , 82 }, >> 7391 {34 , 84 }, >> 7392 {40 , 84 }, >> 7393 {36 , 86 }, >> 7394 {40 , 92 }, >> 7395 {38 , 96 }, >> 7396 {42 , 102 }, >> 7397 {42 , 102 }, >> 7398 {44 , 102 }, >> 7399 {42 , 106 }, >> 7400 {47 , 112 }, >> 7401 {44 , 114 }, >> 7402 {49 , 116 }, >> 7403 {46 , 118 }, >> 7404 {52 , 120 }, >> 7405 {52 , 124 }, >> 7406 {55 , 126 }, >> 7407 {54 , 126 }, >> 7408 {57 , 126 }, >> 7409 {57 , 126 }, >> 7410 {60 , 126 }, >> 7411 {58 , 130 }, >> 7412 { 62 , 132 }, >> 7413 { 60 , 140 }, >> 7414 { 67 , 138 }, >> 7415 { 64 , 142 }, >> 7416 { 67 , 144 }, >> 7417 { 68 , 146 }, >> 7418 { 70 , 148 }, >> 7419 { 70 , 152 }, >> 7420 { 73 , 152 }, >> 7421 { 72 , 154 }, >> 7422 { 75 , 156 }, >> 7423 { 77 , 162 }, >> 7424 { 79 , 164 }, >> 7425 { 78 , 164 }, >> 7426 { 82 , 166 }, >> 7427 { 80 , 166 }, >> 7428 { 85 , 168 }, >> 7429 { 83 , 176 }, >> 7430 { 87 , 178 }, >> 7431 { 88 , 178 }, >> 7432 { 91 , 182 }, >> 7433 { 90 , 184 }, >> 7434 { 96 , 184 }, >> 7435 { 95 , 184 }, >> 7436 { 99 , 184 }, >> 7437 { 98 , 184 }, >> 7438 { 105 , 194 }, >> 7439 { 102 , 194 }, >> 7440 { 108 , 196 }, >> 7441 { 106 , 198 }, >> 7442 { 115 , 204 }, >> 7443 { 110 , 206 }, >> 7444 { 119 , 210 }, >> 7445 { 114 , 210 }, >> 7446 { 124 , 210 }, >> 7447 { 117 , 212 }, >> 7448 { 130 , 212 } >> 7449 }; 9029 7450 9030 if (z < 0) << 7451 if (z<0){ 9031 { << 9032 *nmin = 0; 7452 *nmin = 0; 9033 *nmax = 0; 7453 *nmax = 0; 9034 } << 7454 }else{ 9035 else << 7455 if(z==0){ 9036 { << 7456 *nmin = 1; 9037 if (z == 0) << 7457 *nmax = 1; 9038 { << 7458 // AK (Dez2010) - Just to avoid numerical problems 9039 *nmin = 1; << 7459 }else{ 9040 *nmax = 1; << 7460 if(z>95){ 9041 // AK (Dez2010) - Just to avoid n << 7461 *nmin = 130; 9042 } << 7462 *nmax = 200; 9043 else << 7463 }else{ 9044 { << 7464 *nmin = VISOSTAB[z-1][0]; 9045 if (z > 95) << 7465 *nmax = VISOSTAB[z-1][1]; 9046 { << 7466 } 9047 *nmin = 130; << 9048 *nmax = 200; << 9049 } << 9050 else << 9051 { << 9052 *nmin = VISOSTAB[z - 1][0]; << 9053 *nmax = VISOSTAB[z - 1][1]; << 9054 } << 9055 } 7467 } 9056 } << 7468 } 9057 7469 9058 return; << 7470 return; 9059 } 7471 } 9060 7472 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 7473 9106 const G4double c = 29.9792458; << 7474 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 7475 9110 vx_eva = 0.; << 7476 // AK 2006 - Now in case of fission deexcitation between saddle and scission 9111 vy_eva = 0.; << 7477 // is explicitly calculated. Langevin calculations made by P. Nadtochy 9112 vz_eva = 0.; << 7478 // used to parametrise saddle-to-scission time 9113 IEV_TAB_SSC = 0; << 7479 9114 << 7480 G4double af,zf,ee; 9115 af = dint(A); << 7481 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); << 7482 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; << 7483 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 << 7484 9119 fiss->ifis = 0; << 7485 G4double xcv=0.,ycv=0.,zcv=0.,VXOUT=0.,VYOUT=0.,VZOUT=0.; 9120 opt->optimfallowed = 0; << 7486 9121 gammaemission = 0; << 7487 G4double jprfn=0.0, jprfp=0.0, jprfd=0.0, jprft=0.0, jprfhe=0.0, jprfa=0.0, jprflamb0=0.0; 9122 // Initialsation << 7488 G4double ctet1 = 0.0, stet1 = 0.0, phi1 = 0.0; 9123 time = 0.0; << 7489 G4double rnd = 0.0; 9124 << 7490 9125 // in sec << 7491 G4int itest = 0, sortie=0; 9126 tau0 = 1.0e-21; << 7492 G4double probf = 0.0; 9127 a0 = 0.66482503 - 3.4678935 * std::exp(-0 << 7493 9128 a1 = 5.6846e-04 + 0.00574515 * std::exp(- << 7494 G4double ef = 0.0; 9129 tauf = (a0 + a1 * zf * zf / std::pow(af, << 7495 G4double pc = 0.0; 9130 // << 7496 9131 post10: << 7497 G4double time,tauf,tau0,a0,a1,emin,ts1,tsum=0.; 9132 direct(zf, << 7498 G4int inttype=0,inum=0,gammadecay = 0, flamb0decay = 0; 9133 af, << 7499 G4double pleva = 0.0; 9134 ee, << 7500 G4double pxeva = 0.0; 9135 0., << 7501 G4double pyeva = 0.0; 9136 &probp, << 7502 G4double pteva = 0.0; 9137 &probd, << 7503 G4double etot = 0.0; 9138 &probt, << 7504 G4int NbLam0= (*NbLam0_par); 9139 &probn, << 7505 9140 &probhe, << 7506 const G4double c = 29.9792458; 9141 &proba, << 7507 const G4double mu = 931.494; 9142 &probg, << 7508 const G4double mu2 = 931.494*931.494; 9143 &probimf, << 7509 9144 &probf, << 7510 vx_eva=0.; 9145 &problamb0, << 7511 vy_eva=0.; 9146 &ptotl, << 7512 vz_eva=0.; 9147 &sn, << 7513 IEV_TAB_SSC = 0; 9148 &sbp, << 7514 9149 &sbd, << 7515 9150 &sbt, << 7516 af = dint(A); 9151 &sbhe, << 7517 zf = dint(Z); 9152 &sba, << 7518 ee = EXC; 9153 &slamb0, << 7519 9154 &ecn, << 7520 fiss->ifis = 0; 9155 &ecp, << 7521 opt->optimfallowed = 0; 9156 &ecd, << 7522 gammaemission=0; 9157 &ect, << 7523 // Initialsation 9158 &eche, << 7524 time = 0.0; 9159 &eca, << 7525 9160 &ecg, << 7526 // in sec 9161 &eclamb0, << 7527 tau0 = 1.0e-21; 9162 &bp, << 7528 a0 = 0.66482503 - 3.4678935 * std::exp(-0.0104002*ee); 9163 &bd, << 7529 a1 = 5.6846e-04 + 0.00574515 * std::exp(-0.01114307*ee); 9164 &bt, << 7530 tauf = (a0 + a1 * zf*zf/std::pow(af,0.3333333)) * tau0; 9165 &bhe, << 7531 // 9166 &ba, << 7532 post10: 9167 &sp, << 7533 direct(zf,af,ee,0.,&probp,&probd,&probt,&probn,&probhe,&proba,&probg,&probimf,&probf,&problamb0,&ptotl, 9168 &sd, << 7534 &sn,&sbp,&sbd,&sbt,&sbhe,&sba,&slamb0, 9169 &st, << 7535 &ecn,&ecp,&ecd,&ect,&eche,&eca,&ecg,&eclamb0, 9170 &she, << 7536 &bp,&bd,&bt,&bhe,&ba,&sp,&sd,&st,&she,&sa,&ef,&ts1,inttype,inum,itest,&sortie,&tcn, 9171 &sa, << 7537 &jprfn, &jprfp, &jprfd, &jprft, &jprfhe, &jprfa, &jprflamb0, &tsum, NbLam0); //:::FIXME::: Call 9172 &ef, << 7538 // 9173 &ts1, << 7539 // HERE THE FINAL STEPS OF THE EVAPORATION ARE CALCULATED 9174 inttype, << 7540 // 9175 inum, << 7541 if(ptotl<=0.)goto post100; 9176 itest, << 7542 9177 &sortie, << 7543 emin = dmin1(sba,sbhe,dmin1(sbt,sbhe,dmin1(sn,sbp,sbd))); 9178 &tcn, << 7544 9179 &jprfn, << 7545 if(emin>1e30)std::cout << "ERROR AT THE EXIT OF EVAPORA,E>1.D30,AF" << std::endl; 9180 &jprfp, << 7546 9181 &jprfd, << 7547 if(sortie==1){ 9182 &jprft, << 7548 if (probn!=0.0) { 9183 &jprfhe, << 7549 amoins = 1.0; 9184 &jprfa, << 7550 zmoins = 0.0; 9185 &jprflamb0, << 7551 epsiln = sn + ecn; 9186 &tsum, << 7552 pc = std::sqrt(std::pow((1.0 + ecn/9.3956e2),2.) - 1.0) * 9.3956e2; 9187 NbLam0); //:::FIXME::: Call << 7553 gammadecay = 0; 9188 // << 7554 flamb0decay = 0; 9189 // HERE THE FINAL STEPS OF THE EVAPORATIO << 7555 } 9190 // << 7556 else if(probp!=0.0){ 9191 if (ptotl <= 0.) << 7557 amoins = 1.0; 9192 goto post100; << 7558 zmoins = 1.0; 9193 << 7559 epsiln = sp + ecp; 9194 emin = dmin1(sba, sbhe, dmin1(sbt, sbhe, << 7560 pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2.) - 1.0) * 9.3827e2; 9195 << 7561 gammadecay = 0; 9196 if (emin > 1e30) << 7562 flamb0decay = 0; 9197 std::cout << "ERROR AT THE EXIT OF EV << 7563 } 9198 << 7564 else if(probd!=0.0){ 9199 if (sortie == 1) << 7565 amoins = 2.0; 9200 { << 7566 zmoins = 1.0; 9201 if (probn != 0.0) << 7567 epsiln = sd + ecd; 9202 { << 7568 pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3; 9203 amoins = 1.0; << 7569 gammadecay = 0; 9204 zmoins = 0.0; << 7570 flamb0decay = 0; 9205 epsiln = sn + ecn; << 7571 } 9206 pc = std::sqrt(std::pow((1.0 + ec << 7572 else if(probt!=0.0){ 9207 gammadecay = 0; << 7573 amoins = 3.0; 9208 flamb0decay = 0; << 7574 zmoins = 1.0; 9209 } << 7575 epsiln = st + ect; 9210 else if (probp != 0.0) << 7576 pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3; 9211 { << 7577 gammadecay = 0; 9212 amoins = 1.0; << 7578 flamb0decay = 0; 9213 zmoins = 1.0; << 7579 } 9214 epsiln = sp + ecp; << 7580 else if(probhe!=0.0){ 9215 pc = std::sqrt(std::pow((1.0 + ec << 7581 amoins = 3.0; 9216 gammadecay = 0; << 7582 zmoins = 2.0; 9217 flamb0decay = 0; << 7583 epsiln = she + eche; 9218 } << 7584 pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3; 9219 else if (probd != 0.0) << 7585 gammadecay = 0; 9220 { << 7586 flamb0decay = 0; 9221 amoins = 2.0; << 7587 } 9222 zmoins = 1.0; << 7588 else{ if(proba!=0.0){ 9223 epsiln = sd + ecd; << 7589 amoins = 4.0; 9224 pc = std::sqrt(std::pow((1.0 + ec << 7590 zmoins = 2.0; 9225 gammadecay = 0; << 7591 epsiln = sa + eca; 9226 flamb0decay = 0; << 7592 pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3; 9227 } << 7593 gammadecay = 0; 9228 else if (probt != 0.0) << 7594 flamb0decay = 0; 9229 { << 7595 } 9230 amoins = 3.0; << 7596 } 9231 zmoins = 1.0; << 7597 goto post99; 9232 epsiln = st + ect; << 7598 } 9233 pc = std::sqrt(std::pow((1.0 + ec << 7599 9234 gammadecay = 0; << 7600 // IRNDM = IRNDM+1; 9235 flamb0decay = 0; << 7601 // 9236 } << 7602 // HERE THE NORMAL EVAPORATION CASCADE STARTS 9237 else if (probhe != 0.0) << 7603 // RANDOM NUMBER FOR THE EVAPORATION 9238 { << 7604 9239 amoins = 3.0; << 7605 9240 zmoins = 2.0; << 7606 // random number for the evaporation 9241 epsiln = she + eche; << 7607 x = G4AblaRandom::flat() * ptotl; 9242 pc = std::sqrt(std::pow((1.0 + ec << 7608 9243 gammadecay = 0; << 7609 itest = 0; 9244 flamb0decay = 0; << 7610 if (x < proba) { 9245 } << 7611 // alpha evaporation 9246 else << 7612 amoins = 4.0; 9247 { << 7613 zmoins = 2.0; 9248 if (proba != 0.0) << 7614 epsiln = sa + eca; 9249 { << 7615 pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3; 9250 amoins = 4.0; << 7616 gammadecay = 0; 9251 zmoins = 2.0; << 7617 flamb0decay = 0; 9252 epsiln = sa + eca; << 7618 } 9253 pc = std::sqrt(std::pow((1.0 << 7619 else if (x < proba+probhe) { 9254 gammadecay = 0; << 7620 // He3 evaporation 9255 flamb0decay = 0; << 7621 amoins = 3.0; 9256 } << 7622 zmoins = 2.0; 9257 } << 7623 epsiln = she + eche; 9258 goto post99; << 7624 pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3; >> 7625 gammadecay = 0; >> 7626 flamb0decay = 0; >> 7627 } >> 7628 else if (x < proba+probhe+probt) { >> 7629 // triton evaporation >> 7630 amoins = 3.0; >> 7631 zmoins = 1.0; >> 7632 epsiln = st + ect; >> 7633 pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3; >> 7634 gammadecay = 0; >> 7635 flamb0decay = 0; >> 7636 } >> 7637 else if (x < proba+probhe+probt+probd) { >> 7638 // deuteron evaporation >> 7639 amoins = 2.0; >> 7640 zmoins = 1.0; >> 7641 epsiln = sd + ecd; >> 7642 pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3; >> 7643 gammadecay = 0; >> 7644 flamb0decay = 0; >> 7645 } >> 7646 else if (x < proba+probhe+probt+probd+probp) { >> 7647 // proton evaporation >> 7648 amoins = 1.0; >> 7649 zmoins = 1.0; >> 7650 epsiln = sp + ecp; >> 7651 pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2) - 1.0) * 9.3827e2; >> 7652 gammadecay = 0; >> 7653 flamb0decay = 0; >> 7654 } >> 7655 else if (x < proba+probhe+probt+probd+probp+probn) { >> 7656 // neutron evaporation >> 7657 amoins = 1.0; >> 7658 zmoins = 0.0; >> 7659 epsiln = sn + ecn; >> 7660 pc = std::sqrt(std::pow((1.0 + ecn/9.3956e2),2.) - 1.0) * 9.3956e2; >> 7661 gammadecay = 0; >> 7662 flamb0decay = 0; >> 7663 } >> 7664 else if (x < proba+probhe+probt+probd+probp+probn+problamb0) { >> 7665 // lambda0 evaporation >> 7666 amoins = 1.0; >> 7667 zmoins = 0.0; >> 7668 epsiln = slamb0 + eclamb0; >> 7669 pc = std::sqrt(std::pow((1.0 + (eclamb0)/11.1568e2),2.) - 1.0) * 11.1568e2; >> 7670 opt->nblan0 = opt->nblan0 -1; >> 7671 NbLam0 = NbLam0 -1; >> 7672 gammadecay = 0; >> 7673 flamb0decay = 1; >> 7674 } >> 7675 else if (x < proba+probhe+probt+probd+probp+probn+problamb0+probg) { >> 7676 // gamma evaporation >> 7677 amoins = 0.0; >> 7678 zmoins = 0.0; >> 7679 epsiln = ecg; >> 7680 pc = ecg; >> 7681 gammadecay = 1; >> 7682 flamb0decay = 0; >> 7683 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){ >> 7684 //ee = ee-epsiln; >> 7685 //if(ee<=0.01) ee = 0.010; >> 7686 goto post100; 9259 } 7687 } >> 7688 } >> 7689 >> 7690 // CALCULATION OF THE DAUGHTER NUCLEUS >> 7691 // >> 7692 post99: >> 7693 >> 7694 if(gammadecay==1 && ee<=0.01+epsiln){ >> 7695 epsiln = ee-0.01; >> 7696 time = tauf + 1.; >> 7697 } >> 7698 >> 7699 af = af-amoins; >> 7700 zf = zf-zmoins; >> 7701 ee = ee-epsiln; >> 7702 >> 7703 if(ee<=0.01) ee = 0.010; >> 7704 >> 7705 if(af<2.5) goto post100; >> 7706 >> 7707 time = time + ts1; 9260 7708 9261 // IRNDM = IRNDM+1; << 7709 // Determination of x,y,z components of momentum from known emission momentum 9262 // << 7710 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.; 7711 EV_TAB_SSC[IEV_TAB_SSC][0] = 0.; 9386 EV_TAB_SSC[IEV_TAB_SSC][1] = -2.; 7712 EV_TAB_SSC[IEV_TAB_SSC][1] = -2.; 9387 EV_TAB_SSC[IEV_TAB_SSC][5] = 1.; 7713 EV_TAB_SSC[IEV_TAB_SSC][5] = 1.; 9388 } << 7714 }else{ 9389 else << 9390 { << 9391 EV_TAB_SSC[IEV_TAB_SSC][0] = zmoins; 7715 EV_TAB_SSC[IEV_TAB_SSC][0] = zmoins; 9392 EV_TAB_SSC[IEV_TAB_SSC][1] = amoins; 7716 EV_TAB_SSC[IEV_TAB_SSC][1] = amoins; 9393 EV_TAB_SSC[IEV_TAB_SSC][5] = 0.; 7717 EV_TAB_SSC[IEV_TAB_SSC][5] = 0.; 9394 } << 7718 } 9395 7719 9396 rnd = G4AblaRandom::flat(); << 7720 rnd = G4AblaRandom::flat(); 9397 ctet1 = 2.0 * rnd - 1.0; << 7721 ctet1 = 2.0*rnd - 1.0; // z component: uniform probability between -1 and 1 9398 stet1 = std::sqrt(1.0 - std::pow(ctet1, 2 << 7722 stet1 = std::sqrt(1.0 - std::pow(ctet1,2));// component perpendicular to z 9399 rnd = G4AblaRandom::flat(); << 7723 rnd = G4AblaRandom::flat(); 9400 phi1 = rnd * 2.0 * 3.141592654; // angle << 7724 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 << 7725 xcv = stet1*std::cos(phi1); // x component 9402 ycv = stet1 * std::sin(phi1); // y comp << 7726 ycv = stet1*std::sin(phi1); // y component 9403 zcv = ctet1; // z comp << 7727 zcv = ctet1; // z component 9404 // In the << 7728 // In the CM system 9405 if (gammadecay == 0) << 7729 if(gammadecay==0){ 9406 { << 7730 // Light particle 9407 // Light particle << 7731 G4double ETOT_LP = std::sqrt(pc*pc + amoins*amoins * mu2); 9408 G4double ETOT_LP = std::sqrt(pc * pc << 7732 if(flamb0decay==1)ETOT_LP = std::sqrt(pc*pc + 1115.683*1115.683); 9409 if (flamb0decay == 1) << 7733 EV_TAB_SSC[IEV_TAB_SSC][2] = c * pc * xcv / ETOT_LP; 9410 ETOT_LP = std::sqrt(pc * pc + 111 << 7734 EV_TAB_SSC[IEV_TAB_SSC][3] = c * pc * ycv / ETOT_LP; 9411 EV_TAB_SSC[IEV_TAB_SSC][2] = c * pc * << 7735 EV_TAB_SSC[IEV_TAB_SSC][4] = c * pc * zcv / ETOT_LP; 9412 EV_TAB_SSC[IEV_TAB_SSC][3] = c * pc * << 7736 }else{ 9413 EV_TAB_SSC[IEV_TAB_SSC][4] = c * pc * << 7737 // gamma ray 9414 } << 7738 EV_TAB_SSC[IEV_TAB_SSC][2] = pc * xcv; 9415 else << 7739 EV_TAB_SSC[IEV_TAB_SSC][3] = pc * ycv; 9416 { << 7740 EV_TAB_SSC[IEV_TAB_SSC][4] = pc * zcv; 9417 // gamma ray << 7741 } 9418 EV_TAB_SSC[IEV_TAB_SSC][2] = pc * xcv << 7742 lorentz_boost(vx_eva,vy_eva,vz_eva, 9419 EV_TAB_SSC[IEV_TAB_SSC][3] = pc * ycv << 7743 EV_TAB_SSC[IEV_TAB_SSC][2],EV_TAB_SSC[IEV_TAB_SSC][3], 9420 EV_TAB_SSC[IEV_TAB_SSC][4] = pc * zcv << 7744 EV_TAB_SSC[IEV_TAB_SSC][4], 9421 } << 7745 &VXOUT,&VYOUT,&VZOUT); 9422 lorentz_boost(vx_eva, << 7746 EV_TAB_SSC[IEV_TAB_SSC][2] = VXOUT; 9423 vy_eva, << 7747 EV_TAB_SSC[IEV_TAB_SSC][3] = VYOUT; 9424 vz_eva, << 7748 EV_TAB_SSC[IEV_TAB_SSC][4] = VZOUT; 9425 EV_TAB_SSC[IEV_TAB_SSC][2], << 7749 9426 EV_TAB_SSC[IEV_TAB_SSC][3], << 7750 // Heavy residue 9427 EV_TAB_SSC[IEV_TAB_SSC][4], << 7751 if(gammadecay==0){ 9428 &VXOUT, << 7752 G4double v2 = std::pow(EV_TAB_SSC[IEV_TAB_SSC][2],2.) + 9429 &VYOUT, << 7753 std::pow(EV_TAB_SSC[IEV_TAB_SSC][3],2.) + 9430 &VZOUT); << 7754 std::pow(EV_TAB_SSC[IEV_TAB_SSC][4],2.); 9431 EV_TAB_SSC[IEV_TAB_SSC][2] = VXOUT; << 7755 G4double gamma = 1.0/std::sqrt(1.0 - v2 / (c*c)); 9432 EV_TAB_SSC[IEV_TAB_SSC][3] = VYOUT; << 7756 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 7757 pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SSC][2] * etot_lp / c; 9443 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SS 7758 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SSC][3] * etot_lp / c; 9444 pleva = pleva - EV_TAB_SSC[IEV_TAB_SS 7759 pleva = pleva - EV_TAB_SSC[IEV_TAB_SSC][4] * etot_lp / c; 9445 } << 7760 }else{ 9446 else << 7761 // 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 7762 pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SSC][2]; 9450 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SS 7763 pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SSC][3]; 9451 pleva = pleva - EV_TAB_SSC[IEV_TAB_SS 7764 pleva = pleva - EV_TAB_SSC[IEV_TAB_SSC][4]; 9452 } << 7765 } 9453 pteva = std::sqrt(pxeva * pxeva + pyeva * << 7766 pteva = std::sqrt(pxeva*pxeva + pyeva*pyeva); 9454 // To be checked: << 7767 // To be checked: 9455 etot = std::sqrt(pleva * pleva + pteva * << 7768 etot = std::sqrt ( pleva*pleva + pteva*pteva + af*af * mu2 ); 9456 vx_eva = c * pxeva / etot; // recoil velo << 7769 vx_eva = c * pxeva / etot; // recoil velocity components of residue due to evaporation 9457 vy_eva = c * pyeva / etot; << 7770 vy_eva = c * pyeva / etot; 9458 vz_eva = c * pleva / etot; << 7771 vz_eva = c * pleva / etot; 9459 << 7772 9460 IEV_TAB_SSC = IEV_TAB_SSC + 1; << 7773 IEV_TAB_SSC = IEV_TAB_SSC +1; 9461 << 7774 9462 if (time < tauf) << 7775 if(time<tauf)goto post10; 9463 goto post10; << 7776 // 9464 // << 7777 post100: 9465 post100: << 7778 // 9466 // << 7779 *A_scission= af; 9467 *A_scission = af; << 7780 *Z_scission= zf; 9468 *Z_scission = zf; << 7781 *E_scission_post = ee; 9469 *E_scission_post = ee; << 7782 *NbLam0_par = NbLam0; 9470 *NbLam0_par = NbLam0; << 7783 return; 9471 return; << 7784 } >> 7785 >> 7786 G4double G4Abla::getdeltabinding(G4double A, G4int H){ >> 7787 if(A<1.)return (1.*H)/A*(10.68*A-21.27*std::pow(A,2./3.))*10.; >> 7788 return (1.*H)/A*(10.68*A-21.27*std::pow(A,2./3.)); 9472 } 7789 } 9473 7790 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 7791 9724 return; << 7792 G4double G4Abla::gethyperseparation(G4double A, G4double Z, G4int ny){ >> 7793 if(A<1.)return 1.e38; >> 7794 // For light nuclei we take experimental values >> 7795 // Journal of Physics G, Nucl Part Phys 32,363 (2006) >> 7796 if(ny==1){ >> 7797 if(Z==1 && A==4) return 2.04; >> 7798 else if(Z==2 && A==4) return 2.39; >> 7799 else if(Z==2 && A==5) return 3.12; >> 7800 else if(Z==2 && A==6) return 4.18; >> 7801 else if(Z==2 && A==7) return 5.23; >> 7802 else if(Z==2 && A==8) return 7.16; >> 7803 else if(Z==3 && A==6) return 4.50; >> 7804 else if(Z==3 && A==7) return 5.58; >> 7805 else if(Z==3 && A==8) return 6.80; >> 7806 else if(Z==3 && A==9) return 8.50; >> 7807 else if(Z==4 && A==7) return 5.16; >> 7808 else if(Z==4 && A==8) return 6.84; >> 7809 else if(Z==4 && A==9) return 6.71; >> 7810 else if(Z==4 && A==10) return 9.11; >> 7811 else if(Z==5 && A==9) return 8.29; >> 7812 else if(Z==5 && A==10) return 8.89; >> 7813 else if(Z==5 && A==11) return 10.24; >> 7814 else if(Z==5 && A==12) return 11.37; >> 7815 else if(Z==6 && A==12) return 10.76; >> 7816 else if(Z==6 && A==13) return 11.69; >> 7817 else if(Z==6 && A==14) return 12.17; >> 7818 else if(Z==14 && A==28) return 16.0; >> 7819 else if(Z==39 && A==89) return 22.1; >> 7820 else if(Z==57 && A==139) return 23.8; >> 7821 else if(Z==82 && A==208) return 26.5; >> 7822 }//ny==1 >> 7823 // For other nuclei we take Bethe-Weizsacker mass formula >> 7824 return gethyperbinding(A, Z, ny)-gethyperbinding(A-1., Z, ny-1); 9725 } 7825 } 9726 7826 9727 void G4Abla::fissionDistri(G4double& A, << 7827 G4double G4Abla::gethyperbinding(G4double A, G4double Z, G4int ny){ 9728 G4double& Z, << 7828 // 9729 G4double& E, << 7829 // Bethe-Weizsacker mass formula 9730 G4double& a1, << 7830 // Journal of Physics G, Nucl Part Phys 32,363 (2006) 9731 G4double& z1, << 7831 // 9732 G4double& e1, << 7832 if(A<2 || Z<2)return 0.; 9733 G4double& v1, << 7833 G4double N = A-Z -1.*ny; 9734 G4double& a2, << 7834 G4double be=0., my = 1115.683, 9735 G4double& z2, << 7835 av = 15.77, 9736 G4double& e2, << 7836 as = 18.34, 9737 G4double& v2, << 7837 ac = 0.71, 9738 G4double& vx_eva_s << 7838 asym = 23.21, 9739 G4double& vy_eva_s << 7839 k = 17., 9740 G4double& vz_eva_s << 7840 c = 30., 9741 G4int* NbLam0_par) << 7841 D = 0.; 9742 { << 7842 if(mod(N,2) == 1 && mod(Z,2) == 1)D = -12./std::sqrt(A); 9743 << 7843 if(mod(N,2) == 0 && mod(Z,2) == 0)D = 12./std::sqrt(A); 9744 /* << 7844 // 9745 Last update: << 7845 G4double deltanew = (1.-std::exp(-1.*A/c))*D; 9746 << 7846 // 9747 21/01/17 - J.L.R.S. - Implementation of << 7847 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 << 7848 return be; 9749 << 7849 } 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 7850 9946 //*************************************** << 7851 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) >> 7852 { >> 7853 G4double SBP = SP + BP; >> 7854 G4double SBD = SD + BD; >> 7855 G4double SBT = ST + BT; >> 7856 G4double SBHE = SHE + BHE; >> 7857 G4double SBA = SA + BA; 9947 7858 9948 DSN132 = Nheavy1_in - N / Z * Zheavy1_in; << 7859 G4double e = dmin1(SBP,SBD,SBT); 9949 Aheavy1 = Nheavy1_in + Zheavy1_in + 0.340 << 7860 e = dmin1(SBHE,SN,e); 9950 /* Neutron number of valley Standard 1 */ << 7861 e = dmin1(SBHE,SBA,e); 9951 /* It is assumed that the 82-neutron shel << 7862 // 9952 c the 50-proton shell effect. There << 7863 if(SN==e){ 9953 c the fissioning nucleus from the N << 7864 *ECN = (-1.0)*SN; 9954 c change the position of the combin << 7865 *ECP = 0.0; 9955 c deficient fissioning nuclei, the << 7866 *ECD = 0.0; 9956 c versa. */ << 7867 *ECT = 0.0; 9957 << 7868 *ECHE = 0.0; 9958 Delta_U1_shell = Delta_U1_shell_max + U1N << 7869 *ECA = 0.0; 9959 Delta_U1_shell = min(0., Delta_U1_shell); << 7870 *PROBN = 1.0; 9960 /* Empirical reduction of shell effect wi << 7871 *PROBP = 0.0; 9961 /* Fits (239U,n)f and 226Th e.-m.-induced << 7872 *PROBD = 0.0; 9962 << 7873 *PROBT = 0.0; 9963 Nheavy1 = N / A * Aheavy1; /* UCD */ << 7874 *PROBHE = 0.0; 9964 Aheavy2 = Nheavy2 * A / N; << 7875 *PROBA = 0.0; 9965 << 7876 *PROBIMF = 0.0; 9966 Zsymm = Z / 2.0; /* proton number in symm << 7877 *PROBF = 0.0; 9967 Nsymm = N / 2.0; << 7878 *PROBG = 0.0; 9968 A_levdens = A / xLevdens; << 7879 } 9969 gamma = A_levdens / (0.40 * std::pow(A, 1 << 7880 else if(SBP==e){ 9970 A_levdens_heavy1 = Aheavy1 / xLevdens; << 7881 *ECN = 0.0; 9971 gamma_heavy1 = A_levdens_heavy1 / (0.40 * << 7882 *ECP = (-1.0)*SP + BP; 9972 A_levdens_heavy2 = Aheavy2 / xLevdens; << 7883 *ECD = 0.0; 9973 gamma_heavy2 = A_levdens_heavy2 / (0.40 * << 7884 *ECT = 0.0; 9974 << 7885 *ECHE = 0.0; 9975 // Energy dissipated from saddle to s << 7886 *ECA = 0.0; 9976 // F. Rejmund et al., Nucl. Phys. A 6 << 7887 *PROBN = 0.0; 9977 E_saddle_scission = (-24. + 0.02227 * Z * << 7888 *PROBP = 1.0; 9978 E_saddle_scission = max(0.0, E_saddle_sci << 7889 *PROBD = 0.0; 9979 << 7890 *PROBT = 0.0; 9980 // Fit to experimental result on curv << 7891 *PROBHE = 0.0; 9981 // Parametrization of T. Enqvist acco << 7892 *PROBA = 0.0; 9982 // MassCurv taken at scission. */ << 7893 *PROBIMF = 0.0; 9983 << 7894 *PROBF = 0.0; 9984 Z2_over_A_eff = Z * Z / A; << 7895 *PROBG = 0.0; 9985 << 7896 } 9986 if (Z2_over_A_eff < 34.0) << 7897 else if(SBD==e){ 9987 MassCurv_scis = std::pow(10., -1.0933 << 7898 *ECN = 0.0; 9988 else << 7899 *ECD = (-1.0)*SD + BD; 9989 MassCurv_scis = std::pow(10., 3.05353 << 7900 *ECP = 0.0; 9990 << 7901 *ECT = 0.0; 9991 // to do: << 7902 *ECHE = 0.0; 9992 // fix the X with the channel intensi << 7903 *ECA = 0.0; 9993 // replace then (all) cN_symm by cN_s << 7904 *PROBN = 0.0; 9994 MassCurv_sadd = X_s2s * MassCurv_scis; << 7905 *PROBP = 0.0; 9995 << 7906 *PROBD = 1.0; 9996 cN_symm = 8.0 / std::pow(N, 2.) * MassCur << 7907 *PROBT = 0.0; 9997 cN_symm_sadd = 8.0 / std::pow(N, 2.) * Ma << 7908 *PROBHE = 0.0; 9998 << 7909 *PROBA = 0.0; 9999 Nheavy1_shell = Nheavy1; << 7910 *PROBIMF = 0.0; 10000 << 7911 *PROBF = 0.0; 10001 if (E < 100.0) << 7912 *PROBG = 0.0; 10002 Nheavy1_eff = (cN_symm_sadd * Nsymm << 7913 } 10003 cN_asymm1_shell * Uwa << 7914 else if(SBT==e){ 10004 (cN_symm_sadd + cN_asy << 7915 *ECN = 0.0; 10005 else << 7916 *ECT = (-1.0)*ST + BT; 10006 Nheavy1_eff = (cN_symm_sadd * Nsymm << 7917 *ECD = 0.0; 10007 << 7918 *ECP = 0.0; 10008 /* Position of Standard II defined by ne << 7919 *ECHE = 0.0; 10009 Nheavy2_NZ = Nheavy2; << 7920 *ECA = 0.0; 10010 Nheavy2_shell = Nheavy2_NZ; << 7921 *PROBN = 0.0; 10011 if (E < 100.) << 7922 *PROBP = 0.0; 10012 Nheavy2_eff = (cN_symm_sadd * Nsymm << 7923 *PROBD = 0.0; 10013 cN_asymm2_shell * Uwa << 7924 *PROBT = 1.0; 10014 (cN_symm_sadd + cN_asy << 7925 *PROBHE = 0.0; 10015 else << 7926 *PROBA = 0.0; 10016 Nheavy2_eff = (cN_symm_sadd * Nsymm << 7927 *PROBIMF = 0.0; 10017 << 7928 *PROBF = 0.0; 10018 Delta_U1 = Delta_U1_shell + (Nheavy1_she << 7929 *PROBG = 0.0; 10019 cN_asymm << 7930 } 10020 Delta_U1 = min(Delta_U1, 0.0); << 7931 else if(SBHE==e){ 10021 Delta_U2 = Delta_U2_shell + (Nheavy2_she << 7932 *ECN = 0.0; 10022 cN_asymm << 7933 *ECHE= (-1.0)*SHE + BHE; 10023 Delta_U2 = min(Delta_U2, 0.0); << 7934 *ECD = 0.0; 10024 << 7935 *ECT = 0.0; 10025 // liquid drop energies at the centre << 7936 *ECP = 0.0; 10026 // with respect to liquid drop at sym << 7937 *ECA = 0.0; 10027 Epot0_mode1_saddle = (Nheavy1_eff - Nsym << 7938 *PROBN = 0.0; 10028 Epot0_mode2_saddle = (Nheavy2_eff - Nsym << 7939 *PROBP = 0.0; 10029 Epot0_symm_saddle = 0.0; << 7940 *PROBD = 0.0; 10030 << 7941 *PROBT = 0.0; 10031 // energies including shell effects a << 7942 *PROBHE = 1.0; 10032 // shell effects with respect to liqu << 7943 *PROBA = 0.0; 10033 Epot_mode1_saddle = Epot0_mode1_saddle + << 7944 *PROBIMF = 0.0; 10034 Epot_mode2_saddle = Epot0_mode2_saddle + << 7945 *PROBF = 0.0; 10035 Epot_symm_saddle = Epot0_symm_saddle; << 7946 *PROBG = 0.0; 10036 << 7947 } 10037 // minimum of potential with respect << 7948 else{ 10038 dUeff = min(Epot_mode1_saddle, Epot_mode << 7949 if(SBA==e){ 10039 dUeff = min(dUeff, Epot_symm_saddle); << 7950 *ECN = 0.0; 10040 dUeff = dUeff - Epot_symm_saddle; << 7951 *ECA = (-1.0)*SA + BA; 10041 << 7952 *ECD = 0.0; 10042 Eld = E + dUeff; << 7953 *ECT = 0.0; 10043 // E = energy above lowest effecti << 7954 *ECHE = 0.0; 10044 // Eld = energy above liquid-drop ba << 7955 *ECP = 0.0; 10045 // Due to this treatment the energy << 7956 *PROBN = 0.0; 10046 // energy above the lowest saddle. << 7957 *PROBP = 0.0; 10047 << 7958 *PROBD = 0.0; 10048 // excitation energies at saddle mode << 7959 *PROBT = 0.0; 10049 epsilon0_1_saddle = Eld - Epot0_mode1_sa << 7960 *PROBHE = 0.0; 10050 epsilon0_2_saddle = Eld - Epot0_mode2_sa << 7961 *PROBA = 1.0; 10051 << 7962 *PROBIMF = 0.0; 10052 // excitation energies at saddle mode << 7963 *PROBF = 0.0; 10053 epsilon_1_saddle = Eld - Epot_mode1_sadd << 7964 *PROBG = 0.0; 10054 epsilon_2_saddle = Eld - Epot_mode2_sadd << 7965 } 10055 << 7966 } 10056 epsilon_symm_saddle = Eld - Epot_symm_sa << 7967 10057 // epsilon_symm_saddle = Eld - dUeff; << 7968 return; 10058 << 7969 } 10059 eexc1_saddle = epsilon_1_saddle; << 7970 10060 eexc2_saddle = epsilon_2_saddle; << 7971 void G4Abla::fissionDistri(G4double &A,G4double &Z,G4double &E, 10061 << 7972 G4double &a1,G4double &z1,G4double &e1,G4double &v1, 10062 // EEXC_MAX is energy above the lowes << 7973 G4double &a2,G4double &z2,G4double &e2,G4double &v2, 10063 EEXC_MAX = max(eexc1_saddle, eexc2_saddl << 7974 G4double &vx_eva_sc,G4double &vy_eva_sc,G4double &vz_eva_sc, 10064 EEXC_MAX = max(EEXC_MAX, Eld); << 7975 G4int *NbLam0_par) 10065 << 7976 { 10066 // excitation energy at scission */ << 7977 10067 epsilon_1_scission = Eld + E_saddle_scis << 7978 /* 10068 epsilon_2_scission = Eld + E_saddle_scis << 7979 Last update: 10069 << 7980 10070 // excitation energy of symmetric fra << 7981 21/01/17 - J.L.R.S. - Implementation of this fission model in C++ 10071 epsilon_symm_scission = Eld + E_saddle_s << 7982 10072 << 7983 10073 // calculate widhts at the saddle << 7984 Authors: K.-H. Schmidt, A. Kelic, M. V. Ricciardi,J. Benlliure, and 10074 E_eff1_saddle = << 7985 J.L.Rodriguez-Sanchez(1995 - 2017) 10075 epsilon0_1_saddle - Delta_U1 * Uwash << 7986 10076 << 7987 On input: A, Z, E (mass, atomic number and exc. energy of compound nucleus 10077 if (E_eff1_saddle < A_levdens * hbom1 * << 7988 before fission) 10078 E_eff1_saddle = A_levdens * hbom1 * << 7989 On output: Ai, Zi, Ei (mass, atomic number and (absolute) exc. energy of 10079 << 7990 fragment 1 and 2 after fission) 10080 wNasymm1_saddle = std::sqrt( << 7991 10081 0.50 * std::sqrt(1.0 / A_levdens * E << 7992 */ 10082 (cN_asymm1_shell * Uwash(epsilon_1_s << 7993 /* This program calculates isotopic distributions of fission fragments */ 10083 << 7994 /* with a semiempirical model */ 10084 E_eff2_saddle = << 7995 /* The width and eventually a shift in N/Z (polarization) follows the */ 10085 epsilon0_2_saddle - Delta_U2 * Uwash << 7996 /* following rules: */ 10086 << 7997 /* */ 10087 if (E_eff2_saddle < A_levdens * hbom2 * << 7998 /* The line N/Z following UCD has an angle of atan(Zcn/Ncn) */ 10088 E_eff2_saddle = A_levdens * hbom2 * << 7999 /* to the horizontal axis on a chart of nuclides. */ 10089 << 8000 /* (For 238U the angle is 32.2 deg.) */ 10090 wNasymm2_saddle = std::sqrt( << 8001 /* */ 10091 0.50 * std::sqrt(1.0 / A_levdens * E << 8002 /* The following relations hold: (from Armbruster) 10092 (cN_asymm2_shell * Uwash(epsilon_2_s << 8003 c 10093 << 8004 c sigma(N) (A=const) = sigma(Z) (A=const) 10094 E_eff0_saddle = epsilon_symm_saddle; << 8005 c sigma(A) (N=const) = sigma(Z) (N=const) 10095 if (E_eff0_saddle < A_levdens * hbom3 * << 8006 c sigma(A) (Z=const) = sigma(N) (Z=const) 10096 E_eff0_saddle = A_levdens * hbom3 * << 8007 c 10097 << 8008 c From this we get: 10098 wNsymm_saddle = std::sqrt(0.50 * std::sq << 8009 c sigma(Z) (N=const) * N = sigma(N) (Z=const) * Z 10099 << 8010 c sigma(A) (Z=const) = sigma(Z) (A=const) * A/Z 10100 if (epsilon_symm_scission > 0.0) << 8011 c sigma(N) (Z=const) = sigma(Z) (A=const) * A/Z 10101 { << 8012 c Z*sigma(N) (Z=const) = N*sigma(Z) (N=const) = A*sigma(Z) (A=const) */ 10102 E_HELP = max(E_saddle_scission, epsi << 8013 // 10103 wNsymm_scission = std::sqrt(0.50 * s << 8014 10104 } << 8015 /* Model parameters: 10105 else << 8016 C These parameters have been adjusted to the compound nucleus 238U. 10106 { << 8017 c For the fission of another compound nucleus, it might be 10107 wNsymm_scission = std::sqrt(0.50 * s << 8018 c necessary to slightly adjust some parameter values. 10108 } << 8019 c The most important ones are >> 8020 C Delta_U1_shell_max and >> 8021 c Delta_u2_shell. >> 8022 */ >> 8023 G4double Nheavy1_in; // 'position of shell for Standard 1' >> 8024 Nheavy1_in = 83.0; >> 8025 >> 8026 G4double Zheavy1_in; // 'position of shell for Standard 1' >> 8027 Zheavy1_in = 50.0; >> 8028 >> 8029 G4double Nheavy2; // 'position of heavy peak valley 2' >> 8030 Nheavy2 = 89.0; >> 8031 >> 8032 G4double Delta_U1_shell_max; // 'Shell effect for valley 1' >> 8033 Delta_U1_shell_max = -2.45; >> 8034 >> 8035 G4double U1NZ_SLOPE; // Reduction of shell effect with distance to 132Sn >> 8036 U1NZ_SLOPE = 0.2; >> 8037 >> 8038 G4double Delta_U2_shell; // 'Shell effect for valley 2' >> 8039 Delta_U2_shell = -2.45; >> 8040 >> 8041 G4double X_s2s; // 'Ratio (C_sad/C_scis) of curvature of potential' >> 8042 X_s2s = 0.8; >> 8043 >> 8044 G4double hbom1,hbom2,hbom3; // 'Curvature of potential at saddle' >> 8045 hbom1 = 0.2; // hbom1 is hbar * omega1 / (2 pi) !!! >> 8046 hbom2 = 0.2; // hbom2 is hbar * omega2 / (2 pi) !!! >> 8047 hbom3 = 0.2; // hbom3 is hbar * omega3 / (2 pi) !!! >> 8048 >> 8049 G4double Fwidth_asymm1,Fwidth_asymm2,Fwidth_symm; >> 8050 // 'Factors for widths of distr. valley 1 and 2' >> 8051 Fwidth_asymm1 = 0.65; >> 8052 Fwidth_asymm2 = 0.65; >> 8053 Fwidth_symm = 1.16; >> 8054 >> 8055 G4double xLevdens; // 'Parameter x: a = A/x' >> 8056 xLevdens = 10.75; >> 8057 // The value of 1/0.093 = 10.75 is consistent with the >> 8058 // systematics of the mass widths of Ref. (RuI97). >> 8059 >> 8060 G4double FGAMMA; // 'Factor to gamma' >> 8061 FGAMMA = 1.; // Theoretical expectation, not adjusted to data. >> 8062 // Additional factor to attenuation coefficient of shell effects >> 8063 // with increasing excitation energy >> 8064 >> 8065 G4double FGAMMA1; // 'Factor to gamma_heavy1' >> 8066 FGAMMA1 = 2.; >> 8067 // Adjusted to reduce the weight of Standard 1 with increasing >> 8068 // excitation energies, as required by experimental data. >> 8069 >> 8070 G4double FREDSHELL; >> 8071 FREDSHELL = 0.; >> 8072 // Adjusted to the reduced attenuation of shells in the superfluid region. >> 8073 // If FGAMMA is modified, >> 8074 // FGAMMA * FREADSHELL should remain constant (0.65) to keep >> 8075 // the attenuation of the shell effects below the critical >> 8076 // pairing energy ECRIT unchanged, which has been carefully >> 8077 // adjusted to the mass yields of Vives and Zoeller in this >> 8078 // energy range. A high value of FGAMMA leads ot a stronger >> 8079 // attenuation of shell effects above the superfluid region. >> 8080 >> 8081 G4double Ecrit; >> 8082 Ecrit = 5.; >> 8083 // The value of ECRIT determines the transition from a weak >> 8084 // decrease of the shell effect below ECRIT to a stronger >> 8085 // decrease above the superfluid range. >> 8086 const G4double d = 2.0; // 'Surface distance of scission configuration' >> 8087 // d = 2.0; >> 8088 // Charge polarisation from Wagemanns p. 397: >> 8089 G4double cpol1; // Charge polarisation standard I >> 8090 cpol1 = 0.35; // calculated internally with shells >> 8091 G4double cpol2; // Charge polarisation standard II >> 8092 cpol2 = 0.; // calculated internally from LDM >> 8093 G4double Friction_factor; >> 8094 Friction_factor = 1.0; >> 8095 G4double Nheavy1; // position of valley St 1 in Z and N >> 8096 G4double Delta_U1,Delta_U2; // used shell effects >> 8097 G4double cN_asymm1_shell, cN_asymm2_shell; >> 8098 G4double gamma,gamma_heavy1,gamma_heavy2; // fading of shells >> 8099 G4double E_saddle_scission; // friction from saddle to scission >> 8100 G4double Ysymm=0.; // Yield of symmetric mode >> 8101 G4double Yasymm1=0.; // Yield of asymmetric mode 1 >> 8102 G4double Yasymm2=0.; // Yield of asymmetric mode 2 >> 8103 G4double Nheavy1_eff; // Effective position of valley 1 >> 8104 G4double Nheavy2_eff; // Effective position of valley 2 >> 8105 G4double eexc1_saddle; // Excitation energy above saddle 1 >> 8106 G4double eexc2_saddle; // Excitation energy above saddle 2 >> 8107 G4double EEXC_MAX; // Excitation energy above lowest saddle >> 8108 G4double r_e_o; // Even-odd effect in Z >> 8109 G4double cN_symm; // Curvature of symmetric valley >> 8110 G4double CZ; // Curvature of Z distribution for fixed A >> 8111 G4double Nheavy2_NZ; // Position of Shell 2, combined N and Z >> 8112 G4double N; >> 8113 G4double Aheavy1,Aheavy2; >> 8114 G4double Sasymm1=0.,Sasymm2=0.,Ssymm=0.,Ysum=0.,Yasymm=0.; >> 8115 G4double Ssymm_mode1,Ssymm_mode2; >> 8116 G4double wNasymm1_saddle, wNasymm2_saddle, wNsymm_saddle; >> 8117 G4double wNasymm2_scission, wNsymm_scission; >> 8118 G4double wNasymm1, wNasymm2, wNsymm; >> 8119 G4int imode; >> 8120 G4double rmode; >> 8121 G4double ZA1width; >> 8122 G4double N1r,N2r,A1r,N1,N2; >> 8123 G4double Zsymm,Nsymm; >> 8124 G4double N1mean, N1width; >> 8125 G4double dUeff; >> 8126 /* effective shell effect at lowest barrier */ >> 8127 G4double Eld; >> 8128 /* Excitation energy with respect to ld barrier */ >> 8129 G4double re1,re2,re3; >> 8130 G4double eps1,eps2; >> 8131 G4double Z1UCD,Z2UCD; >> 8132 G4double beta,beta1,beta2; >> 8133 // double betacomplement; >> 8134 G4double DN1_POL; >> 8135 /* shift of most probable neutron number for given Z, >> 8136 according to polarization */ >> 8137 G4int i_help; >> 8138 G4double A_levdens; >> 8139 /* level-density parameter */ >> 8140 // double A_levdens_light1,A_levdens_light2; >> 8141 G4double A_levdens_heavy1,A_levdens_heavy2; >> 8142 >> 8143 G4double R0=1.16; >> 8144 >> 8145 G4double epsilon_1_saddle,epsilon0_1_saddle; >> 8146 G4double epsilon_2_saddle,epsilon0_2_saddle,epsilon_symm_saddle; >> 8147 G4double epsilon_1_scission;//,epsilon0_1_scission; >> 8148 G4double epsilon_2_scission;//,epsilon0_2_scission; >> 8149 G4double epsilon_symm_scission; >> 8150 /* modified energy */ >> 8151 G4double E_eff1_saddle,E_eff2_saddle; >> 8152 G4double Epot0_mode1_saddle,Epot0_mode2_saddle,Epot0_symm_saddle; >> 8153 G4double Epot_mode1_saddle,Epot_mode2_saddle,Epot_symm_saddle; >> 8154 G4double E_defo,E_defo1,E_defo2,E_scission_pre,E_scission_post; >> 8155 G4double E_asym; >> 8156 G4double E1exc,E2exc; >> 8157 G4double E1exc_sigma,E2exc_sigma; >> 8158 G4double TKER; >> 8159 G4double EkinR1,EkinR2; >> 8160 G4double MassCurv_scis, MassCurv_sadd; >> 8161 G4double cN_symm_sadd; >> 8162 G4double Nheavy1_shell,Nheavy2_shell; >> 8163 G4double wNasymm1_scission; >> 8164 G4double Aheavy1_eff,Aheavy2_eff; >> 8165 G4double Z1rr,Z1r; >> 8166 G4double E_HELP; >> 8167 G4double Z_scission,N_scission,A_scission; >> 8168 G4double Z2_over_A_eff; >> 8169 G4double beta1gs,beta2gs,betags; >> 8170 G4double sigZmin; // 'Minimum neutron width for constant Z' >> 8171 G4double DSN132,Delta_U1_shell,E_eff0_saddle;//,e_scission; >> 8172 G4int NbLam0= (*NbLam0_par); >> 8173 // >> 8174 sigZmin = 0.5; >> 8175 N = A - Z; /* neutron number of the fissioning nucleus */ >> 8176 // >> 8177 cN_asymm1_shell = 0.700 * N/Z; >> 8178 cN_asymm2_shell = 0.040 * N/Z; 10109 8179 10110 // Calculate widhts at the scission p << 8180 //********************************************************************* 10111 // fits of ref. Beizin 1991 (Plots by << 10112 8181 10113 if (E_saddle_scission == 0.0) << 8182 DSN132 = Nheavy1_in - N/Z * Zheavy1_in; 10114 { << 8183 Aheavy1 = Nheavy1_in + Zheavy1_in + 0.340 * DSN132; >> 8184 /* Neutron number of valley Standard 1 */ >> 8185 /* It is assumed that the 82-neutron shell effect is stronger than >> 8186 c the 50-proton shell effect. Therefore, the deviation in N/Z of >> 8187 c the fissioning nucleus from the N/Z of 132Sn will >> 8188 c change the position of the combined shell in mass. For neutron- >> 8189 c deficient fissioning nuclei, the mass will increase and vice >> 8190 c versa. */ >> 8191 >> 8192 Delta_U1_shell = Delta_U1_shell_max + U1NZ_SLOPE * std::abs(DSN132); >> 8193 Delta_U1_shell = min(0.,Delta_U1_shell); >> 8194 /* Empirical reduction of shell effect with distance in N/Z of CN to 132Sn */ >> 8195 /* Fits (239U,n)f and 226Th e.-m.-induced fission */ >> 8196 >> 8197 Nheavy1 = N/A * Aheavy1; /* UCD */ >> 8198 Aheavy2 = Nheavy2 * A/N; >> 8199 >> 8200 Zsymm = Z / 2.0; /* proton number in symmetric fission (centre) */ >> 8201 Nsymm = N / 2.0; >> 8202 A_levdens = A / xLevdens; >> 8203 gamma = A_levdens / (0.40 * std::pow(A,1.3333)) * FGAMMA; >> 8204 A_levdens_heavy1 = Aheavy1 / xLevdens; >> 8205 gamma_heavy1 = A_levdens_heavy1 / (0.40 * std::pow(Aheavy1,1.3333)) * FGAMMA * FGAMMA1; >> 8206 A_levdens_heavy2 = Aheavy2 / xLevdens; >> 8207 gamma_heavy2 = A_levdens_heavy2 / (0.40 * std::pow(Aheavy2,1.3333)) * FGAMMA; >> 8208 >> 8209 // Energy dissipated from saddle to scission >> 8210 // F. Rejmund et al., Nucl. Phys. A 678 (2000) 215, fig. 4 b */ >> 8211 E_saddle_scission = (-24. + 0.02227 * Z*Z/std::pow(A,0.33333))*Friction_factor; >> 8212 E_saddle_scission = max( 0.0, E_saddle_scission ); >> 8213 >> 8214 // Fit to experimental result on curvature of potential at saddle >> 8215 // Parametrization of T. Enqvist according to Mulgin et al. 1998 >> 8216 // MassCurv taken at scission. */ >> 8217 >> 8218 Z2_over_A_eff = Z*Z/A; >> 8219 >> 8220 if( Z2_over_A_eff< 34.0 ) >> 8221 MassCurv_scis = std::pow(10., -1.093364 + 0.082933 * Z2_over_A_eff - 0.0002602 * Z2_over_A_eff*Z2_over_A_eff); >> 8222 else >> 8223 MassCurv_scis = std::pow(10., 3.053536 - 0.056477 * Z2_over_A_eff+ 0.0002454 * Z2_over_A_eff*Z2_over_A_eff ); >> 8224 >> 8225 // to do: >> 8226 // fix the X with the channel intensities of 226Th (KHS at SEYSSINS,1998) >> 8227 // replace then (all) cN_symm by cN_symm_saddle (at least for Yields) >> 8228 MassCurv_sadd = X_s2s * MassCurv_scis; >> 8229 >> 8230 cN_symm = 8.0 / std::pow(N,2.) * MassCurv_scis; >> 8231 cN_symm_sadd = 8.0 / std::pow(N,2.) * MassCurv_sadd; >> 8232 >> 8233 Nheavy1_shell = Nheavy1; >> 8234 >> 8235 if(E < 100.0) >> 8236 Nheavy1_eff = (cN_symm_sadd*Nsymm + cN_asymm1_shell * >> 8237 Uwash(E/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1) * >> 8238 Nheavy1_shell) >> 8239 / (cN_symm_sadd + >> 8240 cN_asymm1_shell * >> 8241 Uwash(E/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1)); >> 8242 else >> 8243 Nheavy1_eff = (cN_symm_sadd*Nsymm + >> 8244 cN_asymm1_shell*Nheavy1_shell) >> 8245 / (cN_symm_sadd + >> 8246 cN_asymm1_shell); >> 8247 >> 8248 /* Position of Standard II defined by neutron shell */ >> 8249 Nheavy2_NZ = Nheavy2; >> 8250 Nheavy2_shell = Nheavy2_NZ; >> 8251 if (E < 100.) >> 8252 Nheavy2_eff = (cN_symm_sadd*Nsymm + >> 8253 cN_asymm2_shell* >> 8254 Uwash(E/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2) * >> 8255 Nheavy2_shell) >> 8256 / (cN_symm_sadd + >> 8257 cN_asymm2_shell* >> 8258 Uwash(E/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2)); >> 8259 else >> 8260 Nheavy2_eff = (cN_symm_sadd*Nsymm + >> 8261 cN_asymm2_shell*Nheavy2_shell) >> 8262 / (cN_symm_sadd + >> 8263 cN_asymm2_shell); >> 8264 >> 8265 Delta_U1 = Delta_U1_shell + (Nheavy1_shell - Nheavy1_eff)*(Nheavy1_shell - Nheavy1_eff) * cN_asymm1_shell; /* shell effect in valley of mode 1 */ >> 8266 Delta_U1 = min(Delta_U1,0.0); >> 8267 Delta_U2 = Delta_U2_shell + (Nheavy2_shell - Nheavy2_eff)*(Nheavy2_shell - Nheavy2_eff) * cN_asymm2_shell; /* shell effect in valley of mode 2 */ >> 8268 Delta_U2 = min(Delta_U2,0.0); >> 8269 >> 8270 // liquid drop energies at the centres of the different shell effects >> 8271 // with respect to liquid drop at symmetry >> 8272 Epot0_mode1_saddle = (Nheavy1_eff-Nsymm)*(Nheavy1_eff-Nsymm) * cN_symm_sadd; >> 8273 Epot0_mode2_saddle = (Nheavy2_eff-Nsymm)*(Nheavy2_eff-Nsymm) * cN_symm_sadd; >> 8274 Epot0_symm_saddle = 0.0; >> 8275 >> 8276 // energies including shell effects at the centres of the different >> 8277 // shell effects with respect to liquid drop at symmetry */ >> 8278 Epot_mode1_saddle = Epot0_mode1_saddle + Delta_U1; >> 8279 Epot_mode2_saddle = Epot0_mode2_saddle + Delta_U2; >> 8280 Epot_symm_saddle = Epot0_symm_saddle; >> 8281 >> 8282 // minimum of potential with respect to ld potential at symmetry >> 8283 dUeff = min( Epot_mode1_saddle, Epot_mode2_saddle); >> 8284 dUeff = min( dUeff, Epot_symm_saddle); >> 8285 dUeff = dUeff - Epot_symm_saddle; >> 8286 >> 8287 Eld = E + dUeff; >> 8288 // E = energy above lowest effective barrier >> 8289 // Eld = energy above liquid-drop barrier >> 8290 // Due to this treatment the energy E on input means the excitation >> 8291 // energy above the lowest saddle. */ >> 8292 >> 8293 // excitation energies at saddle modes 1 and 2 without shell effect */ >> 8294 epsilon0_1_saddle = Eld - Epot0_mode1_saddle; >> 8295 epsilon0_2_saddle = Eld - Epot0_mode2_saddle; >> 8296 >> 8297 // excitation energies at saddle modes 1 and 2 with shell effect */ >> 8298 epsilon_1_saddle = Eld - Epot_mode1_saddle; >> 8299 epsilon_2_saddle = Eld - Epot_mode2_saddle; >> 8300 >> 8301 epsilon_symm_saddle = Eld - Epot_symm_saddle; >> 8302 // epsilon_symm_saddle = Eld - dUeff; >> 8303 >> 8304 eexc1_saddle = epsilon_1_saddle; >> 8305 eexc2_saddle = epsilon_2_saddle; >> 8306 >> 8307 // EEXC_MAX is energy above the lowest saddle */ >> 8308 EEXC_MAX = max( eexc1_saddle, eexc2_saddle); >> 8309 EEXC_MAX = max( EEXC_MAX, Eld); >> 8310 >> 8311 // excitation energy at scission */ >> 8312 epsilon_1_scission = Eld + E_saddle_scission - Epot_mode1_saddle; >> 8313 epsilon_2_scission = Eld + E_saddle_scission - Epot_mode2_saddle; >> 8314 >> 8315 // excitation energy of symmetric fragment at scission */ >> 8316 epsilon_symm_scission = Eld + E_saddle_scission - Epot_symm_saddle; >> 8317 >> 8318 // calculate widhts at the saddle >> 8319 E_eff1_saddle = epsilon0_1_saddle - Delta_U1 * >> 8320 Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1); >> 8321 >> 8322 if( E_eff1_saddle < A_levdens * hbom1*hbom1) >> 8323 E_eff1_saddle = A_levdens * hbom1*hbom1; >> 8324 >> 8325 wNasymm1_saddle = >> 8326 std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_eff1_saddle) / >> 8327 (cN_asymm1_shell * >> 8328 Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1)+ >> 8329 cN_symm_sadd)); >> 8330 >> 8331 E_eff2_saddle = epsilon0_2_saddle - >> 8332 Delta_U2 * >> 8333 Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2); >> 8334 >> 8335 if(E_eff2_saddle < A_levdens * hbom2*hbom2) >> 8336 E_eff2_saddle = A_levdens * hbom2*hbom2; >> 8337 >> 8338 wNasymm2_saddle = >> 8339 std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_eff2_saddle) / >> 8340 (cN_asymm2_shell * >> 8341 Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2)+ >> 8342 cN_symm_sadd)); >> 8343 >> 8344 E_eff0_saddle = epsilon_symm_saddle; >> 8345 if(E_eff0_saddle < A_levdens * hbom3*hbom3) >> 8346 E_eff0_saddle = A_levdens * hbom3*hbom3; >> 8347 >> 8348 wNsymm_saddle = >> 8349 std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_eff0_saddle) / >> 8350 cN_symm_sadd); >> 8351 >> 8352 if(epsilon_symm_scission > 0.0 ){ >> 8353 E_HELP = max(E_saddle_scission,epsilon_symm_scission); >> 8354 wNsymm_scission = >> 8355 std::sqrt(0.50 * std::sqrt(1.0/A_levdens*(E_HELP)) / >> 8356 cN_symm); >> 8357 }else{ >> 8358 wNsymm_scission = >> 8359 std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_saddle_scission) / >> 8360 cN_symm); >> 8361 } >> 8362 >> 8363 // Calculate widhts at the scission point: >> 8364 // fits of ref. Beizin 1991 (Plots by Sergei Zhdanov) >> 8365 >> 8366 if( E_saddle_scission == 0.0 ){ 10115 wNasymm1_scission = wNasymm1_saddle; 8367 wNasymm1_scission = wNasymm1_saddle; 10116 wNasymm2_scission = wNasymm2_saddle; 8368 wNasymm2_scission = wNasymm2_saddle; 10117 } << 8369 }else{ 10118 else << 8370 if( Nheavy1_eff > 75.0 ){ 10119 { << 8371 wNasymm1_scission = std::sqrt(21.0)*N/A; 10120 if (Nheavy1_eff > 75.0) << 8372 wNasymm2_scission = max( 12.8 - 1.0 *(92.0 - Nheavy2_eff),1.0)*N/A; 10121 { << 8373 10122 wNasymm1_scission = std::sqrt(21 << 8374 }else{ 10123 wNasymm2_scission = max(12.8 - 1 << 8375 wNasymm1_scission = wNasymm1_saddle; >> 8376 wNasymm2_scission = wNasymm2_saddle; 10124 } 8377 } 10125 else << 8378 } 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 8379 10192 Yasymm1 = (std::exp(Sasymm1 - Ssymm) - s << 8380 wNasymm1_scission = max( wNasymm1_scission, wNasymm1_saddle ); >> 8381 wNasymm2_scission = max( wNasymm2_scission, wNasymm2_saddle ); 10193 8382 10194 Yasymm2 = (std::exp(Sasymm2 - Ssymm) - s << 8383 wNasymm1 = wNasymm1_scission * Fwidth_asymm1; >> 8384 wNasymm2 = wNasymm2_scission * Fwidth_asymm2; >> 8385 wNsymm = wNsymm_scission * Fwidth_symm; >> 8386 >> 8387 // mass and charge of fragments using UCD, needed for level densities >> 8388 Aheavy1_eff = Nheavy1_eff * A/N; >> 8389 Aheavy2_eff = Nheavy2_eff * A/N; >> 8390 >> 8391 A_levdens_heavy1 = Aheavy1_eff / xLevdens; >> 8392 A_levdens_heavy2 = Aheavy2_eff / xLevdens; >> 8393 gamma_heavy1 = A_levdens_heavy1 / (0.40 * std::pow(Aheavy1_eff,1.3333)) * FGAMMA * FGAMMA1; >> 8394 gamma_heavy2 = A_levdens_heavy2 / (0.40 * std::pow(Aheavy2_eff,1.3333)) * FGAMMA; >> 8395 >> 8396 if( epsilon_symm_saddle < A_levdens * hbom3*hbom3) >> 8397 Ssymm = 2.0 * std::sqrt(A_levdens*A_levdens * hbom3*hbom3) + >> 8398 (epsilon_symm_saddle - A_levdens * hbom3*hbom3)/hbom3; >> 8399 else >> 8400 Ssymm = 2.0 * std::sqrt(A_levdens*epsilon_symm_saddle); >> 8401 >> 8402 Ysymm = 1.0; >> 8403 >> 8404 if( epsilon0_1_saddle < A_levdens * hbom1*hbom1 ) >> 8405 Ssymm_mode1 = 2.0 * std::sqrt(A_levdens*A_levdens * hbom1*hbom1) + >> 8406 (epsilon0_1_saddle - A_levdens * hbom1*hbom1)/hbom1; >> 8407 else >> 8408 Ssymm_mode1 = 2.0 * std::sqrt( A_levdens*epsilon0_1_saddle ); >> 8409 >> 8410 if( epsilon0_2_saddle < A_levdens * hbom2*hbom2 ) >> 8411 Ssymm_mode2 = 2.0 * std::sqrt(A_levdens*A_levdens * hbom2*hbom2) + >> 8412 (epsilon0_2_saddle - A_levdens * hbom2*hbom2)/hbom2; >> 8413 else >> 8414 Ssymm_mode2 = 2.0 * std::sqrt(A_levdens*epsilon0_2_saddle); >> 8415 >> 8416 >> 8417 if( epsilon0_1_saddle - >> 8418 Delta_U1* >> 8419 Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1) >> 8420 < A_levdens * hbom1*hbom1 ) >> 8421 Sasymm1 = 2.0 * std::sqrt( A_levdens*A_levdens * hbom1*hbom1 ) + >> 8422 (epsilon0_1_saddle - Delta_U1 * >> 8423 Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1) >> 8424 - A_levdens * hbom1*hbom1)/hbom1; >> 8425 else >> 8426 Sasymm1 = 2.0 *std::sqrt( A_levdens*(epsilon0_1_saddle - Delta_U1 * >> 8427 Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1))); >> 8428 >> 8429 if( epsilon0_2_saddle - >> 8430 Delta_U2* >> 8431 Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2) >> 8432 < A_levdens * hbom2*hbom2 ) >> 8433 Sasymm2 = 2.0 * std::sqrt( A_levdens*A_levdens * hbom2*hbom2 ) + >> 8434 (epsilon0_1_saddle-Delta_U1 * >> 8435 Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2) >> 8436 - A_levdens * hbom2*hbom2)/hbom2; >> 8437 else >> 8438 Sasymm2 = 2.0 * >> 8439 std::sqrt( A_levdens*(epsilon0_2_saddle - Delta_U2 * >> 8440 Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2))); >> 8441 >> 8442 Yasymm1 = ( std::exp(Sasymm1 - Ssymm) - std::exp(Ssymm_mode1 - Ssymm) ) * >> 8443 wNasymm1_saddle / wNsymm_saddle * 2.0; 10195 8444 10196 Ysum = Ysymm + Yasymm1 + Yasymm2; /* nor << 8445 Yasymm2 = ( std::exp(Sasymm2 - Ssymm) - std::exp(Ssymm_mode2 - Ssymm) ) * >> 8446 wNasymm2_saddle / wNsymm_saddle * 2.0; 10197 8447 10198 if (Ysum > 0.00) << 8448 Ysum = Ysymm + Yasymm1 + Yasymm2; /* normalize */ 10199 { << 8449 >> 8450 if( Ysum > 0.00 ){ 10200 Ysymm = Ysymm / Ysum; 8451 Ysymm = Ysymm / Ysum; 10201 Yasymm1 = Yasymm1 / Ysum; 8452 Yasymm1 = Yasymm1 / Ysum; 10202 Yasymm2 = Yasymm2 / Ysum; 8453 Yasymm2 = Yasymm2 / Ysum; 10203 Yasymm = Yasymm1 + Yasymm2; 8454 Yasymm = Yasymm1 + Yasymm2; 10204 } << 8455 }else{ 10205 else << 10206 { << 10207 Ysymm = 0.0; 8456 Ysymm = 0.0; 10208 Yasymm1 = 0.0; 8457 Yasymm1 = 0.0; 10209 Yasymm2 = 0.0; 8458 Yasymm2 = 0.0; 10210 // search minimum threshold an << 8459 // search minimum threshold and attribute all events to this mode */ 10211 if ((epsilon_symm_saddle < epsilon_1 << 8460 if( (epsilon_symm_saddle < epsilon_1_saddle) && 10212 Ysymm = 1.0; << 8461 (epsilon_symm_saddle < epsilon_2_saddle) ) 10213 else if (epsilon_1_saddle < epsilon_ << 8462 Ysymm = 1.0; 10214 Yasymm1 = 1.0; << 10215 else 8463 else >> 8464 if( epsilon_1_saddle < epsilon_2_saddle ) >> 8465 Yasymm1 = 1.0; >> 8466 else 10216 Yasymm2 = 1.0; 8467 Yasymm2 = 1.0; 10217 } << 8468 } 10218 // even-odd effect << 8469 // even-odd effect 10219 // Parametrization from Rejmund et al. << 8470 // Parametrization from Rejmund et al. 10220 if (mod(Z, 2.0) == 0) << 8471 if (mod(Z,2.0)== 0) 10221 r_e_o = std::pow(10.0, -0.0170 * (E_ << 8472 r_e_o = std::pow(10.0,-0.0170 * (E_saddle_scission + Eld)*(E_saddle_scission + Eld)); 10222 else << 8473 else 10223 r_e_o = 0.0; << 8474 r_e_o = 0.0; 10224 << 8475 10225 /* --------------------------------- << 8476 /* ------------------------------------------------------- 10226 c selecting the fission mode using t << 8477 c selecting the fission mode using the yields at scission 10227 c ---------------------------------- << 8478 c ------------------------------------------------------- 10228 c random decision: symmetric or asym << 8479 c random decision: symmetric or asymmetric 10229 c IMODE = 1 means asymmetric fission << 8480 c IMODE = 1 means asymmetric fission, mode 1 10230 c IMODE = 2 means asymmetric fission << 8481 c IMODE = 2 means asymmetric fission, mode 2 10231 c IMODE = 3 means symmetric fission << 8482 c IMODE = 3 means symmetric fission 10232 c testcase: 238U, E*= 6 MeV : 646 << 8483 c testcase: 238U, E*= 6 MeV : 6467 8781 4752 (20000) 10233 c 12779 << 8484 c 127798 176480 95722 (400000) 10234 c 31991 << 8485 c 319919 440322 239759 (1000000) 10235 c E*=12 MeV : 15340 << 8486 c E*=12 MeV : 153407 293063 553530 (1000000) */ 10236 << 8487 10237 fiss321: // rmode = DBLE(HAZ(k)) << 8488 fiss321: // rmode = DBLE(HAZ(k)) 10238 rmode = G4AblaRandom::flat(); << 8489 rmode = G4AblaRandom::flat(); 10239 if (rmode < Yasymm1) << 8490 if( rmode < Yasymm1 ) 10240 imode = 1; << 8491 imode = 1; 10241 else if ((rmode > Yasymm1) && (rmode < Y << 8492 else 10242 imode = 2; << 8493 if( (rmode > Yasymm1) && (rmode < Yasymm) ) 10243 else << 8494 imode = 2; 10244 imode = 3; << 8495 else 10245 << 8496 imode = 3; 10246 // determine parameters of the neutro << 8497 10247 // at scission << 8498 // determine parameters of the neutron distribution of each mode 10248 << 8499 // at scission 10249 if (imode == 1) << 8500 10250 { << 8501 if( imode == 1){ 10251 N1mean = Nheavy1_eff; << 8502 N1mean = Nheavy1_eff; 10252 N1width = wNasymm1; << 8503 N1width = wNasymm1; 10253 } << 8504 }else{ 10254 else << 8505 if( imode == 2 ){ 10255 { << 8506 N1mean = Nheavy2_eff; 10256 if (imode == 2) << 8507 N1width = wNasymm2; 10257 { << 8508 }else{ 10258 N1mean = Nheavy2_eff; << 8509 //if( imode == 3 ) then 10259 N1width = wNasymm2; << 8510 N1mean = Nsymm; 10260 } << 8511 N1width = wNsymm; 10261 else << 8512 } 10262 { << 8513 } 10263 // if( imode == 3 ) then << 10264 N1mean = Nsymm; << 10265 N1width = wNsymm; << 10266 } << 10267 } << 10268 8514 10269 // N2mean needed by CZ below << 8515 // N2mean needed by CZ below 10270 // N2mean = N - N1mean; 8516 // N2mean = N - N1mean; 10271 << 8517 10272 // fission mode found, then the dete << 8518 // fission mode found, then the determination of the 10273 // neutron numbers N1 and N2 at scis << 8519 // neutron numbers N1 and N2 at scission by randon decision 10274 N1r = 1.0; << 8520 N1r = 1.0; 10275 N2r = 1.0; << 8521 N2r = 1.0; 10276 while (N1r < 5.0 || N2r < 5.0) << 8522 while( N1r < 5.0 || N2r < 5.0 ){ 10277 { << 8523 // N1r = DBLE(GaussHaz(k,sngl(N1mean), sngl(N1width) )) 10278 // N1r = DBLE(GaussHaz(k,sngl(N1mea << 10279 // N1r = N1mean+G4AblaRandom::gaus(N 8524 // N1r = N1mean+G4AblaRandom::gaus(N1width);// 10280 N1r = gausshaz(0, N1mean, N1width); << 8525 N1r = gausshaz(0,N1mean,N1width); 10281 N2r = N - N1r; << 8526 N2r = N - N1r; 10282 } << 8527 } 10283 8528 10284 // --------------------------------- << 8529 // -------------------------------------------------- 10285 // first approximation of fission fr << 8530 // first approximation of fission fragments using UCD at saddle 10286 // --------------------------------- << 8531 // -------------------------------------------------- 10287 Z1UCD = Z / N * N1r; << 8532 Z1UCD = Z/N * N1r; 10288 Z2UCD = Z / N * N2r; << 8533 Z2UCD = Z/N * N2r; 10289 A1r = A / N * N1r; << 8534 A1r = A/N * N1r; 10290 // << 8535 // 10291 // -------------------------- << 8536 // -------------------------- 10292 // deformations: starting ... << 8537 // deformations: starting ... 10293 // -------------------------- */ << 8538 // -------------------------- */ 10294 if (imode == 1) << 8539 if( imode == 1 ){ 10295 { << 8540 // --- N = 82 */ 10296 // --- N = 82 */ << 8541 E_scission_pre = max( epsilon_1_scission, 1.0 ); 10297 E_scission_pre = max(epsilon_1_sciss << 8542 // ! Eexc at scission, neutron evaporation from saddle to scission not considered */ 10298 // ! Eexc at scission, neutron eva << 8543 if( N1mean > N*0.50 ){ 10299 // considered */ << 8544 beta1 = 0.0; /* 1. fragment is spherical */ 10300 if (N1mean > N * 0.50) << 8545 beta2 = 0.55; /* 2. fragment is deformed 0.5*/ 10301 { << 8546 }else{ 10302 beta1 = 0.0; /* 1. fragment i << 8547 beta1 = 0.55; /* 1. fragment is deformed 0.5*/ 10303 beta2 = 0.55; /* 2. fragment i << 8548 beta2 = 0.00; /* 2. fragment is spherical */ 10304 } << 8549 } 10305 else << 8550 } 10306 { << 8551 if( imode == 2 ){ 10307 beta1 = 0.55; /* 1. fragment is << 8552 // --- N appr. 86 */ 10308 beta2 = 0.00; /* 2. fragment is << 8553 E_scission_pre = max( epsilon_2_scission, 1.0 ); 10309 } << 8554 if( N1mean > N*0.50 ){ 10310 } << 8555 beta1 = (N1r - 92.0) * 0.030 + 0.60; 10311 if (imode == 2) << 8556 10312 { << 8557 beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)]; 10313 // --- N appr. 86 */ << 8558 beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)]; 10314 E_scission_pre = max(epsilon_2_sciss << 8559 10315 if (N1mean > N * 0.50) << 8560 beta1 = max(beta1,beta1gs); 10316 { << 8561 beta2 = 1.0 - beta1; 10317 beta1 = (N1r - 92.0) * 0.030 + 0 << 8562 beta2 = max(beta2,beta2gs); 10318 << 8563 }else{ 10319 beta1gs = ecld->beta2[idint(N1r) << 8564 10320 beta2gs = ecld->beta2[idint(N2r) << 8565 beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)]; 10321 << 8566 beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)]; 10322 beta1 = max(beta1, beta1gs); << 8567 10323 beta2 = 1.0 - beta1; << 8568 beta2 = (N2r -92.0) * 0.030 + 0.60; 10324 beta2 = max(beta2, beta2gs); << 8569 beta2 = max(beta2,beta2gs); >> 8570 beta1 = 1.0 - beta2; >> 8571 beta1 = max(beta1,beta1gs); 10325 } 8572 } 10326 else << 8573 } 10327 { << 8574 beta = 0.0; 10328 << 8575 if( imode == 3 ){ 10329 beta1gs = ecld->beta2[idint(N1r) << 8576 // if( imode >0 ){ 10330 beta2gs = ecld->beta2[idint(N2r) << 8577 // --- Symmetric fission channel 10331 << 8578 // the fit function for beta is the deformation for optimum energy 10332 beta2 = (N2r - 92.0) * 0.030 + 0 << 8579 // at the scission point, d = 2 10333 beta2 = max(beta2, beta2gs); << 8580 // beta : deformation of symmetric fragments 10334 beta1 = 1.0 - beta2; << 8581 // beta1 : deformation of first fragment 10335 beta1 = max(beta1, beta1gs); << 8582 // 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 8583 betags = ecld->beta2[idint(Nsymm)][idint(Zsymm)]; 10349 beta1gs = ecld->beta2[idint(N1r)][id 8584 beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)]; 10350 beta2gs = ecld->beta2[idint(N2r)][id 8585 beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)]; 10351 beta = max(0.177963 + 0.0153241 * Zs << 8586 beta = max(0.177963+0.0153241*Zsymm-1.62037e-4*Zsymm*Zsymm,betags); 10352 beta1 = max(0.177963 + 0.0153241 * Z << 8587 beta1 = max(0.177963+0.0153241*Z1UCD-1.62037e-4*Z1UCD*Z1UCD,beta1gs); 10353 beta2 = max(0.177963 + 0.0153241 * Z << 8588 beta2 = max(0.177963+0.0153241*Z2UCD-1.62037e-4*Z2UCD*Z2UCD,beta2gs); 10354 << 8589 10355 E_asym = frldm(Z1UCD, N1r, beta1) + << 8590 E_asym = frldm( Z1UCD, N1r, beta1 ) + 10356 ecoul(Z1UCD, N1r, beta1, Z2 << 8591 frldm( Z2UCD, N2r, beta2 ) + 10357 ecoul(Zsymm, Nsymm, beta, Z << 8592 ecoul( Z1UCD, N1r, beta1, Z2UCD, N2r, beta2, 2.0 ) - 10358 E_scission_pre = max(epsilon_symm_sc << 8593 2.0 * frldm( Zsymm, Nsymm, beta ) - 10359 } << 8594 ecoul( Zsymm, Nsymm, beta, Zsymm, Nsymm, beta, 2.0 ); 10360 // ----------------------- << 8595 E_scission_pre = max( epsilon_symm_scission - E_asym, 1. ); 10361 // ... end of deformations << 8596 } 10362 // ----------------------- << 8597 // ----------------------- 10363 << 8598 // ... end of deformations 10364 // --------------------------------- << 8599 // ----------------------- 10365 // evaporation from saddle to scissi << 8600 10366 // --------------------------------- << 8601 // ------------------------------------------ 10367 if (E_scission_pre > 5. && NbLam0 < 1) << 8602 // evaporation from saddle to scission ... 10368 { << 8603 // ------------------------------------------ 10369 evap_postsaddle( << 8604 if(E_scission_pre>5. && NbLam0<1){ 10370 A, Z, E_scission_pre, &E_scissio << 8605 evap_postsaddle(A,Z,E_scission_pre,&E_scission_post, 10371 N_scission = A_scission - Z_scission << 8606 &A_scission,&Z_scission,vx_eva_sc,vy_eva_sc,vz_eva_sc,&NbLam0); 10372 } << 8607 N_scission = A_scission - Z_scission; 10373 else << 8608 }else{ 10374 { << 8609 A_scission = A; 10375 A_scission = A; << 8610 Z_scission = Z; 10376 Z_scission = Z; << 8611 E_scission_post = E_scission_pre; 10377 E_scission_post = E_scission_pre; << 8612 N_scission = A_scission - Z_scission; 10378 N_scission = A_scission - Z_scission << 8613 } 10379 } << 8614 // --------------------------------------------------- 10380 // --------------------------------- << 8615 // second approximation of fission fragments using UCD 10381 // second approximation of fission f << 8616 // --------------------------------------------------- */ 10382 // --------------------------------- << 8617 // 10383 // << 8618 N1r = N1r * N_scission / N; 10384 N1r = N1r * N_scission / N; << 8619 N2r = N2r * N_scission / N; 10385 N2r = N2r * N_scission / N; << 8620 Z1UCD = Z1UCD * Z_scission / Z; 10386 Z1UCD = Z1UCD * Z_scission / Z; << 8621 Z2UCD = Z2UCD * Z_scission / Z; 10387 Z2UCD = Z2UCD * Z_scission / Z; << 8622 A1r = Z1UCD + N1r; 10388 A1r = Z1UCD + N1r; << 8623 10389 << 8624 // --------------------------------------------------------- 10390 // --------------------------------- << 8625 // determination of the charge and mass of the fragments ... 10391 // determination of the charge and m << 8626 // --------------------------------------------------------- 10392 // --------------------------------- << 8627 10393 << 8628 // - CZ is the curvature of charge distribution for fixed mass, 10394 // - CZ is the curvature of charge d << 8629 // common to all modes, gives the width of the charge distribution. 10395 // common to all modes, gives the << 8630 // The physics picture behind is that the division of the 10396 // The physics picture behind is t << 8631 // fissioning nucleus in N and Z is slow when mass transport from 10397 // fissioning nucleus in N and Z i << 8632 // one nascent fragment to the other is concerned but fast when the 10398 // one nascent fragment to the oth << 8633 // N/Z degree of freedom is concernded. In addition, the potential 10399 // N/Z degree of freedom is concer << 8634 // minima in direction of mass transport are broad compared to the 10400 // minima in direction of mass tra << 8635 // potential minimum in N/Z direction. 10401 // potential minimum in N/Z direct << 8636 // The minima in direction of mass transport are calculated 10402 // The minima in direction of m << 8637 // by the liquid-drop (LD) potential (for superlong mode), 10403 // by the liquid-drop (LD) pote << 8638 // by LD + N=82 shell (for standard 1 mode) and 10404 // by LD + N=82 shell (for stan << 8639 // by LD + N=86 shell (for standard 2 mode). 10405 // by LD + N=86 shell (for stan << 8640 // Since the variation of N/Z is fast, it can quickly adjust to 10406 // Since the variation of N/Z i << 8641 // the potential and is thus determined close to scission. 10407 // the potential and is thus de << 8642 // Thus, we calculate the mean N/Z and its width for fixed mass 10408 // Thus, we calculate the mean << 8643 // at scission. 10409 // at scission. << 8644 // For the SL mode, the mean N/Z is calculated by the 10410 // For the SL mode, the mean N/ << 8645 // minimum of the potential at scission as a function of N/Z for 10411 // minimum of the potential at << 8646 // fixed mass. 10412 // fixed mass. << 8647 // For the S1 and S2 modes, this correlation is imposed by the 10413 // For the S1 and S2 modes, thi << 8648 // empirical charge polarisation. 10414 // empirical charge polarisatio << 8649 // For the SL mode, the fluctuation in this width is calculated 10415 // For the SL mode, the fluctua << 8650 // from the curvature of the potential at scission as a function 10416 // from the curvature of the po << 8651 // of N/Z. This value is also used for the widths of S1 and S2. 10417 // of N/Z. This value is also u << 8652 10418 << 8653 10419 // Polarisation assumed for standard << 8654 // Polarisation assumed for standard I and standard II: 10420 // Z - Zucd = cpol (for A = const); << 8655 // Z - Zucd = cpol (for A = const); 10421 // from this we get (see remarks ab << 8656 // from this we get (see remarks above) 10422 // Z - Zucd = Acn/Ncn * cpol (for << 8657 // Z - Zucd = Acn/Ncn * cpol (for N = const) */ 10423 // << 8658 // 10424 CZ = (frldm(Z1UCD - 1.0, N1r + 1.0, beta << 8659 CZ = ( frldm( Z1UCD-1.0, N1r+1.0, beta1 ) + 10425 frldm(Z1UCD + 1.0, N1r - 1.0, beta << 8660 frldm( Z2UCD+1.0, N2r-1.0, beta2 ) + 10426 ecoul(Z1UCD - 1.0, N1r + 1.0, beta << 8661 frldm( Z1UCD+1.0, N1r-1.0, beta1 ) + 10427 ecoul(Z1UCD + 1.0, N1r - 1.0, beta << 8662 frldm( Z2UCD-1.0, N2r+1.0, beta2 ) + 10428 2.0 * ecoul(Z1UCD, N1r, beta1, Z2U << 8663 ecoul( Z1UCD-1.0, N1r+1.0, beta1, 10429 2.0 * frldm(Z2UCD, N2r, beta2)) * << 8664 Z2UCD+1.0, N2r-1.0, beta2, 2.0) + 10430 0.50; << 8665 ecoul( Z1UCD+1.0, N1r-1.0, beta1, 10431 // << 8666 Z2UCD-1.0, N2r+1.0, beta2, 2.0) - 10432 if (1.0 / A_levdens * E_scission_post < << 8667 2.0*ecoul( Z1UCD, N1r, beta1, Z2UCD, N2r, beta2, 2.0) - >> 8668 2.0*frldm( Z1UCD, N1r, beta1 ) - >> 8669 2.0*frldm( Z2UCD, N2r, beta2) ) * 0.50; >> 8670 // >> 8671 if(1.0/A_levdens*E_scission_post < 0.0) 10433 std::cout << "DSQRT 1 < 0" << A_levd 8672 std::cout << "DSQRT 1 < 0" << A_levdens << " " << E_scission_post << std::endl; 10434 << 8673 10435 if (0.50 * std::sqrt(1.0 / A_levdens * E << 8674 if(0.50 * std::sqrt(1.0/A_levdens*E_scission_post) / CZ < 0.0){ 10436 { << 10437 std::cout << "DSQRT 2 < 0 " << CZ << 8675 std::cout << "DSQRT 2 < 0 " << CZ << std::endl; 10438 std::cout << "This event was not con 8676 std::cout << "This event was not considered" << std::endl; 10439 goto fiss321; 8677 goto fiss321; 10440 } << 8678 } 10441 8679 10442 ZA1width = std::sqrt(0.5 * std::sqrt(1.0 << 8680 ZA1width = std::sqrt(0.5*std::sqrt(1.0/A_levdens*E_scission_post)/CZ); 10443 8681 10444 // Minimum width in N/Z imposed. << 8682 // Minimum width in N/Z imposed. 10445 // Value of minimum width taken from << 8683 // Value of minimum width taken from 235U(nth,f) data 10446 // sigma_Z(A=const) = 0.4 to 0.5 (f << 8684 // 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 << 8685 // sigma_N(Z=const) = 0.45 * A/Z (= 1.16 for 238U) 10448 // therefore: SIGZMIN = 1.16 << 8686 // therefore: SIGZMIN = 1.16 10449 // Physics; variation in N/Z for fix << 8687 // Physics; variation in N/Z for fixed A assumed. 10450 // Thermal energy at scission is re << 8688 // Thermal energy at scission is reduced by 10451 // pre-scission neutron evaporation << 8689 // pre-scission neutron evaporation" 10452 << 8690 10453 ZA1width = max(ZA1width, sigZmin); << 8691 ZA1width = max(ZA1width,sigZmin); 10454 << 8692 10455 if (imode == 1 && cpol1 != 0.0) << 8693 if(imode == 1 && cpol1 != 0.0){ 10456 { << 8694 // --- asymmetric fission, mode 1 */ 10457 // --- asymmetric fission, mod << 8695 G4int IS = 0; >> 8696 fiss2801: >> 8697 Z1rr = Z1UCD - cpol1 * A_scission/N_scission; >> 8698 // Z1r = DBLE(GaussHaz(k,sngl(Z1rr), sngl(ZA1width) )); >> 8699 // Z1r = Z1rr+G4AblaRandom::gaus(ZA1width);// >> 8700 Z1r =gausshaz(0,Z1rr,ZA1width); >> 8701 IS = IS +1; >> 8702 if(IS>100){ >> 8703 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED" << std::endl; >> 8704 Z1r = Z1rr; >> 8705 } >> 8706 if ((utilabs(Z1rr - Z1r) > 3.0*ZA1width) || Z1r<1.0)goto fiss2801; >> 8707 N1r = A1r - Z1r; >> 8708 }else{ >> 8709 if( imode == 2 && cpol2 != 0.0 ){ >> 8710 // --- asymmetric fission, mode 2 */ 10458 G4int IS = 0; 8711 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: 8712 fiss2802: 10483 Z1rr = Z1UCD - cpol2 * A_scissio << 8713 Z1rr = Z1UCD - cpol2 * A_scission/N_scission; 10484 // Z1r = Z1rr+G4AblaRandom::gaus << 8714 //Z1r = Z1rr+G4AblaRandom::gaus(ZA1width);// 10485 Z1r = gausshaz(0, Z1rr, ZA1width << 8715 Z1r = gausshaz(0,Z1rr,ZA1width); 10486 IS = IS + 1; << 8716 IS = IS +1; 10487 if (IS > 100) << 8717 if(IS>100){ 10488 { << 8718 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 << 8719 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 } 8720 } 10498 else << 8721 if( (utilabs(Z1rr - Z1r) > 3.0*ZA1width) || Z1r < 1.0 ) goto fiss2802; 10499 { << 8722 N1r = A1r - Z1r; 10500 // Otherwise do; /* Imode = << 8723 }else{ 10501 // 0 */ << 8724 // Otherwise do; /* Imode = 3 in any case; imode = 1 and 2 for CPOL = 0 */ 10502 // and symmetric case << 8725 // and symmetric case */ 10503 // We treat a simultaneo << 8726 // We treat a simultaneous split in Z and N to determine 10504 // polarisation */ << 8727 // polarisation */ 10505 << 8728 10506 re1 = frldm(Z1UCD - 1.0, N1r + 1 << 8729 re1 = frldm( Z1UCD-1.0, N1r+1.0, beta1 ) + 10507 ecoul(Z1UCD - 1.0, N1r + 1 << 8730 frldm( Z2UCD+1.0, N2r-1.0, beta2 ) + 10508 re2 = frldm(Z1UCD, N1r, beta1) + << 8731 ecoul( Z1UCD-1.0, N1r+1.0, beta1, 10509 ecoul(Z1UCD, N1r, beta1, Z << 8732 Z2UCD+1.0, N2r-1.0, beta2, d ); /* d = 2 fm */ 10510 re3 = frldm(Z1UCD + 1.0, N1r - 1 << 8733 re2 = frldm( Z1UCD, N1r, beta1) + 10511 ecoul(Z1UCD + 1.0, N1r - 1 << 8734 frldm( Z2UCD, N2r, beta2 ) + 10512 eps2 = (re1 - 2.0 * re2 + re3) / << 8735 ecoul( Z1UCD, N1r, beta1, 10513 eps1 = (re3 - re1) / 2.0; << 8736 Z2UCD, N2r, beta2, d ); /* d = 2 fm */ 10514 DN1_POL = -eps1 / (2.0 * eps2); << 8737 re3 = frldm( Z1UCD+1.0, N1r-1.0, beta1 ) + 10515 // << 8738 frldm( Z2UCD-1.0, N2r+1.0, beta2 ) + 10516 Z1rr = Z1UCD + DN1_POL; << 8739 ecoul( Z1UCD+1.0, N1r-1.0, beta1, 10517 << 8740 Z2UCD-1.0, N2r+1.0, beta2, d ); /* d = 2 fm */ 10518 // Polarization of Standar << 8741 eps2 = ( re1 - 2.0*re2 + re3 ) / 2.0; 10519 if (imode == 1) << 8742 eps1 = ( re3 - re1 ) / 2.0; 10520 { << 8743 DN1_POL = -eps1 / ( 2.0 * eps2 ); 10521 if (Z1rr > 50.0) << 8744 // 10522 { << 8745 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 8746 10537 G4int IS = 0; << 8747 // Polarization of Standard 1 from shell effects around 132Sn 10538 fiss2803: << 8748 if ( imode == 1 ){ 10539 // Z1r = Z1rr+G4AblaRandom::gaus << 8749 if ( Z1rr > 50.0 ){ 10540 Z1r = gausshaz(0, Z1rr, ZA1width << 8750 DN1_POL = DN1_POL - 0.6 * Uwash(E_scission_post,Ecrit,FREDSHELL,gamma); 10541 IS = IS + 1; << 8751 Z1rr = Z1UCD + DN1_POL; 10542 if (IS > 100) << 8752 if ( Z1rr < 50. ) Z1rr = 50.0; 10543 { << 8753 }else{ 10544 std::cout << "WARNING: GAUSS << 8754 DN1_POL = DN1_POL + 0.60 * Uwash(E_scission_post,Ecrit,FREDSHELL,gamma); 10545 "CALCULATING Z1 << 8755 Z1rr = Z1UCD + DN1_POL; 10546 << std::endl; << 8756 if ( Z1rr > 50.0 ) Z1rr = 50.0; 10547 Z1r = Z1rr; << 10548 } 8757 } >> 8758 } 10549 8759 10550 if ((utilabs(Z1rr - Z1r) > 3.0 * << 8760 G4int IS = 0; 10551 goto fiss2803; << 8761 fiss2803: 10552 N1r = A1r - Z1r; << 8762 //Z1r = Z1rr+G4AblaRandom::gaus(ZA1width); >> 8763 Z1r = gausshaz(0,Z1rr,ZA1width); >> 8764 IS = IS +1; >> 8765 if(IS>100){ >> 8766 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED" << std::endl; >> 8767 Z1r = Z1rr; 10553 } 8768 } 10554 } << 10555 8769 10556 // --------------------------------- << 8770 if( (utilabs(Z1rr - Z1r) > 3.0*ZA1width) || (Z1r < 1.0) )goto fiss2803; 10557 // Integer proton number with even-o << 8771 N1r = A1r - Z1r; 10558 // --------------------------------- << 8772 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 } 8773 } 10607 } << 8774 } >> 8775 >> 8776 // ------------------------------------------ >> 8777 // Integer proton number with even-odd effect >> 8778 // ------------------------------------------ >> 8779 even_odd(Z1r, r_e_o, i_help); >> 8780 >> 8781 z1 = G4double(i_help); >> 8782 z2 = dint( Z_scission ) - z1; >> 8783 N1 = dint( N1r ); >> 8784 N2 = dint( N_scission ) - N1; >> 8785 a1 = z1 + N1; >> 8786 a2 = z2 + N2; >> 8787 >> 8788 if( (z1 < 0) || (z2 < 0) || (a1 < 0) || (a2 < 0) ){ >> 8789 std::cout << " -------------------------------" << std::endl; >> 8790 std::cout << " Z, A, N : " << Z << " " << A << " " << N << std::endl; >> 8791 std::cout << z1 << " " << z2 << " " << a1 << " " << a2 << std::endl; >> 8792 std::cout << E_scission_post << " " << A_levdens << " " << CZ << std::endl; 10608 8793 10609 if (imode == 2) << 8794 std::cout << " -------------------------------" << std::endl; 10610 { << 8795 } 10611 // --- N appr. 86 */ << 8796 10612 if (N1mean > N * 0.5) << 8797 // ----------------------- 10613 { << 8798 // excitation energies ... 10614 /* 2. fragment is spherical */ << 8799 // ----------------------- 10615 beta1gs = ecld->beta2[idint(N1)] << 8800 // 10616 if (beta1 < beta1gs) << 8801 if( imode == 1 ){ 10617 beta1 = beta1gs; << 8802 // ---- N = 82 10618 E_defo = frldm(z1, N1, beta1) - << 8803 if( N1mean > N*0.50 ){ 10619 E1exc = E_scission_pre * a1 / A << 8804 // (a) 1. fragment is spherical and 2. fragment is deformed */ 10620 beta2gs = ecld->beta2[idint(N2)] << 8805 E_defo = 0.0; 10621 if (beta2 < beta2gs) << 8806 beta2gs = ecld->beta2[idint(N2)][idint(z2)]; 10622 beta2 = beta2gs; << 8807 if(beta2< beta2gs) beta2 = beta2gs; 10623 E_defo = frldm(z2, N2, beta2) - << 8808 E1exc = E_scission_pre * a1 / A + E_defo; 10624 E2exc = E_scission_pre * a2 / A << 8809 E_defo = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs ); >> 8810 E2exc = E_scission_pre * a2 / A + E_defo; >> 8811 }else{ >> 8812 // (b) 1. fragment is deformed and 2. fragment is spherical */ >> 8813 beta1gs = ecld->beta2[idint(N1)][idint(z1)]; >> 8814 if(beta1< beta1gs) beta1 = beta1gs; >> 8815 E_defo = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs ); >> 8816 E1exc = E_scission_pre * a1 / A + E_defo; >> 8817 E_defo = 0.0; >> 8818 E2exc = E_scission_pre * a2 / A + E_defo; 10625 } 8819 } 10626 else << 8820 } 10627 { << 8821 10628 /* 1. fragment is spherical */ << 8822 10629 beta2gs = ecld->beta2[idint(N2)] << 8823 if( imode == 2 ){ 10630 if (beta2 < beta2gs) << 8824 // --- N appr. 86 */ 10631 beta2 = beta2gs; << 8825 if( N1mean > N*0.5 ){ 10632 E_defo = frldm(z2, N2, beta2) - << 8826 /* 2. fragment is spherical */ 10633 E2exc = E_scission_pre * a2 / A << 8827 beta1gs = ecld->beta2[idint(N1)][idint(z1)]; 10634 beta1gs = ecld->beta2[idint(N1)] << 8828 if(beta1< beta1gs) beta1 = beta1gs; 10635 if (beta1 < beta1gs) << 8829 E_defo = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs ); 10636 beta1 = beta1gs; << 8830 E1exc = E_scission_pre * a1 / A + E_defo; 10637 E_defo = frldm(z1, N1, beta1) - << 8831 beta2gs = ecld->beta2[idint(N2)][idint(z2)]; 10638 E1exc = E_scission_pre * a1 / A << 8832 if(beta2< beta2gs) beta2 = beta2gs; >> 8833 E_defo = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs ); >> 8834 E2exc = E_scission_pre * a2 / A + E_defo; >> 8835 }else{ >> 8836 /* 1. fragment is spherical */ >> 8837 beta2gs = ecld->beta2[idint(N2)][idint(z2)]; >> 8838 if(beta2< beta2gs) beta2 = beta2gs; >> 8839 E_defo = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs ); >> 8840 E2exc = E_scission_pre * a2 / A + E_defo; >> 8841 beta1gs = ecld->beta2[idint(N1)][idint(z1)]; >> 8842 if(beta1< beta1gs) beta1 = beta1gs; >> 8843 E_defo = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs ); >> 8844 E1exc = E_scission_pre * a1 / A + E_defo; 10639 } 8845 } 10640 } << 8846 } 10641 8847 10642 if (imode == 3) << 8848 if( imode == 3 ){ 10643 { << 8849 // --- Symmetric fission channel 10644 // --- Symmetric fission channel << 8850 beta1gs = ecld->beta2[idint(N1)][idint(z1)]; 10645 beta1gs = ecld->beta2[idint(N1)][idi << 8851 if(beta1< beta1gs) beta1 = beta1gs; 10646 if (beta1 < beta1gs) << 8852 beta2gs = ecld->beta2[idint(N2)][idint(z2)]; 10647 beta1 = beta1gs; << 8853 if(beta2< beta2gs) beta2 = beta2gs; 10648 beta2gs = ecld->beta2[idint(N2)][idi << 8854 E_defo1 = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs ); 10649 if (beta2 < beta2gs) << 8855 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_ 8856 E1exc = E_scission_pre * a1 / A + E_defo1; 10654 E2exc = E_scission_pre * a2 / A + E_ 8857 E2exc = E_scission_pre * a2 / A + E_defo2; 10655 } << 8858 } >> 8859 10656 8860 10657 // pre-neutron-emission total kinetic e << 8861 // pre-neutron-emission total kinetic energy */ 10658 TKER = (z1 * z2 * 1.440) / (R0 * std::po << 8862 TKER = ( z1 * z2 * 1.440 ) / 10659 R0 * std::po << 8863 ( R0 * std::pow(a1,0.333330) * (1.0 + 2.0/3.0 * beta1 ) + 10660 // Pre-neutron-emission kinetic energie << 8864 R0 * std::pow(a2,0.333330) * (1.0 + 2.0/3.0 * beta2 ) + 2.0 ); >> 8865 // Pre-neutron-emission kinetic energies of the fragments */ 10661 EkinR1 = TKER * a2 / A; 8866 EkinR1 = TKER * a2 / A; 10662 EkinR2 = TKER * a1 / A; 8867 EkinR2 = TKER * a1 / A; 10663 v1 = std::sqrt(EkinR1 / a1) * 1.3887; << 8868 v1 = std::sqrt(EkinR1/a1) * 1.3887; 10664 v2 = std::sqrt(EkinR2 / a2) * 1.3887; << 8869 v2 = std::sqrt(EkinR2/a2) * 1.3887; 10665 8870 10666 // Extracted from Lang et al. Nucl. Phy << 8871 // Extracted from Lang et al. Nucl. Phys. A 345 (1980) 34 */ 10667 E1exc_sigma = 5.50; 8872 E1exc_sigma = 5.50; 10668 E2exc_sigma = 5.50; 8873 E2exc_sigma = 5.50; 10669 8874 10670 fis987: << 8875 fis987: 10671 // e1 = E1exc+G4AblaRandom::gaus(E1exc_s << 8876 //e1 = E1exc+G4AblaRandom::gaus(E1exc_sigma);// 10672 e1 = gausshaz(0, E1exc, E1exc_sigma); << 8877 e1 = gausshaz(0,E1exc,E1exc_sigma); 10673 if (e1 < 0.) << 8878 if(e1<0.)goto fis987; 10674 goto fis987; << 8879 fis988: 10675 fis988: << 8880 //e2 = E2exc+G4AblaRandom::gaus(E2exc_sigma);// 10676 // e2 = E2exc+G4AblaRandom::gaus(E2exc_s << 8881 e2 = gausshaz(0,E2exc,E2exc_sigma); 10677 e2 = gausshaz(0, E2exc, E2exc_sigma); << 8882 if(e2<0.)goto fis988; 10678 if (e2 < 0.) << 10679 goto fis988; << 10680 8883 10681 (*NbLam0_par) = NbLam0; 8884 (*NbLam0_par) = NbLam0; 10682 return; 8885 return; 10683 } 8886 } 10684 8887 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 8888 10749 double G4Abla::umass(G4double z, G4double n, << 8889 void G4Abla::even_odd(G4double r_origin,G4double r_even_odd,G4int &i_out) 10750 { 8890 { 10751 // liquid-drop mass, Myers & Swiatecki, << 8891 // Procedure to calculate I_OUT from R_IN in a way that 10752 // pure liquid drop, without pairing and << 8892 // on the average a flat distribution in R_IN results in a 10753 << 8893 // fluctuating distribution in I_OUT with an even-odd effect as 10754 // On input: Z nuclear charge of << 8894 // given by R_EVEN_ODD 10755 // N number of neutrons << 8895 10756 // beta deformation of nuc << 8896 // /* ------------------------------------------------------------ */ 10757 // On output: binding energy of nucleu << 8897 // /* EXAMPLES : */ 10758 << 8898 // /* ------------------------------------------------------------ */ 10759 G4double a = 0.0, fumass = 0.0; << 8899 // /* If R_EVEN_ODD = 0 : */ 10760 G4double alpha = 0.0; << 8900 // /* CEIL(R_IN) ---- */ 10761 G4double xcom = 0.0, xvs = 0.0, xe = 0.0 << 8901 // /* */ 10762 const G4double pi = 3.1416; << 8902 // /* R_IN -> */ 10763 << 8903 // /* (somewhere in between CEIL(R_IN) and FLOOR(R_IN)) */ */ 10764 a = n + z; << 8904 // /* */ 10765 alpha = (std::sqrt(5.0 / (4.0 * pi))) * << 8905 // /* FLOOR(R_IN) ---- --> I_OUT */ 10766 << 8906 // /* ------------------------------------------------------------ */ 10767 xcom = 1.0 - 1.7826 * ((a - 2.0 * z) / a << 8907 // /* If R_EVEN_ODD > 0 : */ 10768 // factor for asymmetry dependence of su << 8908 // /* The interval for the above treatment is */ 10769 xvs = -xcom * (15.4941 * a - 17.9439 * s << 8909 // /* larger for FLOOR(R_IN) = even and */ 10770 // sum of volume and surface energy << 8910 // /* smaller for FLOOR(R_IN) = odd */ 10771 xe = z * z * (0.7053 / (std::pow(a, 1.0 << 8911 // /* For R_EVEN_ODD < 0 : just opposite treatment */ 10772 fumass = xvs + xe; << 8912 // /* ------------------------------------------------------------ */ 10773 << 8913 10774 return fumass; << 8914 // /* ------------------------------------------------------------ */ >> 8915 // /* On input: R_ORIGIN nuclear charge (real number) */ >> 8916 // /* R_EVEN_ODD requested even-odd effect */ >> 8917 // /* Intermediate quantity: R_IN = R_ORIGIN + 0.5 */ >> 8918 // /* On output: I_OUT nuclear charge (integer) */ >> 8919 // /* ------------------------------------------------------------ */ >> 8920 >> 8921 // G4double R_ORIGIN,R_IN,R_EVEN_ODD,R_REST,R_HELP; >> 8922 G4double r_in = 0.0, r_rest = 0.0, r_help = 0.0; >> 8923 G4double r_floor = 0.0; >> 8924 G4double r_middle = 0.0; >> 8925 // G4int I_OUT,N_FLOOR; >> 8926 G4int n_floor = 0; >> 8927 >> 8928 r_in = r_origin + 0.5; >> 8929 r_floor = (G4double)((G4int)(r_in)); >> 8930 if (r_even_odd < 0.001) { >> 8931 i_out = (G4int)(r_floor); >> 8932 } >> 8933 else { >> 8934 r_rest = r_in - r_floor; >> 8935 r_middle = r_floor + 0.5; >> 8936 n_floor = (G4int)(r_floor); >> 8937 if (n_floor%2 == 0) { >> 8938 // even before modif. >> 8939 r_help = r_middle + (r_rest - 0.5) * (1.0 - r_even_odd); >> 8940 } >> 8941 else { >> 8942 // odd before modification >> 8943 r_help = r_middle + (r_rest - 0.5) * (1.0 + r_even_odd); >> 8944 } >> 8945 i_out = (G4int)(r_help); >> 8946 } >> 8947 } >> 8948 >> 8949 double G4Abla::umass(G4double z,G4double n,G4double beta) >> 8950 { >> 8951 // liquid-drop mass, Myers & Swiatecki, Lysekil, 1967 >> 8952 // pure liquid drop, without pairing and shell effects >> 8953 >> 8954 // On input: Z nuclear charge of nucleus >> 8955 // N number of neutrons in nucleus >> 8956 // beta deformation of nucleus >> 8957 // On output: binding energy of nucleus >> 8958 >> 8959 G4double a = 0.0, fumass = 0.0; >> 8960 G4double alpha = 0.0; >> 8961 G4double xcom = 0.0, xvs = 0.0, xe = 0.0; >> 8962 const G4double pi = 3.1416; >> 8963 >> 8964 a = n + z; >> 8965 alpha = ( std::sqrt(5.0/(4.0*pi)) ) * beta; >> 8966 >> 8967 xcom = 1.0 - 1.7826 * ((a - 2.0*z)/a)*((a - 2.0*z)/a); >> 8968 // factor for asymmetry dependence of surface and volume term >> 8969 xvs = - xcom * ( 15.4941 * a - >> 8970 17.9439 * std::pow(a,2.0/3.0) * (1.0+0.4*alpha*alpha) ); >> 8971 // sum of volume and surface energy >> 8972 xe = z*z * (0.7053/(std::pow(a,1.0/3.0)) * (1.0-0.2*alpha*alpha) - 1.1529/a); >> 8973 fumass = xvs + xe; >> 8974 >> 8975 return fumass; >> 8976 } >> 8977 >> 8978 >> 8979 double G4Abla::ecoul(G4double z1,G4double n1,G4double beta1,G4double z2,G4double n2,G4double beta2,G4double d) >> 8980 { >> 8981 // Coulomb potential between two nuclei >> 8982 // surfaces are in a distance of d >> 8983 // in a tip to tip configuration >> 8984 >> 8985 // approximate formulation >> 8986 // On input: Z1 nuclear charge of first nucleus >> 8987 // N1 number of neutrons in first nucleus >> 8988 // beta1 deformation of first nucleus >> 8989 // Z2 nuclear charge of second nucleus >> 8990 // N2 number of neutrons in second nucleus >> 8991 // beta2 deformation of second nucleus >> 8992 // d distance of surfaces of the nuclei >> 8993 >> 8994 // G4double Z1,N1,beta1,Z2,N2,beta2,d,ecoul; >> 8995 G4double fecoul = 0; >> 8996 G4double dtot = 0; >> 8997 const G4double r0 = 1.16; >> 8998 >> 8999 dtot = r0 * ( std::pow((z1+n1),1.0/3.0) * (1.0+0.6666667*beta1) >> 9000 + std::pow((z2+n2),1.0/3.0) * (1.0+0.6666667*beta2) ) + d; >> 9001 fecoul = z1 * z2 * 1.44 / dtot; >> 9002 >> 9003 return fecoul; >> 9004 } >> 9005 >> 9006 >> 9007 G4double G4Abla::Uwash(G4double E, G4double Ecrit,G4double Freduction,G4double gamma){ >> 9008 // E excitation energy >> 9009 // Ecrit critical pairing energy >> 9010 // Freduction reduction factor for shell washing in superfluid region >> 9011 G4double R_wash,uwash; >> 9012 if(E < Ecrit) >> 9013 R_wash = std::exp(-E * Freduction * gamma); >> 9014 else >> 9015 R_wash = std::exp(- Ecrit * Freduction * gamma -(E-Ecrit) * gamma); >> 9016 >> 9017 uwash = R_wash; >> 9018 return uwash; 10775 } 9019 } 10776 9020 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 9021 10792 // G4double Z1,N1,beta1,Z2,N2,beta2 << 9022 G4double G4Abla::frldm(G4double z,G4double n,G4double beta){ 10793 G4double fecoul = 0; << 10794 G4double dtot = 0; << 10795 const G4double r0 = 1.16; << 10796 9023 10797 dtot = r0 * (std::pow((z1 + n1), 1.0 / 3 << 9024 // Liquid-drop mass, Myers & Swiatecki, Lysekil, 1967 10798 std::pow((z2 + n2), 1.0 / 3 << 9025 // pure liquid drop, without pairing and shell effects 10799 d; << 9026 // 10800 fecoul = z1 * z2 * 1.44 / dtot; << 9027 // On input: Z nuclear charge of nucleus 10801 << 9028 // N number of neutrons in nucleus 10802 return fecoul; << 9029 // beta deformation of nucleus 10803 } << 9030 // On output: binding energy of nucleus 10804 << 9031 // The idea is to use FRLDM model for beta=0 and using Lysekil 10805 G4double G4Abla::Uwash(G4double E, G4double << 9032 // model to get the deformation energy 10806 { << 9033 10807 // E excitation energy << 9034 G4double a; 10808 // Ecrit critical pairing energy << 9035 a = n + z; 10809 // Freduction reduction factor for shel << 9036 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 } 9037 } 10819 9038 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 9039 10838 //****************************************** 9040 //********************************************************************** 10839 // * 9041 // * 10840 // * this function will calculate the liquid 9042 // * this function will calculate the liquid-drop nuclear mass for spheri 10841 // * configuration according to the preprint 9043 // * configuration according to the preprint NUCLEAR GROUND-STATE 10842 // * MASSES and DEFORMATIONS by P. M"oller e 9044 // * MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p. 10843 // * All constants are taken from this publi 9045 // * All constants are taken from this publication for consistency. 10844 // * 9046 // * 10845 // * Parameters: 9047 // * Parameters: 10846 // * a: nuclear mass number 9048 // * a: nuclear mass number 10847 // * z: nuclear charge 9049 // * z: nuclear charge 10848 // ***************************************** 9050 // ********************************************************************** 10849 9051 >> 9052 10850 G4double G4Abla::eflmac_profi(G4double ia, G 9053 G4double G4Abla::eflmac_profi(G4double ia, G4double iz) 10851 { 9054 { 10852 // CHANGED TO CALCULATE TOTAL BINDING EN << 9055 // CHANGED TO CALCULATE TOTAL BINDING ENERGY INSTEAD OF MASS EXCESS. 10853 // SWITCH FOR PAIRING INCLUDED AS WELL. << 9056 // SWITCH FOR PAIRING INCLUDED AS WELL. 10854 // BINDING = EFLMAC(IA,IZ,0,OPTSHP) << 9057 // BINDING = EFLMAC(IA,IZ,0,OPTSHP) 10855 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/E << 9058 // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EEX/FRLDM.C 10856 // A.J. 15.07.96 << 9059 // 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 9060 11011 if ((AFP - ZFP) == 0 && ZFP > 1) << 9061 // this function will calculate the liquid-drop nuclear mass for spheri 11012 { << 9062 // configuration according to the preprint NUCLEAR GROUND-STATE 11013 for (G4int I = 0; I <= AFP - 2; I++) << 9063 // MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p. 11014 { << 9064 // 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 9065 11125 if ((AFP >= 2) && (ZFP == 0)) << 9066 // Parameters: 11126 { << 9067 // a: nuclear mass number 11127 for (G4int I = 0; I <= AFP - 2; I++) << 9068 // 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 9069 11203 if ((AFP == 4) && (ZFP == 3)) << 9070 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 9071 11212 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9072 G4int in = 0; 11213 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9073 G4double z = 0.0, n = 0.0, a = 0.0, av = 0.0, as = 0.0; 11214 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9074 G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 = 0.0, b3 = 0.0; 11215 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9075 G4double ff = 0.0, ca = 0.0, w = 0.0, efl = 0.0; 11216 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9076 G4double r0 = 0.0, kf = 0.0, ks = 0.0; 11217 *ILOOP = *ILOOP + 1; << 9077 G4double kv = 0.0, rp = 0.0, ay = 0.0, aden = 0.0, x0 = 0.0, y0 = 0.0; 11218 } << 9078 G4double esq = 0.0, ael = 0.0, i = 0.0; 11219 if ((AFP == 5) && (ZFP == 2)) << 9079 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 9080 11235 if ((AFP == 5) && (ZFP == 3)) << 9081 // fundamental constants 11236 { << 9082 // electronic charge squared 11237 // 5Li -> 4He + p << 9083 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 9084 11251 if ((AFP == 6) && (ZFP == 4)) << 9085 // constants from considerations other than nucl. masses 11252 { << 9086 // electronic binding 11253 // 6Be -> 4He + 2p (velocity in two << 9087 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 9088 11351 unstable_tke(8.0, 6.0, 7.0, 5.0, VX, << 9089 // proton rms radius 11352 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9090 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 9091 11382 unstable_tke(9.0, 2.0, 8.0, 2.0, VX, << 9092 // nuclear radius constant 11383 BU_TAB_TEMP[*ILOOP][0] = 0.0; << 9093 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 9094 11518 unstable_tke(12.0, 8.0, 11.0, 7.0, V << 9095 // range of yukawa-plus-expon. potential 11519 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9096 ay = 0.68; 11520 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9097 11521 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9098 // range of yukawa function used to generate 11522 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9099 // nuclear charge distribution 11523 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9100 aden= 0.70; 11524 *ILOOP = *ILOOP + 1; << 9101 11525 VX = *VP1X; << 9102 // wigner constant 11526 VY = *VP1Y; << 9103 w = 30.0; 11527 VZ = *VP1Z; << 9104 11528 << 9105 // adjusted parameters 11529 unstable_tke(11.0, 7.0, 10.0, 6.0, V << 9106 // volume energy 11530 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9107 av = 16.00126; 11531 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9108 11532 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9109 // volume asymmetry 11533 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9110 kv = 1.92240; 11534 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9111 11535 *ILOOP = *ILOOP + 1; << 9112 // surface energy 11536 VX = *VP1X; << 9113 as = 21.18466; 11537 VY = *VP1Y; << 9114 11538 VZ = *VP1Z; << 9115 // surface asymmetry 11539 } << 9116 ks = 2.345; 11540 if ((AFP == 15) && (ZFP == 9)) << 9117 // a^0 constant 11541 { << 9118 a0 = 2.615; 11542 // 15F -> 14O + p -> << 9119 11543 AFP = 14; << 9120 // charge asymmetry 11544 ZFP = 8; << 9121 ca = 0.10289; 11545 // PEVA = PEVA + 1; << 9122 11546 IOUNSTABLE = 1; << 9123 z = G4double(iz); 11547 unstable_tke(15.0, 9.0, 14.0, 8.0, V << 9124 a = G4double(ia); 11548 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9125 in = ia - iz; 11549 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9126 n = G4double(in); 11550 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9127 11551 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9128 11552 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9129 c1 = 3.0/5.0*esq/r0; 11553 *ILOOP = *ILOOP + 1; << 9130 c4 = 5.0/4.0*std::pow((3.0/(2.0*pi)),(2.0/3.0)) * c1; 11554 VX = *VP1X; << 9131 kf = std::pow((9.0*pi*z/(4.0*a)),(1.0/3.0))/r0; 11555 VY = *VP1Y; << 9132 11556 VZ = *VP1Z; << 9133 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 } << 9134 11558 << 9135 i = (n-z)/a; 11559 if ((AFP == 16) && (ZFP == 9)) << 9136 11560 { << 9137 x0 = r0 * std::pow(a,(1.0/3.0)) / ay; 11561 // 16F -> 15O + p -> << 9138 y0 = r0 * std::pow(a,(1.0/3.0)) / aden; 11562 AFP = 15; << 9139 11563 ZFP = 8; << 9140 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; << 9141 11565 IOUNSTABLE = 1; << 9142 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 << 9143 - 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; << 9144 + 7.0/(2.0 * std::pow(y0,3))) * std::exp(-2.0*y0)); 11568 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9145 11569 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9146 // now calculation of total binding energy 11570 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9147 11571 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9148 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; << 9149 + 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; << 9150 + ff*std::pow(z,2)/a -ca*(n-z) - ael * std::pow(z,(2.39e0)); 11574 VY = *VP1Y; << 9151 11575 VZ = *VP1Z; << 9152 efl = efl + w*utilabs(i); 11576 } << 9153 11577 << 9154 eflmacResult = efl; 11578 if ((AFP == 16) && (ZFP == 10)) << 9155 11579 { << 9156 return eflmacResult; 11580 // 16Ne -> 14O + 2p -> << 9157 } 11581 AFP = 14; << 9158 // 11582 ZFP = 8; << 9159 // 11583 // PEVA = PEVA + 2; << 9160 // 11584 IOUNSTABLE = 1; << 9161 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, << 9162 // 11586 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9163 G4int INMIN,INMAX,NDIF=0,IMEM; 11587 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9164 G4int NEVA=0,PEVA=0; 11588 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9165 G4double VP2X,VP2Y,VP2Z; 11589 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9166 11590 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9167 *AFPNEW = AFP; 11591 *ILOOP = *ILOOP + 1; << 9168 *ZFPNEW = ZFP; 11592 VX = *VP1X; << 9169 IOUNSTABLE = 0; 11593 VY = *VP1Y; << 9170 *ILOOP = 0; 11594 VZ = *VP1Z; << 9171 IMEM = 0; 11595 << 9172 for(G4int i=0;i<200;i++){ 11596 unstable_tke(15.0, 9.0, 14.0, 8.0, V << 9173 BU_TAB_TEMP[i][0] = 0.0; 11597 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9174 BU_TAB_TEMP[i][1] = 0.0; 11598 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9175 BU_TAB_TEMP[i][2] = 0.0; 11599 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9176 BU_TAB_TEMP[i][3] = 0.0; 11600 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9177 BU_TAB_TEMP[i][4] = 0.0; 11601 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9178 //BU_TAB_TEMP[i][5] = 0.0; 11602 *ILOOP = *ILOOP + 1; << 9179 } 11603 VX = *VP1X; << 9180 *VP1X = 0.0; 11604 VY = *VP1Y; << 9181 *VP1Y = 0.0; 11605 VZ = *VP1Z; << 9182 *VP1Z = 0.0; 11606 } << 9183 11607 if ((AFP == 18) && (ZFP == 11)) << 9184 if(AFP==0 && ZFP==0){ 11608 { << 9185 // PRINT*,'UNSTABLE NUCLEI, AFP=0, ZFP=0' 11609 // 18Na -> 17Ne + p -> << 9186 return; 11610 AFP = 17; << 9187 } 11611 ZFP = 10; << 9188 if((AFP==1 && ZFP==0) || 11612 // PEVA = PEVA + 1; << 9189 (AFP==1 && ZFP==1) || 11613 IOUNSTABLE = 1; << 9190 (AFP==2 && ZFP==1) || 11614 unstable_tke(18.0, 11.0, 17.0, 10.0, << 9191 (AFP==3 && ZFP==1) || 11615 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9192 (AFP==3 && ZFP==2) || 11616 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9193 (AFP==4 && ZFP==2) || 11617 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9194 (AFP==6 && ZFP==2) || 11618 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9195 (AFP==8 && ZFP==2) 11619 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9196 ){ 11620 *ILOOP = *ILOOP + 1; << 9197 *VP1X = VX; 11621 VX = *VP1X; << 9198 *VP1Y = VY; 11622 VY = *VP1Y; << 9199 *VP1Z = VZ; 11623 VZ = *VP1Z; << 9200 return; 11624 } << 9201 } 11625 if ((AFP == 19) && (ZFP == 11)) << 9202 11626 { << 9203 if ((AFP-ZFP)==0 && ZFP>1){ 11627 // 19Na -> 18Ne + p -> << 9204 for(G4int I = 0;I<=AFP-2;I++){ 11628 AFP = 18; << 9205 unstable_tke(G4double(AFP-I),G4double(AFP-I),G4double(AFP-I-1),G4double(AFP-I-1),VX,VY,VZ, 11629 ZFP = 10; << 9206 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); 11630 // PEVA = PEVA + 1; << 9207 BU_TAB_TEMP[*ILOOP][0] = 1.0; 11631 IOUNSTABLE = 1; << 9208 BU_TAB_TEMP[*ILOOP][1] = 1.0; 11632 unstable_tke(19.0, 11.0, 18.0, 10.0, << 9209 BU_TAB_TEMP[*ILOOP][2] = VP2X; 11633 BU_TAB_TEMP[*ILOOP][0] = 1.0; << 9210 BU_TAB_TEMP[*ILOOP][3] = VP2Y; 11634 BU_TAB_TEMP[*ILOOP][1] = 1.0; << 9211 BU_TAB_TEMP[*ILOOP][4] = VP2Z; 11635 BU_TAB_TEMP[*ILOOP][2] = VP2X; << 9212 *ILOOP = *ILOOP + 1; 11636 BU_TAB_TEMP[*ILOOP][3] = VP2Y; << 9213 VX = *VP1X; 11637 BU_TAB_TEMP[*ILOOP][4] = VP2Z; << 9214 VY = *VP1Y; 11638 *ILOOP = *ILOOP + 1; << 9215 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 } 9216 } >> 9217 // PEVA = PEVA + ZFP - 1; >> 9218 AFP = 1; >> 9219 ZFP = 1; >> 9220 IOUNSTABLE = 1; >> 9221 } >> 9222 // >> 9223 //*** Find the limits nucleus is bound : >> 9224 isostab_lim(ZFP,&INMIN,&INMAX); >> 9225 NDIF = AFP - ZFP; >> 9226 if(NDIF<INMIN){ >> 9227 // Proton unbound >> 9228 IOUNSTABLE = 1; >> 9229 for(G4int I = 1;I<=10; I++){ >> 9230 isostab_lim(ZFP-I,&INMIN,&INMAX); >> 9231 if(INMIN<=NDIF){ >> 9232 IMEM = I; >> 9233 ZFP = ZFP - I; >> 9234 AFP = ZFP + NDIF; >> 9235 PEVA = I; >> 9236 goto u10; >> 9237 } >> 9238 } >> 9239 // >> 9240 u10: >> 9241 for(G4int I = 0;I< IMEM;I++){ >> 9242 unstable_tke(G4double(NDIF+ZFP+IMEM-I), >> 9243 G4double(ZFP+IMEM-I), >> 9244 G4double(NDIF+ZFP+IMEM-I-1), >> 9245 G4double(ZFP+IMEM-I-1), >> 9246 VX,VY,VZ, >> 9247 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9248 BU_TAB_TEMP[I+1+*ILOOP][0] = 1.0; >> 9249 BU_TAB_TEMP[I+1+*ILOOP][1] = 1.0; >> 9250 BU_TAB_TEMP[I+1+*ILOOP][2] = VP2X; >> 9251 BU_TAB_TEMP[I+1+*ILOOP][3] = VP2Y; >> 9252 BU_TAB_TEMP[I+1+*ILOOP][4] = VP2Z; >> 9253 VX = *VP1X; >> 9254 VY = *VP1Y; >> 9255 VZ = *VP1Z; >> 9256 } >> 9257 *ILOOP = *ILOOP + IMEM; 11699 9258 11700 AFP = 3; << 9259 } 11701 ZFP = 2; << 9260 if(NDIF>INMAX){ >> 9261 // Neutron unbound >> 9262 NEVA = NDIF - INMAX; >> 9263 AFP = ZFP + INMAX; 11702 IOUNSTABLE = 1; 9264 IOUNSTABLE = 1; 11703 } << 9265 for(G4int I = 0;I<NEVA;I++){ 11704 // << 9266 unstable_tke(G4double(ZFP+NDIF-I), 11705 *AFPNEW = AFP; << 9267 G4double(ZFP), 11706 *ZFPNEW = ZFP; << 9268 G4double(ZFP+NDIF-I-1), 11707 return; << 9269 G4double(ZFP), >> 9270 VX,VY,VZ, >> 9271 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9272 >> 9273 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9274 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9275 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9276 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9277 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9278 *ILOOP = *ILOOP + 1; >> 9279 VX = *VP1X; >> 9280 VY = *VP1Y; >> 9281 VZ = *VP1Z; >> 9282 } >> 9283 } >> 9284 >> 9285 if ((AFP>=2) && (ZFP==0)){ >> 9286 for(G4int I = 0;I<= AFP-2;I++){ >> 9287 unstable_tke(G4double(AFP-I),G4double(ZFP), >> 9288 G4double(AFP-I-1),G4double(ZFP), >> 9289 VX,VY,VZ, >> 9290 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9291 >> 9292 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9293 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9294 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9295 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9296 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9297 *ILOOP = *ILOOP + 1; >> 9298 VX = *VP1X; >> 9299 VY = *VP1Y; >> 9300 VZ = *VP1Z; >> 9301 } >> 9302 >> 9303 //NEVA = NEVA + (AFP - 1); >> 9304 AFP = 1; >> 9305 ZFP = 0; >> 9306 IOUNSTABLE = 1; >> 9307 } >> 9308 if (AFP<ZFP){ >> 9309 std::cout << "WARNING - BU UNSTABLE: AF < ZF" << std::endl; >> 9310 AFP = 0; >> 9311 ZFP = 0; >> 9312 IOUNSTABLE = 1; >> 9313 } >> 9314 if ((AFP>=4) && (ZFP==1)){ >> 9315 // Heavy residue is treated as 3H and the rest of mass is emitted as neutrons: >> 9316 for(G4int I = 0; I<AFP-3;I++){ >> 9317 unstable_tke(G4double(AFP-I),G4double(ZFP), >> 9318 G4double(AFP-I-1),G4double(ZFP), >> 9319 VX,VY,VZ, >> 9320 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9321 >> 9322 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9323 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9324 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9325 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9326 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9327 *ILOOP = *ILOOP + 1; >> 9328 VX = *VP1X; >> 9329 VY = *VP1Y; >> 9330 VZ = *VP1Z; >> 9331 } >> 9332 >> 9333 // NEVA = NEVA + (AFP - 3); >> 9334 AFP = 3; >> 9335 ZFP = 1; >> 9336 IOUNSTABLE = 1; >> 9337 } >> 9338 >> 9339 if ((AFP==4) && (ZFP==3)){ >> 9340 // 4Li -> 3He + p -> >> 9341 AFP = 3; >> 9342 ZFP = 2; >> 9343 //PEVA = PEVA + 1; >> 9344 IOUNSTABLE = 1; >> 9345 unstable_tke(4.0,3.0,3.0,2.0, >> 9346 VX,VY,VZ, >> 9347 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9348 >> 9349 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9350 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9351 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9352 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9353 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9354 *ILOOP = *ILOOP + 1; >> 9355 } >> 9356 if ((AFP==5) && (ZFP==2)){ >> 9357 // 5He -> 4He + n -> >> 9358 AFP = 4; >> 9359 ZFP = 2; >> 9360 //NEVA = NEVA + 1; >> 9361 IOUNSTABLE = 1; >> 9362 unstable_tke(5.0,2.0,4.0,2.0, >> 9363 VX,VY,VZ, >> 9364 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9365 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9366 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9367 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9368 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9369 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9370 *ILOOP = *ILOOP + 1; >> 9371 } >> 9372 >> 9373 if ((AFP==5) && (ZFP==3)){ >> 9374 // 5Li -> 4He + p >> 9375 AFP = 4; >> 9376 ZFP = 2; >> 9377 //PEVA = PEVA + 1; >> 9378 IOUNSTABLE = 1; >> 9379 unstable_tke(5.0,3.0,4.0,2.0, >> 9380 VX,VY,VZ, >> 9381 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9382 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9383 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9384 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9385 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9386 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9387 *ILOOP = *ILOOP + 1; >> 9388 } >> 9389 >> 9390 if ((AFP==6) && (ZFP==4)){ >> 9391 // 6Be -> 4He + 2p (velocity in two steps: 6Be->5Li->4He) >> 9392 AFP = 4; >> 9393 ZFP = 2; >> 9394 //PEVA = PEVA + 2; >> 9395 IOUNSTABLE = 1; >> 9396 // 6Be -> 5Li + p >> 9397 unstable_tke(6.0,4.0,5.0,3.0, >> 9398 VX,VY,VZ, >> 9399 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9400 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9401 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9402 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9403 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9404 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9405 *ILOOP = *ILOOP + 1; >> 9406 VX = *VP1X; >> 9407 VY = *VP1Y; >> 9408 VZ = *VP1Z; >> 9409 >> 9410 // 5Li -> 4He + p >> 9411 unstable_tke(5.0,3.0,4.0,2.0, >> 9412 VX,VY,VZ, >> 9413 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9414 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9415 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9416 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9417 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9418 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9419 *ILOOP = *ILOOP + 1; >> 9420 } >> 9421 if ((AFP==7)&&(ZFP==2)){ >> 9422 // 7He -> 6He + n >> 9423 AFP = 6; >> 9424 ZFP = 2; >> 9425 //NEVA = NEVA + 1; >> 9426 IOUNSTABLE = 1; >> 9427 unstable_tke(7.0,2.0,6.0,2.0, >> 9428 VX,VY,VZ, >> 9429 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9430 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9431 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9432 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9433 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9434 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9435 *ILOOP = *ILOOP + 1; >> 9436 } >> 9437 >> 9438 if ((AFP==7) && (ZFP==5)){ >> 9439 // 7B -> 6Be + p -> 4He + 3p >> 9440 for(int I = 0; I<= AFP-5;I++){ >> 9441 unstable_tke(double(AFP-I),double(ZFP-I), >> 9442 double(AFP-I-1),double(ZFP-I-1), >> 9443 VX,VY,VZ, >> 9444 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9445 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9446 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9447 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9448 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9449 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9450 *ILOOP = *ILOOP + 1; >> 9451 VX = *VP1X; >> 9452 VY = *VP1Y; >> 9453 VZ = *VP1Z; >> 9454 } >> 9455 >> 9456 AFP = 4; >> 9457 ZFP = 2; >> 9458 //PEVA = PEVA + 3; >> 9459 IOUNSTABLE = 1; >> 9460 } >> 9461 if ((AFP==8) && (ZFP==4)){ >> 9462 // 8Be -> 4He + 4He >> 9463 AFP = 4; >> 9464 ZFP = 2; >> 9465 IOUNSTABLE = 1; >> 9466 unstable_tke(8.0,4.0,4.0,2.0, >> 9467 VX,VY,VZ, >> 9468 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9469 BU_TAB_TEMP[*ILOOP][0] = 2.0; >> 9470 BU_TAB_TEMP[*ILOOP][1] = 4.0; >> 9471 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9472 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9473 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9474 *ILOOP = *ILOOP + 1; >> 9475 } >> 9476 if ((AFP==8) && (ZFP==6)){ >> 9477 // 8C -> 2p + 6Be >> 9478 AFP = 6; >> 9479 ZFP = 4; >> 9480 //PEVA = PEVA + 2; >> 9481 IOUNSTABLE = 1; >> 9482 >> 9483 unstable_tke(8.0,6.0,7.0,5.0, >> 9484 VX,VY,VZ, >> 9485 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9486 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9487 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9488 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9489 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9490 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9491 *ILOOP = *ILOOP + 1; >> 9492 VX = *VP1X; >> 9493 VY = *VP1Y; >> 9494 VZ = *VP1Z; >> 9495 >> 9496 unstable_tke(7.0,5.0,6.0,4.0, >> 9497 VX,VY,VZ, >> 9498 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9499 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9500 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9501 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9502 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9503 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9504 *ILOOP = *ILOOP + 1; >> 9505 VX = *VP1X; >> 9506 VY = *VP1Y; >> 9507 VZ = *VP1Z; >> 9508 } >> 9509 >> 9510 if((AFP==9) && (ZFP==2)){ >> 9511 // 9He -> 8He + n >> 9512 AFP = 8; >> 9513 ZFP = 2; >> 9514 //NEVA = NEVA + 1; >> 9515 IOUNSTABLE = 1; >> 9516 >> 9517 unstable_tke(9.0,2.0,8.0,2.0, >> 9518 VX,VY,VZ, >> 9519 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9520 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9521 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9522 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9523 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9524 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9525 *ILOOP = *ILOOP + 1; >> 9526 VX = *VP1X; >> 9527 VY = *VP1Y; >> 9528 VZ = *VP1Z; >> 9529 } >> 9530 >> 9531 if((AFP==9) && (ZFP==5)){ >> 9532 // 9B -> 4He + 4He + p -> >> 9533 AFP = 4; >> 9534 ZFP = 2; >> 9535 //PEVA = PEVA + 1; >> 9536 IOUNSTABLE = 1; >> 9537 unstable_tke(9.0,5.0,8.0,4.0, >> 9538 VX,VY,VZ, >> 9539 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9540 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9541 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9542 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9543 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9544 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9545 *ILOOP = *ILOOP + 1; >> 9546 VX = *VP1X; >> 9547 VY = *VP1Y; >> 9548 VZ = *VP1Z; >> 9549 >> 9550 unstable_tke(8.0,4.0,4.0,2.0, >> 9551 VX,VY,VZ, >> 9552 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9553 BU_TAB_TEMP[*ILOOP][0] = 2.0; >> 9554 BU_TAB_TEMP[*ILOOP][1] = 4.0; >> 9555 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9556 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9557 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9558 *ILOOP = *ILOOP + 1; >> 9559 VX = *VP1X; >> 9560 VY = *VP1Y; >> 9561 VZ = *VP1Z; >> 9562 } >> 9563 >> 9564 if((AFP==10) && (ZFP==2)){ >> 9565 // 10He -> 8He + 2n >> 9566 AFP = 8; >> 9567 ZFP = 2; >> 9568 //NEVA = NEVA + 2; >> 9569 IOUNSTABLE = 1; >> 9570 // 10He -> 9He + n >> 9571 unstable_tke(10.0,2.0,9.0,2.0, >> 9572 VX,VY,VZ, >> 9573 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9574 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9575 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9576 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9577 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9578 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9579 *ILOOP = *ILOOP + 1; >> 9580 VX = *VP1X; >> 9581 VY = *VP1Y; >> 9582 VZ = *VP1Z; >> 9583 >> 9584 // 9He -> 8He + n >> 9585 unstable_tke(9.0,2.0,8.0,2.0, >> 9586 VX,VY,VZ, >> 9587 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9588 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9589 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9590 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9591 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9592 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9593 *ILOOP = *ILOOP + 1; >> 9594 VX = *VP1X; >> 9595 VY = *VP1Y; >> 9596 VZ = *VP1Z; >> 9597 } >> 9598 if ((AFP==10) && (ZFP==3)){ >> 9599 // 10Li -> 9Li + n -> >> 9600 AFP = 9; >> 9601 ZFP = 3; >> 9602 //NEVA = NEVA + 1; >> 9603 IOUNSTABLE = 1; >> 9604 unstable_tke(10.0,3.0,9.0,3.0, >> 9605 VX,VY,VZ, >> 9606 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9607 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9608 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9609 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9610 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9611 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9612 *ILOOP = *ILOOP + 1; >> 9613 VX = *VP1X; >> 9614 VY = *VP1Y; >> 9615 VZ = *VP1Z; >> 9616 } >> 9617 if ((AFP==10) && (ZFP==7)){ >> 9618 // 10N -> 9C + p -> >> 9619 AFP = 9; >> 9620 ZFP = 6; >> 9621 //PEVA = PEVA + 1; >> 9622 IOUNSTABLE = 1; >> 9623 unstable_tke(10.0,7.0,9.0,6.0, >> 9624 VX,VY,VZ, >> 9625 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9626 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9627 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9628 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9629 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9630 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9631 *ILOOP = *ILOOP + 1; >> 9632 VX = *VP1X; >> 9633 VY = *VP1Y; >> 9634 VZ = *VP1Z; >> 9635 } >> 9636 >> 9637 if((AFP==11) && (ZFP==7)){ >> 9638 // 11N -> 10C + p -> >> 9639 AFP = 10; >> 9640 ZFP = 6; >> 9641 //PEVA = PEVA + 1; >> 9642 IOUNSTABLE = 1; >> 9643 unstable_tke(11.0,7.0,10.0,6.0, >> 9644 VX,VY,VZ, >> 9645 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9646 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9647 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9648 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9649 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9650 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9651 *ILOOP = *ILOOP + 1; >> 9652 VX = *VP1X; >> 9653 VY = *VP1Y; >> 9654 VZ = *VP1Z; >> 9655 } >> 9656 if ((AFP==12) && (ZFP==8)){ >> 9657 // 12O -> 10C + 2p -> >> 9658 AFP = 10; >> 9659 ZFP = 6; >> 9660 //PEVA = PEVA + 2; >> 9661 IOUNSTABLE = 1; >> 9662 >> 9663 unstable_tke(12.0,8.0,11.0,7.0, >> 9664 VX,VY,VZ, >> 9665 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9666 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9667 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9668 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9669 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9670 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9671 *ILOOP = *ILOOP + 1; >> 9672 VX = *VP1X; >> 9673 VY = *VP1Y; >> 9674 VZ = *VP1Z; >> 9675 >> 9676 unstable_tke(11.0,7.0,10.0,6.0, >> 9677 VX,VY,VZ, >> 9678 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9679 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9680 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9681 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9682 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9683 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9684 *ILOOP = *ILOOP + 1; >> 9685 VX = *VP1X; >> 9686 VY = *VP1Y; >> 9687 VZ = *VP1Z; >> 9688 } >> 9689 if ((AFP==15) && (ZFP==9)){ >> 9690 // 15F -> 14O + p -> >> 9691 AFP = 14; >> 9692 ZFP = 8; >> 9693 //PEVA = PEVA + 1; >> 9694 IOUNSTABLE = 1; >> 9695 unstable_tke(15.0,9.0,14.0,8.0, >> 9696 VX,VY,VZ, >> 9697 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9698 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9699 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9700 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9701 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9702 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9703 *ILOOP = *ILOOP + 1; >> 9704 VX = *VP1X; >> 9705 VY = *VP1Y; >> 9706 VZ = *VP1Z; >> 9707 } >> 9708 >> 9709 if ((AFP==16) && (ZFP==9)){ >> 9710 // 16F -> 15O + p -> >> 9711 AFP = 15; >> 9712 ZFP = 8; >> 9713 //PEVA = PEVA + 1; >> 9714 IOUNSTABLE = 1; >> 9715 unstable_tke(16.0,9.0,15.0,8.0, >> 9716 VX,VY,VZ, >> 9717 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9718 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9719 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9720 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9721 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9722 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9723 *ILOOP = *ILOOP + 1; >> 9724 VX = *VP1X; >> 9725 VY = *VP1Y; >> 9726 VZ = *VP1Z; >> 9727 } >> 9728 >> 9729 if ((AFP==16) && (ZFP==10)){ >> 9730 // 16Ne -> 14O + 2p -> >> 9731 AFP = 14; >> 9732 ZFP = 8; >> 9733 //PEVA = PEVA + 2; >> 9734 IOUNSTABLE = 1; >> 9735 unstable_tke(16.0,10.0,15.0,9.0, >> 9736 VX,VY,VZ, >> 9737 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9738 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9739 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9740 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9741 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9742 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9743 *ILOOP = *ILOOP + 1; >> 9744 VX = *VP1X; >> 9745 VY = *VP1Y; >> 9746 VZ = *VP1Z; >> 9747 >> 9748 unstable_tke(15.0,9.0,14.0,8.0, >> 9749 VX,VY,VZ, >> 9750 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9751 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9752 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9753 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9754 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9755 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9756 *ILOOP = *ILOOP + 1; >> 9757 VX = *VP1X; >> 9758 VY = *VP1Y; >> 9759 VZ = *VP1Z; >> 9760 } >> 9761 if((AFP==18) && (ZFP==11)){ >> 9762 // 18Na -> 17Ne + p -> >> 9763 AFP = 17; >> 9764 ZFP = 10; >> 9765 //PEVA = PEVA + 1; >> 9766 IOUNSTABLE = 1; >> 9767 unstable_tke(18.0,11.0,17.0,10.0, >> 9768 VX,VY,VZ, >> 9769 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9770 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9771 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9772 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9773 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9774 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9775 *ILOOP = *ILOOP + 1; >> 9776 VX = *VP1X; >> 9777 VY = *VP1Y; >> 9778 VZ = *VP1Z; >> 9779 } >> 9780 if((AFP==19) && (ZFP==11)){ >> 9781 // 19Na -> 18Ne + p -> >> 9782 AFP = 18; >> 9783 ZFP = 10; >> 9784 //PEVA = PEVA + 1; >> 9785 IOUNSTABLE = 1; >> 9786 unstable_tke(19.0,11.0,18.0,10.0, >> 9787 VX,VY,VZ, >> 9788 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9789 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9790 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9791 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9792 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9793 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9794 *ILOOP = *ILOOP + 1; >> 9795 VX = *VP1X; >> 9796 VY = *VP1Y; >> 9797 VZ = *VP1Z; >> 9798 } >> 9799 if (ZFP>=4 && (AFP-ZFP)==1){ >> 9800 // Heavy residue is treated as 3He >> 9801 NEVA = AFP - 3; >> 9802 PEVA = ZFP - 2; >> 9803 >> 9804 for(G4int I = 0;I< NEVA;I++){ >> 9805 unstable_tke(G4double(AFP-I),G4double(ZFP), >> 9806 G4double(AFP-I-1),G4double(ZFP), >> 9807 VX,VY,VZ, >> 9808 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9809 BU_TAB_TEMP[*ILOOP][0] = 0.0; >> 9810 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9811 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9812 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9813 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9814 *ILOOP = *ILOOP + 1; >> 9815 VX = *VP1X; >> 9816 VY = *VP1Y; >> 9817 VZ = *VP1Z; >> 9818 } >> 9819 for( G4int I = 0;I<PEVA;I++){ >> 9820 unstable_tke(G4double(AFP-NEVA-I),G4double(ZFP-I), >> 9821 G4double(AFP-NEVA-I-1),G4double(ZFP-I-1), >> 9822 VX,VY,VZ, >> 9823 &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z); >> 9824 BU_TAB_TEMP[*ILOOP][0] = 1.0; >> 9825 BU_TAB_TEMP[*ILOOP][1] = 1.0; >> 9826 BU_TAB_TEMP[*ILOOP][2] = VP2X; >> 9827 BU_TAB_TEMP[*ILOOP][3] = VP2Y; >> 9828 BU_TAB_TEMP[*ILOOP][4] = VP2Z; >> 9829 *ILOOP = *ILOOP + 1; >> 9830 VX = *VP1X; >> 9831 VY = *VP1Y; >> 9832 VZ = *VP1Z; >> 9833 } >> 9834 >> 9835 AFP = 3; >> 9836 ZFP = 2; >> 9837 IOUNSTABLE = 1; >> 9838 } >> 9839 // >> 9840 *AFPNEW = AFP; >> 9841 *ZFPNEW = ZFP; >> 9842 return; 11708 } 9843 } 11709 9844 11710 // 9845 // 11711 // 9846 // 11712 void G4Abla::unstable_tke(G4double ain, << 9847 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, << 9848 // 11714 G4double anew, << 9849 G4double EKIN_P1=0.,ekin_tot=0.; 11715 G4double znew, << 9850 G4double PX1,PX2,PY1,PY2,PZ1,PZ2,PTOT; 11716 G4double vxin, << 9851 G4double RNDT,CTET1,STET1,RNDP,PHI1,ETOT_P1,ETOT_P2; 11717 G4double vyin, << 9852 G4double MASS,MASS1,MASS2; 11718 G4double vzin, << 9853 G4double vxout=0.,vyout=0.,vzout=0.; 11719 G4double* v1x, << 9854 G4int iain,izin,ianew,iznew,inin,innew; 11720 G4double* v1y, << 9855 // 11721 G4double* v1z, << 9856 G4double C = 29.97924580;// cm/ns 11722 G4double* v2x, << 9857 G4double AMU = 931.4940; // MeV/C^2 11723 G4double* v2y, << 9858 // 11724 G4double* v2z) << 9859 iain = idnint(ain); 11725 { << 9860 izin = idnint(zin); 11726 // << 9861 inin = iain - izin; 11727 G4double EKIN_P1 = 0., ekin_tot = 0.; << 9862 ianew = idnint(anew); 11728 G4double PX1, PX2, PY1, PY2, PZ1, PZ2, P << 9863 iznew = idnint(znew); 11729 G4double RNDT, CTET1, STET1, RNDP, PHI1, << 9864 innew = ianew - iznew; 11730 G4double MASS, MASS1, MASS2; << 9865 // 11731 G4double vxout = 0., vyout = 0., vzout = << 9866 if(ain==0)return; 11732 G4int iain, izin, ianew, iznew, inin, in << 9867 // 11733 // << 9868 if(izin>12){ 11734 G4double C = 29.97924580; // cm/ << 9869 mglms(ain,zin,3,&MASS); 11735 G4double AMU = 931.4940; // MeV << 9870 mglms(anew,znew,3,&MASS1); 11736 // << 9871 mglms(ain-anew,zin-znew,3,&MASS2); 11737 iain = idnint(ain); << 9872 ekin_tot = MASS-MASS1-MASS2; 11738 izin = idnint(zin); << 9873 }else{ 11739 inin = iain - izin; << 9874 // ekin_tot = MEXP(ININ,IZIN)-(MEXP(INNEW,IZNEW)+MEXP(ININ-INNEW,IZIN-IZNEW)); 11740 ianew = idnint(anew); << 9875 ekin_tot = masses->massexp[inin][izin]-(masses->massexp[innew][iznew]+masses->massexp[inin-innew][izin-iznew]); 11741 iznew = idnint(znew); << 9876 if(izin>12)std::cout << "*** ZIN > 12 ***" << izin << std::endl; 11742 innew = ianew - iznew; << 9877 } 11743 // << 9878 11744 if (ain == 0) << 9879 if( ekin_tot<0.00 ){ 11745 return; << 9880 // if( iain.ne.izin .and. izin.ne.0 ){ 11746 // << 9881 // print *,"Negative Q-value in UNSTABLE_TKE" 11747 if (izin > 12) << 9882 // print *,"ekin_tot=",ekin_tot 11748 { << 9883 // print *,"ain,zin=",ain,zin,MEXP(ININ,IZIN) 11749 mglms(ain, zin, 3, &MASS); << 9884 // print *,"anew,znew=",anew,znew,MEXP(INNEW,IZNEW) 11750 mglms(anew, znew, 3, &MASS1); << 9885 // print * 11751 mglms(ain - anew, zin - znew, 3, &MA << 9886 // } 11752 ekin_tot = MASS - MASS1 - MASS2; << 9887 ekin_tot=0.0; 11753 } << 9888 } 11754 else << 9889 // 11755 { << 9890 EKIN_P1 = ekin_tot*(ain-anew)/ ain; 11756 // ekin_tot = << 9891 ETOT_P1 = EKIN_P1 + anew * AMU; 11757 // MEXP(ININ,IZIN)-(MEXP(INNEW,IZNE << 9892 PTOT = anew*AMU*std::sqrt((EKIN_P1/(anew*AMU)+1.0)*(EKIN_P1/(anew*AMU)+1.0)-1.0); // MeV/C 11758 ekin_tot = << 9893 // 11759 masses->massexp[inin][izin] - (m << 9894 RNDT = G4AblaRandom::flat(); 11760 if (izin > 12) << 9895 CTET1 = 2.0*RNDT-1.0; 11761 std::cout << "*** ZIN > 12 ***" << 9896 STET1 = std::sqrt(1.0-CTET1*CTET1); 11762 } << 9897 RNDP = G4AblaRandom::flat(); 11763 << 9898 PHI1 = RNDP*2.0*3.141592654; 11764 if (ekin_tot < 0.00) << 9899 PX1 = PTOT * STET1*std::cos(PHI1); 11765 { << 9900 PY1 = PTOT * STET1*std::sin(PHI1); 11766 // if( iain.ne.izin .and. iz << 9901 PZ1 = PTOT * CTET1; 11767 // print *,"Negative Q-va << 9902 *v1x = C * PX1 / ETOT_P1; 11768 // print *,"ekin_tot=",ek << 9903 *v1y = C * PY1 / ETOT_P1; 11769 // print *,"ain,zin=",ain << 9904 *v1z = C * PZ1 / ETOT_P1; 11770 // print *,"anew,znew=",a << 9905 lorentz_boost(vxin,vyin,vzin,*v1x,*v1y,*v1z,&vxout,&vyout,&vzout); 11771 // print * << 9906 *v1x = vxout; 11772 // } << 9907 *v1y = vyout; 11773 ekin_tot = 0.0; << 9908 *v1z = vzout; 11774 } << 9909 // 11775 // << 9910 PX2 = - PX1; 11776 EKIN_P1 = ekin_tot * (ain - anew) / ain; << 9911 PY2 = - PY1; 11777 ETOT_P1 = EKIN_P1 + anew * AMU; << 9912 PZ2 = - PZ1; 11778 PTOT = anew * AMU * std::sqrt((EKIN_P1 / << 9913 ETOT_P2 = (ekin_tot - EKIN_P1) + (ain-anew) * AMU; 11779 << 9914 *v2x = C * PX2 / ETOT_P2; 11780 RNDT = G4AblaRandom::flat(); << 9915 *v2y = C * PY2 / ETOT_P2; 11781 CTET1 = 2.0 * RNDT - 1.0; << 9916 *v2z = C * PZ2 / ETOT_P2; 11782 STET1 = std::sqrt(1.0 - CTET1 * CTET1); << 9917 lorentz_boost(vxin,vyin,vzin,*v2x,*v2y,*v2z,&vxout,&vyout,&vzout); 11783 RNDP = G4AblaRandom::flat(); << 9918 *v2x = vxout; 11784 PHI1 = RNDP * 2.0 * 3.141592654; << 9919 *v2y = vyout; 11785 PX1 = PTOT * STET1 * std::cos(PHI1); << 9920 *v2z = vzout; 11786 PY1 = PTOT * STET1 * std::sin(PHI1); << 9921 // 11787 PZ1 = PTOT * CTET1; << 9922 return; 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 } 9923 } 11810 // 9924 // 11811 //****************************************** 9925 //************************************************************************** 11812 // 9926 // 11813 void G4Abla::lorentz_boost(G4double VXRIN, << 9927 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, << 9928 // 11815 G4double VZRIN, << 9929 // Calculate velocities of a given fragment from frame 1 into frame 2. 11816 G4double VXIN, << 9930 // Frame 1 is moving with velocity v=(vxr,vyr,vzr) relative to frame 2. 11817 G4double VYIN, << 9931 // Velocity of the fragment in frame 1 -> vxin,vyin,vzin 11818 G4double VZIN, << 9932 // Velocity of the fragment in frame 2 -> vxout,vyout,vzout 11819 G4double* VXOUT, << 9933 // 11820 G4double* VYOUT, << 9934 G4double VXR,VYR,VZR; 11821 G4double* VZOUT) << 9935 G4double GAMMA,VR,C,CC,DENO,VXNOM,VYNOM,VZNOM; 11822 { << 9936 // 11823 // << 9937 C = 29.9792458; // cm/ns 11824 // Calculate velocities of a given fragm << 9938 CC = C*C; 11825 // Frame 1 is moving with velocity v=(vx << 9939 // 11826 // Velocity of the fragment in frame 1 - << 9940 // 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 - << 9941 // we need to multiply them by -1 11828 // << 9942 VXR = -1.0 * VXRIN; 11829 G4double VXR, VYR, VZR; << 9943 VYR = -1.0 * VYRIN; 11830 G4double GAMMA, VR, C, CC, DENO, VXNOM, << 9944 VZR = -1.0 * VZRIN; 11831 // << 9945 // 11832 C = 29.9792458; // cm/ns << 9946 VR = std::sqrt(VXR*VXR + VYR*VYR + VZR*VZR); 11833 CC = C * C; << 9947 if(VR<1e-9){ 11834 // << 9948 *VXOUT = VXIN; 11835 // VXR,VYR,VZR are velocities of frame 1 << 9949 *VYOUT = VYIN; 11836 // 2 we need to multiply them by -1 << 9950 *VZOUT = VZIN; 11837 VXR = -1.0 * VXRIN; << 9951 return; 11838 VYR = -1.0 * VYRIN; << 9952 } 11839 VZR = -1.0 * VZRIN; << 9953 GAMMA = 1.0/std::sqrt(1.0 - VR*VR/CC); 11840 // << 9954 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 9955 11858 // Y component << 9956 // X component 11859 VYNOM = -GAMMA * VYR + (1.0 + (GAMMA - 1 << 9957 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 9958 11862 *VYOUT = VYNOM / (GAMMA * DENO); << 9959 *VXOUT = VXNOM / (GAMMA * DENO); 11863 9960 11864 // Z component << 9961 // Y component 11865 VZNOM = -GAMMA * VZR + (1.0 + (GAMMA - 1 << 9962 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 << 9963 >> 9964 *VYOUT = VYNOM / (GAMMA * DENO); >> 9965 >> 9966 // Z component >> 9967 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; >> 9968 >> 9969 *VZOUT = VZNOM / (GAMMA * DENO); >> 9970 >> 9971 return; >> 9972 } >> 9973 >> 9974 void G4Abla::fission(G4double AF,G4double ZF,G4double EE,G4double JPRF, >> 9975 G4double *VX1_FISSION_par,G4double *VY1_FISSION_par,G4double *VZ1_FISSION_par, >> 9976 G4double *VX2_FISSION_par,G4double *VY2_FISSION_par,G4double *VZ2_FISSION_par, >> 9977 G4int *ZFP1,G4int *AFP1,G4int *SFP1, G4int *ZFP2,G4int *AFP2,G4int *SFP2,G4int *imode_par, >> 9978 G4double *VX_EVA_SC_par, G4double *VY_EVA_SC_par, G4double *VZ_EVA_SC_par, >> 9979 G4double EV_TEMP[200][6],G4int *IEV_TAB_FIS_par, G4int *NbLam0_par){ >> 9980 /// >> 9981 G4double EFF1=0.,EFF2=0.,VFF1=0.,VFF2=0., >> 9982 AF1=0.,ZF1=0.,AF2=0.,ZF2=0., >> 9983 AFF1=0.,ZFF1=0.,AFF2=0.,ZFF2=0., >> 9984 vz1_eva=0., vx1_eva=0.,vy1_eva=0., >> 9985 vz2_eva=0., vx2_eva=0.,vy2_eva=0., >> 9986 vx_eva_sc=0.,vy_eva_sc=0.,vz_eva_sc=0., >> 9987 VXOUT=0.,VYOUT=0.,VZOUT=0., >> 9988 VX2OUT=0.,VY2OUT=0.,VZ2OUT=0.; >> 9989 G4int IEV_TAB_FIS=0,IEV_TAB_TEMP=0; >> 9990 G4double EV_TEMP1[200][6], EV_TEMP2[200][6],mtota=0.; >> 9991 G4int inttype = 0,inum=0; >> 9992 IEV_TAB_SSC=0; >> 9993 (*imode_par)=0; >> 9994 G4int NbLam0= (*NbLam0_par); >> 9995 >> 9996 for(G4int I1=0;I1<200;I1++) >> 9997 for(G4int I2=0;I2<6;I2++){ >> 9998 EV_TEMP[I1][I2] = 0.0; >> 9999 EV_TEMP1[I1][I2] = 0.0; >> 10000 EV_TEMP2[I1][I2] = 0.0; >> 10001 } >> 10002 >> 10003 G4double et = EE - JPRF * JPRF * 197. * 197./(2.*0.4*931.*std::pow(AF,5.0/3.0)*1.16*1.16); >> 10004 >> 10005 fissionDistri(AF,ZF,et,AF1,ZF1,EFF1,VFF1,AF2,ZF2,EFF2,VFF2, >> 10006 vx_eva_sc,vy_eva_sc,vz_eva_sc,&NbLam0); >> 10007 >> 10008 // Lambda particles >> 10009 G4int NbLam1=0; >> 10010 G4int NbLam2=0; >> 10011 G4double pbH = (AF1 - ZF1) / (AF1 - ZF1 + AF2 - ZF2); >> 10012 for(G4int i=0;i<NbLam0;i++){ >> 10013 if(G4AblaRandom::flat()<pbH){ >> 10014 NbLam1++; >> 10015 }else{ >> 10016 NbLam2++; >> 10017 } >> 10018 } >> 10019 // Copy of the evaporated particles from saddle to scission >> 10020 for(G4int IJ = 0; IJ< IEV_TAB_SSC;IJ++){ >> 10021 EV_TEMP[IJ][0] = EV_TAB_SSC[IJ][0]; >> 10022 EV_TEMP[IJ][1] = EV_TAB_SSC[IJ][1]; >> 10023 EV_TEMP[IJ][2] = EV_TAB_SSC[IJ][2]; >> 10024 EV_TEMP[IJ][3] = EV_TAB_SSC[IJ][3]; >> 10025 EV_TEMP[IJ][4] = EV_TAB_SSC[IJ][4]; >> 10026 EV_TEMP[IJ][5] = EV_TAB_SSC[IJ][5]; >> 10027 } >> 10028 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_SSC; >> 10029 >> 10030 // Velocities >> 10031 G4double VZ1_FISSION = (2.0 * G4AblaRandom::flat() - 1.0) * VFF1; >> 10032 G4double VPERP1 = std::sqrt(VFF1*VFF1 - VZ1_FISSION*VZ1_FISSION); >> 10033 G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142; >> 10034 G4double VX1_FISSION = VPERP1 * std::sin(ALPHA1); >> 10035 G4double VY1_FISSION = VPERP1 * std::cos(ALPHA1); >> 10036 G4double VX2_FISSION = - VX1_FISSION / VFF1 * VFF2; >> 10037 G4double VY2_FISSION = - VY1_FISSION / VFF1 * VFF2; >> 10038 G4double VZ2_FISSION = - VZ1_FISSION / VFF1 * VFF2; >> 10039 // >> 10040 // Fission fragment 1 >> 10041 if( (ZF1<=0.0) || (AF1<=0.0) || (AF1<ZF1) ){ >> 10042 std::cout << "F1 unphysical: "<<ZF<< " "<<AF<< " "<<EE<< " "<<ZF1<< " "<<AF1 << std::endl; >> 10043 }else{ >> 10044 // fission and IMF emission are not allowed >> 10045 opt->optimfallowed = 0; // IMF is not allowed >> 10046 fiss->ifis = 0; // fission is not allowed >> 10047 gammaemission=1; >> 10048 G4int FF11=0, FIMF11=0; >> 10049 G4double ZIMFF1=0., AIMFF1=0.,TKEIMF1=0.,JPRFOUT=0.; >> 10050 // >> 10051 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 10052 11868 *VZOUT = VZNOM / (GAMMA * DENO); << 10053 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ >> 10054 EV_TEMP[IJ+IEV_TAB_FIS][0] = EV_TEMP1[IJ][0]; >> 10055 EV_TEMP[IJ+IEV_TAB_FIS][1] = EV_TEMP1[IJ][1]; >> 10056 // Lorentz kinematics >> 10057 // EV_TEMP(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF >> 10058 // EV_TEMP(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF >> 10059 // EV_TEMP(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF >> 10060 // Lorentz transformation >> 10061 lorentz_boost(VX1_FISSION,VY1_FISSION,VZ1_FISSION, >> 10062 EV_TEMP1[IJ][2],EV_TEMP1[IJ][3],EV_TEMP1[IJ][4], >> 10063 &VXOUT,&VYOUT,&VZOUT); >> 10064 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, >> 10065 VXOUT,VYOUT,VZOUT, >> 10066 &VX2OUT,&VY2OUT,&VZ2OUT); >> 10067 EV_TEMP[IJ+IEV_TAB_FIS][2] = VX2OUT; >> 10068 EV_TEMP[IJ+IEV_TAB_FIS][3] = VY2OUT; >> 10069 EV_TEMP[IJ+IEV_TAB_FIS][4] = VZ2OUT; >> 10070 // >> 10071 } >> 10072 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_TEMP; 11869 10073 11870 return; << 10074 } 11871 } << 10075 // >> 10076 // Fission fragment 2 >> 10077 if( (ZF2<=0.0) || (AF2<=0.0) || (AF2<ZF2) ){ >> 10078 std::cout << "F2 unphysical: "<<ZF<< " "<<AF<< " "<<EE<< " "<<ZF2<< " "<<AF2 << std::endl; >> 10079 }else{ >> 10080 // fission and IMF emission are not allowed >> 10081 opt->optimfallowed = 0; // IMF is not allowed >> 10082 fiss->ifis = 0; // fission is not allowed >> 10083 gammaemission=1; >> 10084 G4int FF22=0, FIMF22=0; >> 10085 G4double ZIMFF2=0., AIMFF2=0.,TKEIMF2=0.,JPRFOUT=0.; >> 10086 // >> 10087 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 10088 11873 void G4Abla::fission(G4double AF, << 10089 for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 11874 G4double ZF, << 10090 EV_TEMP[IJ+IEV_TAB_FIS][0] = EV_TEMP2[IJ][0]; 11875 G4double EE, << 10091 EV_TEMP[IJ+IEV_TAB_FIS][1] = EV_TEMP2[IJ][1]; 11876 G4double JPRF, << 10092 // Lorentz kinematics 11877 G4double* VX1_FISSION_p << 10093 // EV_TEMP(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF 11878 G4double* VY1_FISSION_p << 10094 // EV_TEMP(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF 11879 G4double* VZ1_FISSION_p << 10095 // EV_TEMP(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF 11880 G4double* VX2_FISSION_p << 10096 // Lorentz transformation 11881 G4double* VY2_FISSION_p << 10097 lorentz_boost(VX2_FISSION,VY2_FISSION,VZ2_FISSION, 11882 G4double* VZ2_FISSION_p << 10098 EV_TEMP2[IJ][2],EV_TEMP2[IJ][3],EV_TEMP2[IJ][4], 11883 G4int* ZFP1, << 10099 &VXOUT,&VYOUT,&VZOUT); 11884 G4int* AFP1, << 10100 lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc, 11885 G4int* SFP1, << 10101 VXOUT,VYOUT,VZOUT, 11886 G4int* ZFP2, << 10102 &VX2OUT,&VY2OUT,&VZ2OUT); 11887 G4int* AFP2, << 10103 EV_TEMP[IJ+IEV_TAB_FIS][2] = VX2OUT; 11888 G4int* SFP2, << 10104 EV_TEMP[IJ+IEV_TAB_FIS][3] = VY2OUT; 11889 G4int* imode_par, << 10105 EV_TEMP[IJ+IEV_TAB_FIS][4] = VZ2OUT; 11890 G4double* VX_EVA_SC_par << 10106 // 11891 G4double* VY_EVA_SC_par << 10107 } 11892 G4double* VZ_EVA_SC_par << 10108 IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_TEMP; 11893 G4double EV_TEMP[indexp << 10109 } 11894 G4int* IEV_TAB_FIS_par, << 10110 // 11895 G4int* NbLam0_par) << 10111 // Lorentz kinematics 11896 { << 10112 // vx1_fission = vx1_fission + vx1_eva 11897 /// << 10113 // vy1_fission = vy1_fission + vy1_eva 11898 G4double EFF1 = 0., EFF2 = 0., VFF1 = 0. << 10114 // vz1_fission = vz1_fission + vz1_eva 11899 AFF2 = 0., ZFF2 = 0., vz1_eva = << 10115 // vx2_fission = vx2_fission + vx2_eva 11900 vx_eva_sc = 0., vy_eva_sc = 0., << 10116 // vy2_fission = vy2_fission + vy2_eva 11901 VY2OUT = 0., VZ2OUT = 0.; << 10117 // vz2_fission = vz2_fission + vz2_eva 11902 G4int IEV_TAB_FIS = 0, IEV_TAB_TEMP = 0; << 10118 // The v_eva_sc contribution is considered in the calling subroutine 11903 G4double EV_TEMP1[indexpart][6], EV_TEMP << 10119 // Lorentz transformations 11904 G4int inttype = 0, inum = 0; << 10120 lorentz_boost(vx1_eva,vy1_eva,vz1_eva, 11905 IEV_TAB_SSC = 0; << 10121 VX1_FISSION,VY1_FISSION,VZ1_FISSION, 11906 (*imode_par) = 0; << 10122 &VXOUT,&VYOUT,&VZOUT); 11907 G4int NbLam0 = (*NbLam0_par); << 10123 VX1_FISSION = VXOUT; 11908 << 10124 VY1_FISSION = VYOUT; 11909 for (G4int I1 = 0; I1 < indexpart; I1++) << 10125 VZ1_FISSION = VZOUT; 11910 for (G4int I2 = 0; I2 < 6; I2++) << 10126 lorentz_boost(vx2_eva,vy2_eva,vz2_eva, 11911 { << 10127 VX2_FISSION,VY2_FISSION,VZ2_FISSION, 11912 EV_TEMP[I1][I2] = 0.0; << 10128 &VXOUT,&VYOUT,&VZOUT); 11913 EV_TEMP1[I1][I2] = 0.0; << 10129 VX2_FISSION = VXOUT; 11914 EV_TEMP2[I1][I2] = 0.0; << 10130 VY2_FISSION = VYOUT; 11915 } << 10131 VZ2_FISSION = VZOUT; 11916 << 10132 // 11917 G4double et = EE - JPRF * JPRF * 197. * << 10133 (*ZFP1) = idnint(ZFF1); 11918 << 10134 (*AFP1) = idnint(AFF1); 11919 fissionDistri(AF, ZF, et, AF1, ZF1, EFF1 << 10135 (*SFP1) = NbLam1; 11920 << 10136 (*VX1_FISSION_par) = VX1_FISSION; 11921 // Lambda particles << 10137 (*VY1_FISSION_par) = VY1_FISSION; 11922 G4int NbLam1 = 0; << 10138 (*VZ1_FISSION_par) = VZ1_FISSION; 11923 G4int NbLam2 = 0; << 10139 (*VX_EVA_SC_par)=vx_eva_sc; 11924 G4double pbH = (AF1 - ZF1) / (AF1 - ZF1 << 10140 (*VY_EVA_SC_par)=vy_eva_sc; 11925 for (G4int i = 0; i < NbLam0; i++) << 10141 (*VZ_EVA_SC_par)=vz_eva_sc; 11926 { << 10142 (*ZFP2) = idnint(ZFF2); 11927 if (G4AblaRandom::flat() < pbH) << 10143 (*AFP2) = idnint(AFF2); 11928 { << 10144 (*SFP2) = NbLam2; 11929 NbLam1++; << 10145 (*VX2_FISSION_par) = VX2_FISSION; 11930 } << 10146 (*VY2_FISSION_par) = VY2_FISSION; 11931 else << 10147 (*VZ2_FISSION_par) = VZ2_FISSION; 11932 { << 10148 (*IEV_TAB_FIS_par) = IEV_TAB_FIS; 11933 NbLam2++; << 10149 (*NbLam0_par) = NbLam1 + NbLam2; 11934 } << 10150 if(NbLam0>(NbLam1 + NbLam2))varntp->kfis = 25; 11935 } << 10151 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 } 10152 } 12123 //****************************************** 10153 //************************************************************************* 12124 // 10154 // 12125 void G4Abla::tke_bu(G4double Z, G4double A, << 10155 void G4Abla::tke_bu(G4double Z,G4double A,G4double ZALL,G4double AAL,G4double *VX,G4double *VY,G4double *VZ){ 12126 { << 12127 10156 12128 G4double V_over_V0, R0, RALL, RHAZ, R, T << 10157 G4double V_over_V0,R0,RALL,RHAZ,R,TKE,Ekin,V,VPERP,ALPHA1; 12129 10158 12130 V_over_V0 = 6.0; << 10159 V_over_V0 = 6.0; 12131 R0 = 1.16; << 10160 R0 = 1.16; 12132 10161 12133 if (Z < 1.0) << 10162 if(Z < 1.0){ 12134 { << 12135 *VX = 0.0; 10163 *VX = 0.0; 12136 *VY = 0.0; 10164 *VY = 0.0; 12137 *VZ = 0.0; 10165 *VZ = 0.0; 12138 return; 10166 return; 12139 } << 10167 } 12140 10168 12141 RALL = R0 * std::pow(V_over_V0, 1.0 / 3. << 10169 RALL = R0 * std::pow(V_over_V0,1.0/3.0) * std::pow(AAL,1.0/3.0); 12142 RHAZ = G4double(haz(1)); << 10170 RHAZ = G4double(haz(1)); 12143 R = std::pow(RHAZ, 1.0 / 3.0) * RALL; << 10171 R = std::pow(RHAZ,1.0/3.0) * RALL; 12144 TKE = 1.44 * Z * ZALL * R * R * (1.0 - A << 10172 TKE = 1.44 * Z * ZALL * R*R * (1.0 - A/AAL)*(1.0 - A/AAL) / std::pow(RALL,3.0); 12145 << 10173 12146 Ekin = TKE * (AAL - A) / AAL; << 10174 Ekin = TKE * (AAL - A) / AAL; 12147 // print*,'!!!',IDNINT(AAl),IDNINT << 10175 // print*,'!!!',IDNINT(AAl),IDNINT(A),IDNINT(ZALL),IDNINT(Z) 12148 V = std::sqrt(Ekin / A) * 1.3887; << 10176 V = std::sqrt(Ekin/A) * 1.3887; 12149 *VZ = (2.0 * G4double(haz(1)) - 1.0) * V << 10177 *VZ = (2.0 * G4double(haz(1)) - 1.0) * V; 12150 VPERP = std::sqrt(V * V - (*VZ) * (*VZ)) << 10178 VPERP = std::sqrt(V*V - (*VZ)*(*VZ)); 12151 ALPHA1 = G4double(haz(1)) * 2.0 * 3.142; << 10179 ALPHA1 = G4double(haz(1)) * 2.0 * 3.142; 12152 *VX = VPERP * std::sin(ALPHA1); << 10180 *VX = VPERP * std::sin(ALPHA1); 12153 *VY = VPERP * std::cos(ALPHA1); << 10181 *VY = VPERP * std::cos(ALPHA1); 12154 return; << 10182 return; 12155 } 10183 } 12156 10184 12157 G4double G4Abla::haz(G4int k) 10185 G4double G4Abla::haz(G4int k) 12158 { 10186 { 12159 // const G4int pSize = 110; << 10187 // const G4int pSize = 110; 12160 // static G4ThreadLocal G4double p[pSize << 10188 // static G4ThreadLocal G4double p[pSize]; 12161 static G4ThreadLocal G4int ix = 0; << 10189 static G4ThreadLocal G4long ix = 0; 12162 static G4ThreadLocal G4double x = 0.0, y << 10190 static G4ThreadLocal G4double x = 0.0, y = 0.0; 12163 // k =< -1 on initialise << 10191 // k =< -1 on initialise 12164 // k = -1 c'est reproductible << 10192 // k = -1 c'est reproductible 12165 // k < -1 || k > -1 ce n'est pas reprod << 10193 // k < -1 || k > -1 ce n'est pas reproductible 12166 /* << 10194 /* 12167 // Zero is invalid random seed. Set pr << 10195 // Zero is invalid random seed. Set proper value from our random seed collection: 12168 collection: if(ix == 0) { << 10196 if(ix == 0) { 12169 // ix = hazard->ial; << 10197 // ix = hazard->ial; 12170 } << 10198 } 12171 */ << 10199 */ 12172 if (k <= -1) << 10200 if (k <= -1) { //then 12173 { // then << 10201 if(k == -1) { //then 12174 if (k == -1) << 10202 ix = 0; 12175 { // then << 10203 } 12176 ix = 0; << 10204 else { 12177 } << 10205 x = 0.0; 12178 else << 10206 y = secnds(G4int(x)); 12179 { << 10207 ix = G4int(y * 100 + 43543000); 12180 x = 0.0; << 10208 if(mod(ix,2) == 0) { 12181 y = secnds(G4int(x)); << 10209 ix = ix + 1; 12182 ix = G4int(y * 100 + 43543000); << 10210 } 12183 if (mod(ix, 2) == 0) << 10211 }} 12184 { << 12185 ix = ix + 1; << 12186 } << 12187 } << 12188 } << 12189 10212 12190 return G4AblaRandom::flat(); << 10213 return G4AblaRandom::flat(); 12191 } 10214 } 12192 10215 12193 // Random generator according to the 10216 // Random generator according to the 12194 // powerfunction y = x**(lambda) in the ran 10217 // powerfunction y = x**(lambda) in the range from xmin to xmax 12195 // xmin, xmax and y are integers. 10218 // xmin, xmax and y are integers. 12196 // lambda must be different from -1 ! 10219 // lambda must be different from -1 ! 12197 G4int G4Abla::IPOWERLIMHAZ(G4double lambda, << 10220 G4int G4Abla::IPOWERLIMHAZ(G4double lambda,G4int xmin,G4int xmax){ 12198 { << 10221 G4double y,l_plus,rxmin,rxmax; 12199 G4double y, l_plus, rxmin, rxmax; << 10222 l_plus = lambda + 1.; 12200 l_plus = lambda + 1.; << 10223 rxmin = G4double(xmin) - 0.5; 12201 rxmin = G4double(xmin) - 0.5; << 10224 rxmax = G4double(xmax) + 0.5; 12202 rxmax = G4double(xmax) + 0.5; << 10225 // y=(HAZ(k)*(rxmax**l_plus-rxmin**l_plus)+ rxmin**l_plus)**(1.E0/l_plus) 12203 // y=(HAZ(k)*(rxmax**l_plus-rxmin* << 10226 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) << 10227 return nint(y); 12205 y = std::pow(G4AblaRandom::flat() * (std << 10228 } 12206 1.0 / l_plus); << 10229 12207 return nint(y); << 10230 void G4Abla::AMOMENT(G4double AABRA,G4double APRF, G4int IMULTIFR,G4double *PX,G4double *PY,G4double *PZ){ 12208 } << 10231 12209 << 10232 G4int ISIGOPT = 0; 12210 void G4Abla::AMOMENT(G4double AABRA, G4doubl << 10233 G4double GOLDHA_BU=0.,GOLDHA=0.; 12211 { << 10234 G4double PI = 3.141592653589793; 12212 << 10235 //nu = 1.d0 12213 G4int ISIGOPT = 0; << 12214 G4double GOLDHA_BU = 0., GOLDHA = 0.; << 12215 G4double PI = 3.141592653589793; << 12216 // nu = 1.d0 << 12217 10236 12218 // G4double BETAP = sqrt(1.0 - 1.0/sqrt 10237 // G4double BETAP = sqrt(1.0 - 1.0/sqrt(1.0+EAP/931.494)); 12219 // G4double GAMMAP = 1.0 / sqrt(1. - BE 10238 // G4double GAMMAP = 1.0 / sqrt(1. - BETAP*BETAP); 12220 // G4double FACT_PROJ = (GAMMAP + 1.) / 10239 // G4double FACT_PROJ = (GAMMAP + 1.) / (BETAP * GAMMAP); 12221 10240 12222 // G4double R = 1.160 * pow(APRF,1.0/3.0 << 10241 // G4double R = 1.160 * pow(APRF,1.0/3.0); 12223 10242 12224 // G4double RNDT = double(haz(1)); 10243 // G4double RNDT = double(haz(1)); 12225 // G4double CTET = 2.0*RNDT-1.0; 10244 // G4double CTET = 2.0*RNDT-1.0; 12226 // G4double TETA = acos(CTET); 10245 // G4double TETA = acos(CTET); 12227 // G4double RNDP = double(haz(1)); 10246 // G4double RNDP = double(haz(1)); 12228 // G4double PHI = RNDP*2.0*PI; 10247 // G4double PHI = RNDP*2.0*PI; 12229 // G4double STET = sqrt(1.0-CTET*CTET); 10248 // G4double STET = sqrt(1.0-CTET*CTET); 12230 // RX = R * STET * DCOS(PHI) << 10249 // RX = R * STET * DCOS(PHI) 12231 // RY = R * STET * DSIN(PHI) << 10250 // RY = R * STET * DSIN(PHI) 12232 // RZ = R * CTET << 10251 // RZ = R * CTET 12233 10252 12234 // G4double RZ = 0.0; 10253 // G4double RZ = 0.0; 12235 // G4double RY = R * sin(PHI); 10254 // G4double RY = R * sin(PHI); 12236 // G4double RX = R * cos(PHI); 10255 // G4double RX = R * cos(PHI); 12237 10256 12238 // In MeV/C << 10257 // In MeV/C 12239 G4double V0_over_VBU = 1.0 / 6.0; << 10258 G4double V0_over_VBU = 1.0 / 6.0; 12240 G4double SIGMA_0 = 118.50; << 10259 G4double SIGMA_0 = 118.50; 12241 G4double Efermi = 5.0 * SIGMA_0 * SIGMA_ << 10260 G4double Efermi = 5.0 * SIGMA_0 * SIGMA_0 / (2.0 * 931.4940); 12242 << 10261 12243 if (IMULTIFR == 1) << 10262 if(IMULTIFR==1){ 12244 { << 10263 if(ISIGOPT == 0){ 12245 if (ISIGOPT == 0) << 10264 // "Fermi model" picture: 12246 { << 10265 // Influence of expansion: 12247 // "Fermi model" picture: << 10266 SIGMA_0 = SIGMA_0 * std::pow(V0_over_VBU,1.0/3.0); 12248 // Influence of expansion: << 10267 // To take into account the influence of thermal motion of nucleons (see W. Bauer, 12249 SIGMA_0 = SIGMA_0 * std::pow(V0_ << 10268 // PRC 51 (1995) 803) 12250 // To take into account the infl << 10269 // Efermi = 5.D0 * SIGMA_0 * SIGMA_0 / (2.D0 * 931.49D0) 12251 // W. Bauer, PRC 51 (1995) 803) << 10270 12252 // Efermi = 5.D0 * SIGMA_ << 10271 GOLDHA_BU = SIGMA_0 * std::sqrt((APRF*(AABRA-APRF))/(AABRA-1.0)); 12253 << 10272 GOLDHA = GOLDHA_BU*std::sqrt(1.0 + 12254 GOLDHA_BU = SIGMA_0 * std::sqrt( << 10273 5.0 * PI*PI / 12.0 * (T_freeze_out / Efermi)*(T_freeze_out / Efermi)); 12255 GOLDHA = << 10274 // PRINT*,'AFTER BU fermi:',IDNINT(AABRA),IDNINT(APRF),GOLDHA, 12256 GOLDHA_BU * std::sqrt(1.0 + << 10275 // & GOLDHA_BU 12257 // PRINT*,'AFTER BU fermi: << 10276 }else{ 12258 // & << 10277 // Thermal equilibrium picture (<=> to Boltzmann distribution in momentum with sigma2=M*T) 12259 } << 10278 // The factor (AABRA-APRF)/AP comes from momentum conservation: 12260 else << 10279 GOLDHA_BU = std::sqrt(APRF * T_freeze_out * 931.494 * 12261 { << 10280 (AABRA - APRF) / AABRA); 12262 // Thermal equilibrium picture ( << 10281 GOLDHA = GOLDHA_BU; 12263 // with sigma2=M*T) The factor ( << 10282 // PRINT*,'AFTER BU therm:',IDNINT(AABRA),IDNINT(APRF),GOLDHA, 12264 // conservation: << 10283 // & GOLDHA_BU 12265 GOLDHA_BU = std::sqrt(APRF * T_f << 10284 } 12266 GOLDHA = GOLDHA_BU; << 10285 }else{ 12267 // PRINT*,'AFTER BU therm: << 10286 GOLDHA = SIGMA_0 * std::sqrt((APRF*(AABRA-APRF))/(AABRA-1.0)); 12268 // & << 10287 } 12269 } << 10288 12270 } << 10289 G4int IS = 0; 12271 else << 10290 mom123: 12272 { << 10291 *PX = G4double(gausshaz(1,0.0,GOLDHA)); 12273 GOLDHA = SIGMA_0 * std::sqrt((APRF * << 10292 IS = IS +1; 12274 } << 10293 if(IS>100){ 12275 << 10294 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; << 10295 *PX = (AABRA-1.0)*931.4940; 12277 mom123: << 10296 } 12278 *PX = G4double(gausshaz(1, 0.0, GOLDHA)) << 10297 if(std::abs(*PX)>= AABRA*931.494){ 12279 IS = IS + 1; << 10298 // PRINT*,'VX > C',PX,IDNINT(APRF) 12280 if (IS > 100) << 10299 goto mom123; 12281 { << 10300 } 12282 std::cout << "WARNING: GAUSSHAZ CALL << 10301 IS = 0; 12283 "CALCULATING PX IN Rn07 << 10302 mom456: 12284 << std::endl; << 10303 *PY = G4double(gausshaz(1,0.0,GOLDHA)); 12285 *PX = (AABRA - 1.0) * 931.4940; << 10304 IS = IS +1; 12286 } << 10305 if(IS>100){ 12287 if (std::abs(*PX) >= AABRA * 931.494) << 10306 std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING PY IN Rn07.FOR. A VALUE WILL BE FORCED." << std::endl; 12288 { << 10307 *PY = (AABRA-1.0)*931.4940; 12289 // PRINT*,'VX > C',PX,IDNINT(A << 10308 } 12290 goto mom123; << 10309 if(std::abs(*PY)>= AABRA*931.494){ 12291 } << 10310 // PRINT*,'VX > C',PX,IDNINT(APRF) 12292 IS = 0; << 10311 goto mom456; 12293 mom456: << 10312 } 12294 *PY = G4double(gausshaz(1, 0.0, GOLDHA)) << 10313 IS = 0; 12295 IS = IS + 1; << 10314 mom789: 12296 if (IS > 100) << 10315 *PZ = G4double(gausshaz(1,0.0,GOLDHA)); 12297 { << 10316 IS = IS +1; 12298 std::cout << "WARNING: GAUSSHAZ CALL << 10317 if(IS>100){ 12299 "CALCULATING PY IN Rn07 << 10318 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; << 10319 *PZ = (AABRA-1.0)*931.4940; 12301 *PY = (AABRA - 1.0) * 931.4940; << 10320 } 12302 } << 10321 if(std::abs(*PZ)>= AABRA*931.494){ 12303 if (std::abs(*PY) >= AABRA * 931.494) << 10322 // PRINT*,'VX > C',PX,IDNINT(APRF) 12304 { << 10323 goto mom789; 12305 // PRINT*,'VX > C',PX,IDNINT(A << 10324 } 12306 goto mom456; << 10325 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 } 10326 } 12326 10327 12327 G4double G4Abla::gausshaz(G4int k, G4double 10328 G4double G4Abla::gausshaz(G4int k, G4double xmoy, G4double sig) 12328 { 10329 { 12329 // Gaussian random numbers: << 10330 // Gaussian random numbers: 12330 10331 12331 // 1005 C*** TIRAGE ALEATOIRE DA << 10332 // 1005 C*** TIRAGE ALEATOIRE DANS UNE GAUSSIENNE DE LARGEUR SIG ET MOYENNE XMOY 12332 // MOYENNE XMOY << 10333 static G4ThreadLocal G4int iset = 0; 12333 static G4ThreadLocal G4int iset = 0; << 10334 static G4ThreadLocal G4double v1,v2,r,fac,gset,fgausshaz; 12334 static G4ThreadLocal G4double v1, v2, r, << 10335 12335 << 10336 if(iset == 0) { //then 12336 if (iset == 0) << 10337 do { 12337 { // then << 10338 v1 = 2.0*haz(k) - 1.0; 12338 do << 10339 v2 = 2.0*haz(k) - 1.0; 12339 { << 10340 r = std::pow(v1,2) + std::pow(v2,2); 12340 v1 = 2.0 * haz(k) - 1.0; << 10341 } while(r >= 1); 12341 v2 = 2.0 * haz(k) - 1.0; << 10342 12342 r = std::pow(v1, 2) + std::pow(v << 10343 fac = std::sqrt(-2.*std::log(r)/r); 12343 } while (r >= 1); << 10344 gset = v1*fac; 12344 << 10345 fgausshaz = v2*fac*sig+xmoy; 12345 fac = std::sqrt(-2. * std::log(r) / << 10346 iset = 1; 12346 gset = v1 * fac; << 10347 } 12347 fgausshaz = v2 * fac * sig + xmoy; << 10348 else { 12348 iset = 1; << 10349 fgausshaz=gset*sig+xmoy; 12349 } << 10350 iset=0; 12350 else << 10351 } 12351 { << 10352 return fgausshaz; 12352 fgausshaz = gset * sig + xmoy; << 12353 iset = 0; << 12354 } << 12355 return fgausshaz; << 12356 } 10353 } 12357 10354