Geant4-11
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
G4Fissioner Class Reference

#include <G4Fissioner.hh>

Inheritance diagram for G4Fissioner:
G4CascadeDeexciteBase G4VCascadeDeexcitation G4VCascadeCollider

Public Member Functions

virtual void collide (G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
 
virtual void deExcite (const G4Fragment &target, G4CollisionOutput &output)
 
 G4Fissioner ()
 
virtual void setVerboseLevel (G4int verbose=0)
 
virtual ~G4Fissioner ()
 

Protected Member Functions

virtual G4bool explosion (const G4Fragment &target) const
 
virtual G4bool explosion (G4int A, G4int Z, G4double excitation) const
 
void getTargetData (const G4Fragment &target)
 
const G4FragmentmakeFragment (G4int A, G4int Z, G4double EX=0.)
 
const G4FragmentmakeFragment (G4LorentzVector mom, G4int A, G4int Z, G4double EX=0.)
 
virtual void setName (const G4String &name)
 
virtual G4bool validateOutput (const G4Fragment &target, const std::vector< G4InuclElementaryParticle > &particles)
 
virtual G4bool validateOutput (const G4Fragment &target, const std::vector< G4InuclNuclei > &fragments)
 
virtual G4bool validateOutput (const G4Fragment &target, G4CollisionOutput &output)
 

Protected Attributes

G4int A
 
G4Fragment aFragment
 
G4CascadeCheckBalancebalance
 
G4double EEXS
 
G4LorentzVector PEX
 
G4String theName
 
G4int verboseLevel
 
G4int Z
 

Private Member Functions

 G4Fissioner (const G4Fissioner &)
 
G4double getC2 (G4int A1, G4int A2, G4double X3, G4double X4, G4double R12) const
 
G4double getZopt (G4int A1, G4int A2, G4int ZT, G4double X3, G4double X4, G4double R12) const
 
G4Fissioneroperator= (const G4Fissioner &)
 
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
 

Private Attributes

G4FissionStore fissionStore
 

Detailed Description

Definition at line 49 of file G4Fissioner.hh.

Constructor & Destructor Documentation

◆ G4Fissioner() [1/2]

G4Fissioner::G4Fissioner ( )
inline

Definition at line 51 of file G4Fissioner.hh.

51: G4CascadeDeexciteBase("G4Fissioner") {;}
G4CascadeDeexciteBase(const char *name)

◆ ~G4Fissioner()

virtual G4Fissioner::~G4Fissioner ( )
inlinevirtual

Definition at line 52 of file G4Fissioner.hh.

52{;}

◆ G4Fissioner() [2/2]

G4Fissioner::G4Fissioner ( const G4Fissioner )
private

Member Function Documentation

◆ collide()

void G4VCascadeDeexcitation::collide ( G4InuclParticle bullet,
G4InuclParticle target,
G4CollisionOutput globalOutput 
)
virtualinherited

Implements G4VCascadeCollider.

Definition at line 37 of file G4VCascadeDeexcitation.cc.

39 {
40 if (verboseLevel) {
41 G4cout << " >>> G4VCascadeDeexcitation[" << theName << "]::collide "
42 << " *** SHOULD NOT BE CALLED ***" << G4endl;
43 }
44
45 throw G4HadronicException(__FILE__, __LINE__,
46 "G4VCascadeDeexcitation::collide() invalid, must use ::deExcite(G4Fagment*)");
47}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout

References G4cout, G4endl, G4VCascadeCollider::theName, and G4VCascadeCollider::verboseLevel.

Referenced by G4InuclEvaporation::BreakItUp().

◆ deExcite()

void G4Fissioner::deExcite ( const G4Fragment target,
G4CollisionOutput output 
)
virtual

Implements G4VCascadeDeexcitation.

Definition at line 65 of file G4Fissioner.cc.

66 {
67 if (verboseLevel) {
68 G4cout << " >>> G4Fissioner::deExcite" << G4endl;
69 }
70
71 if (verboseLevel > 1)
72 G4cout << " Fissioner input\n" << target << G4endl;
73
74 // Initialize buffer for fission possibilities
77
78 getTargetData(target);
80 G4double mass_in = PEX.m();
81 G4double e_in = mass_in; // Mass includes excitation
82 G4double PARA = 0.055 * A13*A13 * (G4cbrt(A-Z) + G4cbrt(Z));
83 G4double TEM = std::sqrt(EEXS / PARA);
84 G4double TETA = 0.494 * A13 * TEM;
85
86 TETA = TETA / std::sinh(TETA);
87
88 if (A < 246) PARA += (nucleiLevelDensity(A) - PARA) * TETA;
89
90 G4int A1 = A/2 + 1;
91 G4int Z1;
92 G4int A2 = A - A1;
93
94 G4double ALMA = -1000.0;
96 G4double EVV = EEXS - DM1;
98 G4double DTEM = (A < 220 ? 0.5 : 1.15);
99
100 TEM += DTEM;
101
102 G4double AL1[2] = { -0.15, -0.15 };
103 G4double BET1[2] = { 0.05, 0.05 };
104
105 G4double R12 = G4cbrt(A1) + G4cbrt(A2);
106
107 for (G4int i = 0; i < 50 && A1 > 30; i++) {
108 A1--;
109 A2 = A - A1;
110 G4double X3 = 1.0 / G4cbrt(A1);
111 G4double X4 = 1.0 / G4cbrt(A2);
112 Z1 = G4lrint(getZopt(A1, A2, Z, X3, X4, R12) - 1.);
113 G4double EDEF1[2];
114 G4int Z2 = Z - Z1;
115 G4double VPOT, VCOUL;
116
117 potentialMinimization(VPOT, EDEF1, VCOUL, A1, A2, Z1, Z2, AL1, BET1, R12);
118
119 G4double DM3 = bindingEnergy(A1,Z1);
121 G4double DM5 = bindingEnergy(A2,Z2);
122 G4double DM6 = bindingEnergyAsymptotic(A2, Z2);
123 G4double DMT1 = DM4 + DM6 - DM2;
124 G4double DMT = DM3 + DM5 - DM1;
125 G4double EZL = EEXS + DMT - VPOT;
126
127 if(EZL > 0.0) { // generate fluctuations
128 // faster, using randomGauss
129 G4double C1 = std::sqrt(getC2(A1, A2, X3, X4, R12) / TEM);
130 G4double DZ = randomGauss(C1);
131
132 DZ = DZ > 0.0 ? DZ + 0.5 : -std::fabs(DZ - 0.5);
133 Z1 += G4int(DZ);
134 Z2 -= G4int(DZ);
135
136 G4double DEfin = randomGauss(TEM);
137 G4double EZ = (DMT1 + (DMT - DMT1) * TETA - VPOT + DEfin) / TEM;
138
139 if (EZ >= ALMA) ALMA = EZ;
140 G4double EK = VCOUL + DEfin + 0.5 * TEM;
141 G4double EV = EVV + bindingEnergy(A1,Z1) + bindingEnergy(A2,Z2) - EK;
142
143 if (EV > 0.0) fissionStore.addConfig(A1, Z1, EZ, EK, EV);
144 };
145 };
146
147 G4int store_size = fissionStore.size();
148 if (store_size == 0) return; // No fission products
149
152
153 A1 = G4int(config.afirst);
154 A2 = A - A1;
155 Z1 = G4int(config.zfirst);
156
157 G4int Z2 = Z - Z1;
158
161 G4double EK = config.ekin;
162 G4double pmod = std::sqrt(0.001 * EK * mass1 * mass2 / mass_in);
163
164 G4LorentzVector mom1 = generateWithRandomAngles(pmod, mass1);
165 G4LorentzVector mom2; mom2.setVectM(-mom1.vect(), mass2);
166
167 G4double e_out = mom1.e() + mom2.e();
168 G4double EV = 1000.0 * (e_in - e_out) / A;
169 if (EV <= 0.0) return; // No fission energy
170
171 G4double EEXS1 = EV*A1;
172 G4double EEXS2 = EV*A2;
173
174 // Pass only last two nuclear fragments
175 output.addRecoilFragment(makeFragment(mom1, A1, Z1, EEXS1));
176 output.addRecoilFragment(makeFragment(mom2, A2, Z2, EEXS2));
177}
#define A13
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
const double C1
void setVectM(const Hep3Vector &spatial, double mass)
Hep3Vector vect() const
void getTargetData(const G4Fragment &target)
const G4Fragment & makeFragment(G4LorentzVector mom, G4int A, G4int Z, G4double EX=0.)
void addRecoilFragment(const G4Fragment *aFragment)
size_t size() const
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 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
Definition: G4Fissioner.cc:213
G4double getZopt(G4int A1, G4int A2, G4int ZT, G4double X3, G4double X4, G4double R12) const
Definition: G4Fissioner.cc:195
G4FissionStore fissionStore
Definition: G4Fissioner.hh:57
G4double getC2(G4int A1, G4int A2, G4double X3, G4double X4, G4double R12) const
Definition: G4Fissioner.cc:179
G4double getNucleiMass() const
G4double bindingEnergy(G4int A, G4int Z)
G4double nucleiLevelDensity(G4int A)
G4LorentzVector generateWithRandomAngles(G4double p, G4double mass=0.)
G4double randomGauss(G4double sigma)
G4double bindingEnergyAsymptotic(G4int A, G4int Z)
static const G4double Z1[5]
Definition: paraMaker.cc:41
int G4lrint(double ad)
Definition: templates.hh:134

References G4CascadeDeexciteBase::A, A13, G4FissionStore::addConfig(), G4CollisionOutput::addRecoilFragment(), G4InuclSpecialFunctions::bindingEnergy(), G4InuclSpecialFunctions::bindingEnergyAsymptotic(), C1, G4FissionStore::clear(), CLHEP::HepLorentzVector::e(), G4CascadeDeexciteBase::EEXS, fissionStore, G4InuclSpecialFunctions::G4cbrt(), G4cout, G4endl, G4lrint(), G4FissionStore::generateConfiguration(), G4InuclSpecialFunctions::generateWithRandomAngles(), getC2(), G4InuclNuclei::getNucleiMass(), G4CascadeDeexciteBase::getTargetData(), getZopt(), G4InuclSpecialFunctions::inuclRndm(), CLHEP::HepLorentzVector::m(), G4CascadeDeexciteBase::makeFragment(), G4InuclSpecialFunctions::nucleiLevelDensity(), G4CascadeDeexciteBase::PEX, potentialMinimization(), G4InuclSpecialFunctions::randomGauss(), CLHEP::HepLorentzVector::setVectM(), G4FissionStore::setVerboseLevel(), G4FissionStore::size(), CLHEP::HepLorentzVector::vect(), G4VCascadeCollider::verboseLevel, G4CascadeDeexciteBase::Z, and anonymous_namespace{paraMaker.cc}::Z1.

Referenced by G4EquilibriumEvaporator::deExcite().

◆ explosion() [1/2]

G4bool G4CascadeDeexciteBase::explosion ( const G4Fragment target) const
protectedvirtualinherited

Reimplemented in G4EquilibriumEvaporator.

Definition at line 109 of file G4CascadeDeexciteBase.cc.

109 {
110 return explosion(fragment.GetA_asInt(), fragment.GetZ_asInt(),
111 fragment.GetExcitationEnergy()); // in MeV
112}
virtual G4bool explosion(const G4Fragment &target) const

References G4CascadeDeexciteBase::explosion(), G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), and G4Fragment::GetZ_asInt().

