96{
98
99
101
103
106 if (U <= pcorr) { return Fragment1; }
107
108
110
111
113
114
116
117
121
122
126
127 G4double FragmentsExcitationEnergy = 0.0;
128 G4double FragmentsKineticEnergy = 0.0;
129
131 do {
132
133
134 A1 = FissionAtomicNumber(
A);
135 Z1 = FissionCharge(
A, Z, A1);
137
138
140 Z2 = Z - Z1;
141 if (A2 < 1 || Z2 < 0 || Z2 > A2) {
142 FragmentsExcitationEnergy = -1.0;
143 continue;
144 }
146
148
149
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
161
162
163
164
165
166 FragmentsExcitationEnergy =
167 Tmax - FragmentsKineticEnergy + pcorr;
168
169
170 } while (FragmentsExcitationEnergy < 0.0 && ++Trials < 100);
171
172 if (FragmentsExcitationEnergy <= 0.0) {
174 "G4CompetitiveFission::BreakItUp: Excitation energy for fragments < 0.0!");
175 }
176
177
178 M1 += FragmentsExcitationEnergy * A1/
static_cast<G4double>(
A);
179
180 M2 += FragmentsExcitationEnergy * A2/
static_cast<G4double>(
A);
181
183
184 G4double etot1 = ((
M - M2)*(
M + M2) + M1*M1)/(2*
M);
188 FourMomentum1.boost(theNucleusMomentum.
boostVector());
189
190
191 Fragment1 =
new G4Fragment( A1, Z1, FourMomentum1);
193 theNucleusMomentum -= FourMomentum1;
197 return Fragment1;
198}
G4ThreeVector G4RandomDirection()
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)
void SetMomentum(const G4LorentzVector &value)
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetFissionPairingCorrection(G4int A, G4int Z) const