Geant4 9.6.0
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 ()
 
virtual ~G4CompetitiveFission ()
 
virtual G4FragmentVectorBreakUp (const G4Fragment &theNucleus)
 
virtual G4double GetEmissionProbability (G4Fragment *theNucleus)
 
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="Anonymous")
 
virtual ~G4VEvaporationChannel ()
 
virtual G4FragmentEmittedFragment (G4Fragment *theNucleus)
 
virtual G4FragmentVectorBreakUpFragment (G4Fragment *theNucleus)
 
virtual G4FragmentVectorBreakUp (const G4Fragment &theNucleus)=0
 
virtual G4double GetEmissionProbability (G4Fragment *theNucleus)=0
 
G4String GetName () const
 
void SetName (const G4String &aName)
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporationChannel
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 50 of file G4CompetitiveFission.hh.

Constructor & Destructor Documentation

◆ G4CompetitiveFission()

G4CompetitiveFission::G4CompetitiveFission ( )

Definition at line 44 of file G4CompetitiveFission.cc.

44 : G4VEvaporationChannel("fission")
45{
46 theFissionBarrierPtr = new G4FissionBarrier;
47 MyOwnFissionBarrier = true;
48
49 theFissionProbabilityPtr = new G4FissionProbability;
50 MyOwnFissionProbability = true;
51
52 theLevelDensityPtr = new G4FissionLevelDensityParameter;
53 MyOwnLevelDensity = true;
54
55 MaximalKineticEnergy = -1000.0*MeV;
56 FissionBarrier = 0.0;
57 FissionProbability = 0.0;
58 LevelDensityParameter = 0.0;
59}

◆ ~G4CompetitiveFission()

G4CompetitiveFission::~G4CompetitiveFission ( )
virtual

Definition at line 61 of file G4CompetitiveFission.cc.

62{
63 if (MyOwnFissionBarrier) delete theFissionBarrierPtr;
64
65 if (MyOwnFissionProbability) delete theFissionProbabilityPtr;
66
67 if (MyOwnLevelDensity) delete theLevelDensityPtr;
68}

Member Function Documentation

◆ BreakUp()

G4FragmentVector * G4CompetitiveFission::BreakUp ( const G4Fragment theNucleus)
virtual

Implements G4VEvaporationChannel.

Definition at line 96 of file G4CompetitiveFission.cc.

