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 // 26 // >> 27 // $Id: G4StatMFMacroMultiNucleon.cc 67983 2013-03-13 10:42:03Z gcosmo $ 27 // 28 // 28 // Hadronic Process: Nuclear De-excitations 29 // Hadronic Process: Nuclear De-excitations 29 // by V. Lara 30 // by V. Lara 30 // 31 // 31 // Modified: 32 // Modified: 32 // 25.07.08 I.Pshenichnov (in collaboration wi 33 // 25.07.08 I.Pshenichnov (in collaboration with Alexander Botvina and Igor 33 // Mishustin (FIAS, Frankfurt, INR, M 34 // Mishustin (FIAS, Frankfurt, INR, Moscow and Kurchatov Institute, 34 // Moscow, pshenich@fias.uni-frankfur 35 // Moscow, pshenich@fias.uni-frankfurt.de) fixed computation of the 35 // symmetry energy 36 // symmetry energy 36 37 37 #include "G4StatMFMacroMultiNucleon.hh" 38 #include "G4StatMFMacroMultiNucleon.hh" 38 #include "G4PhysicalConstants.hh" 39 #include "G4PhysicalConstants.hh" 39 #include "G4SystemOfUnits.hh" 40 #include "G4SystemOfUnits.hh" 40 #include "G4Log.hh" << 41 #include "G4Exp.hh" << 42 #include "G4Pow.hh" << 43 41 44 // Default constructor 42 // Default constructor 45 G4StatMFMacroMultiNucleon:: 43 G4StatMFMacroMultiNucleon:: 46 G4StatMFMacroMultiNucleon() : 44 G4StatMFMacroMultiNucleon() : 47 G4VStatMFMacroCluster(0) // Beacuse the d 45 G4VStatMFMacroCluster(0) // Beacuse the def. constr. of base class is private 48 { 46 { 49 throw G4HadronicException(__FILE__, __LINE << 47 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::default_constructor meant to not be accessable"); 50 } 48 } 51 49 52 // Copy constructor 50 // Copy constructor 53 G4StatMFMacroMultiNucleon:: 51 G4StatMFMacroMultiNucleon:: 54 G4StatMFMacroMultiNucleon(const G4StatMFMacroM 52 G4StatMFMacroMultiNucleon(const G4StatMFMacroMultiNucleon & ) : 55 G4VStatMFMacroCluster(0) // Beacuse the d 53 G4VStatMFMacroCluster(0) // Beacuse the def. constr. of base class is private 56 { 54 { 57 throw G4HadronicException(__FILE__, __LINE << 55 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::copy_constructor meant to not be accessable"); 58 } 56 } 59 57 60 // Operators 58 // Operators 61 59 62 G4StatMFMacroMultiNucleon & G4StatMFMacroMulti 60 G4StatMFMacroMultiNucleon & G4StatMFMacroMultiNucleon:: 63 operator=(const G4StatMFMacroMultiNucleon & ) 61 operator=(const G4StatMFMacroMultiNucleon & ) 64 { 62 { 65 throw G4HadronicException(__FILE__, __LINE << 63 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::operator= meant to not be accessable"); 66 return *this; 64 return *this; 67 } 65 } 68 66 >> 67 69 G4bool G4StatMFMacroMultiNucleon::operator==(c 68 G4bool G4StatMFMacroMultiNucleon::operator==(const G4StatMFMacroMultiNucleon & ) const 70 { 69 { 71 throw G4HadronicException(__FILE__, __LINE << 70 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::operator== meant to not be accessable"); 72 return false; 71 return false; 73 } 72 } 74 73 >> 74 75 G4bool G4StatMFMacroMultiNucleon::operator!=(c 75 G4bool G4StatMFMacroMultiNucleon::operator!=(const G4StatMFMacroMultiNucleon & ) const 76 { 76 { 77 throw G4HadronicException(__FILE__, __LINE << 77 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::operator!= meant to not be accessable"); 78 return true; 78 return true; 79 } 79 } 80 80 81 G4double G4StatMFMacroMultiNucleon::CalcMeanMu << 81 82 const G4double mu, << 82 83 const G4double nu, << 83 G4double G4StatMFMacroMultiNucleon::CalcMeanMultiplicity(const G4double FreeVol, const G4double mu, 84 const G4double T) << 84 const G4double nu, const G4double T) 85 { << 85 { 86 G4double ThermalWaveLenght = 16.15*fermi/std << 86 const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T); 87 G4double lambda3 = ThermalWaveLenght*Thermal << 87 88 G4Pow* g4calc = G4Pow::GetInstance(); << 88 const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght; 89 G4double A23 = g4calc->Z23(theA); << 89 90 << 90 const G4double A23 = std::pow(static_cast<G4double>(theA),2./3.); 91 G4double exponent = (mu + nu*theZARatio+ G4S << 91 92 + T*T/_InvLevelDensity << 92 const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())* 93 - G4StatMFParameters::GetGamma0()*( << 93 (1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.)); 94 (1.0 - 2.0*theZARatio))*theA << 94 95 - G4StatMFParameters::Beta(T)*A23 << 95 G4double exponent = (mu + nu*theZARatio+ G4StatMFParameters::GetE0() + T*T/_InvLevelDensity 96 - G4StatMFParameters::GetCoulomb()*theZARa << 96 - G4StatMFParameters::GetGamma0()*(1.0 - 2.0*theZARatio)* 97 << 97 (1.0 - 2.0*theZARatio))*theA 98 exponent /= T; << 98 - G4StatMFParameters::Beta(T)*A23 - Coulomb*theZARatio*theZARatio*A23*theA; 99 << 99 100 if (exponent > 30.0) exponent = 30.0; << 100 exponent /= T; 101 << 101 102 _MeanMultiplicity = std::max((FreeVol * theA << 102 if (exponent > 30.0) exponent = 30.0; 103 G4Exp(exponent),1.0e-30); << 103 104 return _MeanMultiplicity; << 104 _MeanMultiplicity = std::max((FreeVol * static_cast<G4double>(theA) * >> 105 std::sqrt(static_cast<G4double>(theA))/lambda3) * >> 106 std::exp(exponent),1.0e-30); >> 107 return _MeanMultiplicity; 105 } 108 } 106 109 >> 110 107 G4double G4StatMFMacroMultiNucleon::CalcZARati 111 G4double G4StatMFMacroMultiNucleon::CalcZARatio(const G4double nu) 108 { 112 { 109 G4double den = 8*G4StatMFParameters::GetGamm << 113 const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())* 110 + 2*G4StatMFParameters::GetCoulomb()*G4Pow << 114 (1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.)); 111 theZARatio = (4.0*G4StatMFParameters::GetGam << 115 112 return theZARatio; << 116 G4double den = 8.0*G4StatMFParameters::GetGamma0()+2.0*Coulomb*std::pow(static_cast<G4double>(theA),2./3.); >> 117 G4double num = 4.0*G4StatMFParameters::GetGamma0()+nu; >> 118 >> 119 return theZARatio = num/den; >> 120 >> 121 113 } 122 } 114 123 >> 124 >> 125 115 G4double G4StatMFMacroMultiNucleon::CalcEnergy 126 G4double G4StatMFMacroMultiNucleon::CalcEnergy(const G4double T) 116 { 127 { 117 G4Pow* g4calc = G4Pow::GetInstance(); << 128 const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())* 118 G4double A23 = g4calc->Z23(theA); << 129 (1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.)); >> 130 >> 131 const G4double A23 = std::pow(static_cast<G4double>(theA),2./3.); 119 132 120 // Volume term << 133 // Volume term 121 G4double EVol = theA * (T*T/_InvLevelDensity << 134 G4double EVol = static_cast<G4double>(theA) * (T*T/_InvLevelDensity - G4StatMFParameters::GetE0()); 122 135 123 // Symmetry term << 136 // Symmetry term 124 G4double ESym = theA * G4StatMFParameters::G << 137 G4double ESym = static_cast<G4double>(theA) * G4StatMFParameters::GetGamma0() *(1. - 2.* theZARatio) * (1. - 2.* theZARatio); 125 *(1. - 2.* theZARatio) * (1. - 2.* theZARa << 126 138 127 // Surface term << 139 // Surface term 128 G4double ESurf = A23*(G4StatMFParameters::Be << 140 G4double ESurf = A23*(G4StatMFParameters::Beta(T) - T*G4StatMFParameters::DBetaDT(T)); 129 141 130 // Coulomb term << 142 // Coulomb term 131 G4double ECoul = G4StatMFParameters::GetCoul << 143 G4double ECoul = Coulomb*A23*static_cast<G4double>(theA)*theZARatio*theZARatio; 132 144 133 // Translational term << 145 // Translational term 134 G4double ETrans = 1.5*T; << 146 G4double ETrans = (3./2.)*T; 135 return _Energy = EVol + ESurf + ECoul + ETra << 147 >> 148 >> 149 return _Energy = EVol + ESurf + ECoul + ETrans + ESym; 136 } 150 } 137 151 138 G4double G4StatMFMacroMultiNucleon::CalcEntrop << 152 139 const G4double FreeVol) << 153 G4double G4StatMFMacroMultiNucleon::CalcEntropy(const G4double T, const G4double FreeVol) 140 { 154 { 141 G4double Entropy = 0.0; << 155 const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T); 142 if (_MeanMultiplicity > 0.0) { << 156 const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght; 143 157 144 G4double ThermalWaveLenght = 16.15*fermi/s << 158 G4double Entropy = 0.0; 145 G4double lambda3 = ThermalWaveLenght*Therm << 159 if (_MeanMultiplicity > 0.0) { 146 // Volume term << 160 // Volume term 147 G4double SV = 2.0*theA*T/_InvLevelDensity; << 161 G4double SV = 2.0*static_cast<G4double>(theA)*T/_InvLevelDensity; 148 162 149 // Surface term << 163 // Surface term 150 G4double SS = -G4StatMFParameters::DBetaDT << 164 G4double SS = -G4StatMFParameters::DBetaDT(T)*std::pow(static_cast<G4double>(theA),2./3.); 151 165 152 // Translational term << 166 // Translational term 153 G4double ST = 2.5 + G4Log(FreeVol * std::s << 167 G4double ST = (5./2.)+std::log(FreeVol * std::sqrt(static_cast<G4double>(theA)) * 154 /(lambda3*_MeanMultiplicity)); << 168 static_cast<G4double>(theA)/(lambda3*_MeanMultiplicity)); 155 << 169 156 Entropy = _MeanMultiplicity*(SV + SS + ST) << 170 157 } << 171 Entropy = _MeanMultiplicity*(SV + SS + ST); 158 return Entropy; << 172 } >> 173 >> 174 >> 175 return Entropy; 159 } 176 } 160 177