Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // 23 // >> 24 // $Id: G4StatMFMacroMultiNucleon.cc,v 1.2 2003/11/03 17:53:05 hpw Exp $ >> 25 // GEANT4 tag $Name: geant4-06-00-patch-01 $ 27 // 26 // 28 // Hadronic Process: Nuclear De-excitations 27 // Hadronic Process: Nuclear De-excitations 29 // by V. Lara 28 // by V. Lara 30 // << 31 // Modified: << 32 // 25.07.08 I.Pshenichnov (in collaboration wi << 33 // Mishustin (FIAS, Frankfurt, INR, M << 34 // Moscow, pshenich@fias.uni-frankfur << 35 // symmetry energy << 36 29 37 #include "G4StatMFMacroMultiNucleon.hh" 30 #include "G4StatMFMacroMultiNucleon.hh" 38 #include "G4PhysicalConstants.hh" << 39 #include "G4SystemOfUnits.hh" << 40 #include "G4Log.hh" << 41 #include "G4Exp.hh" << 42 #include "G4Pow.hh" << 43 31 44 // Default constructor 32 // Default constructor 45 G4StatMFMacroMultiNucleon:: 33 G4StatMFMacroMultiNucleon:: 46 G4StatMFMacroMultiNucleon() : 34 G4StatMFMacroMultiNucleon() : 47 G4VStatMFMacroCluster(0) // Beacuse the d 35 G4VStatMFMacroCluster(0) // Beacuse the def. constr. of base class is private 48 { 36 { 49 throw G4HadronicException(__FILE__, __LINE << 37 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::default_constructor meant to not be accessable"); 50 } 38 } 51 39 52 // Copy constructor 40 // Copy constructor 53 G4StatMFMacroMultiNucleon:: 41 G4StatMFMacroMultiNucleon:: 54 G4StatMFMacroMultiNucleon(const G4StatMFMacroM 42 G4StatMFMacroMultiNucleon(const G4StatMFMacroMultiNucleon & ) : 55 G4VStatMFMacroCluster(0) // Beacuse the d 43 G4VStatMFMacroCluster(0) // Beacuse the def. constr. of base class is private 56 { 44 { 57 throw G4HadronicException(__FILE__, __LINE << 45 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::copy_constructor meant to not be accessable"); 58 } 46 } 59 47 60 // Operators 48 // Operators 61 49 62 G4StatMFMacroMultiNucleon & G4StatMFMacroMulti 50 G4StatMFMacroMultiNucleon & G4StatMFMacroMultiNucleon:: 63 operator=(const G4StatMFMacroMultiNucleon & ) 51 operator=(const G4StatMFMacroMultiNucleon & ) 64 { 52 { 65 throw G4HadronicException(__FILE__, __LINE << 53 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::operator= meant to not be accessable"); 66 return *this; 54 return *this; 67 } 55 } 68 56 >> 57 69 G4bool G4StatMFMacroMultiNucleon::operator==(c 58 G4bool G4StatMFMacroMultiNucleon::operator==(const G4StatMFMacroMultiNucleon & ) const 70 { 59 { 71 throw G4HadronicException(__FILE__, __LINE << 60 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::operator== meant to not be accessable"); 72 return false; 61 return false; 73 } 62 } 74 63 >> 64 75 G4bool G4StatMFMacroMultiNucleon::operator!=(c 65 G4bool G4StatMFMacroMultiNucleon::operator!=(const G4StatMFMacroMultiNucleon & ) const 76 { 66 { 77 throw G4HadronicException(__FILE__, __LINE << 67 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::operator!= meant to not be accessable"); 78 return true; 68 return true; 79 } 69 } 80 70 81 G4double G4StatMFMacroMultiNucleon::CalcMeanMu << 71 82 const G4double mu, << 72 83 const G4double nu, << 73 G4double G4StatMFMacroMultiNucleon::CalcMeanMultiplicity(const G4double FreeVol, const G4double mu, 84 const G4double T) << 74 const G4double nu, const G4double T) 85 { << 75 { 86 G4double ThermalWaveLenght = 16.15*fermi/std << 76 const G4double ThermalWaveLenght = 16.15*fermi/sqrt(T); 87 G4double lambda3 = ThermalWaveLenght*Thermal << 77 88 G4Pow* g4calc = G4Pow::GetInstance(); << 78 const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght; 89 G4double A23 = g4calc->Z23(theA); << 79 90 << 80 const G4double A23 = pow(static_cast<G4double>(theA),2./3.); 91 G4double exponent = (mu + nu*theZARatio+ G4S << 81 92 + T*T/_InvLevelDensity << 82 const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())* 93 - G4StatMFParameters::GetGamma0()*( << 83 (1.0 - 1.0/pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.)); 94 (1.0 - 2.0*theZARatio))*theA << 84 95 - G4StatMFParameters::Beta(T)*A23 << 85 G4double exponent = (mu + nu*theZARatio+ G4StatMFParameters::GetE0() + T*T/_InvLevelDensity 96 - G4StatMFParameters::GetCoulomb()*theZARa << 86 - G4StatMFParameters::GetGamma0()*(1.0 - 2.0*theZARatio)* 97 << 87 (1.0 - 2.0*theZARatio))*theA 98 exponent /= T; << 88 - G4StatMFParameters::Beta(T)*A23 - Coulomb*theZARatio*theZARatio*A23*theA; 99 << 89 100 if (exponent > 30.0) exponent = 30.0; << 90 exponent /= T; 101 << 91 102 _MeanMultiplicity = std::max((FreeVol * theA << 92 if (exponent > 30.0) exponent = 30.0; 103 G4Exp(exponent),1.0e-30); << 93 104 return _MeanMultiplicity; << 94 _MeanMultiplicity = std::max((FreeVol * static_cast<G4double>(theA) * >> 95 sqrt(static_cast<G4double>(theA))/lambda3) * >> 96 exp(exponent),1.0e-30); >> 97 return _MeanMultiplicity; 105 } 98 } 106 99 >> 100 107 G4double G4StatMFMacroMultiNucleon::CalcZARati 101 G4double G4StatMFMacroMultiNucleon::CalcZARatio(const G4double nu) 108 { 102 { 109 G4double den = 8*G4StatMFParameters::GetGamm << 103 const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())* 110 + 2*G4StatMFParameters::GetCoulomb()*G4Pow << 104 (1.0 - 1.0/pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.)); 111 theZARatio = (4.0*G4StatMFParameters::GetGam << 105 112 return theZARatio; << 106 G4double den = 8.0*G4StatMFParameters::GetGamma0()+2.0*Coulomb*pow(static_cast<G4double>(theA),2./3.); >> 107 G4double num = 4.0*G4StatMFParameters::GetGamma0()+nu; >> 108 >> 109 return theZARatio = num/den; >> 110 >> 111 113 } 112 } 114 113 >> 114 >> 115 115 G4double G4StatMFMacroMultiNucleon::CalcEnergy 116 G4double G4StatMFMacroMultiNucleon::CalcEnergy(const G4double T) 116 { 117 { 117 G4Pow* g4calc = G4Pow::GetInstance(); << 118 const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())* 118 G4double A23 = g4calc->Z23(theA); << 119 (1.0 - 1.0/pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.)); >> 120 >> 121 const G4double A23 = pow(static_cast<G4double>(theA),2./3.); 119 122 120 // Volume term << 123 // Volume term 121 G4double EVol = theA * (T*T/_InvLevelDensity << 124 G4double EVol = static_cast<G4double>(theA) * (T*T/_InvLevelDensity - G4StatMFParameters::GetE0()); 122 125 123 // Symmetry term << 126 // Symmetry term 124 G4double ESym = theA * G4StatMFParameters::G << 127 // G4double ESym = static_cast<G4double>(theA) * G4StatMFParameters::GetGamma0() *(1. - 2.* theZARatio * theZARatio); 125 *(1. - 2.* theZARatio) * (1. - 2.* theZARa << 126 128 127 // Surface term << 129 // Surface term 128 G4double ESurf = A23*(G4StatMFParameters::Be << 130 G4double ESurf = A23*(G4StatMFParameters::Beta(T) - T*G4StatMFParameters::DBetaDT(T)); 129 131 130 // Coulomb term << 132 // Coulomb term 131 G4double ECoul = G4StatMFParameters::GetCoul << 133 G4double ECoul = Coulomb*A23*static_cast<G4double>(theA)*theZARatio*theZARatio; 132 134 133 // Translational term << 135 // Translational term 134 G4double ETrans = 1.5*T; << 136 G4double ETrans = (3./2.)*T; 135 return _Energy = EVol + ESurf + ECoul + ETra << 137 >> 138 >> 139 return _Energy = EVol + ESurf + ECoul + ETrans; // + ESym; 136 } 140 } 137 141 138 G4double G4StatMFMacroMultiNucleon::CalcEntrop << 142 139 const G4double FreeVol) << 143 G4double G4StatMFMacroMultiNucleon::CalcEntropy(const G4double T, const G4double FreeVol) 140 { 144 { 141 G4double Entropy = 0.0; << 145 const G4double ThermalWaveLenght = 16.15*fermi/sqrt(T); 142 if (_MeanMultiplicity > 0.0) { << 146 const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght; 143 147 144 G4double ThermalWaveLenght = 16.15*fermi/s << 148 G4double Entropy = 0.0; 145 G4double lambda3 = ThermalWaveLenght*Therm << 149 if (_MeanMultiplicity > 0.0) { 146 // Volume term << 150 // Volume term 147 G4double SV = 2.0*theA*T/_InvLevelDensity; << 151 G4double SV = 2.0*static_cast<G4double>(theA)*T/_InvLevelDensity; 148 152 149 // Surface term << 153 // Surface term 150 G4double SS = -G4StatMFParameters::DBetaDT << 154 G4double SS = -G4StatMFParameters::DBetaDT(T)*pow(static_cast<G4double>(theA),2./3.); 151 155 152 // Translational term << 156 // Translational term 153 G4double ST = 2.5 + G4Log(FreeVol * std::s << 157 G4double ST = (5./2.)+log(FreeVol * sqrt(static_cast<G4double>(theA)) * 154 /(lambda3*_MeanMultiplicity)); << 158 static_cast<G4double>(theA)/(lambda3*_MeanMultiplicity)); 155 << 159 156 Entropy = _MeanMultiplicity*(SV + SS + ST) << 160 157 } << 161 Entropy = _MeanMultiplicity*(SV + SS + ST); 158 return Entropy; << 162 } >> 163 >> 164 >> 165 return Entropy; 159 } 166 } 160 167