Referenced by G4CascadeDeexcitation::deExcite(), G4PreCompoundDeexcitation::deExcite(), G4CascadeDeexciteBase::explosion(), and G4EquilibriumEvaporator::explosion().

◆ explosion() [2/2]

G4bool G4CascadeDeexciteBase::explosion ( G4int  A,
G4int  Z,
G4double  excitation 
) const
protectedvirtualinherited

Reimplemented in G4EquilibriumEvaporator.

Definition at line 114 of file G4CascadeDeexciteBase.cc.

115 {
116 if (verboseLevel) G4cout << " >>> " << theName << "::explosion ?" << G4endl;
117
118 const G4int a_cut = 20;
119 const G4double be_cut = 3.0;
120
121 // Neutron balls, or small fragments with high excitations can explode
122 return ((fragA <= a_cut || fragZ==0) &&
123 (excitation >= be_cut * bindingEnergy(fragA,fragZ))
124 );
125}

References G4InuclSpecialFunctions::bindingEnergy(), G4cout, G4endl, G4VCascadeCollider::theName, and G4VCascadeCollider::verboseLevel.

◆ getC2()

G4double G4Fissioner::getC2 ( G4int  A1,
G4int  A2,
G4double  X3,
G4double  X4,
G4double  R12 
) const
private

