Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4StatMFMacroMultiplicity Class Reference

#include <G4StatMFMacroMultiplicity.hh>

Public Member Functions

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

Detailed Description

Definition at line 43 of file G4StatMFMacroMultiplicity.hh.

Constructor & Destructor Documentation

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

Definition at line 47 of file G4StatMFMacroMultiplicity.hh.

51  :
52  theA(anA),
53  _Kappa(kappa),
54  _MeanMultiplicity(0.0),
55  _MeanTemperature(temp),
56  _ChemPotentialMu(0.0),
57  _ChemPotentialNu(nu),
58  _theClusters(ClusterVector)
59  {};
G4StatMFMacroMultiplicity::~G4StatMFMacroMultiplicity ( )
inline

Definition at line 61 of file G4StatMFMacroMultiplicity.hh.

61 {};

Member Function Documentation

G4double G4StatMFMacroMultiplicity::CalcChemicalPotentialMu ( void  )

Definition at line 63 of file G4StatMFMacroMultiplicity.cc.

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

Here is the call graph for this function:

G4double G4StatMFMacroMultiplicity::GetChemicalPotentialMu ( void  ) const
inline

Definition at line 83 of file G4StatMFMacroMultiplicity.hh.

83 {return _ChemPotentialMu;}
G4double G4StatMFMacroMultiplicity::GetMeanMultiplicity ( void  ) const
inline

Definition at line 81 of file G4StatMFMacroMultiplicity.hh.

81 {return _MeanMultiplicity;}
G4double G4StatMFMacroMultiplicity::operator() ( const G4double  mu)
inline

Definition at line 63 of file G4StatMFMacroMultiplicity.hh.

64  { return (theA - this->CalcMeanA(mu))/theA; }

Here is the caller graph for this function:


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