93{
95
96
98
100
103 if (U <= pcorr) { return Fragment1; }
104
105
107
108
110
111
113
114
118
119
123
124 G4double FragmentsExcitationEnergy = 0.0;
125 G4double FragmentsKineticEnergy = 0.0;
126
128 do {
129
130
131 A1 = FissionAtomicNumber(A);
132 Z1 = FissionCharge(A, Z, A1);
134
135
137 Z2 = Z - Z1;
138 if (A2 < 1 || Z2 < 0 || Z2 > A2) {
139 FragmentsExcitationEnergy = -1.0;
140 continue;
141 }
143
144 G4double Tmax = M + U - M1 - M2 - pcorr;
145
146
147 if (Tmax < 0.0) {
148 FragmentsExcitationEnergy = -1.0;
149 continue;
150 }
151
152 FragmentsKineticEnergy = FissionKineticEnergy( A , Z,
153 A1, Z1,
154 A2, Z2,
155 U , Tmax);
156
157
158
159
160
161
162
163 FragmentsExcitationEnergy =
164 Tmax - FragmentsKineticEnergy + pcorr;
165
166
167 } while (FragmentsExcitationEnergy < 0.0 && ++Trials < 100);
168
169 if (FragmentsExcitationEnergy <= 0.0) {
171 "G4CompetitiveFission::BreakItUp: Excitation energy for fragments < 0.0!");
172 }
173
174
175 M1 += FragmentsExcitationEnergy * A1/
static_cast<G4double>(
A);
176
177 M2 += FragmentsExcitationEnergy * A2/
static_cast<G4double>(
A);
178
179 M += U;
180
181 G4double etot1 = ((M - M2)*(M + M2) + M1*M1)/(2*M);
185 FourMomentum1.boost(theNucleusMomentum.
boostVector());
186
187
188 Fragment1 =
new G4Fragment( A1, Z1, FourMomentum1);
189 theNucleusMomentum -= FourMomentum1;
192 return Fragment1;
193}
double A(double temperature)
G4ThreeVector G4RandomDirection()
Hep3Vector boostVector() const
void DefineParameters(G4int A, G4int Z, G4double ExEnergy, G4double FissionBarrier)
G4double GetGroundStateMass() const
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
void SetMomentum(const G4LorentzVector &value)
void SetZandA_asInt(G4int Znew, G4int Anew)
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetFissionPairingCorrection(G4int A, G4int Z) const