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