Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4StatMFMacroTemperature Class Reference

#include <G4StatMFMacroTemperature.hh>

Public Member Functions

 G4StatMFMacroTemperature (const G4double anA, const G4double aZ, const G4double ExEnergy, const G4double FreeE0, const G4double kappa, std::vector< G4VStatMFMacroCluster * > *ClusterVector)
 
 ~G4StatMFMacroTemperature ()
 
G4double operator() (const G4double T)
 
G4double GetMeanMultiplicity (void) const
 
G4double GetChemicalPotentialMu (void) const
 
G4double GetChemicalPotentialNu (void) const
 
G4double GetTemperature (void) const
 
G4double GetEntropy (void) const
 
G4double CalcTemperature (void)
 

Detailed Description

Definition at line 41 of file G4StatMFMacroTemperature.hh.

Constructor & Destructor Documentation

◆ G4StatMFMacroTemperature()

G4StatMFMacroTemperature::G4StatMFMacroTemperature ( const G4double  anA,
const G4double  aZ,
const G4double  ExEnergy,
const G4double  FreeE0,
const G4double  kappa,
std::vector< G4VStatMFMacroCluster * > *  ClusterVector 
)

Definition at line 46 of file G4StatMFMacroTemperature.cc.

48 :
49 theA(anA),
50 theZ(aZ),
51 _ExEnergy(ExEnergy),
52 _FreeInternalE0(FreeE0),
53 _Kappa(kappa),
54 _MeanMultiplicity(0.0),
55 _MeanTemperature(0.0),
56 _ChemPotentialMu(0.0),
57 _ChemPotentialNu(0.0),
58 _MeanEntropy(0.0),
59 _theClusters(ClusterVector)
60{}

Referenced by G4StatMFMacroTemperature().

◆ ~G4StatMFMacroTemperature()

G4StatMFMacroTemperature::~G4StatMFMacroTemperature ( )

Definition at line 62 of file G4StatMFMacroTemperature.cc.

63{}

Member Function Documentation

◆ CalcTemperature()

G4double G4StatMFMacroTemperature::CalcTemperature ( void  )

Definition at line 65 of file G4StatMFMacroTemperature.cc.