Definition at line 179 of file G4Fissioner.cc.

183 {
184
185 if (verboseLevel > 3) {
186 G4cout << " >>> G4Fissioner::getC2" << G4endl;
187 }
188
189 G4double C2 = 124.57 * (1.0 / A1 + 1.0 / A2) + 0.78 * (X3 + X4) - 176.9 *
190 ((X3*X3*X3*X3) + (X4*X4*X4*X4)) + 219.36 * (1.0 / (A1 * A1) + 1.0 / (A2 * A2)) - 1.108 / R12;
191
192 return C2;
193}
const double C2

References C2, G4cout, G4endl, and G4VCascadeCollider::verboseLevel.

Referenced by deExcite(), and getZopt().

◆ getTargetData()

void G4CascadeDeexciteBase::getTargetData ( const G4Fragment target)
protectedinherited

Definition at line 66 of file G4CascadeDeexciteBase.cc.

66 {
67 A = target.GetA_asInt();
68 Z = target.GetZ_asInt();
69 PEX = target.GetMomentum()/GeV; // Convert from G4 to Bertini units
70 EEXS = target.GetExcitationEnergy();
71}
static constexpr double GeV
Definition: G4SIunits.hh:203
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:299
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:323
G4int GetZ_asInt() const
Definition: G4Fragment.hh:276
G4int GetA_asInt() const
Definition: G4Fragment.hh:271

