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

#include <G4StatMFMacroCanonical.hh>

Inheritance diagram for G4StatMFMacroCanonical:

Public Member Functions

 G4StatMFMacroCanonical ()
 ~G4StatMFMacroCanonical () override
void Initialise (const G4Fragment &theFragment) override
G4StatMFChannelChooseAandZ (const G4Fragment &theFragment) override
 G4StatMFMacroCanonical (const G4StatMFMacroCanonical &)=delete
G4StatMFMacroCanonicaloperator= (const G4StatMFMacroCanonical &right)=delete
G4bool operator== (const G4StatMFMacroCanonical &right) const =delete
G4bool operator!= (const G4StatMFMacroCanonical &right) const =delete
Public Member Functions inherited from G4VStatMFEnsemble
 G4VStatMFEnsemble ()=default
virtual ~G4VStatMFEnsemble ()=default
G4double GetMeanMultiplicity () const
G4double GetMeanTemperature () const
 G4VStatMFEnsemble (const G4VStatMFEnsemble &right)=delete
G4VStatMFEnsembleoperator= (const G4VStatMFEnsemble &right)=delete
G4bool operator== (const G4VStatMFEnsemble &right) const =delete
G4bool operator!= (const G4VStatMFEnsemble &right) const =delete

Additional Inherited Members

Protected Attributes inherited from G4VStatMFEnsemble
G4double pFreeInternalE0 {0.0}
G4double pMeanTemperature {0.0}
G4double pMeanEntropy {0.0}
G4double pMeanMultiplicity {0.0}

Detailed Description

Definition at line 49 of file G4StatMFMacroCanonical.hh.

Constructor & Destructor Documentation

◆ G4StatMFMacroCanonical() [1/2]

G4StatMFMacroCanonical::G4StatMFMacroCanonical ( )

Definition at line 43 of file G4StatMFMacroCanonical.cc.

44{
45 theTemp = new G4StatMFMacroTemperature();
46 fClusters.reserve(220);
47 fAcumMultiplicity.reserve(220);
48
49 // Get memory for clusters
50 fClusters.push_back(new G4StatMFMacroNucleon);
51 fClusters.push_back(new G4StatMFMacroBiNucleon);
52 fClusters.push_back(new G4StatMFMacroTriNucleon);
53 fClusters.push_back(new G4StatMFMacroTetraNucleon);
54}

Referenced by G4StatMFMacroCanonical(), operator!=(), operator=(), and operator==().

◆ ~G4StatMFMacroCanonical()

G4StatMFMacroCanonical::~G4StatMFMacroCanonical ( )
override

Definition at line 57 of file G4StatMFMacroCanonical.cc.

58{
59 // garbage collection
60 if (!fClusters.empty()) {
61 for(auto const & p : fClusters) { delete p; }
62 }
63 delete theTemp;
64}

◆ G4StatMFMacroCanonical() [2/2]

G4StatMFMacroCanonical::G4StatMFMacroCanonical ( const G4StatMFMacroCanonical & )
delete

Member Function Documentation

◆ ChooseAandZ()

G4StatMFChannel * G4StatMFMacroCanonical::ChooseAandZ ( const G4Fragment & theFragment)
overridevirtual

Implements G4VStatMFEnsemble.

Definition at line 110 of file G4StatMFMacroCanonical.cc.

112{
113 G4int A = theFragment.GetA_asInt();
114 G4int Z = theFragment.GetZ_asInt();
115
116 std::vector<G4int> ANumbers(A);
117
118 G4double Multiplicity = ChooseA(A, ANumbers);
119
120 std::vector<G4int> FragmentsA;
121
122 G4int i = 0;
123 for (i = 0; i < A; i++)
124 {
125 for (G4int j = 0; j < ANumbers[i]; j++) FragmentsA.push_back(i+1);
126 }
127
128 // Sort fragments in decreasing order
129 G4int im = 0;
130 for (G4int j = 0; j < Multiplicity; j++)
131 {
132 G4int FragmentsAMax = 0;
133 im = j;
134 for (i = j; i < Multiplicity; ++i)
135 {
136 if (FragmentsA[i] <= FragmentsAMax) { continue; }
137 else
138 {
139 im = i;
140 FragmentsAMax = FragmentsA[im];
141 }
142 }
143 if (im != j)
144 {
145 FragmentsA[im] = FragmentsA[j];
146 FragmentsA[j] = FragmentsAMax;
147 }
148 }
149 return ChooseZ(Z,FragmentsA);
150}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
const G4double A[17]
G4int GetZ_asInt() const
G4int GetA_asInt() const

◆ Initialise()

void G4StatMFMacroCanonical::Initialise ( const G4Fragment & theFragment)
overridevirtual

Implements G4VStatMFEnsemble.

Definition at line 67 of file G4StatMFMacroCanonical.cc.

68{
73
74 G4int A = theFragment.GetA_asInt();
75 G4int Z = theFragment.GetZ_asInt();
76 G4double x = 1.0 - (2*Z)/G4double(A);
77 G4Pow* g4calc = G4Pow::GetInstance();
78 G4double a13 = g4calc->Z13(A);
79
80 // Free Internal energy at T = 0
81 pFreeInternalE0 = A*(Gamma0*x*x - E0) // Symmetry term & Volume term (for T = 0)
82 + Beta0*a13*a13 + // Surface term (for T = 0)
83 0.6*CLHEP::elm_coupling*(Z*Z)/(R0*a13); // Coulomb term
84
85 G4int n = (G4int)fClusters.size();
86 for (G4int i = n; i < A; ++i) {
87 fClusters.push_back(new G4StatMFMacroMultiNucleon(i+1)); // Size 5 ... A
88 }
89 // Excitation Energy
90 G4double U = theFragment.GetExcitationEnergy();
91
92 // Fragment Multiplicity
93 G4double FragMult = std::max((1.0+2.31*(U/CLHEP::MeV - 3.5*A))/100.0, 2.0);
94
95 // Parameter Kappa
96 fKappa = (1.0 + CLHEP::elm_coupling*(g4calc->A13(FragMult) - 1.0)/(R0*a13));
97 fKappa = fKappa*fKappa*fKappa - 1.0;
98
99 theTemp->Initialise(A, Z, U, pFreeInternalE0, fKappa, &fClusters);
100
101 pMeanTemperature = theTemp->CalcTemperature();
102 fChemPotentialNu = theTemp->GetChemicalPotentialNu();
103 fChemPotentialMu = theTemp->GetChemicalPotentialMu();
104 pMeanMultiplicity = theTemp->GetMeanMultiplicity();
105 pMeanEntropy = theTemp->GetEntropy();
106}
G4double GetExcitationEnergy() const
static G4Pow * GetInstance()
Definition G4Pow.cc:41
G4double A13(G4double A) const
Definition G4Pow.cc:116
G4double Z13(G4int Z) const
Definition G4Pow.hh:123
static G4double GetBeta0()
static G4double GetE0()
static G4double GetGamma0()
static G4double Getr0()

◆ operator!=()

G4bool G4StatMFMacroCanonical::operator!= ( const G4StatMFMacroCanonical & right) const
delete

◆ operator=()

G4StatMFMacroCanonical & G4StatMFMacroCanonical::operator= ( const G4StatMFMacroCanonical & right)
delete

◆ operator==()

G4bool G4StatMFMacroCanonical::operator== ( const G4StatMFMacroCanonical & right) const
delete

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