66{
67 // Inital guess for the interval of the ensemble temperature values
68 G4double Ta = 0.5;
69 G4double Tb = std::max(std::sqrt(_ExEnergy/(theA*0.12)),0.01*MeV);
70
71 G4double fTa = this->operator()(Ta);
72 G4double fTb = this->operator()(Tb);
73
74 // Bracketing the solution
75 // T should be greater than 0.
76 // The interval is [Ta,Tb]
77 // We start with a value for Ta = 0.5 MeV
78 // it should be enough to have fTa > 0 If it isn't
79 // the case, we decrease Ta. But carefully, because
80 // fTa growes very fast when Ta is near 0 and we could have
81 // an overflow.
82
83 G4int iterations = 0;
84 // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
85 while (fTa < 0.0 && ++iterations < 10) {
86 Ta -= 0.5*Ta;
87 fTa = this->operator()(Ta);
88 }
89 // Usually, fTb will be less than 0, but if it is not the case:
90 iterations = 0;
91 // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
92 while (fTa*fTb > 0.0 && iterations++ < 10) {
93 Tb += 2.*std::fabs(Tb-Ta);
94 fTb = this->operator()(Tb);
95 }
96
97 if (fTa*fTb > 0.0) {
98 G4cerr <<"G4StatMFMacroTemperature:"<<" Ta="<<Ta<<" Tb="<<Tb<< G4endl;
99 G4cerr <<"G4StatMFMacroTemperature:"<<" fTa="<<fTa<<" fTb="<<fTb<< G4endl;
100 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTemperature::CalcTemperature: I couldn't bracket the solution.");
101 }
102
105 theSolver->SetIntervalLimits(Ta,Tb);
106 if (!theSolver->Crenshaw(*this)){
107 G4cout <<"G4StatMFMacroTemperature, Crenshaw method failed:"<<" Ta="
108 <<Ta<<" Tb="<<Tb<< G4endl;
109 G4cout <<"G4StatMFMacroTemperature, Crenshaw method failed:"<<" fTa="
110 <<fTa<<" fTb="<<fTb<< G4endl;
111 }
112 _MeanTemperature = theSolver->GetRoot();
113 G4double FunctionValureAtRoot = this->operator()(_MeanTemperature);
114 delete theSolver;
115
116 // Verify if the root is found and it is indeed within the physical domain,
117 // say, between 1 and 50 MeV, otherwise try Brent method:
118 if (std::fabs(FunctionValureAtRoot) > 5.e-2) {
119 if (_MeanTemperature < 1. || _MeanTemperature > 50.) {
120 G4cout << "Crenshaw method failed; function = " << FunctionValureAtRoot
121 << " solution? = " << _MeanTemperature << " MeV " << G4endl;
122 G4Solver<G4StatMFMacroTemperature> * theSolverBrent =
124 theSolverBrent->SetIntervalLimits(Ta,Tb);
125 if (!theSolverBrent->Brent(*this)){
126 G4cout <<"G4StatMFMacroTemperature, Brent method failed:"
127 <<" Ta="<<Ta<<" Tb="<<Tb<< G4endl;
128 G4cout <<"G4StatMFMacroTemperature, Brent method failed:"
129 <<" fTa="<<fTa<<" fTb="<<fTb<< G4endl;
130 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTemperature::CalcTemperature: I couldn't find the root with any method.");
131 }
132
133 _MeanTemperature = theSolverBrent->GetRoot();
134 FunctionValureAtRoot = this->operator()(_MeanTemperature);
135 delete theSolverBrent;
136 }
137 if (std::abs(FunctionValureAtRoot) > 5.e-2) {
138 G4cout << "Brent method failed; function = " << FunctionValureAtRoot
139 << " solution? = " << _MeanTemperature << " MeV " << G4endl;
140 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroTemperature::CalcTemperature: I couldn't find the root with any method.");
141 }
142 }
143 //G4cout << "G4StatMFMacroTemperature::CalcTemperature: function = "
144 //<< FunctionValureAtRoot
145 // << " T(MeV)= " << _MeanTemperature << G4endl;
146 return _MeanTemperature;
147}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4GLOB_DLL std::ostream G4cerr
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
G4bool Brent(Function &theFunction)
void SetIntervalLimits(const G4double Limit1, const G4double Limit2)
G4double GetRoot(void) const
Definition: G4Solver.hh:76
G4bool Crenshaw(Function &theFunction)
G4double operator()(const G4double T)

◆ GetChemicalPotentialMu()

G4double G4StatMFMacroTemperature::GetChemicalPotentialMu ( void  ) const
inline

Definition at line 73 of file G4StatMFMacroTemperature.hh.

73{return _ChemPotentialMu;}

◆ GetChemicalPotentialNu()

G4double G4StatMFMacroTemperature::GetChemicalPotentialNu ( void  ) const
inline

Definition at line 75 of file G4StatMFMacroTemperature.hh.

75{return _ChemPotentialNu;}

◆ GetEntropy()

G4double G4StatMFMacroTemperature::GetEntropy ( void  ) const
inline

Definition at line 79 of file G4StatMFMacroTemperature.hh.

79{return _MeanEntropy;}

◆ GetMeanMultiplicity()

G4double G4StatMFMacroTemperature::GetMeanMultiplicity ( void  ) const
inline

Definition at line 71 of file G4StatMFMacroTemperature.hh.

71{return _MeanMultiplicity;}

◆ GetTemperature()

G4double G4StatMFMacroTemperature::GetTemperature ( void  ) const
inline

Definition at line 77 of file G4StatMFMacroTemperature.hh.

77{return _MeanTemperature;}

◆ operator()()

G4double G4StatMFMacroTemperature::operator() ( const G4double  T)
inline

Definition at line 52 of file G4StatMFMacroTemperature.hh.

53 { return (_ExEnergy - this->FragsExcitEnergy(T))/_ExEnergy; }

Referenced by CalcTemperature().


The documentation for this class was generated from the following files: