Changeset 1340 for trunk/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundHe3.cc
- Timestamp:
- Nov 5, 2010, 3:45:55 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundHe3.cc
r1337 r1340 24 24 // ******************************************************************** 25 25 // 26 // 27 // $Id: G4PreCompoundHe3.cc,v 1.6 2010/04/09 14:06:17 vnivanch Exp $ 28 // GEANT4 tag $Name: geant4-09-04-beta-01 $ 26 // $Id: G4PreCompoundHe3.cc,v 1.7 2010/08/28 15:16:55 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-03-ref-09 $ 29 28 // 30 29 // ------------------------------------------------------------------- … … 39 38 // Modified: 40 39 // 21.08.2008 J. M. Quesada add choice of options 40 // 20.08.2010 V.Ivanchenko added G4Pow and G4PreCompoundParameters pointers 41 // use int Z and A and cleanup 41 42 // 42 43 43 44 #include "G4PreCompoundHe3.hh" 44 45 G4ReactionProduct * G4PreCompoundHe3::GetReactionProduct() const 46 { 47 G4ReactionProduct * theReactionProduct = 48 new G4ReactionProduct(G4He3::He3Definition()); 49 theReactionProduct->SetMomentum(GetMomentum().vect()); 50 theReactionProduct->SetTotalEnergy(GetMomentum().e()); 51 #ifdef PRECOMPOUND_TEST 52 theReactionProduct->SetCreatorModel("G4PrecompoundModel"); 53 #endif 54 return theReactionProduct; 55 } 56 57 G4double G4PreCompoundHe3::FactorialFactor(const G4double N, const G4double P) 58 { 59 return 60 (N-3.0)*(P-2.0)*( 61 (((N-2.0)*(P-1.0))/2.0) *( 62 (((N-1.0)*P)/3.0) 63 ) 64 ); 65 } 66 67 G4double G4PreCompoundHe3::CoalescenceFactor(const G4double A) 68 { 69 return 243.0/(A*A); 45 #include "G4He3.hh" 46 47 G4PreCompoundHe3::G4PreCompoundHe3() 48 : G4PreCompoundIon(G4He3::He3(), &theHe3CoulombBarrier) 49 {} 50 51 G4PreCompoundHe3::~G4PreCompoundHe3() 52 {} 53 54 G4double G4PreCompoundHe3::FactorialFactor(G4int N, G4int P) 55 { 56 return G4double((N-3)*(P-2)*(N-2)*(P-1)*(N-1)*P)/6.0; 57 } 58 59 G4double G4PreCompoundHe3::CoalescenceFactor(G4int A) 60 { 61 return 243.0/G4double(A*A); 70 62 } 71 63 72 G4double G4PreCompoundHe3::GetRj( const G4int NumberParticles, const G4int NumberCharged)64 G4double G4PreCompoundHe3::GetRj(G4int nParticles, G4int nCharged) 73 65 { 74 66 G4double rj = 0.0; 75 G4double denominator = NumberParticles*(NumberParticles-1)*(NumberParticles-2); 76 if(NumberCharged >=2 && (NumberParticles-NumberCharged) >= 1) { 77 rj = 3.0*static_cast<G4double>(NumberCharged*(NumberCharged-1)*(NumberParticles-NumberCharged)) 78 / static_cast<G4double>(denominator); 67 if(nCharged >=2 && (nParticles-nCharged) >= 1) { 68 G4double denominator = G4double(nParticles*(nParticles-1)*(nParticles-2)); 69 rj = G4double(3*nCharged*(nCharged-1)*(nParticles-nCharged))/denominator; 79 70 } 80 71 return rj; 81 72 } 82 73 83 //////////////////////////////////////////////////////////////////////////////// ////74 //////////////////////////////////////////////////////////////////////////////// 84 75 //J. M. Quesada (Dec 2007-June 2008): New inverse reaction cross sections 85 76 //OPT=0 Dostrovski's parameterization … … 87 78 //OPT=3,4 Kalbach's parameterization 88 79 // 89 G4double G4PreCompoundHe3::CrossSection(const G4double K) 90 { 91 ResidualA=GetRestA(); 92 ResidualZ=GetRestZ(); 93 theA=GetA(); 94 theZ=GetZ(); 95 ResidualAthrd=std::pow(ResidualA,0.33333); 96 FragmentA=GetA()+GetRestA(); 97 FragmentAthrd=std::pow(FragmentA,0.33333); 98 80 G4double G4PreCompoundHe3::CrossSection(G4double K) 81 { 82 ResidualA = GetRestA(); 83 ResidualZ = GetRestZ(); 84 theA = GetA(); 85 theZ = GetZ(); 86 ResidualAthrd = ResidualA13(); 87 FragmentA = theA + ResidualA; 88 FragmentAthrd = g4pow->Z13(FragmentA); 99 89 100 90 if (OPTxs==0) return GetOpt0( K); … … 109 99 } 110 100 111 // *********************** OPT=0 : Dostrovski's cross section *****************************112 113 G4double G4PreCompoundHe3::GetOpt0(const G4double K)114 {115 const G4double r0 = G4PreCompoundParameters::GetAddress()->Getr0();116 // cross section is now given in mb (r0 is in mm) for the sake of consistency117 //with the rest of the options118 return 1.e+25*pi*(r0*ResidualAthrd)*(r0*ResidualAthrd)*GetAlpha()*(1.+GetBeta()/K);119 }120 //121 //----------------122 //123 101 G4double G4PreCompoundHe3::GetAlpha() 124 102 { 125 103 G4double C = 0.0; 126 G4 double aZ = GetZ() + GetRestZ();104 G4int aZ = theZ + ResidualZ; 127 105 if (aZ <= 30) 128 106 { … … 131 109 else if (aZ <= 50) 132 110 { 133 C = 0.1 + -((aZ-50.)/20.)*0.02;111 C = 0.1 - (aZ - 30)*0.001; 134 112 } 135 113 else if (aZ < 70) 136 114 { 137 C = 0.08 + -((aZ-70.)/20.)*0.02;115 C = 0.08 - (aZ - 50)*0.001; 138 116 } 139 117 else … … 143 121 return 1.0 + C*(4.0/3.0); 144 122 } 145 // 146 //-------------------- 147 // 148 G4double G4PreCompoundHe3::GetBeta() 149 { 150 return -GetCoulombBarrier(); 151 } 152 // 153 //********************* OPT=1,2 : Chatterjee's cross section ************************ 123 124 //********************* OPT=1,2 : Chatterjee's cross section ***************** 154 125 //(fitting to cross section from Bechetti & Greenles OM potential) 155 126 156 127 G4double G4PreCompoundHe3::GetOpt12(const G4double K) 157 128 { 158 159 G4double Kc=K; 129 G4double Kc = K; 160 130 161 131 // JMQ xsec is set constat above limit of validity 162 if (K >50) Kc=50;132 if (K > 50*MeV) { Kc = 50*MeV; } 163 133 164 134 G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs; 165 135 166 G4double 136 G4double p0 = -3.06; 167 137 G4double p1 = 278.5; 168 138 G4double p2 = -1389.; … … 179 149 p = p0 + p1/Ec + p2/(Ec*Ec); 180 150 landa = landa0*ResidualA + landa1; 181 mu = mu0*std::pow(ResidualA,mu1); 182 nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec)); 151 152 G4double resmu1 = g4pow->powZ(ResidualA,mu1); 153 mu = mu0*resmu1; 154 nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec)); 183 155 q = landa - nu/(Ec*Ec) - 2*p*Ec; 184 156 r = mu + 2*nu/Ec + p*(Ec*Ec); … … 198 170 //c ** 3he from o.m. of gibson et al 199 171 { 200 201 172 G4double landa, mu, nu, p , signor(1.),sig; 202 173 G4double ec,ecsq,xnulam,etest(0.),a; 203 174 G4double b,ecut,cut,ecut2,geom,elab; 204 175 205 206 176 G4double flow = 1.e-18; 207 177 G4double spill= 1.e+18; 208 209 178 210 179 G4double p0 = -2.88; … … 227 196 p = p0 + p1/ec + p2/ecsq; 228 197 landa = landa0*ResidualA + landa1; 229 a = std::pow(ResidualA,mu1);198 a = g4pow->powZ(ResidualA,mu1); 230 199 mu = mu0 * a; 231 200 nu = a* (nu0+nu1*ec+nu2*ecsq); 232 201 xnulam = nu / landa; 233 if (xnulam > spill) xnulam=0.;234 if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam);202 if (xnulam > spill) { xnulam=0.; } 203 if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); } 235 204 236 205 a = -2.*p*ec + landa - nu/ecsq; … … 241 210 ecut = (ecut-a) / (p+p); 242 211 ecut2 = ecut; 243 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut) 244 //ecut<0 means that there is no cut with energy axis, i.e. xs is set to 0 bellow minimum 245 // if (cut < 0.) ecut2 = ecut - 2.; 246 if (cut < 0.) ecut2 = ecut; 212 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut) 213 // ecut<0 means that there is no cut with energy axis, i.e. xs is set 214 // to 0 bellow minimum 215 // if (cut < 0.) ecut2 = ecut - 2.; 216 if (cut < 0.) { ecut2 = ecut; } 247 217 elab = K * FragmentA / ResidualA; 248 218 sig = 0.; 249 219 250 220 if (elab <= ec) { //start for E<Ec 251 if (elab > ecut2) sig = (p*elab*elab+a*elab+b) * signor;221 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; } 252 222 } //end for E<Ec 253 223 else { //start for E>Ec 254 224 sig = (landa*elab+mu+nu/elab) * signor; 255 225 geom = 0.; 256 if (xnulam < flow || elab < etest) return sig;226 if (xnulam < flow || elab < etest) { return sig; } 257 227 geom = std::sqrt(theA*K); 258 228 geom = 1.23*ResidualAthrd + ra + 4.573/geom; … … 263 233 264 234 } 265 266 // ************************** end of cross sections *******************************267 268 269 270
Note: See TracChangeset
for help on using the changeset viewer.