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

#include <G4CompetitiveFission.hh>

+ Inheritance diagram for G4CompetitiveFission:

Public Member Functions

 G4CompetitiveFission ()
 
 ~G4CompetitiveFission () override
 
G4FragmentEmittedFragment (G4Fragment *theNucleus) override
 
G4double GetEmissionProbability (G4Fragment *theNucleus) override
 
void SetFissionBarrier (G4VFissionBarrier *aBarrier)
 
void SetEmissionStrategy (G4VEmissionProbability *aFissionProb)
 
void SetLevelDensityParameter (G4VLevelDensityParameter *aLevelDensity)
 
G4double GetFissionBarrier (void) const
 
G4double GetLevelDensityParameter (void) const
 
G4double GetMaximalKineticEnergy (void) const
 
- Public Member Functions inherited from G4VEvaporationChannel
 G4VEvaporationChannel (const G4String &aName="")
 
virtual ~G4VEvaporationChannel ()=default
 
virtual void Initialise ()
 
virtual G4double GetLifeTime (G4Fragment *theNucleus)
 
virtual G4bool BreakUpChain (G4FragmentVector *theResult, G4Fragment *theNucleus)
 
G4FragmentVectorBreakUpFragment (G4Fragment *theNucleus)
 
virtual G4double ComputeInverseXSection (G4Fragment *theNucleus, G4double kinEnergy)
 
virtual G4double ComputeProbability (G4Fragment *theNucleus, G4double kinEnergy)
 
virtual void Dump () const
 
virtual void SetICM (G4bool)
 
virtual void RDMForced (G4bool)
 
void SetOPTxs (G4int)
 
void UseSICB (G4bool)
 
 G4VEvaporationChannel (const G4VEvaporationChannel &right)=delete
 
const G4VEvaporationChanneloperator= (const G4VEvaporationChannel &right)=delete
 
G4bool operator== (const G4VEvaporationChannel &right) const =delete
 
G4bool operator!= (const G4VEvaporationChannel &right) const =delete
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporationChannel
G4int OPTxs {3}
 
G4bool useSICB {true}
 

Detailed Description

Definition at line 46 of file G4CompetitiveFission.hh.

Constructor & Destructor Documentation

◆ G4CompetitiveFission()

G4CompetitiveFission::G4CompetitiveFission ( )
explicit

Definition at line 50 of file G4CompetitiveFission.cc.

50 : G4VEvaporationChannel("fission"), theSecID(-1)
51{
52 theFissionBarrierPtr = new G4FissionBarrier;
53 myOwnFissionBarrier = true;
54
55 theFissionProbabilityPtr = new G4FissionProbability;
56 myOwnFissionProbability = true;
57
58 theLevelDensityPtr = new G4FissionLevelDensityParameter;
59 myOwnLevelDensity = true;
60
61 maxKineticEnergy = fissionBarrier = fissionProbability = 0.0;
63
64 theSecID = G4PhysicsModelCatalog::GetModelID("model_G4CompetitiveFission");
65}
G4PairingCorrection * GetPairingCorrection()
static G4NuclearLevelData * GetInstance()
static G4int GetModelID(const G4int modelIndex)
G4VEvaporationChannel(const G4String &aName="")

◆ ~G4CompetitiveFission()

G4CompetitiveFission::~G4CompetitiveFission ( )
override

Definition at line 67 of file G4CompetitiveFission.cc.

68{
69 if (myOwnFissionBarrier) delete theFissionBarrierPtr;
70 if (myOwnFissionProbability) delete theFissionProbabilityPtr;
71 if (myOwnLevelDensity) delete theLevelDensityPtr;
72}

Member Function Documentation

◆ EmittedFragment()

G4Fragment * G4CompetitiveFission::EmittedFragment ( G4Fragment * theNucleus)
overridevirtual

Reimplemented from G4VEvaporationChannel.

Definition at line 95 of file G4CompetitiveFission.cc.