References G4CascadeDeexciteBase::A, G4CascadeDeexciteBase::EEXS, G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), G4Fragment::GetMomentum(), G4Fragment::GetZ_asInt(), GeV, G4CascadeDeexciteBase::PEX, and G4CascadeDeexciteBase::Z.

Referenced by G4BigBanger::deExcite(), G4EquilibriumEvaporator::deExcite(), deExcite(), and G4NonEquilibriumEvaporator::deExcite().

◆ getZopt()

G4double G4Fissioner::getZopt ( G4int  A1,
G4int  A2,
G4int  ZT,
G4double  X3,
G4double  X4,
G4double  R12 
) const
private

Definition at line 195 of file G4Fissioner.cc.

200 {
201
202 if (verboseLevel > 3) {
203 G4cout << " >>> G4Fissioner::getZopt" << G4endl;
204 }
205
206 G4double Zopt = (87.7 * (X4 - X3) * (1.0 - 1.25 * (X4 + X3)) +
207 ZT * ((124.57 / A2 + 0.78 * X4 - 176.9 * (X4*X4*X4*X4) + 219.36 / (A2 * A2)) - 0.554 / R12)) /
208 getC2(A1, A2, X3, X4, R12);
209
210 return Zopt;
211}

References G4cout, G4endl, getC2(), and G4VCascadeCollider::verboseLevel.

Referenced by deExcite().

◆ makeFragment() [1/2]

const G4Fragment & G4CascadeDeexciteBase::makeFragment ( G4int  A,
G4int  Z,
G4double  EX = 0. 
)
protectedinherited

Definition at line 81 of file G4CascadeDeexciteBase.cc.

81 {
82 return makeFragment(zero, fragA, fragZ, EX);
83}
static const G4LorentzVector zero(0., 0., 0., 0.)

References G4CascadeDeexciteBase::makeFragment(), and anonymous_namespace{G4CascadeDeexciteBase.cc}::zero.

◆ makeFragment() [2/2]

const G4Fragment & G4CascadeDeexciteBase::makeFragment ( G4LorentzVector  mom,
G4int  A,
G4int  Z,
G4double  EX = 0. 
)
protectedinherited

Definition at line 86 of file G4CascadeDeexciteBase.cc.

87 {
88 if (verboseLevel>2) {
89 G4cout << " >>> " << theName << "::makeFragment " << mom << " " << fragA
90 << " " << fragZ << " " << EX << G4endl;
91 }
92
93 // Adjust four-momentum so that mass is nucleus + excitation
94 G4double mass =
95 G4InuclNuclei::getNucleiMass(fragA,fragZ) + EX/GeV;
96 mom.setVectM(mom.vect(), mass);
97
98 // Overwrite previous fragment contents, zeroing out excitons
99 aFragment.SetZandA_asInt(fragZ, fragA);
100 aFragment.SetMomentum(mom*GeV); // Bertini uses GeV!
103
104 return aFragment;
105}
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
Definition: G4Fragment.hh:391
void SetMomentum(const G4LorentzVector &value)
Definition: G4Fragment.hh:328
void SetNumberOfExcitedParticle(G4int valueTot, G4int valueP)
Definition: G4Fragment.hh:372
void SetZandA_asInt(G4int Znew, G4int Anew)
Definition: G4Fragment.hh:281