97{
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() -
106 // Check that U > 0
107 if (U <= 0.0) {
108 G4FragmentVector * theResult = new G4FragmentVector;
109 theResult->push_back(new G4Fragment(theNucleus));
110 return theResult;
111 }
112
113 // Atomic Mass of Nucleus (in MeV)
114 G4double M = theNucleus.GetGroundStateMass();
115
116 // Nucleus Momentum
117 G4LorentzVector theNucleusMomentum = theNucleus.GetMomentum();
118
119 // Calculate fission parameters
120 G4FissionParameters theParameters(A,Z,U,FissionBarrier);
121
122 // First fragment
123 G4int A1 = 0;
124 G4int Z1 = 0;
125 G4double M1 = 0.0;
126
127 // Second fragment
128 G4int A2 = 0;
129 G4int Z2 = 0;
130 G4double M2 = 0.0;
131
132 G4double FragmentsExcitationEnergy = 0.0;
133 G4double FragmentsKineticEnergy = 0.0;
134
135 //JMQ 04/03/09 It will be used latter to fix the bug in energy conservation
136 G4double FissionPairingEnergy=
138
139 G4int Trials = 0;
140 do {
141
142 // First fragment
143 A1 = FissionAtomicNumber(A,theParameters);
144 Z1 = FissionCharge(A,Z,A1);
146
147 // Second Fragment
148 A2 = A - A1;
149 Z2 = Z - Z1;
150 if (A2 < 1 || Z2 < 0) {
151 throw G4HadronicException(__FILE__, __LINE__,
152 "G4CompetitiveFission::BreakUp: Can't define second fragment! ");
153 }
155
156 // Check that fragment masses are less or equal than total energy
157 if (M1 + M2 > theNucleusMomentum.e()) {
158 throw G4HadronicException(__FILE__, __LINE__,
159 "G4CompetitiveFission::BreakUp: Fragments Mass > Total Energy");
160 }
161 // Maximal Kinetic Energy (available energy for fragments)
162 G4double Tmax = M + U - M1 - M2;
163
164 FragmentsKineticEnergy = FissionKineticEnergy( A , Z,
165 A1, Z1,
166 A2, Z2,
167 U , Tmax,
168 theParameters);
169
170 // Excitation Energy
171 // FragmentsExcitationEnergy = Tmax - FragmentsKineticEnergy;
172 // JMQ 04/03/09 BUG FIXED: in order to fulfill energy conservation the
173 // fragments carry the fission pairing energy in form of
174 //excitation energy
175
176 FragmentsExcitationEnergy =
177 Tmax - FragmentsKineticEnergy+FissionPairingEnergy;
178
179 } while (FragmentsExcitationEnergy < 0.0 && Trials++ < 100);
180
181 if (FragmentsExcitationEnergy <= 0.0) {
182 throw G4HadronicException(__FILE__, __LINE__,
183 "G4CompetitiveFission::BreakItUp: Excitation energy for fragments < 0.0!");
184 }
185
186 // while (FragmentsExcitationEnergy < 0 && Trials < 100);
187
188 // Fragment 1
189 G4double U1 = FragmentsExcitationEnergy * A1/static_cast<G4double>(A);
190 // Fragment 2
191 G4double U2 = FragmentsExcitationEnergy * A2/static_cast<G4double>(A);
192
193 //JMQ 04/03/09 Full relativistic calculation is performed
194 //
195 G4double Fragment1KineticEnergy=
196 (FragmentsKineticEnergy*(FragmentsKineticEnergy+2*(M2+U2)))
197 /(2*(M1+U1+M2+U2+FragmentsKineticEnergy));
198 G4ParticleMomentum Momentum1(IsotropicVector(std::sqrt(Fragment1KineticEnergy*(Fragment1KineticEnergy+2*(M1+U1)))));
199 G4ParticleMomentum Momentum2(-Momentum1);
200 G4LorentzVector FourMomentum1(Momentum1,std::sqrt(Momentum1.mag2()+(M1+U1)*(M1+U1)));
201 G4LorentzVector FourMomentum2(Momentum2,std::sqrt(Momentum2.mag2()+(M2+U2)*(M2+U2)));
202
203 //JMQ 04/03/09 now we do Lorentz boosts (instead of Galileo boosts)
204 FourMomentum1.boost(theNucleusMomentum.boostVector());
205 FourMomentum2.boost(theNucleusMomentum.boostVector());
206
207 //////////JMQ 04/03: Old version calculation is commented
208 // There was vioation of energy momentum conservation
209
210 // G4double Pmax = std::sqrt( 2 * ( ( (M1+U1)*(M2+U2) ) /
211 // ( (M1+U1)+(M2+U2) ) ) * FragmentsKineticEnergy);
212
213 //G4ParticleMomentum momentum1 = IsotropicVector( Pmax );
214 // G4ParticleMomentum momentum2( -momentum1 );
215
216 // Perform a Galileo boost for fragments
217 // momentum1 += (theNucleusMomentum.boostVector() * (M1+U1));
218 // momentum2 += (theNucleusMomentum.boostVector() * (M2+U2));
219
220
221 // Create 4-momentum for first fragment
222 // Warning!! Energy conservation is broken
223 //JMQ 04/03/09 ...NOT ANY MORE!! BUGS FIXED: Energy and momentum are NOW conserved
224 // G4LorentzVector FourMomentum1( momentum1 , std::sqrt(momentum1.mag2() + (M1+U1)*(M1+U1)));
225
226 // Create 4-momentum for second fragment
227 // Warning!! Energy conservation is broken
228 //JMQ 04/03/09 ...NOT ANY MORE!! BUGS FIXED: Energy and momentum are NOW conserved
229 // G4LorentzVector FourMomentum2( momentum2 , std::sqrt(momentum2.mag2() + (M2+U2)*(M2+U2)));
230
231 //////////
232
233 // Create Fragments
234 G4Fragment * Fragment1 = new G4Fragment( A1, Z1, FourMomentum1);
235 G4Fragment * Fragment2 = new G4Fragment( A2, Z2, FourMomentum2);
236
237 // Create Fragment Vector
238 G4FragmentVector * theResult = new G4FragmentVector;
239
240 theResult->push_back(Fragment1);
241 theResult->push_back(Fragment2);
242
243#ifdef debug
244 CheckConservation(theNucleus,theResult);
245#endif
246
247 return theResult;
248}
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:65
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
Hep3Vector boostVector() const
G4double GetGroundStateMass() const
Definition: G4Fragment.hh:240
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:235
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:251
G4int GetZ_asInt() const
Definition: G4Fragment.hh:223
G4int GetA_asInt() const
Definition: G4Fragment.hh:218
G4double GetIonMass(G4int Z, G4int A, G4int L=0) const
!! Only ground states are supported now
Definition: G4IonTable.cc:774
static G4PairingCorrection * GetInstance()
G4double GetFissionPairingCorrection(G4int A, G4int Z) const
static G4ParticleTable * GetParticleTable()
G4IonTable * GetIonTable()