96{
97 G4Fragment * Fragment1 = nullptr;
98 // Nucleus data
99 // Atomic number of nucleus
100 G4int A = theNucleus->GetA_asInt();
101 // Charge of nucleus
102 G4int Z = theNucleus->GetZ_asInt();
103 // Excitation energy (in MeV)
104 G4double U = theNucleus->GetExcitationEnergy();
105 G4double pcorr = pairingCorrection->GetFissionPairingCorrection(A,Z);
106 if (U <= pcorr) { return Fragment1; }
107
108 // Atomic Mass of Nucleus (in MeV)
109 G4double M = theNucleus->GetGroundStateMass();
110
111 // Nucleus Momentum
112 G4LorentzVector theNucleusMomentum = theNucleus->GetMomentum();
113
114 // Calculate fission parameters
115 theParam.DefineParameters(A, Z, U-pcorr, fissionBarrier);
116
117 // First fragment
118 G4int A1 = 0;
119 G4int Z1 = 0;
120 G4double M1 = 0.0;
121
122 // Second fragment
123 G4int A2 = 0;
124 G4int Z2 = 0;
125 G4double M2 = 0.0;
126
127 G4double FragmentsExcitationEnergy = 0.0;
128 G4double FragmentsKineticEnergy = 0.0;
129
130 G4int Trials = 0;
131 do {
132
133 // First fragment
134 A1 = FissionAtomicNumber(A);
135 Z1 = FissionCharge(A, Z, A1);
137
138 // Second Fragment
139 A2 = A - A1;
140 Z2 = Z - Z1;
141 if (A2 < 1 || Z2 < 0 || Z2 > A2) {
142 FragmentsExcitationEnergy = -1.0;
143 continue;
144 }
146 // Maximal Kinetic Energy (available energy for fragments)
147 G4double Tmax = M + U - M1 - M2 - pcorr;
148
149 // Check that fragment masses are less or equal than total energy
150 if (Tmax < 0.0) {
151 FragmentsExcitationEnergy = -1.0;
152 continue;
153 }
154
155 FragmentsKineticEnergy = FissionKineticEnergy( A , Z,
156 A1, Z1,
157 A2, Z2,
158 U , Tmax);
159
160 // Excitation Energy
161 // FragmentsExcitationEnergy = Tmax - FragmentsKineticEnergy;
162 // JMQ 04/03/09 BUG FIXED: in order to fulfill energy conservation the
163 // fragments carry the fission pairing energy in form of
164 // excitation energy
165
166 FragmentsExcitationEnergy =
167 Tmax - FragmentsKineticEnergy + pcorr;
168
169 // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
170 } while (FragmentsExcitationEnergy < 0.0 && ++Trials < 100);
171
172 if (FragmentsExcitationEnergy <= 0.0) {
173 throw G4HadronicException(__FILE__, __LINE__,
174 "G4CompetitiveFission::BreakItUp: Excitation energy for fragments < 0.0!");
175 }
176
177 // Fragment 1
178 M1 += FragmentsExcitationEnergy * A1/static_cast<G4double>(A);
179 // Fragment 2
180 M2 += FragmentsExcitationEnergy * A2/static_cast<G4double>(A);
181 // primary
182 M += U;
183
184 G4double etot1 = ((M - M2)*(M + M2) + M1*M1)/(2*M);
185 G4ParticleMomentum Momentum1 =
186 std::sqrt((etot1 - M1)*(etot1+M1))*G4RandomDirection();
187 G4LorentzVector FourMomentum1(Momentum1, etot1);
188 FourMomentum1.boost(theNucleusMomentum.boostVector());
189
190 // Create Fragments
191 Fragment1 = new G4Fragment( A1, Z1, FourMomentum1);
192 if (Fragment1 != nullptr) { Fragment1->SetCreatorModelID(theSecID); }
193 theNucleusMomentum -= FourMomentum1;
194 theNucleus->SetZandA_asInt(Z2, A2);
195 theNucleus->SetMomentum(theNucleusMomentum);
196 theNucleus->SetCreatorModelID(theSecID);
197 return Fragment1;
198}
#define M(row, col)
G4ThreeVector G4RandomDirection()
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
const G4double A[17]
Hep3Vector boostVector() const
void DefineParameters(G4int A, G4int Z, G4double ExEnergy, G4double FissionBarrier)
G4double GetGroundStateMass() const
void SetZandA_asInt(G4int Znew, G4int Anew, G4int Lnew=0)
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
void SetCreatorModelID(G4int value)
G4int GetZ_asInt() const
void SetMomentum(const G4LorentzVector &value)
G4int GetA_asInt() const
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetFissionPairingCorrection(G4int A, G4int Z) const

