Geant4-11
Public Member Functions | Private Member Functions | Private Attributes
G4StatMFMacroMultiplicity Class Reference

#include <G4StatMFMacroMultiplicity.hh>

Public Member Functions

G4double CalcChemicalPotentialMu (void)
 
 G4StatMFMacroMultiplicity (const G4double anA, const G4double kappa, const G4double temp, const G4double nu, std::vector< G4VStatMFMacroCluster * > *ClusterVector)
 
G4double GetChemicalPotentialMu (void) const
 
G4double GetMeanMultiplicity (void) const
 
G4double operator() (const G4double mu)
 
 ~G4StatMFMacroMultiplicity ()
 

Private Member Functions

G4double CalcMeanA (const G4double mu)
 
 G4StatMFMacroMultiplicity ()
 
 G4StatMFMacroMultiplicity (const G4StatMFMacroMultiplicity &)
 
G4bool operator!= (const G4StatMFMacroMultiplicity &right) const
 
G4StatMFMacroMultiplicityoperator= (const G4StatMFMacroMultiplicity &right)
 
G4bool operator== (const G4StatMFMacroMultiplicity &right) const
 

Private Attributes

G4double _ChemPotentialMu
 
G4double _ChemPotentialNu
 
G4double _Kappa
 
G4double _MeanMultiplicity
 
G4double _MeanTemperature
 
std::vector< G4VStatMFMacroCluster * > * _theClusters
 
G4double theA
 

Detailed Description

Definition at line 42 of file G4StatMFMacroMultiplicity.hh.

Constructor & Destructor Documentation

◆ G4StatMFMacroMultiplicity() [1/3]

G4StatMFMacroMultiplicity::G4StatMFMacroMultiplicity ( const G4double  anA,
const G4double  kappa,
const G4double  temp,
const G4double  nu,
std::vector< G4VStatMFMacroCluster * > *  ClusterVector 
)
inline

◆ ~G4StatMFMacroMultiplicity()

G4StatMFMacroMultiplicity::~G4StatMFMacroMultiplicity ( )
inline

Definition at line 60 of file G4StatMFMacroMultiplicity.hh.

60{};

◆ G4StatMFMacroMultiplicity() [2/3]

G4StatMFMacroMultiplicity::G4StatMFMacroMultiplicity ( )
inlineprivate

Definition at line 67 of file G4StatMFMacroMultiplicity.hh.

67{};

◆ G4StatMFMacroMultiplicity() [3/3]

G4StatMFMacroMultiplicity::G4StatMFMacroMultiplicity ( const G4StatMFMacroMultiplicity )
inlineprivate

Definition at line 70 of file G4StatMFMacroMultiplicity.hh.

70{};

Member Function Documentation

◆ CalcChemicalPotentialMu()

G4double G4StatMFMacroMultiplicity::CalcChemicalPotentialMu ( void  )

Definition at line 62 of file G4StatMFMacroMultiplicity.cc.

