Geant4 11.2.2
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]

◆ ~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
238 // Factorial of fragment multiplicity
239 G4double Fact = 1.0;
240 unsigned int i;
241 for (i = 0; i < _thePartition.size() - 1; i++)
242 {
243 G4double f = 1.0;
244 for (unsigned int ii = i+1; i< _thePartition.size(); i++)
245 {
246 if (_thePartition[i] == _thePartition[ii]) f++;
247 }
248 Fact *= f;
249 }
250
251 G4double ProbDegeneracy = 1.0;
252 G4double ProbA32 = 1.0;
253
254 for (i = 0; i < _thePartition.size(); i++)
255 {
256 ProbDegeneracy *= GetDegeneracyFactor(_thePartition[i]);
257 ProbA32 *= _thePartition[i]*std::sqrt((G4double)_thePartition[i]);
258 }
259
260 // Compute entropy
261 G4double PartitionEntropy = 0.0;
262 for (i = 0; i < _thePartition.size(); i++)
263 {
264 // interaction entropy for alpha
265 if (_thePartition[i] == 4)
266 {
267 PartitionEntropy +=
268 2.0*T*_thePartition[i]/InvLevelDensity(_thePartition[i]);
269 }
270 // interaction entropy for Af > 4
271 else if (_thePartition[i] > 4)
272 {
273 PartitionEntropy +=
274 2.0*T*_thePartition[i]/InvLevelDensity(_thePartition[i])
275 - G4StatMFParameters::DBetaDT(T) * g4calc->Z23(_thePartition[i]);
276 }
277 }
278
279 // Thermal Wave Lenght = std::sqrt(2 pi hbar^2 / nucleon_mass T)
280 G4double ThermalWaveLenght3 = 16.15*fermi/std::sqrt(T);
281 ThermalWaveLenght3 = ThermalWaveLenght3*ThermalWaveLenght3*ThermalWaveLenght3;
282
283 // Translational Entropy
284 G4double kappa = 1. + elm_coupling*(g4calc->Z13((G4int)_thePartition.size())-1.0)
285 /(G4StatMFParameters::Getr0()*g4calc->Z13(theA));
286 kappa = kappa*kappa*kappa;
287 kappa -= 1.;
290 G4double FreeVolume = kappa*V0;
291 G4double TranslationalS = std::max(0.0, G4Log(ProbA32/Fact) +
292 (_thePartition.size()-1.0)*G4Log(FreeVolume/ThermalWaveLenght3) +
293 1.5*(_thePartition.size()-1.0) - 1.5*g4calc->logZ(theA));
294
295 PartitionEntropy += G4Log(ProbDegeneracy) + TranslationalS;
296 _Entropy = PartitionEntropy;
297
298 // And finally compute probability of fragment configuration
299 G4double exponent = PartitionEntropy-SCompound;
300 if (exponent > 300.0) exponent = 300.0;
301 return _Probability = G4Exp(exponent);
302}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition G4Exp.hh:180
G4double G4Log(G4double x)
Definition G4Log.hh:227
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
Definition G4Pow.hh:49
static G4Pow * GetInstance()
Definition G4Pow.cc:41
G4double logZ(G4int Z) const
Definition G4Pow.hh:137
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 317 of file G4StatMFMicroPartition.cc.

319{
320 std::vector<G4int> FragmentsZ;
321
322 G4int ZBalance = 0;
323 do
324 {
326 G4int SumZ = 0;
327 for (unsigned int i = 0; i < _thePartition.size(); i++)
328 {
329 G4double ZMean;
330 G4double Af = _thePartition[i];
331 if (Af > 1.5 && Af < 4.5) ZMean = 0.5*Af;
332 else ZMean = Af*Z0/A0;
333 G4double ZDispersion = std::sqrt(Af * MeanT/CC);
334 G4int Zf;
335 do
336 {
337 Zf = static_cast<G4int>(G4RandGauss::shoot(ZMean,ZDispersion));
338 }
339 // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
340 while (Zf < 0 || Zf > Af);
341 FragmentsZ.push_back(Zf);
342 SumZ += Zf;
343 }
344 ZBalance = Z0 - SumZ;
345 }
346 // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
347 while (std::abs(ZBalance) > 1);
348 FragmentsZ[0] += ZBalance;
349
350 G4StatMFChannel * theChannel = new G4StatMFChannel;
351 for (unsigned int i = 0; i < _thePartition.size(); i++)
352 {
353 theChannel->CreateFragment(_thePartition[i],FragmentsZ[i]);
354 }
355
356 return theChannel;
357}
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: