Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // 28 // Hadronic Process: Nuclear De-excitations 29 // by V. Lara 30 // 31 // Modified: 32 // 25.07.08 I.Pshenichnov (in collaboration with Alexander Botvina and Igor 33 // Mishustin (FIAS, Frankfurt, INR, Moscow and Kurchatov Institute, 34 // Moscow, pshenich@fias.uni-frankfurt.de) fixed computation of the 35 // symmetry energy 36 37 #include "G4StatMFMacroMultiNucleon.hh" 38 #include "G4PhysicalConstants.hh" 39 #include "G4SystemOfUnits.hh" 40 #include "G4Log.hh" 41 #include "G4Exp.hh" 42 #include "G4Pow.hh" 43 44 // Default constructor 45 G4StatMFMacroMultiNucleon:: 46 G4StatMFMacroMultiNucleon() : 47 G4VStatMFMacroCluster(0) // Beacuse the def. constr. of base class is private 48 { 49 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::default_constructor meant to not be accessible"); 50 } 51 52 // Copy constructor 53 G4StatMFMacroMultiNucleon:: 54 G4StatMFMacroMultiNucleon(const G4StatMFMacroMultiNucleon & ) : 55 G4VStatMFMacroCluster(0) // Beacuse the def. constr. of base class is private 56 { 57 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::copy_constructor meant to not be accessible"); 58 } 59 60 // Operators 61 62 G4StatMFMacroMultiNucleon & G4StatMFMacroMultiNucleon:: 63 operator=(const G4StatMFMacroMultiNucleon & ) 64 { 65 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::operator= meant to not be accessible"); 66 return *this; 67 } 68 69 G4bool G4StatMFMacroMultiNucleon::operator==(const G4StatMFMacroMultiNucleon & ) const 70 { 71 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::operator== meant to not be accessible"); 72 return false; 73 } 74 75 G4bool G4StatMFMacroMultiNucleon::operator!=(const G4StatMFMacroMultiNucleon & ) const 76 { 77 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiNucleon::operator!= meant to not be accessible"); 78 return true; 79 } 80 81 G4double G4StatMFMacroMultiNucleon::CalcMeanMultiplicity(const G4double FreeVol, 82 const G4double mu, 83 const G4double nu, 84 const G4double T) 85 { 86 G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T); 87 G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght; 88 G4Pow* g4calc = G4Pow::GetInstance(); 89 G4double A23 = g4calc->Z23(theA); 90 91 G4double exponent = (mu + nu*theZARatio+ G4StatMFParameters::GetE0() 92 + T*T/_InvLevelDensity 93 - G4StatMFParameters::GetGamma0()*(1.0 - 2.0*theZARatio)* 94 (1.0 - 2.0*theZARatio))*theA 95 - G4StatMFParameters::Beta(T)*A23 96 - G4StatMFParameters::GetCoulomb()*theZARatio*theZARatio*A23*theA; 97 98 exponent /= T; 99 100 if (exponent > 30.0) exponent = 30.0; 101 102 _MeanMultiplicity = std::max((FreeVol * theA * std::sqrt((G4double)theA)/lambda3) * 103 G4Exp(exponent),1.0e-30); 104 return _MeanMultiplicity; 105 } 106 107 G4double G4StatMFMacroMultiNucleon::CalcZARatio(const G4double nu) 108 { 109 G4double den = 8*G4StatMFParameters::GetGamma0() 110 + 2*G4StatMFParameters::GetCoulomb()*G4Pow::GetInstance()->Z23(theA); 111 theZARatio = (4.0*G4StatMFParameters::GetGamma0()+nu)/den; 112 return theZARatio; 113 } 114 115 G4double G4StatMFMacroMultiNucleon::CalcEnergy(const G4double T) 116 { 117 G4Pow* g4calc = G4Pow::GetInstance(); 118 G4double A23 = g4calc->Z23(theA); 119 120 // Volume term 121 G4double EVol = theA * (T*T/_InvLevelDensity - G4StatMFParameters::GetE0()); 122 123 // Symmetry term 124 G4double ESym = theA * G4StatMFParameters::GetGamma0() 125 *(1. - 2.* theZARatio) * (1. - 2.* theZARatio); 126 127 // Surface term 128 G4double ESurf = A23*(G4StatMFParameters::Beta(T) - T*G4StatMFParameters::DBetaDT(T)); 129 130 // Coulomb term 131 G4double ECoul = G4StatMFParameters::GetCoulomb()*A23*theA*theZARatio*theZARatio; 132 133 // Translational term 134 G4double ETrans = 1.5*T; 135 return _Energy = EVol + ESurf + ECoul + ETrans + ESym; 136 } 137 138 G4double G4StatMFMacroMultiNucleon::CalcEntropy(const G4double T, 139 const G4double FreeVol) 140 { 141 G4double Entropy = 0.0; 142 if (_MeanMultiplicity > 0.0) { 143 144 G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T); 145 G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght; 146 // Volume term 147 G4double SV = 2.0*theA*T/_InvLevelDensity; 148 149 // Surface term 150 G4double SS = -G4StatMFParameters::DBetaDT(T)*G4Pow::GetInstance()->Z23(theA); 151 152 // Translational term 153 G4double ST = 2.5 + G4Log(FreeVol * std::sqrt((G4double)theA) * theA 154 /(lambda3*_MeanMultiplicity)); 155 156 Entropy = _MeanMultiplicity*(SV + SS + ST); 157 } 158 return Entropy; 159 } 160