References G4CascadeDeexciteBase::aFragment, G4cout, G4endl, G4InuclNuclei::getNucleiMass(), GeV, G4Fragment::SetMomentum(), G4Fragment::SetNumberOfExcitedParticle(), G4Fragment::SetNumberOfHoles(), CLHEP::HepLorentzVector::setVectM(), G4Fragment::SetZandA_asInt(), G4VCascadeCollider::theName, CLHEP::HepLorentzVector::vect(), and G4VCascadeCollider::verboseLevel.

Referenced by G4EquilibriumEvaporator::deExcite(), deExcite(), G4NonEquilibriumEvaporator::deExcite(), and G4CascadeDeexciteBase::makeFragment().

◆ operator=()

G4Fissioner & G4Fissioner::operator= ( const G4Fissioner )
private

◆ potentialMinimization()

void G4Fissioner::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
private

Definition at line 213 of file G4Fissioner.cc.

222 {
223
224 if (verboseLevel > 3) {
225 G4cout << " >>> G4Fissioner::potentialMinimization" << G4endl;
226 }
227
228 const G4double huge_num = 2.0e35;
229 const G4int itry_max = 2000;
230 const G4double DSOL1 = 1.0e-6;
231 const G4double DS1 = 0.3;
232 const G4double DS2 = 1.0 / DS1 / DS1;
233 G4int A1[2] = { AF, AS };
234 G4int Z1[2] = { ZF, ZS };
235 G4double D = 1.01844 * ZF * ZS;
236 G4double D0 = 1.0e-3 * D;
237 G4double R[2];
238 R12 = 0.0;
239 G4double C[2];
240 G4double F[2];
241 G4double Y1;
242 G4double Y2;
243 G4int i;
244
245 for (i = 0; i < 2; i++) {
246 R[i] = G4cbrt(A1[i]);
247 Y1 = R[i] * R[i];
248 Y2 = Z1[i] * Z1[i] / R[i];
249 C[i] = 6.8 * Y1 - 0.142 * Y2;
250 F[i] = 12.138 * Y1 - 0.145 * Y2;
251 };
252
253 G4double SAL[2];
254 G4double SBE[2];
255 G4double X[2];
256 G4double X1[2];
257 G4double X2[2];
258 G4double RAL[2];
259 G4double RBE[2];
260 G4double AA[4][4];
261 G4double B[4];
262 G4int itry = 0;
263
264 while (itry < itry_max) { /* Loop checking 08.06.2015 MHK */
265 itry++;
266 G4double S = 0.0;
267
268 for (i = 0; i < 2; i++) {
269 S += R[i] * (1.0 + AL1[i] + BET1[i] - 0.257 * AL1[i] * BET1[i]);
270 };
271 R12 = 0.0;
272 Y1 = 0.0;
273 Y2 = 0.0;
274
275 for (i = 0; i < 2; i++) {
276 SAL[i] = R[i] * (1.0-0.257 * BET1[i]);
277 SBE[i] = R[i] * (1.0-0.257 * AL1[i]);
278 X[i] = R[i] / S;
279 X1[i] = X[i] * X[i];
280 X2[i] = X[i] * X1[i];
281 Y1 += AL1[i] * X1[i];
282 Y2 += BET1[i] * X2[i];
283 R12 += R[i] * (1.0 - AL1[i] * (1.0 - 0.6 * X[i]) + BET1[i] * (1.0 - 0.429 * X1[i]));
284 };
285
286 G4double Y3 = -0.6 * Y1 + 0.857 * Y2;
287 G4double Y4 = (1.2 * Y1 - 2.571 * Y2) / S;
288 G4double R2 = D0 / (R12 * R12);
289 G4double R3 = 2.0 * R2 / R12;
290
291 for (i = 0; i < 2; i++) {
292 RAL[i] = -R[i] * (1.0 - 0.6 * X[i]) + SAL[i] * Y3;
293 RBE[i] = R[i] * (1.0 - 0.429 * X1[i]) + SBE[i] * Y3;
294 };
295
296 G4double DX1;
297 G4double DX2;
298
299 for (i = 0; i < 2; i++) {
300
301 for (G4int j = 0; j < 2; j++) {
302 G4double DEL1 = i == j ? 1.0 : 0.0;
303 DX1 = 0.0;
304 DX2 = 0.0;
305
306 if (std::fabs(AL1[i]) >= DS1) {
307 G4double XXX = AL1[i] * AL1[i] * DS2;
308 G4double DEX = XXX > 100.0 ? huge_num : G4Exp(XXX);
309 DX1 = 2.0 * (1.0 + 2.0 * AL1[i] * AL1[i] * DS2) * DEX * DS2;
310 };
311
312 if (std::fabs(BET1[i]) >= DS1) {
313 G4double XXX = BET1[i] * BET1[i] * DS2;
314 G4double DEX = XXX > 100.0 ? huge_num : G4Exp(XXX);
315 DX2 = 2.0 * (1.+2.0 * BET1[i] * BET1[i] * DS2) * DEX * DS2;
316 };
317
318 G4double DEL = 2.0e-3 * DEL1;
319 AA[i][j] = R3 * RBE[i] * RBE[j] -
320 R2 * (-0.6 *
321 (X1[i] * SAL[j] +
322 X1[j] * SAL[i]) + SAL[i] * SAL[j] * Y4) +
323 DEL * C[i] + DEL1 * DX1;
324 G4int i1 = i + 2;
325 G4int j1 = j + 2;
326 AA[i1][j1] = R3 * RBE[i] * RBE[j]
327 - R2 * (0.857 *
328 (X2[i] * SBE[j] +
329 X2[j] * SBE[i]) + SBE[i] * SBE[j] * Y4) +
330 DEL * F[i] + DEL1 * DX2;
331 AA[i][j1] = R3 * RAL[i] * RBE[j] -
332 R2 * (0.857 *
333 (X2[j] * SAL[i] -
334 0.6 * X1[i] * SBE[j]) + SBE[j] * SAL[i] * Y4 -
335 0.257 * R[i] * Y3 * DEL1);
336 AA[j1][i] = AA[i][j1];
337 };
338 };
339
340 for (i = 0; i < 2; i++) {
341 DX1 = 0.0;
342 DX2 = 0.0;
343
344 if (std::fabs(AL1[i]) >= DS1) DX1 = 2.0 * AL1[i] * DS2 * G4Exp(AL1[i] * AL1[i] * DS2);
345
346 if (std::fabs(BET1[i]) >= DS1) DX2 = 2.0 * BET1[i] * DS2 * G4Exp(BET1[i] * BET1[i] * DS2);
347 B[i] = R2 * RAL[i] - 2.0e-3 * C[i] * AL1[i] + DX1;
348 B[i + 2] = R2 * RBE[i] - 2.0e-3 * F[i] * BET1[i] + DX2;
349 };
350
351 G4double ST = 0.0;
352 G4double ST1 = 0.0;
353
354 for (i = 0; i < 4; i++) {
355 ST += B[i] * B[i];
356
357 for (G4int j = 0; j < 4; j++) ST1 += AA[i][j] * B[i] * B[j];
358 };
359
360 G4double STEP = ST / ST1;
361 G4double DSOL = 0.0;
362
363 for (i = 0; i < 2; i++) {
364 AL1[i] += B[i] * STEP;
365 BET1[i] += B[i + 2] * STEP;
366 DSOL += B[i] * B[i] + B[i + 2] * B[i + 2];
367 };
368 DSOL = std::sqrt(DSOL);
369
370 if (DSOL < DSOL1) break;
371 };
372
373 if (verboseLevel > 3) {
374 if (itry == itry_max)
375 G4cout << " maximal number of iterations in potentialMinimization " << G4endl
376 << " A1 " << AF << " Z1 " << ZF << G4endl;
377
378 };
379
380 for (i = 0; i < 2; i++) ED[i] = F[i] * BET1[i] * BET1[i] + C[i] * AL1[i] * AL1[i];
381
382 VC = D / R12;
383 VP = VC + ED[0] + ED[1];
384}
G4double C(G4double temp)
G4double S(G4double temp)
G4double B(G4double temperature)
G4double D(G4double temp)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
static const G4double AA[5]
Definition: paraMaker.cc:44

