Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4CompetitiveFission Class Reference

#include <G4CompetitiveFission.hh>

Inheritance diagram for G4CompetitiveFission:
G4VEvaporationChannel

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", G4EvaporationChannelType timeType=fDelayedEmission)
 
virtual ~G4VEvaporationChannel ()
 
virtual G4double GetLifeTime (G4Fragment *theNucleus)
 
virtual G4FragmentEmittedFragment (G4Fragment *theNucleus)
 
virtual G4FragmentVectorBreakUpFragment (G4Fragment *theNucleus)
 
G4String GetName () const
 
void SetName (const G4String &aName)
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporationChannel
G4EvaporationChannelType sampleDecayTime
 
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 50 of file G4CompetitiveFission.hh.

Constructor & Destructor Documentation

G4CompetitiveFission::G4CompetitiveFission ( )

Definition at line 44 of file G4CompetitiveFission.cc.

References python.hepunit::MeV.

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 }
G4VEvaporationChannel(const G4String &aName="Anonymous", G4EvaporationChannelType timeType=fDelayedEmission)
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

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

Implements G4VEvaporationChannel.

Definition at line 96 of file G4CompetitiveFission.cc.

References CLHEP::HepLorentzVector::boost(), CLHEP::HepLorentzVector::boostVector(), CLHEP::HepLorentzVector::e(), G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), G4PairingCorrection::GetFissionPairingCorrection(), G4Fragment::GetGroundStateMass(), G4PairingCorrection::GetInstance(), G4IonTable::GetIonMass(), G4ParticleTable::GetIonTable(), G4Fragment::GetMomentum(), G4ParticleTable::GetParticleTable(), G4Fragment::GetZ_asInt(), and CLHEP::Hep3Vector::mag2().

Referenced by G4ParaFissionModel::ApplyYourself().

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 }
Hep3Vector boostVector() const
int G4int
Definition: G4Types.hh:78
G4IonTable * GetIonTable() const
G4int GetA_asInt() const
Definition: G4Fragment.hh:238
G4double GetIonMass(G4int Z, G4int A, G4int L=0, G4int lvl=0) const
Definition: G4IonTable.cc:1232
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:271
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:65
G4double GetGroundStateMass() const
Definition: G4Fragment.hh:260
static G4PairingCorrection * GetInstance()
G4double GetFissionPairingCorrection(G4int A, G4int Z) const
static G4ParticleTable * GetParticleTable()
G4int GetZ_asInt() const
Definition: G4Fragment.hh:243
double G4double
Definition: G4Types.hh:76
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:255
G4double G4CompetitiveFission::GetEmissionProbability ( G4Fragment theNucleus)
virtual

Implements G4VEvaporationChannel.

Definition at line 70 of file G4CompetitiveFission.cc.

References G4VEmissionProbability::EmissionProbability(), G4VFissionBarrier::FissionBarrier(), G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), G4PairingCorrection::GetFissionPairingCorrection(), G4PairingCorrection::GetInstance(), G4Fragment::GetZ_asInt(), G4VLevelDensityParameter::LevelDensityParameter(), and python.hepunit::MeV.

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 FissionBarrier(G4int A, G4int Z, const G4double U)=0
int G4int
Definition: G4Types.hh:78
static G4PairingCorrection * GetInstance()
G4double GetFissionPairingCorrection(G4int A, G4int Z) const
virtual G4double LevelDensityParameter(G4int A, G4int Z, G4double U) const =0
double G4double
Definition: G4Types.hh:76
virtual G4double EmissionProbability(const G4Fragment &fragment, const G4double anEnergy)=0
G4double G4CompetitiveFission::GetFissionBarrier ( void  ) const
inline

Definition at line 92 of file G4CompetitiveFission.hh.

92 { return FissionBarrier; }
G4double G4CompetitiveFission::GetLevelDensityParameter ( void  ) const
inline

Definition at line 94 of file G4CompetitiveFission.hh.

94 { return LevelDensityParameter; }
G4double G4CompetitiveFission::GetMaximalKineticEnergy ( void  ) const
inline

Definition at line 96 of file G4CompetitiveFission.hh.

96 { return MaximalKineticEnergy; }
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  }
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  }
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: