Import Geant4 9.2.0 source tree
This commit is contained in:
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4Solver.cc,v 1.3 2006/06/29 20:24:41 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4Solver.cc,v 1.4 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMF.cc,v 1.5 2006/06/29 20:24:43 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMF.cc,v 1.6 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
@@ -105,13 +105,14 @@ G4FragmentVector * G4StatMF::BreakItUp(const G4Fragment &theFragment)
|
||||
theMicrocanonicalEnsemble = new G4StatMFMicroCanonical(theFragment);
|
||||
|
||||
G4int Iterations = 0;
|
||||
G4int IterationsLimit = 100000;
|
||||
G4double Temperature = 0.0;
|
||||
|
||||
G4bool FirstTime = true;
|
||||
G4StatMFChannel * theChannel = 0;
|
||||
|
||||
|
||||
G4bool ChannelOk;
|
||||
do { // Try to de-excite as much as 10 times
|
||||
do { // Try to de-excite as much as IterationLimit permits
|
||||
do {
|
||||
|
||||
G4double theMeanMult = theMicrocanonicalEnsemble->GetMeanMultiplicity();
|
||||
@@ -136,7 +137,8 @@ G4FragmentVector * G4StatMF::BreakItUp(const G4Fragment &theFragment)
|
||||
theChannel = theMacrocanonicalEnsemble->ChooseAandZ(theFragment);
|
||||
}
|
||||
|
||||
if (!(ChannelOk = theChannel->CheckFragments())) delete theChannel;
|
||||
ChannelOk = theChannel->CheckFragments();
|
||||
if (!ChannelOk) delete theChannel;
|
||||
|
||||
} while (!ChannelOk);
|
||||
|
||||
@@ -155,15 +157,24 @@ G4FragmentVector * G4StatMF::BreakItUp(const G4Fragment &theFragment)
|
||||
//--------------------------------------
|
||||
|
||||
// Find temperature of breaking channel.
|
||||
Temperature = _theEnsemble->GetMeanTemperature(); // Initial value for Temperature
|
||||
|
||||
Temperature = _theEnsemble->GetMeanTemperature(); // Initial guess for Temperature
|
||||
|
||||
if (FindTemperatureOfBreakingChannel(theFragment,theChannel,Temperature)) break;
|
||||
|
||||
} while (Iterations++ < 10);
|
||||
|
||||
// Do not forget to delete this unusable channel, for which we failed to find the temperature,
|
||||
// otherwise for very proton-reach nuclei it would lead to memory leak due to large
|
||||
// number of iterations. N.B. "theChannel" is created in G4StatMFMacroCanonical::ChooseZ()
|
||||
|
||||
// G4cout << " Iteration # " << Iterations << " Mean Temperature = " << Temperature << G4endl;
|
||||
|
||||
delete theChannel;
|
||||
|
||||
} while (Iterations++ < IterationsLimit );
|
||||
|
||||
|
||||
// If Iterations >= 10 means that we couldn't solve for temperature
|
||||
if (Iterations >= 10)
|
||||
|
||||
|
||||
// If Iterations >= IterationsLimit means that we couldn't solve for temperature
|
||||
if (Iterations >= IterationsLimit)
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4StatMF::BreakItUp: Was not possible to solve for temperature of breaking channel");
|
||||
|
||||
|
||||
|
||||
+23
-13
@@ -24,11 +24,17 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFChannel.cc,v 1.6 2006/06/29 20:24:45 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFChannel.cc,v 1.10 2008/11/19 14:33:31 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
//
|
||||
// Modified:
|
||||
// 25.07.08 I.Pshenichnov (in collaboration with Alexander Botvina and Igor
|
||||
// Mishustin (FIAS, Frankfurt, INR, Moscow and Kurchatov Institute,
|
||||
// Moscow, pshenich@fias.uni-frankfurt.de) fixed semi-infinite loop
|
||||
|
||||
|
||||
#include "G4StatMFChannel.hh"
|
||||
#include "G4HadronicException.hh"
|
||||
@@ -91,7 +97,7 @@ G4bool G4StatMFChannel::CheckFragments(void)
|
||||
{
|
||||
G4int A = static_cast<G4int>((*i)->GetA());
|
||||
G4int Z = static_cast<G4int>((*i)->GetZ());
|
||||
if (A > 1 && (Z >= A || Z <= 0) || (A==1 && Z > A) || A <= 0) return false;
|
||||
if ( (A > 1 && (Z > A || Z <= 0)) || (A==1 && Z > A) || A <= 0 ) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -223,7 +229,7 @@ void G4StatMFChannel::PlaceFragments(const G4double anA)
|
||||
G4ThreeVector FragToFragVector = (*i)->GetPosition() - (*j)->GetPosition();
|
||||
G4double Rmin = R0*(std::pow((*i)->GetA(),1./3.) +
|
||||
std::pow((*j)->GetA(),1./3));
|
||||
if (ThereAreOverlaps = (FragToFragVector.mag2() < Rmin*Rmin)) break;
|
||||
if ( (ThereAreOverlaps = (FragToFragVector.mag2() < Rmin*Rmin)) ) break;
|
||||
}
|
||||
counter++;
|
||||
} while (ThereAreOverlaps && counter < 1000);
|
||||
@@ -314,15 +320,19 @@ void G4StatMFChannel::FragmentsMomenta(const G4int NF, const G4int idx,
|
||||
G4double CTM12 = H*(1.0 - 2.0*_theFragments[i2]->GetNuclearMass()*AvailableE/p.mag2());
|
||||
G4double CosTheta1;
|
||||
G4double Sign;
|
||||
do
|
||||
{
|
||||
do
|
||||
{
|
||||
CosTheta1 = 1.0 - 2.0*G4UniformRand();
|
||||
}
|
||||
while (CosTheta1*CosTheta1 < CTM12);
|
||||
}
|
||||
while (CTM12 >= 0.0 && CosTheta1 < 0.0);
|
||||
|
||||
if (CTM12 > 0.9999) {CosTheta1 = 1.;}
|
||||
else {
|
||||
do
|
||||
{
|
||||
do
|
||||
{
|
||||
CosTheta1 = 1.0 - 2.0*G4UniformRand();
|
||||
}
|
||||
while (CosTheta1*CosTheta1 < CTM12);
|
||||
}
|
||||
while (CTM12 >= 0.0 && CosTheta1 < 0.0);
|
||||
}
|
||||
|
||||
if (CTM12 < 0.0) Sign = 1.0;
|
||||
else if (G4UniformRand() <= 0.5) Sign = -1.0;
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFFragment.cc,v 1.6 2006/06/29 20:24:47 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFFragment.cc,v 1.7 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
|
||||
+4
-4
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMacroBiNucleon.cc,v 1.5 2006/06/29 20:24:49 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMacroBiNucleon.cc,v 1.7 2008/10/24 22:56:42 dennis Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
@@ -68,7 +68,7 @@ G4double G4StatMFMacroBiNucleon::CalcMeanMultiplicity(const G4double FreeVol, co
|
||||
const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
|
||||
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
|
||||
|
||||
const G4double BindingE = G4NucleiPropertiesTable::GetBindingEnergy(1,theA); //old value was 2.796*MeV
|
||||
const G4double BindingE = G4NucleiProperties::GetBindingEnergy(theA,1); //old value was 2.796*MeV
|
||||
G4double exponent = (BindingE + theA*(mu+nu*theZARatio) -
|
||||
Coulomb*theZARatio*theZARatio*std::pow(G4double(theA),5./3.))/T;
|
||||
|
||||
@@ -88,7 +88,7 @@ G4double G4StatMFMacroBiNucleon::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.));
|
||||
|
||||
_Energy = -G4NucleiPropertiesTable::GetBindingEnergy(1,theA) +
|
||||
_Energy = -G4NucleiProperties::GetBindingEnergy(theA,1) +
|
||||
Coulomb * theZARatio * theZARatio * std::pow(G4double(theA),5./3.) +
|
||||
(3./2.) * T;
|
||||
|
||||
|
||||
+8
-2
@@ -24,11 +24,17 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMacroCanonical.cc,v 1.6 2006/06/29 20:24:51 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMacroCanonical.cc,v 1.8 2008/11/19 14:33:31 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// by V. Lara
|
||||
// --------------------------------------------------------------------
|
||||
//
|
||||
// Modified:
|
||||
// 25.07.08 I.Pshenichnov (in collaboration with Alexander Botvina and Igor
|
||||
// Mishustin (FIAS, Frankfurt, INR, Moscow and Kurchatov Institute,
|
||||
// Moscow, pshenich@fias.uni-frankfurt.de) fixed infinite loop for
|
||||
// a fagment with Z=A; fixed memory leak
|
||||
|
||||
#include "G4StatMFMacroCanonical.hh"
|
||||
|
||||
|
||||
+6
-3
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMacroChemicalPotential.cc,v 1.5 2006/06/29 20:24:53 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMacroChemicalPotential.cc,v 1.6 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
@@ -93,8 +93,11 @@ G4double G4StatMFMacroChemicalPotential::CalcChemicalPotentialNu(void)
|
||||
new G4Solver<G4StatMFMacroChemicalPotential>(100,1.e-4);
|
||||
theSolver->SetIntervalLimits(ChemPa,ChemPb);
|
||||
// if (!theSolver->Crenshaw(*this))
|
||||
if (!theSolver->Brent(*this))
|
||||
if (!theSolver->Brent(*this)){
|
||||
G4cerr <<"G4StatMFMacroChemicalPotential:"<<" ChemPa="<<ChemPa<<" ChemPb="<<ChemPb<< G4endl;
|
||||
G4cerr <<"G4StatMFMacroChemicalPotential:"<<" fChemPa="<<fChemPa<<" fChemPb="<<fChemPb<< G4endl;
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroChemicalPotential::CalcChemicalPotentialNu: I couldn't find the root.");
|
||||
}
|
||||
_ChemPotentialNu = theSolver->GetRoot();
|
||||
delete theSolver;
|
||||
return _ChemPotentialNu;
|
||||
|
||||
+11
-5
@@ -24,11 +24,17 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMacroMultiNucleon.cc,v 1.5 2006/06/29 20:25:06 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMacroMultiNucleon.cc,v 1.7 2008/11/19 14:33:31 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
//
|
||||
// Modified:
|
||||
// 25.07.08 I.Pshenichnov (in collaboration with Alexander Botvina and Igor
|
||||
// Mishustin (FIAS, Frankfurt, INR, Moscow and Kurchatov Institute,
|
||||
// Moscow, pshenich@fias.uni-frankfurt.de) fixed computation of the
|
||||
// symmetry energy
|
||||
|
||||
#include "G4StatMFMacroMultiNucleon.hh"
|
||||
|
||||
@@ -127,7 +133,7 @@ G4double G4StatMFMacroMultiNucleon::CalcEnergy(const G4double T)
|
||||
G4double EVol = static_cast<G4double>(theA) * (T*T/_InvLevelDensity - G4StatMFParameters::GetE0());
|
||||
|
||||
// Symmetry term
|
||||
// G4double ESym = static_cast<G4double>(theA) * G4StatMFParameters::GetGamma0() *(1. - 2.* theZARatio * theZARatio);
|
||||
G4double ESym = static_cast<G4double>(theA) * G4StatMFParameters::GetGamma0() *(1. - 2.* theZARatio) * (1. - 2.* theZARatio);
|
||||
|
||||
// Surface term
|
||||
G4double ESurf = A23*(G4StatMFParameters::Beta(T) - T*G4StatMFParameters::DBetaDT(T));
|
||||
@@ -138,8 +144,8 @@ G4double G4StatMFMacroMultiNucleon::CalcEnergy(const G4double T)
|
||||
// Translational term
|
||||
G4double ETrans = (3./2.)*T;
|
||||
|
||||
|
||||
return _Energy = EVol + ESurf + ECoul + ETrans; // + ESym;
|
||||
|
||||
return _Energy = EVol + ESurf + ECoul + ETrans + ESym;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+31
-8
@@ -24,12 +24,17 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMacroMultiplicity.cc,v 1.5 2006/06/29 20:25:10 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMacroMultiplicity.cc,v 1.7 2008/11/19 14:33:31 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
|
||||
//
|
||||
// Modified:
|
||||
// 25.07.08 I.Pshenichnov (in collaboration with Alexander Botvina and Igor
|
||||
// Mishustin (FIAS, Frankfurt, INR, Moscow and Kurchatov Institute,
|
||||
// Moscow, pshenich@fias.uni-frankfurt.de) additional checks in
|
||||
// solver of equation for the chemical potential
|
||||
|
||||
#include "G4StatMFMacroMultiplicity.hh"
|
||||
|
||||
@@ -86,36 +91,54 @@ G4double G4StatMFMacroMultiplicity::CalcChemicalPotentialMu(void)
|
||||
G4double fChemPa = this->operator()(ChemPa);
|
||||
G4double fChemPb = this->operator()(ChemPb);
|
||||
|
||||
|
||||
// Set the precision level for locating the root.
|
||||
// If the root is inside this interval, then it's done!
|
||||
G4double intervalWidth = 1.e-4;
|
||||
|
||||
// bracketing the solution
|
||||
G4int iterations = 0;
|
||||
while (fChemPa*fChemPb > 0.0 && iterations < 10)
|
||||
while (fChemPa*fChemPb > 0.0 && iterations < 100)
|
||||
{
|
||||
if (std::abs(fChemPa) <= std::abs(fChemPb))
|
||||
{
|
||||
ChemPa += 0.6*(ChemPa-ChemPb);
|
||||
fChemPa = this->operator()(ChemPa);
|
||||
iterations++;
|
||||
}
|
||||
else
|
||||
{
|
||||
ChemPb += 0.6*(ChemPb-ChemPa);
|
||||
fChemPb = this->operator()(ChemPb);
|
||||
iterations++;
|
||||
}
|
||||
}
|
||||
if (fChemPa*fChemPb > 0.0)
|
||||
|
||||
if (fChemPa*fChemPb > 0.0) // the bracketing failed, complain
|
||||
{
|
||||
G4cerr <<"G4StatMFMacroMultiplicity:"<<" ChemPa="<<ChemPa<<" ChemPb="<<ChemPb<< G4endl;
|
||||
G4cerr <<"G4StatMFMacroMultiplicity:"<<" fChemPa="<<fChemPa<<" fChemPb="<<fChemPb<< G4endl;
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiplicity::CalcChemicalPotentialMu: I couldn't bracket the root.");
|
||||
}
|
||||
|
||||
|
||||
G4Solver<G4StatMFMacroMultiplicity> * theSolver = new G4Solver<G4StatMFMacroMultiplicity>(100,1.e-4);
|
||||
else if (fChemPa*fChemPb < 0.0 && std::abs(ChemPa-ChemPb) > intervalWidth) // the bracketing was OK, try to locate the root
|
||||
{
|
||||
G4Solver<G4StatMFMacroMultiplicity> * theSolver = new G4Solver<G4StatMFMacroMultiplicity>(100,intervalWidth);
|
||||
theSolver->SetIntervalLimits(ChemPa,ChemPb);
|
||||
// if (!theSolver->Crenshaw(*this))
|
||||
if (!theSolver->Brent(*this))
|
||||
{
|
||||
G4cerr <<"G4StatMFMacroMultiplicity:"<<" ChemPa="<<ChemPa<<" ChemPb="<<ChemPb<< G4endl;
|
||||
G4cerr <<"G4StatMFMacroMultiplicity:"<<" fChemPa="<<fChemPa<<" fChemPb="<<fChemPb<< G4endl;
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiplicity::CalcChemicalPotentialMu: I couldn't find the root.");
|
||||
}
|
||||
_ChemPotentialMu = theSolver->GetRoot();
|
||||
delete theSolver;
|
||||
}
|
||||
else // the root is within the interval, which is shorter then the precision level - all done
|
||||
{
|
||||
_ChemPotentialMu = ChemPa;
|
||||
}
|
||||
|
||||
return _ChemPotentialMu;
|
||||
}
|
||||
|
||||
|
||||
+6
-7
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMacroNucleon.cc,v 1.5 2006/06/29 20:25:19 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMacroNucleon.cc,v 1.6 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
@@ -71,13 +71,12 @@ G4double G4StatMFMacroNucleon::CalcMeanMultiplicity(const G4double FreeVol, cons
|
||||
G4double exponent_proton = (mu+nu-Coulomb)/T;
|
||||
G4double exponent_neutron = mu/T;
|
||||
|
||||
if (exponent_neutron > 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(mu/T);
|
||||
_NeutronMeanMultiplicity = (degeneracy*FreeVol/lambda3)*std::exp(exponent_neutron);
|
||||
|
||||
_ProtonMeanMultiplicity = (degeneracy*FreeVol/lambda3)*
|
||||
std::exp((mu+nu-Coulomb)/T);
|
||||
_ProtonMeanMultiplicity = (degeneracy*FreeVol/lambda3)*std::exp(exponent_proton);
|
||||
|
||||
|
||||
|
||||
@@ -91,7 +90,7 @@ 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.));
|
||||
|
||||
return _Energy = Coulomb * theZARatio + (3./2.) * T;
|
||||
return _Energy = Coulomb * theZARatio * theZARatio + (3./2.) * T;
|
||||
|
||||
}
|
||||
|
||||
|
||||
+44
-13
@@ -24,12 +24,17 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMacroTemperature.cc,v 1.5 2006/06/29 20:25:21 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMacroTemperature.cc,v 1.7 2008/11/19 14:33:31 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
|
||||
//
|
||||
// Modified:
|
||||
// 25.07.08 I.Pshenichnov (in collaboration with Alexander Botvina and Igor
|
||||
// Mishustin (FIAS, Frankfurt, INR, Moscow and Kurchatov Institute,
|
||||
// Moscow, pshenich@fias.uni-frankfurt.de) make algorithm closer to
|
||||
// original MF model
|
||||
|
||||
#include "G4StatMFMacroTemperature.hh"
|
||||
|
||||
@@ -58,10 +63,9 @@ G4bool G4StatMFMacroTemperature::operator!=(const G4StatMFMacroTemperature & ) c
|
||||
|
||||
|
||||
G4double G4StatMFMacroTemperature::CalcTemperature(void)
|
||||
// Calculate Chemical potential \nu
|
||||
{
|
||||
// Temperature
|
||||
G4double Ta = 0.00012;
|
||||
// Inital guess for the interval of the ensemble temperature values
|
||||
G4double Ta = 0.5;
|
||||
G4double Tb = std::max(std::sqrt(_ExEnergy/(theA*0.12)),0.01*MeV);
|
||||
|
||||
G4double fTa = this->operator()(Ta);
|
||||
@@ -70,7 +74,7 @@ G4double G4StatMFMacroTemperature::CalcTemperature(void)
|
||||
// Bracketing the solution
|
||||
// T should be greater than 0.
|
||||
// The interval is [Ta,Tb]
|
||||
// We start with a low value for Ta = 0.0012 K
|
||||
// We start with a value for Ta = 0.5 MeV
|
||||
// it should be enough to have fTa > 0 If it isn't
|
||||
// the case, we decrease Ta. But carefully, because
|
||||
// fTa growes very fast when Ta is near 0 and we could have
|
||||
@@ -84,21 +88,48 @@ G4double G4StatMFMacroTemperature::CalcTemperature(void)
|
||||
// Usually, fTb will be less than 0, but if it is not the case:
|
||||
iterations = 0;
|
||||
while (fTa*fTb > 0.0 && iterations++ < 10) {
|
||||
Tb += 1.5*std::abs(Tb-Ta);
|
||||
Tb += 2.*std::abs(Tb-Ta);
|
||||
fTb = this->operator()(Tb);
|
||||
}
|
||||
|
||||
if (fTa*fTb > 0.0) {
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTemperature::CalcTemperature: I couldn't bracket the solution.");
|
||||
G4cerr <<"G4StatMFMacroTemperature:"<<" Ta="<<Ta<<" Tb="<<Tb<< G4endl;
|
||||
G4cerr <<"G4StatMFMacroTemperature:"<<" fTa="<<fTa<<" fTb="<<fTb<< G4endl;
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTemperature::CalcTemperature: I couldn't bracket the solution.");
|
||||
}
|
||||
|
||||
G4Solver<G4StatMFMacroTemperature> * theSolver = new G4Solver<G4StatMFMacroTemperature>(100,1.e-4);
|
||||
theSolver->SetIntervalLimits(Ta,Tb);
|
||||
// if (!theSolver->Crenshaw(*this))
|
||||
if (!theSolver->Brent(*this))
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTemperature::CalcTemperature: I couldn't find the root.");
|
||||
if (!theSolver->Crenshaw(*this)){
|
||||
G4cerr <<"G4StatMFMacroTemperature, Crenshaw method failed:"<<" Ta="<<Ta<<" Tb="<<Tb<< G4endl;
|
||||
G4cerr <<"G4StatMFMacroTemperature, Crenshaw method failed:"<<" fTa="<<fTa<<" fTb="<<fTb<< G4endl;
|
||||
}
|
||||
_MeanTemperature = theSolver->GetRoot();
|
||||
delete theSolver;
|
||||
G4double FunctionValureAtRoot = this->operator()(_MeanTemperature);
|
||||
delete theSolver;
|
||||
|
||||
// Verify if the root is found and it is indeed within the physical domain,
|
||||
// say, between 1 and 50 MeV, otherwise try Brent method:
|
||||
if (_MeanTemperature < 1. || _MeanTemperature > 50. || std::abs(FunctionValureAtRoot) > 5.e-2) {
|
||||
G4cout << "Crenshaw method failed; function = " << FunctionValureAtRoot << " solution? = " << _MeanTemperature << " MeV " << G4endl;
|
||||
G4Solver<G4StatMFMacroTemperature> * theSolverBrent = new G4Solver<G4StatMFMacroTemperature>(200,1.e-3);
|
||||
theSolverBrent->SetIntervalLimits(Ta,Tb);
|
||||
if (!theSolverBrent->Brent(*this)){
|
||||
G4cerr <<"G4StatMFMacroTemperature, Brent method failed:"<<" Ta="<<Ta<<" Tb="<<Tb<< G4endl;
|
||||
G4cerr <<"G4StatMFMacroTemperature, Brent method failed:"<<" fTa="<<fTa<<" fTb="<<fTb<< G4endl;
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTemperature::CalcTemperature: I couldn't find the root with any method.");
|
||||
}
|
||||
|
||||
_MeanTemperature = theSolverBrent->GetRoot();
|
||||
FunctionValureAtRoot = this->operator()(_MeanTemperature);
|
||||
delete theSolverBrent;
|
||||
|
||||
if (_MeanTemperature < 1. || _MeanTemperature > 50. || std::abs(FunctionValureAtRoot) > 5.e-2) {
|
||||
G4cout << "Brent method failed; function = " << FunctionValureAtRoot << " solution? = " << _MeanTemperature << " MeV " << G4endl;
|
||||
throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTemperature::CalcTemperature: I couldn't find the root with any method.");
|
||||
}
|
||||
}
|
||||
|
||||
return _MeanTemperature;
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMacroTetraNucleon.cc,v 1.5 2006/06/29 20:25:23 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMacroTetraNucleon.cc,v 1.7 2008/10/24 22:57:07 dennis Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
@@ -77,7 +77,7 @@ G4double G4StatMFMacroTetraNucleon::CalcMeanMultiplicity(const G4double FreeVol,
|
||||
const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
|
||||
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
|
||||
|
||||
const G4double BindingE = G4NucleiPropertiesTable::GetBindingEnergy(2,theA); //old value was 30.11*MeV
|
||||
const G4double BindingE = G4NucleiProperties::GetBindingEnergy(theA,2); //old value was 30.11*MeV
|
||||
|
||||
G4double exponent = (BindingE + theA*(mu+nu*theZARatio+T*T/_InvLevelDensity) -
|
||||
Coulomb*theZARatio*theZARatio*std::pow(static_cast<G4double>(theA),5./3.))/T;
|
||||
@@ -96,7 +96,7 @@ 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.));
|
||||
|
||||
return _Energy = -G4NucleiPropertiesTable::GetBindingEnergy(2,theA) +
|
||||
return _Energy = -G4NucleiProperties::GetBindingEnergy(theA,2) +
|
||||
Coulomb * theZARatio * theZARatio * std::pow(static_cast<G4double>(theA),5./3.) +
|
||||
(3./2.) * T +
|
||||
theA * T*T/_InvLevelDensity;
|
||||
|
||||
+5
-5
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMacroTriNucleon.cc,v 1.5 2006/06/29 20:25:25 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMacroTriNucleon.cc,v 1.7 2008/10/24 22:57:24 dennis Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
@@ -69,8 +69,8 @@ G4double G4StatMFMacroTriNucleon::CalcMeanMultiplicity(const G4double FreeVol, c
|
||||
const G4double Coulomb = (3./5.)*(elm_coupling/G4StatMFParameters::Getr0())*
|
||||
(1.0 - 1.0/std::pow(1.0+G4StatMFParameters::GetKappaCoulomb(),1./3.));
|
||||
|
||||
const G4double BindingE = G4NucleiPropertiesTable::GetBindingEnergy(1,theA); // old value was 9.224*MeV
|
||||
// + G4NucleiProperties::GetBindingEnergy(2,theA);
|
||||
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;
|
||||
@@ -89,7 +89,7 @@ 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.));
|
||||
|
||||
return _Energy = -G4NucleiPropertiesTable::GetBindingEnergy(1,theA) +
|
||||
return _Energy = -G4NucleiProperties::GetBindingEnergy(theA,1) +
|
||||
Coulomb * theZARatio * theZARatio * std::pow(static_cast<G4double>(theA),5./3.) +
|
||||
(3./2.) * T;
|
||||
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMicroCanonical.cc,v 1.6 2006/06/29 20:25:27 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMicroCanonical.cc,v 1.7 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMicroManager.cc,v 1.5 2006/06/29 20:25:29 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMicroManager.cc,v 1.6 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFMicroPartition.cc,v 1.7 2006/06/29 20:25:31 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFMicroPartition.cc,v 1.8 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// by V. Lara
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4StatMFParameters.cc,v 1.4 2006/06/29 20:25:33 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4StatMFParameters.cc,v 1.5 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VMultiFragmentation.cc,v 1.5 2006/06/29 20:25:35 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4VMultiFragmentation.cc,v 1.6 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara (Nov 1998)
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VStatMFEnsemble.cc,v 1.5 2006/06/29 20:25:37 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4VStatMFEnsemble.cc,v 1.6 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VStatMFMacroCluster.cc,v 1.4 2006/06/29 20:25:39 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-01 $
|
||||
// $Id: G4VStatMFMacroCluster.cc,v 1.5 2008/07/25 11:20:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// Hadronic Process: Nuclear De-excitations
|
||||
// by V. Lara
|
||||
|
||||
Reference in New Issue
Block a user