Referenced by G4ParaFissionModel::ApplyYourself().

◆ GetEmissionProbability()

G4double G4CompetitiveFission::GetEmissionProbability ( G4Fragment theNucleus)
virtual

Implements G4VEvaporationChannel.

Definition at line 70 of file G4CompetitiveFission.cc.

71{
72 G4int anA = fragment->GetA_asInt();
73 G4int aZ = fragment->GetZ_asInt();
74 G4double ExEnergy = fragment->GetExcitationEnergy() -
76
77
78 // Saddle point excitation energy ---> A = 65
79 // Fission is excluded for A < 65
80 if (anA >= 65 && ExEnergy > 0.0) {
81 FissionBarrier = theFissionBarrierPtr->FissionBarrier(anA,aZ,ExEnergy);
82 MaximalKineticEnergy = ExEnergy - FissionBarrier;
83 LevelDensityParameter =
84 theLevelDensityPtr->LevelDensityParameter(anA,aZ,ExEnergy);
85 FissionProbability =
86 theFissionProbabilityPtr->EmissionProbability(*fragment,MaximalKineticEnergy);
87 }
88 else {
89 MaximalKineticEnergy = -1000.0*MeV;
90 LevelDensityParameter = 0.0;
91 FissionProbability = 0.0;
92 }
93 return FissionProbability;
94}
virtual G4double EmissionProbability(const G4Fragment &fragment, const G4double anEnergy)=0
virtual G4double FissionBarrier(G4int A, G4int Z, const G4double U)=0
virtual G4double LevelDensityParameter(G4int A, G4int Z, G4double U) const =0

◆ GetFissionBarrier()

G4double G4CompetitiveFission::GetFissionBarrier ( void  ) const
inline

Definition at line 92 of file G4CompetitiveFission.hh.

92{ return FissionBarrier; }

◆ GetLevelDensityParameter()

G4double G4CompetitiveFission::GetLevelDensityParameter ( void  ) const
inline

Definition at line 94 of file G4CompetitiveFission.hh.

94{ return LevelDensityParameter; }

◆ GetMaximalKineticEnergy()

G4double G4CompetitiveFission::GetMaximalKineticEnergy ( void  ) const
inline

Definition at line 96 of file G4CompetitiveFission.hh.

96{ return MaximalKineticEnergy; }

◆ SetEmissionStrategy()

void G4CompetitiveFission::SetEmissionStrategy ( G4VEmissionProbability aFissionProb)
inline

Definition at line 76 of file G4CompetitiveFission.hh.

77 {
78 if (MyOwnFissionProbability) delete theFissionProbabilityPtr;
79 theFissionProbabilityPtr = aFissionProb;
80 MyOwnFissionProbability = false;
81 }

◆ SetFissionBarrier()

void G4CompetitiveFission::SetFissionBarrier ( G4VFissionBarrier aBarrier)
inline

Definition at line 69 of file G4CompetitiveFission.hh.

70 {
71 if (MyOwnFissionBarrier) delete theFissionBarrierPtr;
72 theFissionBarrierPtr = aBarrier;
73 MyOwnFissionBarrier = false;
74 }

◆ SetLevelDensityParameter()

void G4CompetitiveFission::SetLevelDensityParameter ( G4VLevelDensityParameter aLevelDensity)
inline

Definition at line 84 of file G4CompetitiveFission.hh.

85 {
86 if (MyOwnLevelDensity) delete theLevelDensityPtr;
87 theLevelDensityPtr = aLevelDensity;
88 MyOwnLevelDensity = false;
89 }

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