References anonymous_namespace{paraMaker.cc}::AA, B(), C(), D(), G4InuclSpecialFunctions::G4cbrt(), G4cout, G4endl, G4Exp(), S(), G4VCascadeCollider::verboseLevel, and anonymous_namespace{paraMaker.cc}::Z1.

Referenced by deExcite().

◆ setName()

virtual void G4VCascadeCollider::setName ( const G4String name)
inlineprotectedvirtualinherited

Definition at line 55 of file G4VCascadeCollider.hh.

55{ theName = name; }
const char * name(G4int ptype)

References G4InuclParticleNames::name(), and G4VCascadeCollider::theName.

Referenced by G4CascadeCheckBalance::setOwner().

◆ setVerboseLevel()

void G4CascadeDeexciteBase::setVerboseLevel ( G4int  verbose = 0)
virtualinherited

◆ validateOutput() [1/3]

G4bool G4CascadeDeexciteBase::validateOutput ( const G4Fragment target,
const std::vector< G4InuclElementaryParticle > &  particles 
)
protectedvirtualinherited

Definition at line 142 of file G4CascadeDeexciteBase.cc.

143 {
144 if (!balance) return true; // Skip checks unless requested
145
146 if (verboseLevel > 1)
147 G4cout << " >>> " << theName << "::validateOutput" << G4endl;
148
150 balance->collide(target, particles);
151 return balance->okay(); // Returns false if violations
152}
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)

