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

#include <G4StatMFMicroPartition.hh>

Public Member Functions

 G4StatMFMicroPartition (G4int A, G4int Z)
 ~G4StatMFMicroPartition ()
G4bool operator== (const G4StatMFMicroPartition &right) const
G4bool operator!= (const G4StatMFMicroPartition &right) const
G4StatMFChannelChooseZ (G4int A0, G4int Z0, G4double MeanT)
G4double GetProbability (void)
void SetPartitionFragment (G4int anA)
void Normalize (G4double Normalization)
G4double CalcPartitionProbability (G4double U, G4double FreeInternalE0, G4double SCompound)
G4double GetTemperature (void)
G4double GetEntropy (void)

Detailed Description

Definition at line 40 of file G4StatMFMicroPartition.hh.

Constructor & Destructor Documentation

◆ G4StatMFMicroPartition()

G4StatMFMicroPartition::G4StatMFMicroPartition ( G4int A,
G4int Z )
inline

Definition at line 44 of file G4StatMFMicroPartition.hh.

44 :
45 theA(A), theZ(Z), _Probability(0.0), _Temperature(0.0),
46 _Entropy(0.0) {};
const G4double A[17]

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

◆ ~G4StatMFMicroPartition()

G4StatMFMicroPartition::~G4StatMFMicroPartition ( )
inline

Definition at line 50 of file G4StatMFMicroPartition.hh.

50{};

Member Function Documentation

◆ CalcPartitionProbability()

G4double G4StatMFMicroPartition::CalcPartitionProbability ( G4double U,
G4double FreeInternalE0,
G4double SCompound )

Definition at line 228 of file G4StatMFMicroPartition.cc.

231{
232 G4double T = CalcPartitionTemperature(U,FreeInternalE0);
233 if ( T <= 0.0) return _Probability = 0.0;
234 _Temperature = T;
235
236 G4Pow* g4calc = G4Pow::GetInstance();
237 G4int n = (G4int)_thePartition.size();
238
239 // Factorial of fragment multiplicity
240 G4double Fact = g4calc->factorial(n);
241
242 G4double ProbDegeneracy = 1.0;
243 G4double ProbA32 = 1.0;
244 G4double PartitionEntropy = 0.0;
246
247 for (G4int i = 0; i < n; ++i) {
248 G4int par = _thePartition[i];
249 ProbDegeneracy *= GetDegeneracyFactor(par);
250 ProbA32 *= _thePartition[i]*std::sqrt((G4double)par);
251
252 // interaction entropy for alpha
253 if (par == 4) {
254 PartitionEntropy += 2.0 * T * par/InvLevelDensity(par);
255 }
256 // interaction entropy for Af > 4
257 else if (par > 4) {
258 PartitionEntropy += 2.0 * T * par/InvLevelDensity(par) - db * g4calc->Z23(par);
259 }
260 }
261
262 // Thermal Wave Lenght = std::sqrt(2 pi hbar^2 / nucleon_mass T)
263 G4double ThermalWaveLenght3 = 16.15*fermi/std::sqrt(T);
264 ThermalWaveLenght3 = ThermalWaveLenght3*ThermalWaveLenght3*ThermalWaveLenght3;
265
266 // Translational Entropy
268 G4double kappa = 1. + elm_coupling*(g4calc->Z13(n) - 1.0)/(r0*g4calc->Z13(theA));
269 G4double V0 = (4./3.)*pi*theA*r0*r0*r0;
270 G4double FreeVolume = (kappa*kappa*kappa - 1.0)*V0;
271 G4double TranslationalS = G4Log(ProbA32/Fact)
272 + (n - 1)*G4Log(FreeVolume/ThermalWaveLenght3)
273 + 1.5*(n - 1) - 1.5*g4calc->logZ(theA);
274 TranslationalS = std::max(TranslationalS, 0.0);
275
276 PartitionEntropy += G4Log(ProbDegeneracy) + TranslationalS;
277 _Entropy = PartitionEntropy;
278
279 // And finally compute probability of fragment configuration
280 G4double exponent = std::min(PartitionEntropy - SCompound, 200.);
281 return _Probability = G4Exp(exponent);
282}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition G4Exp.hh:132
G4double G4Log(G4double x)
Definition G4Log.hh:169
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
static G4Pow * GetInstance()
Definition G4Pow.cc:41
G4double logZ(G4int Z) const
Definition G4Pow.hh:137
G4double factorial(G4int Z) const
Definition G4Pow.hh:235
G4double Z13(G4int Z) const
Definition G4Pow.hh:123
G4double Z23(G4int Z) const
Definition G4Pow.hh:125
static G4double DBetaDT(G4double T)
static G4double Getr0()

