Geant4  10.03.p03
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4CompetitiveFission Class Reference

#include <G4CompetitiveFission.hh>

Inheritance diagram for G4CompetitiveFission:
Collaboration diagram for G4CompetitiveFission:

Public Member Functions

 G4CompetitiveFission ()
 
virtual ~G4CompetitiveFission ()
 
virtual G4FragmentEmittedFragment (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="")
 
virtual ~G4VEvaporationChannel ()
 
virtual void Initialise ()
 
virtual G4double GetLifeTime (G4Fragment *theNucleus)
 
virtual G4bool BreakUpChain (G4FragmentVector *theResult, G4Fragment *theNucleus)
 
G4FragmentVectorBreakUpFragment (G4Fragment *theNucleus)
 
virtual void Dump () const
 
virtual void SetICM (G4bool)
 
virtual void RDMForced (G4bool)
 
virtual G4double GetFinalLevelEnergy (G4int Z, G4int A, G4double energy)
 
virtual G4double GetUpperLevelEnergy (G4int Z, G4int A)
 
G4double GetMaxLevelEnergy (G4int Z, G4int A)
 
G4double GetNearestLevelEnergy (G4int Z, G4int A, G4double energy)
 
void SetPhotonEvaporation (G4VEvaporationChannel *p)
 
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 47 of file G4CompetitiveFission.hh.

Constructor & Destructor Documentation

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;
56  FissionBarrier = 0.0;
57  FissionProbability = 0.0;
58  LevelDensityParameter = 0.0;
59  pairingCorrection = G4PairingCorrection::GetInstance();
60 }
G4VEvaporationChannel(const G4String &aName="")
static G4PairingCorrection * GetInstance()

Here is the call graph for this function:

G4CompetitiveFission::~G4CompetitiveFission ( )
virtual

Definition at line 62 of file G4CompetitiveFission.cc.

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

Member Function Documentation

G4Fragment * G4CompetitiveFission::EmittedFragment ( G4Fragment theNucleus)
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 95 of file G4CompetitiveFission.cc.

96 {
97  G4Fragment * Fragment1 = 0;
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;
168  Tmax - FragmentsKineticEnergy + pcorr;
169 
170  // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
171  } while (FragmentsExcitationEnergy < 0.0
172  && ++Trials < 100);
173 
174  if (FragmentsExcitationEnergy <= 0.0) {
175  throw G4HadronicException(__FILE__, __LINE__,
176  "G4CompetitiveFission::BreakItUp: Excitation energy for fragments < 0.0!");
177  }
178 
179  // Fragment 1
180  M1 += FragmentsExcitationEnergy * A1/static_cast<G4double>(A);
181  // Fragment 2
182  M2 += FragmentsExcitationEnergy * A2/static_cast<G4double>(A);
183  // primary
184  M += U;
185 
186  G4double etot1 = ((M - M2)*(M + M2) + M1*M1)/(2*M);
187  G4ParticleMomentum Momentum1(IsotropicVector(std::sqrt((etot1 - M1)*(etot1+M1))));
188  G4LorentzVector FourMomentum1(Momentum1, etot1);
189  FourMomentum1.boost(theNucleusMomentum.boostVector());
190 
191  // Create Fragments
192  Fragment1 = new G4Fragment( A1, Z1, FourMomentum1);
193  theNucleusMomentum -= FourMomentum1;
194  theNucleus->SetZandA_asInt(Z2, A2);
195  theNucleus->SetMomentum(theNucleusMomentum);
196  return Fragment1;
197 }
Hep3Vector boostVector() const
static G4double GetNuclearMass(const G4double A, const G4double Z)
int G4int
Definition: G4Types.hh:78
double A(double temperature)
G4int GetA_asInt() const
Definition: G4Fragment.hh:266
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:307
void SetMomentum(const G4LorentzVector &value)
Definition: G4Fragment.hh:312
G4double GetGroundStateMass() const
Definition: G4Fragment.hh:288
G4double GetFissionPairingCorrection(G4int A, G4int Z) const
void SetZandA_asInt(G4int Znew, G4int Anew)
Definition: G4Fragment.hh:276
G4int GetZ_asInt() const
Definition: G4Fragment.hh:271
double G4double
Definition: G4Types.hh:76
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:283
void DefineParameters(G4int A, G4int Z, G4double ExEnergy, G4double FissionBarrier)

Here is the call graph for this function:

G4double G4CompetitiveFission::GetEmissionProbability ( G4Fragment theNucleus)
virtual

Implements G4VEvaporationChannel.

Definition at line 69 of file G4CompetitiveFission.cc.

70 {
71  G4int anA = fragment->GetA_asInt();
72  G4int aZ = fragment->GetZ_asInt();
73  G4double ExEnergy = fragment->GetExcitationEnergy() -
74  pairingCorrection->GetFissionPairingCorrection(anA,aZ);
75 
76  // Saddle point excitation energy ---> A = 65
77  // Fission is excluded for A < 65
78  if (anA >= 65 && ExEnergy > 0.0) {
79  FissionBarrier = theFissionBarrierPtr->FissionBarrier(anA,aZ,ExEnergy);
80  MaximalKineticEnergy = ExEnergy - FissionBarrier;
81  LevelDensityParameter =
82  theLevelDensityPtr->LevelDensityParameter(anA,aZ,ExEnergy);
83  FissionProbability =
84  theFissionProbabilityPtr->EmissionProbability(*fragment,
85  MaximalKineticEnergy);
86  }
87  else {
88  MaximalKineticEnergy = -1000.0;
89  LevelDensityParameter = 0.0;
90  FissionProbability = 0.0;
91  }
92  return FissionProbability;
93 }
virtual G4double FissionBarrier(G4int A, G4int Z, G4double U) const =0
int G4int
Definition: G4Types.hh:78
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

Here is the call graph for this function:

G4double G4CompetitiveFission::GetFissionBarrier ( void  ) const
inline

Definition at line 146 of file G4CompetitiveFission.hh.

147 {
148  return FissionBarrier;
149 }
G4double G4CompetitiveFission::GetLevelDensityParameter ( void  ) const
inline

Definition at line 151 of file G4CompetitiveFission.hh.

152 {
153  return LevelDensityParameter;
154 }
G4double G4CompetitiveFission::GetMaximalKineticEnergy ( void  ) const
inline

Definition at line 156 of file G4CompetitiveFission.hh.

157 {
158  return MaximalKineticEnergy;
159 }
void G4CompetitiveFission::SetEmissionStrategy ( G4VEmissionProbability aFissionProb)
inline

Definition at line 131 of file G4CompetitiveFission.hh.

132 {
133  if (MyOwnFissionProbability) delete theFissionProbabilityPtr;
134  theFissionProbabilityPtr = aFissionProb;
135  MyOwnFissionProbability = false;
136 }

Here is the caller graph for this function:

void G4CompetitiveFission::SetFissionBarrier ( G4VFissionBarrier aBarrier)
inline

Definition at line 123 of file G4CompetitiveFission.hh.

124 {
125  if (MyOwnFissionBarrier) delete theFissionBarrierPtr;
126  theFissionBarrierPtr = aBarrier;
127  MyOwnFissionBarrier = false;
128 }
void G4CompetitiveFission::SetLevelDensityParameter ( G4VLevelDensityParameter aLevelDensity)
inline

Definition at line 139 of file G4CompetitiveFission.hh.

140 {
141  if (MyOwnLevelDensity) delete theLevelDensityPtr;
142  theLevelDensityPtr = aLevelDensity;
143  MyOwnLevelDensity = false;
144 }

Here is the caller graph for this function:


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