72 fissionStore.setVerboseLevel(verboseLevel);
75 getTargetData(target);
79 G4double TEM = std::sqrt(EEXS / PARA);
82 TETA = TETA / std::sinh(TETA);
94 G4double DTEM = (A < 220 ? 0.5 : 1.15);
103 for (
G4int i = 0; i < 50 && A1 > 30; i++) {
108 Z1 =
G4lrint(getZopt(A1, A2, Z, X3, X4, R12) - 1.);
113 potentialMinimization(VPOT, EDEF1, VCOUL, A1, A2, Z1, Z2, AL1, BET1, R12);
125 G4double C1 = std::sqrt(getC2(A1, A2, X3, X4, R12) / TEM);
128 DZ = DZ > 0.0 ? DZ + 0.5 : -std::fabs(DZ - 0.5);
133 G4double EZ = (DMT1 + (DMT - DMT1) * TETA - VPOT + DEfin) / TEM;
135 if (EZ >= ALMA) ALMA = EZ;
136 G4double EK = VCOUL + DEfin + 0.5 * TEM;
139 if (EV > 0.0) fissionStore.addConfig(A1, Z1, EZ, EK, EV);
143 G4int store_size = fissionStore.size();
144 if (store_size == 0)
return;
147 fissionStore.generateConfiguration(ALMA,
inuclRndm());
158 G4double pmod = std::sqrt(0.001 * EK * mass1 * mass2 / mass_in);
163 G4double e_out = mom1.e() + mom2.e();
164 G4double EV = 1000.0 * (e_in - e_out) / A;
165 if (EV <= 0.0)
return;
181 if (verboseLevel > 3) {
185 G4double C2 = 124.57 * (1.0 / A1 + 1.0 / A2) + 0.78 * (X3 + X4) - 176.9 *
186 ((X3*X3*X3*X3) + (X4*X4*X4*X4)) + 219.36 * (1.0 / (A1 * A1) + 1.0 / (A2 * A2)) - 1.108 / R12;
198 if (verboseLevel > 3) {
202 G4double Zopt = (87.7 * (X4 - X3) * (1.0 - 1.25 * (X4 + X3)) +
203 ZT * ((124.57 / A2 + 0.78 * X4 - 176.9 * (X4*X4*X4*X4) + 219.36 / (A2 * A2)) - 0.554 / R12)) /
204 getC2(A1, A2, X3, X4, R12);
220 if (verboseLevel > 3) {
221 G4cout <<
" >>> G4Fissioner::potentialMinimization" <<
G4endl;
225 const G4int itry_max = 2000;
228 const G4double DS2 = 1.0 / DS1 / DS1;
229 G4int A1[2] = { AF, AS };
230 G4int Z1[2] = { ZF, ZS };
241 for (i = 0; i < 2; i++) {
244 Y2 = Z1[i] * Z1[i] / R[i];
245 C[i] = 6.8 * Y1 - 0.142 * Y2;
246 F[i] = 12.138 * Y1 - 0.145 * Y2;
260 while (itry < itry_max) {
264 for (i = 0; i < 2; i++) {
265 S += R[i] * (1.0 + AL1[i] + BET1[i] - 0.257 * AL1[i] * BET1[i]);
271 for (i = 0; i < 2; i++) {
272 SAL[i] = R[i] * (1.0-0.257 * BET1[i]);
273 SBE[i] = R[i] * (1.0-0.257 * AL1[i]);
276 X2[i] = X[i] * X1[i];
277 Y1 += AL1[i] * X1[i];
278 Y2 += BET1[i] * X2[i];
279 R12 += R[i] * (1.0 - AL1[i] * (1.0 - 0.6 * X[i]) + BET1[i] * (1.0 - 0.429 * X1[i]));
282 G4double Y3 = -0.6 * Y1 + 0.857 * Y2;
283 G4double Y4 = (1.2 * Y1 - 2.571 * Y2) / S;
287 for (i = 0; i < 2; i++) {
288 RAL[i] = -R[i] * (1.0 - 0.6 * X[i]) + SAL[i] * Y3;
289 RBE[i] = R[i] * (1.0 - 0.429 * X1[i]) + SBE[i] * Y3;
295 for (i = 0; i < 2; i++) {
297 for (
G4int j = 0; j < 2; j++) {
302 if (std::fabs(AL1[i]) >= DS1) {
304 G4double DEX = XXX > 100.0 ? huge_num : std::exp(XXX);
305 DX1 = 2.0 * (1.0 + 2.0 * AL1[i] * AL1[i] * DS2) * DEX * DS2;
308 if (std::fabs(BET1[i]) >= DS1) {
310 G4double DEX = XXX > 100.0 ? huge_num : std::exp(XXX);
311 DX2 = 2.0 * (1.+2.0 * BET1[i] * BET1[i] * DS2) * DEX * DS2;
315 AA[i][j] = R3 * RBE[i] * RBE[j] -
318 X1[j] * SAL[i]) + SAL[i] * SAL[j] * Y4) +
319 DEL * C[i] + DEL1 * DX1;
322 AA[i1][j1] = R3 * RBE[i] * RBE[j]
325 X2[j] * SBE[i]) + SBE[i] * SBE[j] * Y4) +
326 DEL * F[i] + DEL1 * DX2;
327 AA[i][j1] = R3 * RAL[i] * RBE[j] -
330 0.6 * X1[i] * SBE[j]) + SBE[j] * SAL[i] * Y4 -
331 0.257 * R[i] * Y3 * DEL1);
332 AA[j1][i] = AA[i][j1];
336 for (i = 0; i < 2; i++) {
340 if (std::fabs(AL1[i]) >= DS1) DX1 = 2.0 * AL1[i] * DS2 * std::exp(AL1[i] * AL1[i] * DS2);
342 if (std::fabs(BET1[i]) >= DS1) DX2 = 2.0 * BET1[i] * DS2 * std::exp(BET1[i] * BET1[i] * DS2);
343 B[i] = R2 * RAL[i] - 2.0e-3 * C[i] * AL1[i] + DX1;
344 B[i + 2] = R2 * RBE[i] - 2.0e-3 * F[i] * BET1[i] + DX2;
350 for (i = 0; i < 4; i++) {
353 for (
G4int j = 0; j < 4; j++) ST1 += AA[i][j] * B[i] * B[j];
359 for (i = 0; i < 2; i++) {
360 AL1[i] += B[i] * STEP;
361 BET1[i] += B[i + 2] * STEP;
362 DSOL += B[i] * B[i] + B[i + 2] * B[i + 2];
364 DSOL = std::sqrt(DSOL);
366 if (DSOL < DSOL1)
break;
369 if (verboseLevel > 3) {
370 if (itry == itry_max)
371 G4cout <<
" maximal number of iterations in potentialMinimization " <<
G4endl
372 <<
" A1 " << AF <<
" Z1 " << ZF <<
G4endl;
376 for (i = 0; i < 2; i++) ED[i] = F[i] * BET1[i] * BET1[i] + C[i] * AL1[i] * AL1[i];
379 VP = VC + ED[0] + ED[1];
G4double randomGauss(G4double sigma)
G4double getZopt(G4int A1, G4int A2, G4int ZT, G4double X3, G4double X4, G4double R12) const
G4double bindingEnergyAsymptotic(G4int A, G4int Z)
G4double getC2(G4int A1, G4int A2, G4double X3, G4double X4, G4double R12) const
G4GLOB_DLL std::ostream G4cout
G4double getNucleiMass() const
G4LorentzVector generateWithRandomAngles(G4double p, G4double mass=0.)
G4double G4cbrt(G4double x)
static const G4double A[nN]
void potentialMinimization(G4double &VP, G4double(&ED)[2], G4double &VC, G4int AF, G4int AS, G4int ZF, G4int ZS, G4double AL1[2], G4double BET1[2], G4double &R12) const
void addRecoilFragment(const G4Fragment *aFragment)
virtual void deExcite(const G4Fragment &target, G4CollisionOutput &output)
G4double bindingEnergy(G4int A, G4int Z)
G4double nucleiLevelDensity(G4int A)
CLHEP::HepLorentzVector G4LorentzVector