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