◆ GetEmissionProbability()

G4double G4CompetitiveFission::GetEmissionProbability ( G4Fragment * theNucleus)
overridevirtual

Implements G4VEvaporationChannel.

Definition at line 74 of file G4CompetitiveFission.cc.

75{
76 G4int Z = fragment->GetZ_asInt();
77 G4int A = fragment->GetA_asInt();
78 fissionProbability = 0.0;
79 // Saddle point excitation energy ---> A = 65
80 if (A >= 65 && Z > 16) {
81 G4double exEnergy = fragment->GetExcitationEnergy() -
82 pairingCorrection->GetFissionPairingCorrection(A, Z);
83
84 if (exEnergy > 0.0) {
85 fissionBarrier = theFissionBarrierPtr->FissionBarrier(A, Z, exEnergy);
86 maxKineticEnergy = exEnergy - fissionBarrier;
87 fissionProbability =
88 theFissionProbabilityPtr->EmissionProbability(*fragment,
89 maxKineticEnergy);
90 }
91 }
92 return fissionProbability;
93}
virtual G4double EmissionProbability(const G4Fragment &fragment, G4double anEnergy)
virtual G4double FissionBarrier(G4int A, G4int Z, G4double U) const =0

◆ GetFissionBarrier()

G4double G4CompetitiveFission::GetFissionBarrier ( void ) const
inline

Definition at line 123 of file G4CompetitiveFission.hh.

124{
125 return fissionBarrier;
126}

◆ GetLevelDensityParameter()

G4double G4CompetitiveFission::GetLevelDensityParameter ( void ) const
inline

◆ GetMaximalKineticEnergy()

G4double G4CompetitiveFission::GetMaximalKineticEnergy ( void ) const
inline

Definition at line 128 of file G4CompetitiveFission.hh.

129{
130 return maxKineticEnergy;
131}

◆ SetEmissionStrategy()

void G4CompetitiveFission::SetEmissionStrategy ( G4VEmissionProbability * aFissionProb)

Definition at line 381 of file G4CompetitiveFission.cc.

382{
383 if (myOwnFissionProbability) delete theFissionProbabilityPtr;
384 theFissionProbabilityPtr = aFissionProb;
385 myOwnFissionProbability = false;
386}

Referenced by G4INCLXXInterface::G4INCLXXInterface().

◆ SetFissionBarrier()

void G4CompetitiveFission::SetFissionBarrier ( G4VFissionBarrier * aBarrier)

Definition at line 373 of file G4CompetitiveFission.cc.

374{
375 if (myOwnFissionBarrier) delete theFissionBarrierPtr;
376 theFissionBarrierPtr = aBarrier;
377 myOwnFissionBarrier = false;
378}

◆ SetLevelDensityParameter()

void G4CompetitiveFission::SetLevelDensityParameter ( G4VLevelDensityParameter * aLevelDensity)

Definition at line 389 of file G4CompetitiveFission.cc.

390{
391 if (myOwnLevelDensity) delete theLevelDensityPtr;
392 theLevelDensityPtr = aLevelDensity;
393 myOwnLevelDensity = false;
394}

Referenced by G4INCLXXInterface::G4INCLXXInterface().


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