65{
66 G4Pow* g4calc = G4Pow::GetInstance();
68
69 // starting value for chemical potential \mu
70 // it is the derivative of F(T,V)-\nu*Z w.r.t. Af in Af=5
71 G4double ZA5 = _theClusters->operator[](4)->GetZARatio();
72 G4double ILD5 = _theClusters->operator[](4)->GetInvLevelDensity();
75 _ChemPotentialNu*ZA5 +
76 G4StatMFParameters::GetGamma0()*(1.0-2.0*ZA5)*(1.0-2.0*ZA5) +
77 (2.0/3.0)*G4StatMFParameters::Beta(_MeanTemperature)/g4calc->Z13(5) +
78 (5.0/3.0)*CP*ZA5*ZA5*g4calc->Z23(5) -
79 1.5*_MeanTemperature/5.0;
80
82 if (ChemPa/_MeanTemperature > 10.0) ChemPa = 10.0*_MeanTemperature;
83 G4double ChemPb = ChemPa - 0.5*std::abs(ChemPa);
84
85 G4double fChemPa = this->operator()(ChemPa);
86 G4double fChemPb = this->operator()(ChemPb);
87
88 // Set the precision level for locating the root.
89 // If the root is inside this interval, then it's done!
90 const G4double intervalWidth = 1.e-4;
91
92 // bracketing the solution
93 G4int iterations = 0;
94 // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
95 while (fChemPa*fChemPb > 0.0 && iterations < 100)
96 {
97 iterations++;
98 if (std::abs(fChemPa) <= std::abs(fChemPb))
99 {
100 ChemPa += 0.6*(ChemPa-ChemPb);
101 fChemPa = this->operator()(ChemPa);
102 }
103 else
104 {
105 ChemPb += 0.6*(ChemPb-ChemPa);
106 fChemPb = this->operator()(ChemPb);
107 }
108 }
109
110 if (fChemPa*fChemPb > 0.0) // the bracketing failed, complain
111 {
112 G4cout <<"G4StatMFMacroMultiplicity:"<<" ChemPa="<<ChemPa
113 <<" ChemPb="<<ChemPb<< G4endl;
114 G4cout <<"G4StatMFMacroMultiplicity:"<<" fChemPa="<<fChemPa
115 <<" fChemPb="<<fChemPb<< G4endl;
116 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiplicity::CalcChemicalPotentialMu: I couldn't bracket the root.");
117 }
118 else if (fChemPa*fChemPb < 0.0 && std::abs(ChemPa-ChemPb) > intervalWidth)
119 {
121 new G4Solver<G4StatMFMacroMultiplicity>(100,intervalWidth);
122 theSolver->SetIntervalLimits(ChemPa,ChemPb);
123 // if (!theSolver->Crenshaw(*this))
124 if (!theSolver->Brent(*this))
125 {
126 G4cout <<"G4StatMFMacroMultiplicity:"<<" ChemPa="<<ChemPa
127 <<" ChemPb="<<ChemPb<< G4endl;
128 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiplicity::CalcChemicalPotentialMu: I couldn't find the root.");
129 }
130 _ChemPotentialMu = theSolver->GetRoot();
131 delete theSolver;
132 }
133 else // the root is within the interval, which is shorter then the precision level - all done
134 {
135 _ChemPotentialMu = ChemPa;
136 }
137
138 return _ChemPotentialMu;
139}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
Definition: G4Pow.hh:49
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double Z13(G4int Z) const
Definition: G4Pow.hh:123
G4double Z23(G4int Z) const
Definition: G4Pow.hh:125
G4bool Brent(Function &theFunction)
void SetIntervalLimits(const G4double Limit1, const G4double Limit2)
G4double GetRoot(void) const
Definition: G4Solver.hh:76
G4double operator()(const G4double mu)
static G4double GetE0()
static G4double GetGamma0()
static G4double Beta(G4double T)
static G4double GetCoulomb()
static const G4double CP[5]
Definition: paraMaker.cc:43

References _ChemPotentialMu, _ChemPotentialNu, _MeanTemperature, _theClusters, G4StatMFParameters::Beta(), G4Solver< Function >::Brent(), anonymous_namespace{paraMaker.cc}::CP, G4cout, G4endl, G4StatMFParameters::GetCoulomb(), G4StatMFParameters::GetE0(), G4StatMFParameters::GetGamma0(), G4Pow::GetInstance(), G4Solver< Function >::GetRoot(), operator()(), G4Solver< Function >::SetIntervalLimits(), G4Pow::Z13(), and G4Pow::Z23().

Referenced by G4StatMFMacroChemicalPotential::CalcChemicalPotentialMu().

◆ CalcMeanA()

G4double G4StatMFMacroMultiplicity::CalcMeanA ( const G4double  mu)
private

Definition at line 141 of file G4StatMFMacroMultiplicity.cc.