References G4CascadeDeexciteBase::balance, G4CascadeCheckBalance::collide(), G4cout, G4endl, G4CascadeCheckBalance::okay(), G4VCascadeCollider::setVerboseLevel(), G4VCascadeCollider::theName, and G4VCascadeCollider::verboseLevel.

◆ validateOutput() [2/3]

G4bool G4CascadeDeexciteBase::validateOutput ( const G4Fragment target,
const std::vector< G4InuclNuclei > &  fragments 
)
protectedvirtualinherited

Definition at line 154 of file G4CascadeDeexciteBase.cc.

155 {
156 if (!balance) return true; // Skip checks unless requested
157
158 if (verboseLevel > 1)
159 G4cout << " >>> " << theName << "::validateOutput" << G4endl;
160
162 balance->collide(target, fragments);
163 return balance->okay(); // Returns false if violations
164}

References G4CascadeDeexciteBase::balance, G4CascadeCheckBalance::collide(), G4cout, G4endl, G4CascadeCheckBalance::okay(), G4VCascadeCollider::setVerboseLevel(), G4VCascadeCollider::theName, and G4VCascadeCollider::verboseLevel.

◆ validateOutput() [3/3]

G4bool G4CascadeDeexciteBase::validateOutput ( const G4Fragment target,
G4CollisionOutput output 
)
protectedvirtualinherited

Definition at line 130 of file G4CascadeDeexciteBase.cc.

131 {
132 if (!balance) return true; // Skip checks unless requested
133
134 if (verboseLevel > 1)
135 G4cout << " >>> " << theName << "::validateOutput" << G4endl;
136
138 balance->collide(target, output);
139 return balance->okay(); // Returns false if violations
140}

References G4CascadeDeexciteBase::balance, G4CascadeCheckBalance::collide(), G4cout, G4endl, G4CascadeCheckBalance::okay(), G4VCascadeCollider::setVerboseLevel(), G4VCascadeCollider::theName, and G4VCascadeCollider::verboseLevel.

Referenced by G4BigBanger::deExcite(), G4EquilibriumEvaporator::deExcite(), and G4NonEquilibriumEvaporator::deExcite().

Field Documentation

◆ A

G4int G4CascadeDeexciteBase::A
protectedinherited

◆ aFragment

G4Fragment G4CascadeDeexciteBase::aFragment
protectedinherited

Definition at line 82 of file G4CascadeDeexciteBase.hh.

Referenced by G4CascadeDeexciteBase::makeFragment().

◆ balance

G4CascadeCheckBalance* G4CascadeDeexciteBase::balance
protectedinherited

◆ EEXS

G4double G4CascadeDeexciteBase::EEXS
protectedinherited

◆ fissionStore

G4FissionStore G4Fissioner::fissionStore
private

