Geant4 9.6.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 (const G4int A, const G4double Z)
 
 ~G4StatMFMicroPartition ()
 
G4bool operator== (const G4StatMFMicroPartition &right) const
 
G4bool operator!= (const G4StatMFMicroPartition &right) const
 
G4StatMFChannelChooseZ (const G4double A0, const G4double Z0, const G4double MeanT)
 
G4double GetProbability (void)
 
void SetPartitionFragment (const G4int anA)
 
void Normalize (const G4double Normalization)
 
G4double CalcPartitionProbability (const G4double U, const G4double FreeInternalE0, const G4double SCompound)
 
G4double GetTemperature (void)
 
G4double GetEntropy (void)
 

Detailed Description

Definition at line 41 of file G4StatMFMicroPartition.hh.

Constructor & Destructor Documentation

◆ G4StatMFMicroPartition()

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

Definition at line 45 of file G4StatMFMicroPartition.hh.

45 :
46 theA(A), theZ(Z), _Probability(0.0), _Temperature(0.0),
47 _Entropy(0.0) {};

◆ ~G4StatMFMicroPartition()

G4StatMFMicroPartition::~G4StatMFMicroPartition ( )
inline

Definition at line 51 of file G4StatMFMicroPartition.hh.

51{};

Member Function Documentation

◆ CalcPartitionProbability()

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

Definition at line 230 of file G4StatMFMicroPartition.cc.

233{
234 G4double T = CalcPartitionTemperature(U,FreeInternalE0);
235 if ( T <= 0.0) return _Probability = 0.0;
236 _Temperature = T;
237
238
239 // Factorial of fragment multiplicity
240 G4double Fact = 1.0;
241 unsigned int i;
242 for (i = 0; i < _thePartition.size() - 1; i++)
243 {
244 G4double f = 1.0;
245 for (unsigned int ii = i+1; i< _thePartition.size(); i++)
246 {
247 if (_thePartition[i] == _thePartition[ii]) f++;
248 }
249 Fact *= f;
250 }
251
252 G4double ProbDegeneracy = 1.0;
253 G4double ProbA32 = 1.0;
254
255 for (i = 0; i < _thePartition.size(); i++)
256 {
257 ProbDegeneracy *= GetDegeneracyFactor(static_cast<G4int>(_thePartition[i]));
258 ProbA32 *= static_cast<G4double>(_thePartition[i])*
259 std::sqrt(static_cast<G4double>(_thePartition[i]));
260 }
261
262 // Compute entropy
263 G4double PartitionEntropy = 0.0;
264 for (i = 0; i < _thePartition.size(); i++)
265 {
266 // interaction entropy for alpha
267 if (_thePartition[i] == 4)
268 {
269 PartitionEntropy +=
270 2.0*T*_thePartition[i]/InvLevelDensity(_thePartition[i]);
271 }
272 // interaction entropy for Af > 4
273 else if (_thePartition[i] > 4)
274 {
275 PartitionEntropy +=
276 2.0*T*_thePartition[i]/InvLevelDensity(_thePartition[i])
278 * std::pow(static_cast<G4double>(_thePartition[i]),2.0/3.0);
279 }
280 }
281
282 // Thermal Wave Lenght = std::sqrt(2 pi hbar^2 / nucleon_mass T)
283 G4double ThermalWaveLenght3 = 16.15*fermi/std::sqrt(T);
284 ThermalWaveLenght3 = ThermalWaveLenght3*ThermalWaveLenght3*ThermalWaveLenght3;
285
286 // Translational Entropy
287 G4double kappa = (1. + elm_coupling*(std::pow(static_cast<G4double>(_thePartition.size()),1./3.)-1.0)
288 /(G4StatMFParameters::Getr0()*std::pow(static_cast<G4double>(theA),1./3.)));
289 kappa = kappa*kappa*kappa;
290 kappa -= 1.;
293 G4double FreeVolume = kappa*V0;
294 G4double TranslationalS = std::max(0.0, std::log(ProbA32/Fact) +
295 (_thePartition.size()-1.0)*std::log(FreeVolume/ThermalWaveLenght3) +
296 1.5*(_thePartition.size()-1.0) - (3./2.)*std::log(theA));
297
298 PartitionEntropy += std::log(ProbDegeneracy) + TranslationalS;
299 _Entropy = PartitionEntropy;
300
301 // And finally compute probability of fragment configuration
302 G4double exponent = PartitionEntropy-SCompound;
303 if (exponent > 700.0) exponent = 700.0;
304 return _Probability = std::exp(exponent);
305}
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
static G4double Getr0()
static G4double DBetaDT(const G4double T)

◆ ChooseZ()

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

Definition at line 323 of file G4StatMFMicroPartition.cc.

325{
326 std::vector<G4int> FragmentsZ;
327
328 G4int ZBalance = 0;
329 do
330 {
332 G4int SumZ = 0;
333 for (unsigned int i = 0; i < _thePartition.size(); i++)
334 {
335 G4double ZMean;
336 G4double Af = _thePartition[i];
337 if (Af > 1.5 && Af < 4.5) ZMean = 0.5*Af;
338 else ZMean = Af*Z0/A0;
339 G4double ZDispersion = std::sqrt(Af * MeanT/CC);
340 G4int Zf;
341 do
342 {
343 Zf = static_cast<G4int>(G4RandGauss::shoot(ZMean,ZDispersion));
344 }
345 while (Zf < 0 || Zf > Af);
346 FragmentsZ.push_back(Zf);
347 SumZ += Zf;
348 }
349 ZBalance = static_cast<G4int>(Z0) - SumZ;
350 }
351 while (std::abs(ZBalance) > 1.1);
352 FragmentsZ[0] += ZBalance;
353
354 G4StatMFChannel * theChannel = new G4StatMFChannel;
355 for (unsigned int i = 0; i < _thePartition.size(); i++)
356 {
357 theChannel->CreateFragment(_thePartition[i],FragmentsZ[i]);
358 }
359
360 return theChannel;
361}
void CreateFragment(G4int A, G4int Z)
static G4double GetGamma0()

◆ GetEntropy()

G4double G4StatMFMicroPartition::GetEntropy ( void  )
inline

Definition at line 96 of file G4StatMFMicroPartition.hh.

97 {
98 return _Entropy;
99 }

◆ GetProbability()

G4double G4StatMFMicroPartition::GetProbability ( void  )
inline

Definition at line 72 of file G4StatMFMicroPartition.hh.

73 { return _Probability; }

◆ GetTemperature()

G4double G4StatMFMicroPartition::GetTemperature ( void  )
inline

Definition at line 91 of file G4StatMFMicroPartition.hh.

92 {
93 return _Temperature;
94 }

◆ Normalize()

void G4StatMFMicroPartition::Normalize ( const G4double  Normalization)
inline

Definition at line 83 of file G4StatMFMicroPartition.hh.

84 { _Probability /= Normalization; }

◆ operator!=()

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

Definition at line 60 of file G4StatMFMicroPartition.cc.

61{
62 //throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMicroPartition::operator!= meant to not be accessable");
63 return true;
64}

◆ operator==()

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

Definition at line 53 of file G4StatMFMicroPartition.cc.

54{
55 //throw G4HadronicException(__FILE__, __LINE__, "G4StatMFMicroPartition::operator== meant to not be accessable");
56 return false;
57}

◆ SetPartitionFragment()

void G4StatMFMicroPartition::SetPartitionFragment ( const G4int  anA)
inline

Definition at line 77 of file G4StatMFMicroPartition.hh.

78 {
79 _thePartition.push_back(anA);
80 CoulombFreeEnergy(anA);
81 }

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