00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include "G4StatMFMacroNucleon.hh"
00033 #include "G4PhysicalConstants.hh"
00034 #include "G4SystemOfUnits.hh"
00035
00036
00037
00038 G4StatMFMacroNucleon & G4StatMFMacroNucleon::
00039 operator=(const G4StatMFMacroNucleon & )
00040 {
00041 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroNucleon::operator= meant to not be accessable");
00042 return *this;
00043 }
00044
00045
00046 G4bool G4StatMFMacroNucleon::operator==(const G4StatMFMacroNucleon & ) const
00047 {
00048 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroNucleon::operator== meant to not be accessable");
00049 return false;
00050 }
00051
00052
00053 G4bool G4StatMFMacroNucleon::operator!=(const G4StatMFMacroNucleon & ) const
00054 {
00055 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroNucleon::operator!= meant to not be accessable");
00056 return true;
00057 }
00058
00059 G4double G4StatMFMacroNucleon::CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
00060 const G4double nu, const G4double T)
00061 {
00062 if (T <= 0.0) throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroNucleon::CalcMeanMultiplicity: Temperature less or equal 0");
00063 const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
00064
00065 const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
00066
00067 const G4double degeneracy = 2.0;
00068
00069 const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
00070 (1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
00071
00072 G4double exponent_proton = (mu+nu-Coulomb)/T;
00073 G4double exponent_neutron = mu/T;
00074
00075 if (exponent_neutron > 700.0) exponent_neutron = 700.0;
00076 if (exponent_proton > 700.0) exponent_proton = 700.0;
00077
00078 _NeutronMeanMultiplicity = (degeneracy*FreeVol/lambda3)*std::exp(exponent_neutron);
00079
00080 _ProtonMeanMultiplicity = (degeneracy*FreeVol/lambda3)*std::exp(exponent_proton);
00081
00082
00083
00084 return _MeanMultiplicity = _NeutronMeanMultiplicity + _ProtonMeanMultiplicity;
00085
00086 }
00087
00088
00089 G4double G4StatMFMacroNucleon::CalcEnergy(const G4double T)
00090 {
00091 const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
00092 (1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
00093
00094 return _Energy = Coulomb * theZARatio * theZARatio + (3./2.) * T;
00095
00096 }
00097
00098 G4double G4StatMFMacroNucleon::CalcEntropy(const G4double T, const G4double FreeVol)
00099 {
00100 const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
00101 const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
00102
00103 G4double NeutronEntropy = 0.0;
00104 if (_NeutronMeanMultiplicity > 0.0)
00105 NeutronEntropy = _NeutronMeanMultiplicity*(5./2.+
00106 std::log(2.0*static_cast<G4double>(theA)*FreeVol/
00107 (lambda3*_NeutronMeanMultiplicity)));
00108
00109
00110 G4double ProtonEntropy = 0.0;
00111 if (_ProtonMeanMultiplicity > 0.0)
00112 ProtonEntropy = _ProtonMeanMultiplicity*(5./2.+
00113 std::log(2.0*static_cast<G4double>(theA)*FreeVol/
00114 (lambda3*_ProtonMeanMultiplicity)));
00115
00116
00117 return NeutronEntropy+ProtonEntropy;
00118 }
00119