71 G4cerr <<
" >>> G4Fissioner -> target is not nuclei " <<
G4endl;
76 G4cout <<
" Fissioner input\n" << *nuclei_target <<
G4endl;
89 G4double TEM = std::sqrt(EEXS / PARA);
92 TETA = TETA / std::sinh(TETA);
104 G4double DTEM = (A < 220 ? 0.5 : 1.15);
113 for (
G4int i = 0; i < 50 && A1 > 30; i++) {
118 Z1 =
G4lrint(getZopt(A1, A2, Z, X3, X4, R12) - 1.);
123 potentialMinimization(VPOT, EDEF1, VCOUL, A1, A2, Z1, Z2, AL1, BET1, R12);
135 G4double C1 = std::sqrt(getC2(A1, A2, X3, X4, R12) / TEM);
138 DZ = DZ > 0.0 ? DZ + 0.5 : -std::fabs(DZ - 0.5);
143 G4double EZ = (DMT1 + (DMT - DMT1) * TETA - VPOT + DEfin) / TEM;
145 if (EZ >= ALMA) ALMA = EZ;
146 G4double EK = VCOUL + DEfin + 0.5 * TEM;
149 if (EV > 0.0) fissionStore.
addConfig(A1, Z1, EZ, EK, EV);
154 if (store_size == 0)
return;
168 G4double pmod = std::sqrt(0.001 * EK * mass1 * mass2 / mass_in);
174 G4double EV = 1000.0 * (e_in - e_out) / A;
175 if (EV <= 0.0)
return;
184 static std::vector<G4InuclNuclei> frags(2);
202 G4double C2 = 124.57 * (1.0 / A1 + 1.0 / A2) + 0.78 * (X3 + X4) - 176.9 *
203 ((X3*X3*X3*X3) + (X4*X4*X4*X4)) + 219.36 * (1.0 / (A1 * A1) + 1.0 / (A2 * A2)) - 1.108 / R12;
219 G4double Zopt = (87.7 * (X4 - X3) * (1.0 - 1.25 * (X4 + X3)) +
220 ZT * ((124.57 / A2 + 0.78 * X4 - 176.9 * (X4*X4*X4*X4) + 219.36 / (A2 * A2)) - 0.554 / R12)) /
221 getC2(A1, A2, X3, X4, R12);
226void G4Fissioner::potentialMinimization(
G4double& VP,
238 G4cout <<
" >>> G4Fissioner::potentialMinimization" <<
G4endl;
242 const G4int itry_max = 2000;
245 const G4double DS2 = 1.0 / DS1 / DS1;
246 G4int A1[2] = { AF, AS };
247 G4int Z1[2] = { ZF, ZS };
258 for (i = 0; i < 2; i++) {
261 Y2 = Z1[i] * Z1[i] / R[i];
262 C[i] = 6.8 * Y1 - 0.142 * Y2;
263 F[i] = 12.138 * Y1 - 0.145 * Y2;
277 while (itry < itry_max) {
281 for (i = 0; i < 2; i++) {
282 S += R[i] * (1.0 + AL1[i] + BET1[i] - 0.257 * AL1[i] * BET1[i]);
288 for (i = 0; i < 2; i++) {
289 SAL[i] = R[i] * (1.0-0.257 * BET1[i]);
290 SBE[i] = R[i] * (1.0-0.257 * AL1[i]);
293 X2[i] = X[i] * X1[i];
294 Y1 += AL1[i] * X1[i];
295 Y2 += BET1[i] * X2[i];
296 R12 += R[i] * (1.0 - AL1[i] * (1.0 - 0.6 * X[i]) + BET1[i] * (1.0 - 0.429 * X1[i]));
299 G4double Y3 = -0.6 * Y1 + 0.857 * Y2;
300 G4double Y4 = (1.2 * Y1 - 2.571 * Y2) / S;
304 for (i = 0; i < 2; i++) {
305 RAL[i] = -R[i] * (1.0 - 0.6 * X[i]) + SAL[i] * Y3;
306 RBE[i] = R[i] * (1.0 - 0.429 * X1[i]) + SBE[i] * Y3;
312 for (i = 0; i < 2; i++) {
314 for (
G4int j = 0; j < 2; j++) {
319 if (std::fabs(AL1[i]) >= DS1) {
320 G4double XXX = AL1[i] * AL1[i] * DS2;
321 G4double DEX = XXX > 100.0 ? huge_num : std::exp(XXX);
322 DX1 = 2.0 * (1.0 + 2.0 * AL1[i] * AL1[i] * DS2) * DEX * DS2;
325 if (std::fabs(BET1[i]) >= DS1) {
326 G4double XXX = BET1[i] * BET1[i] * DS2;
327 G4double DEX = XXX > 100.0 ? huge_num : std::exp(XXX);
328 DX2 = 2.0 * (1.+2.0 * BET1[i] * BET1[i] * DS2) * DEX * DS2;
332 A[i][j] = R3 * RBE[i] * RBE[j] -
335 X1[j] * SAL[i]) + SAL[i] * SAL[j] * Y4) +
336 DEL * C[i] + DEL1 * DX1;
339 A[i1][j1] = R3 * RBE[i] * RBE[j]
342 X2[j] * SBE[i]) + SBE[i] * SBE[j] * Y4) +
343 DEL * F[i] + DEL1 * DX2;
344 A[i][j1] = R3 * RAL[i] * RBE[j] -
347 0.6 * X1[i] * SBE[j]) + SBE[j] * SAL[i] * Y4 -
348 0.257 * R[i] * Y3 * DEL1);
353 for (i = 0; i < 2; i++) {
357 if (std::fabs(AL1[i]) >= DS1) DX1 = 2.0 * AL1[i] * DS2 * std::exp(AL1[i] * AL1[i] * DS2);
359 if (std::fabs(BET1[i]) >= DS1) DX2 = 2.0 * BET1[i] * DS2 * std::exp(BET1[i] * BET1[i] * DS2);
360 B[i] = R2 * RAL[i] - 2.0e-3 * C[i] * AL1[i] + DX1;
361 B[i + 2] = R2 * RBE[i] - 2.0e-3 * F[i] * BET1[i] + DX2;
367 for (i = 0; i < 4; i++) {
370 for (
G4int j = 0; j < 4; j++) ST1 += A[i][j] * B[i] * B[j];
376 for (i = 0; i < 2; i++) {
377 AL1[i] += B[i] * STEP;
378 BET1[i] += B[i + 2] * STEP;
379 DSOL += B[i] * B[i] + B[i + 2] * B[i + 2];
381 DSOL = std::sqrt(DSOL);
383 if (DSOL < DSOL1)
break;
387 if (itry == itry_max)
388 G4cout <<
" maximal number of iterations in potentialMinimization " <<
G4endl
389 <<
" A1 " << AF <<
" Z1 " << ZF <<
G4endl;
393 for (i = 0; i < 2; i++) ED[i] = F[i] * BET1[i] * BET1[i] + C[i] * AL1[i] * AL1[i];
396 VP = VC + ED[0] + ED[1];
G4DLLIMPORT std::ostream G4cerr
G4DLLIMPORT std::ostream G4cout
void setVectM(const Hep3Vector &spatial, double mass)
virtual G4bool validateOutput(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
void addOutgoingNuclei(const std::vector< G4InuclNuclei > &nuclea)
void addConfig(G4double a, G4double z, G4double ez, G4double ek, G4double ev)
void setVerboseLevel(G4int verbose=1)
G4FissionConfiguration generateConfiguration(G4double amax, G4double rand) const
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4double getNucleiMass() const
G4double getExitationEnergy() const
G4double bindingEnergy(G4int A, G4int Z)
G4double nucleiLevelDensity(G4int A)
G4LorentzVector generateWithRandomAngles(G4double p, G4double mass=0.)
G4double randomGauss(G4double sigma)
G4double G4cbrt(G4double x)
G4double bindingEnergyAsymptotic(G4int A, G4int Z)