Import Geant4 10.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-10 11:51:14 +02:00
parent e2d2f9810a
commit 286caacf06
12421 changed files with 730077 additions and 502383 deletions
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4Solver.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMF.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -57,7 +57,7 @@ G4FragmentVector * G4StatMF::BreakItUp(const G4Fragment &theFragment)
// Maximun average multiplicity: M_0 = 2.6 for A ~ 200
// and M_0 = 3.3 for A <= 110
G4double MaxAverageMultiplicity =
G4StatMFParameters::GetMaxAverageMultiplicity(static_cast<G4int>(theFragment.GetA()));
G4StatMFParameters::GetMaxAverageMultiplicity(theFragment.GetA_asInt());
// We'll use two kinds of ensembles
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFChannel.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFFragment.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMacroBiNucleon.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMacroCanonical.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// by V. Lara
// --------------------------------------------------------------------
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMacroChemicalPotential.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMacroMultiNucleon.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMacroMultiplicity.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMacroNucleon.cc 68724 2013-04-05 09:26:32Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -33,87 +33,75 @@
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
// Operators
G4StatMFMacroNucleon::G4StatMFMacroNucleon()
: G4VStatMFMacroCluster(1), _NeutronMeanMultiplicity(0.0),
_ProtonMeanMultiplicity(0.0)
{}
G4StatMFMacroNucleon & G4StatMFMacroNucleon::
operator=(const G4StatMFMacroNucleon & )
G4StatMFMacroNucleon::~G4StatMFMacroNucleon()
{}
G4double
G4StatMFMacroNucleon::CalcMeanMultiplicity(const G4double FreeVol,
const G4double mu,
const G4double nu, const G4double T)
{
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroNucleon::operator= meant to not be accessable");
return *this;
}
if (T <= 0.0) {
throw G4HadronicException(__FILE__, __LINE__,
"G4StatMFMacroNucleon::CalcMeanMultiplicity: Temperature less or equal 0");
}
G4bool G4StatMFMacroNucleon::operator==(const G4StatMFMacroNucleon & ) const
{
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroNucleon::operator== meant to not be accessable");
return false;
}
G4bool G4StatMFMacroNucleon::operator!=(const G4StatMFMacroNucleon & ) const
{
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroNucleon::operator!= meant to not be accessable");
return true;
}
G4double G4StatMFMacroNucleon::CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
const G4double nu, const G4double T)
{
if (T <= 0.0) throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroNucleon::CalcMeanMultiplicity: Temperature less or equal 0");
const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
const G4double degeneracy = 2.0;
static const G4double degeneracy = 2.0;
const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
G4double exponent_proton = (mu+nu-Coulomb)/T;
G4double exponent_neutron = mu/T;
G4double exponent_proton = (mu+nu-Coulomb)/T;
G4double exponent_neutron = mu/T;
if (exponent_neutron > 700.0) exponent_neutron = 700.0;
if (exponent_proton > 700.0) exponent_proton = 700.0;
if (exponent_neutron > 700.0) exponent_neutron = 700.0;
if (exponent_proton > 700.0) exponent_proton = 700.0;
_NeutronMeanMultiplicity = (degeneracy*FreeVol/lambda3)*std::exp(exponent_neutron);
_NeutronMeanMultiplicity =
(degeneracy*FreeVol/lambda3)*std::exp(exponent_neutron);
_ProtonMeanMultiplicity = (degeneracy*FreeVol/lambda3)*std::exp(exponent_proton);
_ProtonMeanMultiplicity =
(degeneracy*FreeVol/lambda3)*std::exp(exponent_proton);
return _MeanMultiplicity = _NeutronMeanMultiplicity + _ProtonMeanMultiplicity;
return _MeanMultiplicity = _NeutronMeanMultiplicity + _ProtonMeanMultiplicity;
}
G4double G4StatMFMacroNucleon::CalcEnergy(const G4double T)
{
const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
return _Energy = Coulomb * theZARatio * theZARatio + (3./2.) * T;
return _Energy = Coulomb * theZARatio * theZARatio + (3./2.) * T;
}
G4double G4StatMFMacroNucleon::CalcEntropy(const G4double T, const G4double FreeVol)
G4double
G4StatMFMacroNucleon::CalcEntropy(const G4double T, const G4double FreeVol)
{
const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
G4double NeutronEntropy = 0.0;
if (_NeutronMeanMultiplicity > 0.0)
NeutronEntropy = _NeutronMeanMultiplicity*(5./2.+
std::log(2.0*static_cast<G4double>(theA)*FreeVol/
(lambda3*_NeutronMeanMultiplicity)));
G4double ProtonEntropy = 0.0;
if (_ProtonMeanMultiplicity > 0.0)
ProtonEntropy = _ProtonMeanMultiplicity*(5./2.+
std::log(2.0*static_cast<G4double>(theA)*FreeVol/
(lambda3*_ProtonMeanMultiplicity)));
return NeutronEntropy+ProtonEntropy;
G4double NeutronEntropy = 0.0;
if (_NeutronMeanMultiplicity > 0.0)
NeutronEntropy = _NeutronMeanMultiplicity*(5./2.+
std::log(2.0*static_cast<G4double>(theA)*FreeVol/
(lambda3*_NeutronMeanMultiplicity)));
G4double ProtonEntropy = 0.0;
if (_ProtonMeanMultiplicity > 0.0)
ProtonEntropy = _ProtonMeanMultiplicity*(5./2.+
std::log(2.0*static_cast<G4double>(theA)*FreeVol/
(lambda3*_ProtonMeanMultiplicity)));
return NeutronEntropy+ProtonEntropy;
}
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMacroTemperature.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMacroTetraNucleon.cc 68724 2013-04-05 09:26:32Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -33,89 +33,66 @@
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
// Copy constructor
G4StatMFMacroTetraNucleon::
G4StatMFMacroTetraNucleon(const G4StatMFMacroTetraNucleon & ) :
G4VStatMFMacroCluster(0) // Beacuse the def. constr. of base class is private
G4StatMFMacroTetraNucleon::G4StatMFMacroTetraNucleon()
: G4VStatMFMacroCluster(4)
{}
G4StatMFMacroTetraNucleon::~G4StatMFMacroTetraNucleon()
{}
G4double
G4StatMFMacroTetraNucleon::CalcMeanMultiplicity(const G4double FreeVol,
const G4double mu,
const G4double nu,
const G4double T)
{
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTetraNucleon::copy_constructor meant to not be accessable");
}
// Operators
G4StatMFMacroTetraNucleon & G4StatMFMacroTetraNucleon::
operator=(const G4StatMFMacroTetraNucleon & )
{
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTetraNucleon::operator= meant to not be accessable");
return *this;
}
G4bool G4StatMFMacroTetraNucleon::operator==(const G4StatMFMacroTetraNucleon & ) const
{
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTetraNucleon::operator== meant to not be accessable");
return false;
}
G4bool G4StatMFMacroTetraNucleon::operator!=(const G4StatMFMacroTetraNucleon & ) const
{
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTetraNucleon::operator!= meant to not be accessable");
return true;
}
G4double G4StatMFMacroTetraNucleon::CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
const G4double nu, const G4double T)
{
const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
const G4double degeneracy = 1; // He4
const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
static const G4double degeneracy = 1; // He4
const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
const G4double BindingE = G4NucleiProperties::GetBindingEnergy(theA,2); //old value was 30.11*MeV
//old value was 30.11*MeV
G4double BindingE = G4NucleiProperties::GetBindingEnergy(theA,2);
G4double exponent = (BindingE + theA*(mu+nu*theZARatio+T*T/_InvLevelDensity) -
Coulomb*theZARatio*theZARatio*std::pow(static_cast<G4double>(theA),5./3.))/T;
if (exponent > 700.0) exponent = 700.0;
G4double exponent = (BindingE + theA*(mu+nu*theZARatio+T*T/_InvLevelDensity)
- Coulomb*theZARatio*theZARatio*
std::pow(static_cast<G4double>(theA),5./3.))/T;
if (exponent > 700.0) exponent = 700.0;
_MeanMultiplicity = ( degeneracy*FreeVol* static_cast<G4double>(theA)*
std::sqrt(static_cast<G4double>(theA))/lambda3)*
std::exp(exponent);
_MeanMultiplicity = ( degeneracy*FreeVol*theA*
std::sqrt(static_cast<G4double>(theA))/lambda3)*
std::exp(exponent);
return _MeanMultiplicity;
return _MeanMultiplicity;
}
G4double G4StatMFMacroTetraNucleon::CalcEnergy(const G4double T)
{
const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
return _Energy = -G4NucleiProperties::GetBindingEnergy(theA,2) +
Coulomb * theZARatio * theZARatio * std::pow(static_cast<G4double>(theA),5./3.) +
(3./2.) * T +
theA * T*T/_InvLevelDensity;
return _Energy = -G4NucleiProperties::GetBindingEnergy(theA,2) +
Coulomb * theZARatio * theZARatio *
std::pow(static_cast<G4double>(theA),5./3.) +
(3./2.) * T +
theA * T*T/_InvLevelDensity;
}
G4double G4StatMFMacroTetraNucleon::CalcEntropy(const G4double T, const G4double FreeVol)
G4double
G4StatMFMacroTetraNucleon::CalcEntropy(const G4double T,
const G4double FreeVol)
{
const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
G4double Entropy = 0.0;
if (_MeanMultiplicity > 0.0)
Entropy = _MeanMultiplicity*(5./2.+
std::log(8.0*FreeVol/(lambda3*_MeanMultiplicity)))+ // 8 = theA*std::sqrt(theA)
8.0*T/_InvLevelDensity;
G4double Entropy = 0.0;
if (_MeanMultiplicity > 0.0)
Entropy = _MeanMultiplicity*(5./2.+
std::log(8.0*FreeVol/(lambda3*_MeanMultiplicity)))+ // 8 = theA*std::sqrt(theA)
8.0*T/_InvLevelDensity;
return Entropy;
return Entropy;
}
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMacroTriNucleon.cc 68724 2013-04-05 09:26:32Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -33,81 +33,62 @@
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
// Operators
G4StatMFMacroTriNucleon::G4StatMFMacroTriNucleon()
: G4VStatMFMacroCluster(3)
{}
G4StatMFMacroTriNucleon & G4StatMFMacroTriNucleon::
operator=(const G4StatMFMacroTriNucleon & )
G4StatMFMacroTriNucleon::~G4StatMFMacroTriNucleon()
{}
G4double
G4StatMFMacroTriNucleon::CalcMeanMultiplicity(const G4double FreeVol,
const G4double mu,
const G4double nu,
const G4double T)
{
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTriNucleon::operator= meant to not be accessable");
return *this;
}
G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
static const G4double degeneracy = 2.0+2.0; // H3 + He3
G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
// old value was 9.224*MeV
G4double BindingE = G4NucleiProperties::GetBindingEnergy(theA,1);
// + G4NucleiProperties::GetBindingEnergy(theA,2);
G4bool G4StatMFMacroTriNucleon::operator==(const G4StatMFMacroTriNucleon & ) const
{
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTriNucleon::operator== meant to not be accessable");
return false;
}
G4double exponent = (BindingE+ theA*(mu+nu*theZARatio) -
Coulomb*theZARatio*theZARatio
*std::pow(static_cast<G4double>(theA),5./3.))/T;
if (exponent > 700.0) exponent = 700.0;
G4bool G4StatMFMacroTriNucleon::operator!=(const G4StatMFMacroTriNucleon & ) const
{
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTriNucleon::operator!= meant to not be accessable");
return true;
}
G4double G4StatMFMacroTriNucleon::CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
const G4double nu, const G4double T)
{
const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
const G4double degeneracy = 2.0+2.0; // H3 + He3
const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
const G4double BindingE = G4NucleiProperties::GetBindingEnergy(theA,1); // old value was 9.224*MeV
// + G4NucleiProperties::GetBindingEnergy(theA,2);
G4double exponent = (BindingE+ theA*(mu+nu*theZARatio) -
Coulomb*theZARatio*theZARatio*std::pow(static_cast<G4double>(theA),5./3.))/T;
if (exponent > 700.0) exponent = 700.0;
_MeanMultiplicity = (degeneracy*FreeVol*static_cast<G4double>(theA)*
std::sqrt(static_cast<G4double>(theA))/lambda3)*
std::exp(exponent);
_MeanMultiplicity = (degeneracy*FreeVol*theA*
std::sqrt(static_cast<G4double>(theA))/lambda3)*
std::exp(exponent);
return _MeanMultiplicity;
return _MeanMultiplicity;
}
G4double G4StatMFMacroTriNucleon::CalcEnergy(const G4double T)
{
const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
return _Energy = -G4NucleiProperties::GetBindingEnergy(theA,1) +
Coulomb * theZARatio * theZARatio * std::pow(static_cast<G4double>(theA),5./3.) +
(3./2.) * T;
return _Energy = -G4NucleiProperties::GetBindingEnergy(theA,1) +
Coulomb * theZARatio * theZARatio
* std::pow(static_cast<G4double>(theA),5./3.) + (3./2.) * T;
}
G4double G4StatMFMacroTriNucleon::CalcEntropy(const G4double T, const G4double FreeVol)
G4double
G4StatMFMacroTriNucleon::CalcEntropy(const G4double T, const G4double FreeVol)
{
const G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
const G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
G4double ThermalWaveLenght = 16.15*fermi/std::sqrt(T);
G4double lambda3 = ThermalWaveLenght*ThermalWaveLenght*ThermalWaveLenght;
G4double Entropy = 0.0;
if (_MeanMultiplicity > 0.0)
Entropy = _MeanMultiplicity*(5./2.+
std::log(4.0*static_cast<G4double>(theA)*
std::sqrt(static_cast<G4double>(theA))*FreeVol/(lambda3*_MeanMultiplicity)));
G4double Entropy = 0.0;
if (_MeanMultiplicity > 0.0)
Entropy = _MeanMultiplicity*(2.5 + std::log((4*theA)*
std::sqrt(static_cast<G4double>(theA))*FreeVol
/(lambda3*_MeanMultiplicity)));
return Entropy;
return Entropy;
}
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMicroCanonical.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -261,7 +261,7 @@ G4StatMFChannel * G4StatMFMicroCanonical::ChooseAandZ(const G4Fragment & theFra
for (it = _ThePartitionManagerVector.begin(); it != _ThePartitionManagerVector.end(); ++it) {
AccumWeight += (*it)->GetProbability();
if (RandNumber < AccumWeight) {
return (*it)->ChooseChannel(theFragment.GetA(),theFragment.GetZ(),__MeanTemperature);
return (*it)->ChooseChannel(theFragment.GetA_asInt(),theFragment.GetZ_asInt(),__MeanTemperature);
}
}
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMicroCanonical::ChooseAandZ: wrong normalization!");
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMicroManager.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -61,11 +61,9 @@ G4bool G4StatMFMicroManager::operator!=(const G4StatMFMicroManager & ) const
return true;
}
// constructor
G4StatMFMicroManager::G4StatMFMicroManager(const G4Fragment & theFragment, const G4int multiplicity,
const G4double FreeIntE, const G4double SCompNuc) :
G4StatMFMicroManager::G4StatMFMicroManager(const G4Fragment & theFragment, G4int multiplicity,
G4double FreeIntE, G4double SCompNuc) :
_Normalization(0.0)
{
// Perform class initialization
@@ -87,15 +85,15 @@ G4StatMFMicroManager::~G4StatMFMicroManager()
// Initialization method
void G4StatMFMicroManager::Initialize(const G4Fragment & theFragment, const G4int im,
const G4double FreeIntE, const G4double SCompNuc)
void G4StatMFMicroManager::Initialize(const G4Fragment & theFragment, G4int im,
G4double FreeIntE, G4double SCompNuc)
{
G4int i;
G4double U = theFragment.GetExcitationEnergy();
G4double A = theFragment.GetA();
G4double Z = theFragment.GetZ();
G4int A = theFragment.GetA_asInt();
G4int Z = theFragment.GetZ_asInt();
// Statistical weights
_WW = 0.0;
@@ -118,7 +116,7 @@ void G4StatMFMicroManager::Initialize(const G4Fragment & theFragment, const G4in
// FragmentAtomicNumbers[m-1]>FragmentAtomicNumbers[m-2]>...>FragmentAtomicNumbers[0]
// Our initial distribution is
// FragmentAtomicNumbers[m-1]=A, FragmentAtomicNumbers[m-2]=0, ..., FragmentAtomicNumbers[0]=0
FragmentAtomicNumbers[im-1] = static_cast<G4int>(A);
FragmentAtomicNumbers[im-1] = A;
for (i = 0; i < (im - 1); i++) FragmentAtomicNumbers[i] = 0;
// We try to distribute A nucleons in partitions of m fragments
@@ -127,8 +125,7 @@ void G4StatMFMicroManager::Initialize(const G4Fragment & theFragment, const G4in
while (MakePartition(im,FragmentAtomicNumbers)) {
// Allowed partitions are stored and its probability calculated
G4StatMFMicroPartition * aPartition = new G4StatMFMicroPartition(static_cast<G4int>(A),
static_cast<G4int>(Z));
G4StatMFMicroPartition * aPartition = new G4StatMFMicroPartition(A,Z);
G4double PartitionProbability = 0.0;
for (i = im-1; i >= 0; i--) aPartition->SetPartitionFragment(FragmentAtomicNumbers[i]);
@@ -142,15 +139,9 @@ void G4StatMFMicroManager::Initialize(const G4Fragment & theFragment, const G4in
_MeanEntropy += PartitionProbability * aPartition->GetEntropy();
}
// garbage collection
// delete [] FragmentAtomicNumbers;
}
G4bool G4StatMFMicroManager::MakePartition(const G4int k, G4int * ANumbers)
G4bool G4StatMFMicroManager::MakePartition(G4int k, G4int * ANumbers)
// Distributes A nucleons between k fragments
// mantaining the order ANumbers[k-1] > ANumbers[k-2] > ... > ANumbers[0]
// If it is possible returns true. In other case returns false
@@ -169,9 +160,7 @@ G4bool G4StatMFMicroManager::MakePartition(const G4int k, G4int * ANumbers)
return false;
}
void G4StatMFMicroManager::Normalize(const G4double Norm)
void G4StatMFMicroManager::Normalize(G4double Norm)
{
_Normalization = Norm;
_WW /= Norm;
@@ -182,8 +171,8 @@ void G4StatMFMicroManager::Normalize(const G4double Norm)
return;
}
G4StatMFChannel * G4StatMFMicroManager::ChooseChannel(const G4double A0, const G4double Z0,
const G4double MeanT)
G4StatMFChannel*
G4StatMFMicroManager::ChooseChannel(G4int A0, G4int Z0, G4double MeanT)
{
G4double RandNumber = _Normalization * _WW * G4UniformRand();
G4double AccumWeight = 0.0;
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFMicroPartition.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// by V. Lara
// --------------------------------------------------------------------
@@ -63,9 +63,7 @@ G4bool G4StatMFMicroPartition::operator!=(const G4StatMFMicroPartition & ) const
return true;
}
void G4StatMFMicroPartition::CoulombFreeEnergy(const G4double anA)
void G4StatMFMicroPartition::CoulombFreeEnergy(G4int anA)
{
// This Z independent factor in the Coulomb free energy
G4double CoulombConstFactor = 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1.0/3.0);
@@ -74,10 +72,12 @@ void G4StatMFMicroPartition::CoulombFreeEnergy(const G4double anA)
(1. - CoulombConstFactor)/G4StatMFParameters::Getr0();
// We use the aproximation Z_f ~ Z/A * A_f
G4double ZA = G4double(theZ)/G4double(theA);
if (anA == 0 || anA == 1)
{
_theCoulombFreeEnergy.push_back(CoulombConstFactor*(theZ/theA)*(theZ/theA));
_theCoulombFreeEnergy.push_back(CoulombConstFactor*ZA*ZA);
}
else if (anA == 2 || anA == 3 || anA == 4)
{
@@ -86,13 +86,10 @@ void G4StatMFMicroPartition::CoulombFreeEnergy(const G4double anA)
}
else // anA > 4
{
_theCoulombFreeEnergy.push_back(CoulombConstFactor*(theZ/theA)*(theZ/theA)*
std::pow(anA,5./3.));
_theCoulombFreeEnergy.push_back(CoulombConstFactor*ZA*ZA*std::pow(anA,5./3.));
}
}
G4double G4StatMFMicroPartition::GetCoulombEnergy(void)
{
G4double CoulombFactor = 1.0/
@@ -101,22 +98,22 @@ G4double G4StatMFMicroPartition::GetCoulombEnergy(void)
G4double CoulombEnergy = elm_coupling*(3./5.)*theZ*theZ*CoulombFactor/
(G4StatMFParameters::Getr0()*std::pow(static_cast<G4double>(theA),1./3.));
G4double ZA = G4double(theZ)/G4double(theA);
for (unsigned int i = 0; i < _thePartition.size(); i++)
CoulombEnergy += _theCoulombFreeEnergy[i] - elm_coupling*(3./5.)*
(theZ/theA)*(theZ/theA)*std::pow(static_cast<G4double>(_thePartition[i]),5./3.)/
ZA*ZA*std::pow(static_cast<G4double>(_thePartition[i]),5./3.)/
G4StatMFParameters::Getr0();
return CoulombEnergy;
}
G4double G4StatMFMicroPartition::GetPartitionEnergy(const G4double T)
G4double G4StatMFMicroPartition::GetPartitionEnergy(G4double T)
{
G4double CoulombFactor = 1.0/
std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1.0/3.0);
G4double PartitionEnergy = 0.0;
// We use the aprox that Z_f ~ Z/A * A_f
for (unsigned int i = 0; i < _thePartition.size(); i++)
{
@@ -171,15 +168,14 @@ G4double G4StatMFMicroPartition::GetPartitionEnergy(const G4double T)
return PartitionEnergy;
}
G4double G4StatMFMicroPartition::CalcPartitionTemperature(const G4double U,
const G4double FreeInternalE0)
G4double G4StatMFMicroPartition::CalcPartitionTemperature(G4double U,
G4double FreeInternalE0)
{
G4double PartitionEnergy = GetPartitionEnergy(0.0);
// If this happens, T = 0 MeV, which means that probability for this
// partition will be 0
if (std::abs(U + FreeInternalE0 - PartitionEnergy) < 0.003) return -1.0;
if (std::fabs(U + FreeInternalE0 - PartitionEnergy) < 0.003) return -1.0;
// Calculate temperature by midpoint method
@@ -204,9 +200,9 @@ G4double G4StatMFMicroPartition::CalcPartitionTemperature(const G4double U,
for (G4int i = 0; i < 1000; i++)
{
Tmid = (Ta+Tb)/2.0;
if (std::abs(Ta-Tb) <= eps) return Tmid;
if (std::fabs(Ta-Tb) <= eps) return Tmid;
G4double Dmid = (U + FreeInternalE0 - GetPartitionEnergy(Tmid))/U;
if (std::abs(Dmid) < 0.003) return Tmid;
if (std::fabs(Dmid) < 0.003) return Tmid;
if (Da*Dmid < 0.0)
{
Tb = Tmid;
@@ -226,10 +222,9 @@ G4double G4StatMFMicroPartition::CalcPartitionTemperature(const G4double U,
}
G4double G4StatMFMicroPartition::CalcPartitionProbability(const G4double U,
const G4double FreeInternalE0,
const G4double SCompound)
G4double G4StatMFMicroPartition::CalcPartitionProbability(G4double U,
G4double FreeInternalE0,
G4double SCompound)
{
G4double T = CalcPartitionTemperature(U,FreeInternalE0);
if ( T <= 0.0) return _Probability = 0.0;
@@ -293,7 +288,7 @@ G4double G4StatMFMicroPartition::CalcPartitionProbability(const G4double U,
G4double FreeVolume = kappa*V0;
G4double TranslationalS = std::max(0.0, std::log(ProbA32/Fact) +
(_thePartition.size()-1.0)*std::log(FreeVolume/ThermalWaveLenght3) +
1.5*(_thePartition.size()-1.0) - (3./2.)*std::log(theA));
1.5*(_thePartition.size()-1.0) - (3./2.)*std::log(G4double(theA)));
PartitionEntropy += std::log(ProbDegeneracy) + TranslationalS;
_Entropy = PartitionEntropy;
@@ -304,9 +299,7 @@ G4double G4StatMFMicroPartition::CalcPartitionProbability(const G4double U,
return _Probability = std::exp(exponent);
}
G4double G4StatMFMicroPartition::GetDegeneracyFactor(const G4int A)
G4double G4StatMFMicroPartition::GetDegeneracyFactor(G4int A)
{
// Degeneracy factors are statistical factors
// DegeneracyFactor for nucleon is (2S_n + 1)(2I_n + 1) = 4
@@ -314,13 +307,12 @@ G4double G4StatMFMicroPartition::GetDegeneracyFactor(const G4int A)
if (A > 4) DegFactor = 1.0;
else if (A == 1) DegFactor = 4.0; // nucleon
else if (A == 2) DegFactor = 3.0; // Deuteron
else if (A == 3) DegFactor = 2.0+2.0; // Triton + He3
else if (A == 3) DegFactor = 4.0; // Triton + He3
else if (A == 4) DegFactor = 1.0; // alpha
return DegFactor;
}
G4StatMFChannel * G4StatMFMicroPartition::ChooseZ(const G4double A0, const G4double Z0, const G4double MeanT)
G4StatMFChannel * G4StatMFMicroPartition::ChooseZ(G4int A0, G4int Z0, G4double MeanT)
// Gives fragments charges
{
std::vector<G4int> FragmentsZ;
@@ -346,9 +338,9 @@ G4StatMFChannel * G4StatMFMicroPartition::ChooseZ(const G4double A0, const G4dou
FragmentsZ.push_back(Zf);
SumZ += Zf;
}
ZBalance = static_cast<G4int>(Z0) - SumZ;
ZBalance = Z0 - SumZ;
}
while (std::abs(ZBalance) > 1.1);
while (std::abs(ZBalance) > 1);
FragmentsZ[0] += ZBalance;
G4StatMFChannel * theChannel = new G4StatMFChannel;
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4StatMFParameters.cc 68724 2013-04-05 09:26:32Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -33,62 +33,105 @@
#include "G4StatMFParameters.hh"
#include "G4SystemOfUnits.hh"
const G4double G4StatMFParameters::_Kappa = 1.0; // dimensionless
const G4double G4StatMFParameters::fKappa = 1.0; // dimensionless
const G4double G4StatMFParameters::_KappaCoulomb = 2.0; // dimensionless
const G4double G4StatMFParameters::fKappaCoulomb = 2.0; // dimensionless
const G4double G4StatMFParameters::_Epsilon0 = 16.0*MeV;
const G4double G4StatMFParameters::fEpsilon0 = 16.0*MeV;
// Bethe-Weizsacker coefficients
const G4double G4StatMFParameters::_E0 = 16.0*MeV;
const G4double G4StatMFParameters::fE0 = 16.0*MeV;
const G4double G4StatMFParameters::_Beta0 = 18.0*MeV;
const G4double G4StatMFParameters::fBeta0 = 18.0*MeV;
const G4double G4StatMFParameters::_Gamma0 = 25.0*MeV;
const G4double G4StatMFParameters::fGamma0 = 25.0*MeV;
// Critical temperature (for liquid-gas phase transitions)
const G4double G4StatMFParameters::_CriticalTemp = 18.0*MeV;
const G4double G4StatMFParameters::fCriticalTemp = 18.0*MeV;
// Nuclear radius
const G4double G4StatMFParameters::_r0 = 1.17*fermi;
const G4double G4StatMFParameters::fr0 = 1.17*fermi;
G4double G4StatMFParameters::Beta(const G4double T)
{
if (T > _CriticalTemp) return 0.0;
else {
G4double CriticalTempSqr = _CriticalTemp*_CriticalTemp;
G4double TempSqr = T*T;
G4double tmp = (CriticalTempSqr-TempSqr)/(CriticalTempSqr+TempSqr);
return _Beta0*tmp*std::pow(tmp,1.0/4.0);
}
G4StatMFParameters::G4StatMFParameters()
{}
G4StatMFParameters::~G4StatMFParameters()
{}
G4double G4StatMFParameters::GetKappa()
{
return fKappa;
}
G4double G4StatMFParameters::GetKappaCoulomb()
{
return fKappaCoulomb;
}
G4double G4StatMFParameters::GetEpsilon0()
{
return fEpsilon0;
}
G4double G4StatMFParameters::GetE0()
{
return fE0;
}
G4double G4StatMFParameters::GetBeta0()
{
return fBeta0;
}
G4double G4StatMFParameters::GetGamma0()
{
return fGamma0;
}
G4double G4StatMFParameters::GetCriticalTemp()
{
return fCriticalTemp;
}
G4double G4StatMFParameters::Getr0()
{
return fr0;
}
G4double G4StatMFParameters::DBetaDT(const G4double T)
G4double G4StatMFParameters::Beta(G4double T)
{
if (T > _CriticalTemp) return 0.0;
else {
G4double CriticalTempSqr = _CriticalTemp*_CriticalTemp;
G4double res = 0.0;
if (T < fCriticalTemp) {
G4double CriticalTempSqr = fCriticalTemp*fCriticalTemp;
G4double TempSqr = T*T;
G4double tmp = (CriticalTempSqr-TempSqr)/(CriticalTempSqr+TempSqr);
return -5.0*_Beta0*std::pow(tmp,1.0/4.0)*(CriticalTempSqr*T)/
res = fBeta0*tmp*std::pow(tmp,0.25);
}
return res;
}
G4double G4StatMFParameters::DBetaDT(G4double T)
{
G4double res = 0.0;
if (T < fCriticalTemp) {
G4double CriticalTempSqr = fCriticalTemp*fCriticalTemp;
G4double TempSqr = T*T;
G4double tmp = (CriticalTempSqr-TempSqr)/(CriticalTempSqr+TempSqr);
res = -5.0*fBeta0*std::pow(tmp,0.25)*(CriticalTempSqr*T)/
((CriticalTempSqr+TempSqr)*(CriticalTempSqr+TempSqr));
}
return res;
}
G4double G4StatMFParameters::GetMaxAverageMultiplicity(const G4int A)
G4double
G4StatMFParameters::GetMaxAverageMultiplicity(G4int A)
{
// Maximun average multiplicity: M_0 = 2.6 for A ~ 200
// and M_0 = 3.3 for A <= 110
G4double MaxAverageMultiplicity = 2.6;
if (A <= 110) MaxAverageMultiplicity = 3.3;
if (A <= 110) { MaxAverageMultiplicity = 3.3; }
return MaxAverageMultiplicity;
}
G4StatMFParameters G4StatMFParameters::theStatMFParameters;
G4StatMFParameters * G4StatMFParameters::GetAddress()
{ return &theStatMFParameters; }
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4VMultiFragmentation.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara (Nov 1998)
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4VStatMFEnsemble.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4VStatMFMacroCluster.cc 67983 2013-03-13 10:42:03Z gcosmo $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara