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 "G4StatMFMacroTetraNucleon.hh"
00033 #include "G4PhysicalConstants.hh"
00034 #include "G4SystemOfUnits.hh"
00035
00036
00037 G4StatMFMacroTetraNucleon::
00038 G4StatMFMacroTetraNucleon(const G4StatMFMacroTetraNucleon & ) :
00039 G4VStatMFMacroCluster(0)
00040 {
00041 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTetraNucleon::copy_constructor meant to not be accessable");
00042 }
00043
00044
00045
00046 G4StatMFMacroTetraNucleon & G4StatMFMacroTetraNucleon::
00047 operator=(const G4StatMFMacroTetraNucleon & )
00048 {
00049 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTetraNucleon::operator= meant to not be accessable");
00050 return *this;
00051 }
00052
00053
00054 G4bool G4StatMFMacroTetraNucleon::operator==(const G4StatMFMacroTetraNucleon & ) const
00055 {
00056 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTetraNucleon::operator== meant to not be accessable");
00057 return false;
00058 }
00059
00060
00061 G4bool G4StatMFMacroTetraNucleon::operator!=(const G4StatMFMacroTetraNucleon & ) const
00062 {
00063 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTetraNucleon::operator!= meant to not be accessable");
00064 return true;
00065 }
00066
00067
00068
00069 G4double G4StatMFMacroTetraNucleon::CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
00070 const G4double nu, const G4double T)
00071 {
00072 const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
00073
00074 const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
00075
00076 const G4double degeneracy = 1;
00077
00078 const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
00079 (1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
00080
00081 const G4double BindingE = G4NucleiProperties::GetBindingEnergy(theA,2);
00082
00083 G4double exponent = (BindingE + theA*(mu+nu*theZARatio+T*T/_InvLevelDensity) -
00084 Coulomb*theZARatio*theZARatio*std::pow(static_cast<G4double>(theA),5./3.))/T;
00085 if (exponent > 700.0) exponent = 700.0;
00086
00087 _MeanMultiplicity = ( degeneracy*FreeVol* static_cast<G4double>(theA)*
00088 std::sqrt(static_cast<G4double>(theA))/lambda3)*
00089 std::exp(exponent);
00090
00091 return _MeanMultiplicity;
00092 }
00093
00094
00095 G4double G4StatMFMacroTetraNucleon::CalcEnergy(const G4double T)
00096 {
00097 const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
00098 (1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
00099
00100 return _Energy = -G4NucleiProperties::GetBindingEnergy(theA,2) +
00101 Coulomb * theZARatio * theZARatio * std::pow(static_cast<G4double>(theA),5./3.) +
00102 (3./2.) * T +
00103 theA * T*T/_InvLevelDensity;
00104
00105 }
00106
00107
00108
00109 G4double G4StatMFMacroTetraNucleon::CalcEntropy(const G4double T, const G4double FreeVol)
00110 {
00111 const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
00112 const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
00113
00114 G4double Entropy = 0.0;
00115 if (_MeanMultiplicity > 0.0)
00116 Entropy = _MeanMultiplicity*(5./2.+
00117 std::log(8.0*FreeVol/(lambda3*_MeanMultiplicity)))+
00118 8.0*T/_InvLevelDensity;
00119
00120 return Entropy;
00121 }