Definition at line 57 of file G4Fissioner.hh.

Referenced by deExcite().

◆ PEX

G4LorentzVector G4CascadeDeexciteBase::PEX
protectedinherited

◆ theName

G4String G4VCascadeCollider::theName
protectedinherited

◆ verboseLevel

G4int G4VCascadeCollider::verboseLevel
protectedinherited

Definition at line 53 of file G4VCascadeCollider.hh.

Referenced by G4CascadeCheckBalance::baryonOkay(), G4CascadeCheckBalance::chargeOkay(), G4IntraNucleiCascader::collide(), G4InuclCollider::collide(), G4LightTargetCollider::collide(), G4VCascadeDeexcitation::collide(), G4CascadeCheckBalance::collide(), G4CascadeRecoilMaker::collide(), G4ElementaryParticleCollider::collide(), G4IntraNucleiCascader::copySecondaries(), G4IntraNucleiCascader::copyWoundedNucleus(), G4IntraNucleiCascader::decayTrappedParticle(), G4CascadeDeexcitation::deExcite(), G4InuclCollider::deexcite(), G4PreCompoundDeexcitation::deExcite(), G4BigBanger::deExcite(), G4EquilibriumEvaporator::deExcite(), G4EvaporationInuclCollider::deExcite(), deExcite(), G4NonEquilibriumEvaporator::deExcite(), G4CascadeCheckBalance::ekinOkay(), G4CascadeCheckBalance::energyOkay(), G4EquilibriumEvaporator::explosion(), G4CascadeDeexciteBase::explosion(), G4CascadeRecoilMaker::fillRecoil(), G4IntraNucleiCascader::finalize(), G4IntraNucleiCascader::finishCascade(), G4VCascadeCollider::G4VCascadeCollider(), G4BigBanger::generateBangInSCM(), G4IntraNucleiCascader::generateCascade(), G4BigBanger::generateMomentumModules(), G4ElementaryParticleCollider::generateMultiplicity(), G4ElementaryParticleCollider::generateSCMfinalState(), G4ElementaryParticleCollider::generateSCMmuonAbsorption(), G4ElementaryParticleCollider::generateSCMpionAbsorption(), G4ElementaryParticleCollider::generateSCMpionNAbsorption(), G4BigBanger::generateX(), G4EquilibriumEvaporator::getAF(), getC2(), G4EquilibriumEvaporator::getE0(), G4NonEquilibriumEvaporator::getE0(), G4NonEquilibriumEvaporator::getMatrixElement(), G4NonEquilibriumEvaporator::getParLev(), G4EquilibriumEvaporator::getPARLEVDEN(), G4EquilibriumEvaporator::getQF(), getZopt(), G4CascadeRecoilMaker::goodNucleus(), G4EquilibriumEvaporator::goodRemnant(), G4CascadeColliderBase::inelasticInteractionPossible(), G4IntraNucleiCascader::initialize(), G4CascadeDeexciteBase::makeFragment(), G4CascadeRecoilMaker::makeRecoilFragment(), G4CascadeRecoilMaker::makeRecoilNuclei(), G4BigBanger::maxProbability(), G4CascadeCheckBalance::momentumOkay(), G4IntraNucleiCascader::newCascade(), G4InuclCollider::photonuclearOkay(), G4ElementaryParticleCollider::pionNucleonAbsorption(), potentialMinimization(), G4IntraNucleiCascader::preloadCascade(), G4IntraNucleiCascader::processSecondary(), G4IntraNucleiCascader::processTrappedParticle(), G4IntraNucleiCascader::releaseSecondary(), G4IntraNucleiCascader::rescatter(), G4InuclCollider::rescatter(), G4IntraNucleiCascader::setupCascade(), G4InuclCollider::setVerboseLevel(), G4LightTargetCollider::setVerboseLevel(), G4VCascadeCollider::setVerboseLevel(), G4CascadeCheckBalance::strangeOkay(), G4InuclCollider::useCascadeDeexcitation(), G4InuclCollider::usePreCompoundDeexcitation(), G4CascadeDeexciteBase::validateOutput(), G4CascadeColliderBase::validateOutput(), G4CascadeRecoilMaker::wholeEvent(), and G4BigBanger::xProbability().

◆ Z

G4int G4CascadeDeexciteBase::Z
protectedinherited

The documentation for this class was generated from the following files: