Geant4 10.7.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) {};

◆ ~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(_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:179
G4double G4Log(G4double x)
Definition: G4Log.hh:226
double G4double
Definition: G4Types.hh:83
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}
int G4int
Definition: G4Types.hh:85
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: