42 EF = theAvarageKineticPerNucleonForLightFragments / eV;
43 G4double lightU1 = std::sqrt(energy) - std::sqrt(EF);
44 lightU1 *= lightU1 /
tm;
45 G4double lightU2 = std::sqrt(energy) + std::sqrt(EF);
46 lightU2 *= lightU2 /
tm;
48 if (theAvarageKineticPerNucleonForLightFragments > 1 * eV) {
49 lightTerm = Pow->
powA(lightU2, 1.5) * E1(lightU2);
50 lightTerm -= Pow->
powA(lightU1, 1.5) * E1(lightU1);
51 lightTerm += Gamma15(lightU2) - Gamma15(lightU1);
52 lightTerm /= 3. * std::sqrt(tm * EF);
55 EF = theAvarageKineticPerNucleonForHeavyFragments / eV;
56 G4double heavyU1 = std::sqrt(energy) - std::sqrt(EF);
57 heavyU1 *= heavyU1 /
tm;
58 G4double heavyU2 = std::sqrt(energy) + std::sqrt(EF);
59 heavyU2 *= heavyU2 /
tm;
61 if (theAvarageKineticPerNucleonForHeavyFragments > 1 * eV) {
62 heavyTerm = Pow->
powA(heavyU2, 1.5) * E1(heavyU2);
63 heavyTerm -= Pow->
powA(heavyU1, 1.5) * E1(heavyU1);
64 heavyTerm += Gamma15(heavyU2) - Gamma15(heavyU1);
65 heavyTerm /= 3. * std::sqrt(tm * EF);
68 result = 0.5 * (lightTerm + heavyTerm);
76 G4double last = 0, buff, current = 100 * MeV;
78 G4double newValue = 0., oldValue = 0.;
82 G4int icounter_max = 1024;
85 if (icounter > icounter_max) {
86 G4cout <<
"Loop-counter exceeded the threshold value at " << __LINE__ <<
"th line of "
87 << __FILE__ <<
"." <<
G4endl;
91 newValue = FissionIntegral(tm, current);
92 if (newValue < random) {
94 current += std::abs(current - last) / 2.;
96 if (current > 190 * MeV)
98 "Madland-Nix Spectrum has not converged in sampling");
102 current -= std::abs(current - last) / 2.;
105 }
while (std::abs(oldValue - newValue)
106 > precision * newValue);
113 if (aMean < 1 * eV)
return 0;
121 G4double B = (sb + beta) * (sb + beta) / tm;
123 G4double Bp = (sb - beta) * (sb - beta) / tm;
129 result = ((0.4 *
alpha2 * Pow->
powA(B, 2.5) - 0.5 * alphabeta * B * B) * E1(B)
130 - (0.4 *
alpha2 * Pow->
powA(
A, 2.5) - 0.5 * alphabeta *
A *
A) * E1(
A))
131 - ((0.4 *
alpha2 * Pow->
powA(Bp, 2.5) + 0.5 * alphabeta * Bp * Bp) * E1(Bp)
132 - (0.4 *
alpha2 * Pow->
powA(Ap, 2.5) + 0.5 * alphabeta * Ap * Ap) * E1(Ap))
133 + ((
alpha2 *
B - 2 * alphabeta * std::sqrt(B)) * Gamma15(B)
134 - (
alpha2 *
A - 2 * alphabeta * std::sqrt(
A)) * Gamma15(
A))
135 - ((
alpha2 * Bp - 2 * alphabeta * std::sqrt(Bp)) * Gamma15(Bp)
136 - (
alpha2 * Ap - 2 * alphabeta * std::sqrt(Ap)) * Gamma15(Ap))
137 - 0.6 *
alpha2 * (Gamma25(B) - Gamma25(
A) - Gamma25(Bp) + Gamma25(Ap))
140 +
G4Exp(-Ap) * (1 + Ap));
143 result = ((0.4 *
alpha2 * Pow->
powA(B, 2.5) - 0.5 * alphabeta * B * B) * E1(B)
144 - (0.4 *
alpha2 * Pow->
powA(
A, 2.5) - 0.5 * alphabeta *
A *
A) * E1(
A));
145 result -= ((0.4 *
alpha2 * Pow->
powA(Bp, 2.5) + 0.5 * alphabeta * Bp * Bp) * E1(Bp)
146 - (0.4 *
alpha2 * Pow->
powA(Ap, 2.5) + 0.5 * alphabeta * Ap * Ap) * E1(Ap));
147 result += ((
alpha2 *
B - 2 * alphabeta * std::sqrt(B)) * Gamma15(B)
148 - (
alpha2 *
A - 2 * alphabeta * std::sqrt(
A)) * Gamma15(
A));
149 result -= ((
alpha2 * Bp + 2 * alphabeta * std::sqrt(Bp)) * Gamma15(Bp)
150 - (
alpha2 * Ap + 2 * alphabeta * std::sqrt(Ap)) * Gamma15(Ap));
151 result -= 0.6 *
alpha2 * (Gamma25(B) - Gamma25(
A) - Gamma25(Bp) + Gamma25(Ap));
152 result -= 1.5 * alphabeta
154 +
G4Exp(-Ap) * (1 + Ap) - 2.);
156 result = result / (3. * std::sqrt(tm * EF));
G4double B(G4double temperature)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4GLOB_DLL std::ostream G4cout
G4double Sample(G4double anEnergy) override
G4double GetY(G4double x)
static G4Pow * GetInstance()
G4double powA(G4double A, G4double y) const
G4double energy(const ThreeVector &p, const G4double m)