◆ ChooseZ()

G4StatMFChannel * G4StatMFMicroPartition::ChooseZ ( G4int A0,
G4int Z0,
G4double MeanT )

Definition at line 297 of file G4StatMFMicroPartition.cc.

299{
300 std::vector<G4int> FragmentsZ;
301 G4int n = (G4int)_thePartition.size();
302
303 G4int ZBalance = 0;
304 do {
306 G4int SumZ = 0;
307 for (G4int i = 0; i < n; ++i) {
308 G4double ZMean;
309 G4double Af = _thePartition[i];
310 if (Af > 1.5 && Af < 4.5) { ZMean = 0.5*Af; }
311 else ZMean = Af*Z0/A0;
312 G4double ZDispersion = std::sqrt(Af * MeanT/CC);
313 G4int Zf;
314 do {
315 Zf = static_cast<G4int>(G4RandGauss::shoot(ZMean, ZDispersion));
316 }
317 // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
318 while (Zf < 0 || Zf > Af);
319 FragmentsZ.push_back(Zf);
320 SumZ += Zf;
321 }
322 ZBalance = Z0 - SumZ;
323 }
324 // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
325 while (std::abs(ZBalance) > 1);
326 FragmentsZ[0] += ZBalance;
327
328 G4StatMFChannel * theChannel = new G4StatMFChannel;
329 for (G4int i = 0; i < n; ++i) {
330 theChannel->CreateFragment(_thePartition[i], FragmentsZ[i]);
331 }
332
333 return theChannel;
334}
void CreateFragment(G4int A, G4int Z)
static G4double GetGamma0()

◆ GetEntropy()

G4double G4StatMFMicroPartition::GetEntropy ( void )
inline

Definition at line 92 of file G4StatMFMicroPartition.hh.

93 {
94 return _Entropy;
95 }

◆ GetProbability()

G4double G4StatMFMicroPartition::GetProbability ( void )
inline

Definition at line 71 of file G4StatMFMicroPartition.hh.

72 { return _Probability; }

◆ GetTemperature()

G4double G4StatMFMicroPartition::GetTemperature ( void )
inline

Definition at line 87 of file G4StatMFMicroPartition.hh.

88 {
89 return _Temperature;
90 }

◆ Normalize()

void G4StatMFMicroPartition::Normalize ( G4double Normalization)
inline

Definition at line 80 of file G4StatMFMicroPartition.hh.

81 { _Probability /= Normalization; }

◆ operator!=()

G4bool G4StatMFMicroPartition::operator!= ( const G4StatMFMicroPartition & right) const

Definition at line 63 of file G4StatMFMicroPartition.cc.

64{
65 //throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMicroPartition::operator!= meant to not be accessible");
66 return true;
67}

◆ operator==()

G4bool G4StatMFMicroPartition::operator== ( const G4StatMFMicroPartition & right) const

Definition at line 56 of file G4StatMFMicroPartition.cc.

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

◆ SetPartitionFragment()

void G4StatMFMicroPartition::SetPartitionFragment ( G4int anA)
inline

Definition at line 74 of file G4StatMFMicroPartition.hh.

75 {
76 _thePartition.push_back(anA);
77 CoulombFreeEnergy(anA);
78 }

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