142{
144 G4double V0 = (4.0/3.0)*pi*theA*r0*r0*r0;
145
146 G4double MeanA = 0.0;
147
148 _MeanMultiplicity = 0.0;
149
150 G4int n = 1;
151 for (std::vector<G4VStatMFMacroCluster*>::iterator i = _theClusters->begin();
152 i != _theClusters->end(); ++i)
153 {
154 G4double multip = (*i)->CalcMeanMultiplicity(V0*_Kappa,mu,_ChemPotentialNu,
156 MeanA += multip*(n++);
157 _MeanMultiplicity += multip;
158 }
159
160 return MeanA;
161}
static constexpr double pi
Definition: G4SIunits.hh:55
static G4double Getr0()

References _ChemPotentialNu, _Kappa, _MeanMultiplicity, _MeanTemperature, _theClusters, G4StatMFParameters::Getr0(), CLHEP::detail::n, pi, and theA.

Referenced by operator()().

◆ GetChemicalPotentialMu()

G4double G4StatMFMacroMultiplicity::GetChemicalPotentialMu ( void  ) const
inline

Definition at line 82 of file G4StatMFMacroMultiplicity.hh.

82{return _ChemPotentialMu;}

References _ChemPotentialMu.

◆ GetMeanMultiplicity()

G4double G4StatMFMacroMultiplicity::GetMeanMultiplicity ( void  ) const
inline

◆ operator!=()

G4bool G4StatMFMacroMultiplicity::operator!= ( const G4StatMFMacroMultiplicity right) const
private

Definition at line 56 of file G4StatMFMacroMultiplicity.cc.

57{
58 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiplicity::operator!= meant to not be accessible");
59 return true;
60}

◆ operator()()

G4double G4StatMFMacroMultiplicity::operator() ( const G4double  mu)
inline

Definition at line 62 of file G4StatMFMacroMultiplicity.hh.

63 { return (theA - this->CalcMeanA(mu))/theA; }
G4double CalcMeanA(const G4double mu)

References CalcMeanA(), and theA.

Referenced by CalcChemicalPotentialMu().

◆ operator=()

G4StatMFMacroMultiplicity & G4StatMFMacroMultiplicity::operator= ( const G4StatMFMacroMultiplicity right)
private

Definition at line 43 of file G4StatMFMacroMultiplicity.cc.

44{
45 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiplicity::operator= meant to not be accessible");
46 return *this;
47}

◆ operator==()

G4bool G4StatMFMacroMultiplicity::operator== ( const G4StatMFMacroMultiplicity right) const
private

Definition at line 49 of file G4StatMFMacroMultiplicity.cc.

50{
51 throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMacroMultiplicity::operator== meant to not be accessible");
52 return false;
53}

Field Documentation

◆ _ChemPotentialMu

G4double G4StatMFMacroMultiplicity::_ChemPotentialMu
private

◆ _ChemPotentialNu

G4double G4StatMFMacroMultiplicity::_ChemPotentialNu
private

Definition at line 102 of file G4StatMFMacroMultiplicity.hh.

Referenced by CalcChemicalPotentialMu(), and CalcMeanA().

◆ _Kappa

G4double G4StatMFMacroMultiplicity::_Kappa
private

Definition at line 94 of file G4StatMFMacroMultiplicity.hh.

Referenced by CalcMeanA().

◆ _MeanMultiplicity

G4double G4StatMFMacroMultiplicity::_MeanMultiplicity
private

Definition at line 96 of file G4StatMFMacroMultiplicity.hh.

Referenced by CalcMeanA(), and GetMeanMultiplicity().

◆ _MeanTemperature

G4double G4StatMFMacroMultiplicity::_MeanTemperature
private

Definition at line 98 of file G4StatMFMacroMultiplicity.hh.

Referenced by CalcChemicalPotentialMu(), and CalcMeanA().

◆ _theClusters

std::vector<G4VStatMFMacroCluster*>* G4StatMFMacroMultiplicity::_theClusters
private

Definition at line 104 of file G4StatMFMacroMultiplicity.hh.

Referenced by CalcChemicalPotentialMu(), and CalcMeanA().

◆ theA

G4double G4StatMFMacroMultiplicity::theA
private

Definition at line 92 of file G4StatMFMacroMultiplicity.hh.

Referenced by CalcMeanA(), and operator()().


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