Geant4-11
Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
G4fissionEvent Class Reference

#include <G4fissionEvent.hh>

Public Member Functions

 G4fissionEvent (G4int isotope, G4double time, G4double nubar, G4double eng)
 
G4double getNeutronAge (G4int index)
 
G4double getNeutronDircosu (G4int index)
 
G4double getNeutronDircosv (G4int index)
 
G4double getNeutronDircosw (G4int index)
 
G4double getNeutronEnergy (G4int index)
 
G4int getNeutronNu ()
 
G4double getNeutronVelocity (G4int index)
 
G4double getPhotonAge (G4int index)
 
G4double getPhotonDircosu (G4int index)
 
G4double getPhotonDircosv (G4int index)
 
G4double getPhotonDircosw (G4int index)
 
G4double getPhotonEnergy (G4int index)
 
G4int getPhotonNu ()
 
G4double getPhotonVelocity (G4int index)
 
 ~G4fissionEvent ()
 

Static Public Member Functions

static void setCf252Option (G4int ndist, G4int neng)
 
static void setCorrelationOption (G4int correlation)
 
static void setDelayOption (G4int delay)
 
static void setNudistOption (G4int nudist)
 
static void setRNGd (G4double(*funcptr)(void))
 
static void setRNGf (float(*funcptr)(void))
 

Private Member Functions

void G4fissionerr (G4int iSever, std::string chSubNam, std::string chMsg)
 
G4double G4SmpGEng ()
 
void G4SmpIsoDir (G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
 
G4double G4SmpNEngCf252 (G4int option)
 
G4int G4SmpNuDistDataPu239 (G4double erg)
 
G4int G4SmpNuDistDataPu239_241 (G4double nubar)
 
G4int G4SmpNuDistDataPu239_241_MC (G4double nubar)
 
G4int G4SmpNuDistDataU232_234_236_238 (G4double nubar)
 
G4int G4SmpNuDistDataU232_234_236_238_MC (G4double nubar)
 
G4int G4SmpNuDistDataU233_235 (G4double nubar)
 
G4int G4SmpNuDistDataU233_235_MC (G4double nubar)
 
G4int G4SmpNuDistDataU235 (G4double erg, G4int option)
 
G4int G4SmpNuDistDataU238 (G4double erg)
 
G4int G4SmpNugDist (G4int isotope, G4double nubar)
 
G4double G4SmpNVel (G4double eng, G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
 
G4double G4SmpPVel (G4double eng, G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
 
G4double G4SmpSpNubarData (G4int isotope)
 
G4int G4SmpSpNuDistData (G4int isotope, G4int Cf252option)
 
G4int G4SmpSpNugDistData (G4int isotope)
 
G4double G4SmpTerrell (G4double nubar)
 
G4double G4SmpWatt (G4double ePart, G4int iso)
 

Static Private Member Functions

static G4double fisslibrng (void)
 
static G4double rngf2d (void)
 

Private Attributes

G4doubleneutronAges
 
G4doubleneutronDircosu
 
G4doubleneutronDircosv
 
G4doubleneutronDircosw
 
G4doubleneutronEnergies
 
G4int neutronNu
 
G4doubleneutronVelocities
 
G4doublephotonAges
 
G4doublephotonDircosu
 
G4doublephotonDircosv
 
G4doublephotonDircosw
 
G4doublephotonEnergies
 
G4int photonNu
 
G4doublephotonVelocities
 

Static Private Attributes

static G4int Cf252ndistoption =0
 
static G4int Cf252nengoption =0
 
static G4int correlationoption =0
 
static G4int delayoption =0
 
static G4int nudistoption =3
 
static G4double(* rngdptr )(void)
 
static float(* rngfptr )(void)
 

Detailed Description

Definition at line 62 of file G4fissionEvent.hh.

Constructor & Destructor Documentation

◆ G4fissionEvent()

G4fissionEvent::G4fissionEvent ( G4int  isotope,
G4double  time,
G4double  nubar,
G4double  eng 
)

Definition at line 65 of file G4fissionEvent.cc.

71{
72 /*
73 * Constructs a fission event with neutronNu neutrons and photonNu
74 * photons.
75 */
76 G4int i;
77
78 if (nubar == -1.) {
79 /* spontaneous fission */
82 } else {
83 /* induced fission */
84 if (nudistoption == 0 || nudistoption == 1) {
85 switch (isotope) {
86 case 92235:
88 break;
89 case 92238:
91 break;
92 case 94239:
94 break;
95 default:
96 neutronNu = (G4int) G4SmpTerrell(nubar);
97 break;
98 }
99 } else if (nudistoption == 2) {
100 switch (isotope) {
101 case 92232:
102 case 92234:
103 case 92236:
104 case 92238:
106 break;
107 case 92233:
108 case 92235:
110 break;
111 case 94239:
112 case 94241:
114 break;
115 default:
116 neutronNu = (G4int) G4SmpTerrell(nubar);
117 break;
118 }
119 } else if (nudistoption == 3) {
120 switch (isotope) {
121 case 92232:
122 case 92234:
123 case 92236:
124 case 92238:
126 break;
127 case 92233:
128 case 92235:
130 break;
131 case 94239:
132 case 94241:
134 break;
135 default:
136 neutronNu = (G4int) G4SmpTerrell(nubar);
137 break;
138 }
139 }
140 photonNu = G4SmpNugDist(isotope, nubar);
141 }
142 if (neutronNu > 0) {
149 for (i=0; i<neutronNu; i++) {
150 if (isotope == 98252) neutronEnergies[i] = G4SmpNEngCf252(Cf252nengoption);
151 else neutronEnergies[i] = G4SmpWatt(eng, isotope);
154 &(neutronDircosu[i]),
155 &(neutronDircosv[i]),
156 &(neutronDircosw[i])
157 );
158 neutronAges[i] = time;
159 }
160 }
161 if (photonNu > 0) {
168 for (i=0; i<photonNu; i++) {
172 &(photonDircosu[i]),
173 &(photonDircosv[i]),
174 &(photonDircosw[i])
175 );
176 photonAges[i] = time;
177 }
178 }
179}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4double G4SmpPVel(G4double eng, G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
Definition: G4SmpPVel.cc:61
G4int G4SmpNuDistDataU232_234_236_238(G4double nubar)
G4double G4SmpTerrell(G4double nubar)
Definition: G4SmpTerrell.cc:68
G4double * neutronVelocities
G4int G4SmpNuDistDataU232_234_236_238_MC(G4double nubar)
G4int G4SmpSpNuDistData(G4int isotope, G4int Cf252option)
G4double G4SmpGEng()
Definition: G4SmpGEng.cc:63
G4double * photonDircosv
G4double * photonEnergies
G4double * photonDircosw
static G4int Cf252ndistoption
G4double * neutronDircosu
G4int G4SmpSpNugDistData(G4int isotope)
G4double * neutronAges
G4double G4SmpNEngCf252(G4int option)
G4int G4SmpNuDistDataU235(G4double erg, G4int option)
G4double * photonAges
G4double G4SmpWatt(G4double ePart, G4int iso)
Definition: G4SmpWatt.cc:66
G4int G4SmpNuDistDataPu239_241(G4double nubar)
G4double * neutronDircosw
G4double * neutronDircosv
G4double * photonVelocities
static G4int nudistoption
G4double G4SmpNVel(G4double eng, G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
Definition: G4SmpNVel.cc:61
G4int G4SmpNuDistDataU233_235_MC(G4double nubar)
G4double * photonDircosu
G4int G4SmpNuDistDataU233_235(G4double nubar)
G4int G4SmpNuDistDataPu239_241_MC(G4double nubar)
G4int G4SmpNuDistDataPu239(G4double erg)
static G4int Cf252nengoption
G4int G4SmpNuDistDataU238(G4double erg)
G4int G4SmpNugDist(G4int isotope, G4double nubar)
Definition: G4SmpNugDist.cc:67
G4double * neutronEnergies

References Cf252ndistoption, Cf252nengoption, G4SmpGEng(), G4SmpNEngCf252(), G4SmpNuDistDataPu239(), G4SmpNuDistDataPu239_241(), G4SmpNuDistDataPu239_241_MC(), G4SmpNuDistDataU232_234_236_238(), G4SmpNuDistDataU232_234_236_238_MC(), G4SmpNuDistDataU233_235(), G4SmpNuDistDataU233_235_MC(), G4SmpNuDistDataU235(), G4SmpNuDistDataU238(), G4SmpNugDist(), G4SmpNVel(), G4SmpPVel(), G4SmpSpNuDistData(), G4SmpSpNugDistData(), G4SmpTerrell(), G4SmpWatt(), neutronAges, neutronDircosu, neutronDircosv, neutronDircosw, neutronEnergies, neutronNu, neutronVelocities, nudistoption, photonAges, photonDircosu, photonDircosv, photonDircosw, photonEnergies, photonNu, and photonVelocities.

◆ ~G4fissionEvent()

G4fissionEvent::~G4fissionEvent ( )

Definition at line 181 of file G4fissionEvent.cc.

181 {
182 if (neutronNu > 0) {
183 delete [] neutronEnergies;
184 delete [] neutronVelocities;
185 delete [] neutronDircosu;
186 delete [] neutronDircosv;
187 delete [] neutronDircosw;
188 delete [] neutronAges;
189 }
190
191 if (photonNu > 0) {
192 delete [] photonEnergies;
193 delete [] photonVelocities;
194 delete [] photonDircosu;
195 delete [] photonDircosv;
196 delete [] photonDircosw;
197 delete [] photonAges;
198 }
199}

References neutronAges, neutronDircosu, neutronDircosv, neutronDircosw, neutronEnergies, neutronNu, neutronVelocities, photonAges, photonDircosu, photonDircosv, photonDircosw, photonEnergies, photonNu, and photonVelocities.

Member Function Documentation

◆ fisslibrng()

G4double G4fissionEvent::fisslibrng ( void  )
staticprivate

◆ G4fissionerr()

void G4fissionEvent::G4fissionerr ( G4int  iSever,
std::string  chSubNam,
std::string  chMsg 
)
private

Definition at line 64 of file G4fissionerr.cc.

81{
82 G4int doExit;
83 std::string ExitMsg;
84
85
86 if (iSever <= 5) { /* warning */
87 doExit = 0;
88 }
89 else {
90 doExit = 1;
91 }
92
93 ExitMsg = "Error in Function "+chSubNam+", Severity=" + itoa(iSever) + " : "+chMsg;
94
95 std::cerr << "Fission " << ExitMsg << std::endl;
96 if (doExit == 1) G4Exception("G4fissionEvent::G4fissionerr()", "601",
97 FatalException, "Fatal Error");
98
99 return;
100}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::string itoa(const G4int &x)

References FatalException, G4Exception(), and itoa().

Referenced by G4SmpTerrell(), and G4SmpWatt().

◆ G4SmpGEng()

G4double G4fissionEvent::G4SmpGEng ( )
private

Definition at line 63 of file G4SmpGEng.cc.

63 {
64
65/*
66 Description
67 Sample energy spectrum for photons emitted by fission-induced reactions.
68 The energy spectrum of the prompt fission gamma rays is obtained from
69 Maienschein's measurements.
70*/
71
72/*
73 Input
74 Return
75 energy of photon emitted by neutron-induced fission
76*/
77
78 G4double r;
79/*
80 Calculate the energy of photons emitted from fission
81*/
83 r=fisslibrng();
84
85 if (r == 0.0) return 0.085;
86
87 if (r <= 0.0001) return 0.0855+0.01692*(r/0.0001)-0.02401*Pow->powA(r/0.0001,2.)+0.01274*Pow->powA(r/0.0001,3.);
88
89 if (r > 0.0001 && r <= 0.01) return 0.09141 + 0.23846*((r-0.0001)/0.0099)
90 - 1.75947*Pow->powA((r-.0001)/0.0099,2.)
91 + 10.98611*Pow->powA((r-0.0001)/0.0099,3.)
92 - 43.19181*Pow->powA((r-.0001)/0.0099,4.)
93 +105.70005*Pow->powA((r-.0001)/.0099,5.)
94 -160.72894*Pow->powA((r-.0001)/.0099,6.)
95 +147.43399*Pow->powA((r-.0001)/.0099,7.)
96 - 74.60043*Pow->powA((r-.0001)/0.0099,8.)
97 + 15.97547*Pow->powA((r-.0001)/0.0099,9.);
98
99 if (r > 0.01 && r <= 0.1537) return 0.14486 + 0.40914*((r-.01)/.1437)
100 - 1.28150*Pow->powA((r-0.01)/0.1437,2.)
101 + 5.07377*Pow->powA((r-0.01)/0.1437,3.)
102 -15.42031*Pow->powA((r-0.01)/0.1437,4.)
103 +31.96346*Pow->powA((r-0.01)/0.1437,5.)
104 -43.12605*Pow->powA((r-0.01)/0.1437,6.)
105 +36.02908*Pow->powA((r-0.01)/0.1437,7.)
106 -16.87185*Pow->powA((r-0.01)/0.1437,8.)
107 + 3.37941*Pow->powA((r-0.01)/0.1437,9.);
108
109 if (r > 0.1537 && r <= 0.7114) return (-1./2.3)*G4Log(0.71956*(0.1537-r)+0.50158);
110
111 if (r > 0.7114 && r <= 1.0) return (-1./1.1)*G4Log(1.15292*(0.7114-r)+0.33287);
112 //
113 // Fall through
114 //
115 G4cout << " Random number out of range in SmpGEng " << G4endl;
116 return -1.0;
117}
G4double G4Log(G4double x)
Definition: G4Log.hh:226
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
Definition: G4Pow.hh:49
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:230
static G4double fisslibrng(void)
Definition: G4rngc.cc:64

References fisslibrng(), G4cout, G4endl, G4Log(), G4Pow::GetInstance(), and G4Pow::powA().

Referenced by G4fissionEvent().

◆ G4SmpIsoDir()

void G4fissionEvent::G4SmpIsoDir ( G4double cosdiru,
G4double cosdirv,
G4double cosdirw 
)
private

Definition at line 62 of file G4SmpIsoDir.cc.

62 {
63
64/*
65 Description
66 determine the 3 direction cosines of a particle emitted isotropically
67*/
68
69/*
70 Input
71 Output
72 - 3 components of the direction cosines
73 (cosdiru, cosdirv, cosdirw)
74*/
75
76 G4double cospolang, sinpolang, phi;
77
78 // Choose emission angle isotropically, then select polar angle direction cosine
79 cospolang = 1.-2.*fisslibrng();
80 sinpolang = std::sqrt(1. - cospolang*cospolang);
81
82 // Select an azimuthal angle uniformly on (0,2*pi)
83 phi = twopi*fisslibrng();
84 *cosdiru = sinpolang * std::cos(phi);
85 *cosdirv = sinpolang * std::sin(phi);
86 *cosdirw = cospolang;
87}
static constexpr double twopi
Definition: G4SIunits.hh:56

References fisslibrng(), and twopi.

Referenced by G4SmpNVel(), and G4SmpPVel().

◆ G4SmpNEngCf252()

G4double G4fissionEvent::G4SmpNEngCf252 ( G4int  option)
private

Definition at line 63 of file G4SmpNEngCf252.cc.

63 {
64
65/*
66 Description
67 Sample energy spectrum for Cf-252.
68*/
69
70/*
71 Input
72 option - 0 Mannhart corrected Maxwellian spectrum
73 1 Madland-Nix theoretical spectrum
74 2 Froehner Watt spectrum
75 Return
76 energy of neutron emitted by spontaneous fission
77*/
78
80
81 G4double a,b;
82 G4double gpar;
83 G4double g2;
84 G4double ferg;
85 G4double r;
86
87 r = fisslibrng();
88
89/*
90 Mannhart Corrected Spectrum
91*/
92 if(option == 0) {
93 if(r == 0) return 0.000001;
94 if (r > 0.0 && r <= 0.0005)
95 return 0.00003 + 0.04992*(r/0.0005) - 0.59473*Pow->powN(r/0.0005,2)
96 + 5.44877*Pow->powN(r/0.0005,3) - 29.38086*Pow->powN(r/0.0005,4)
97 + 97.14014*Pow->powN(r/0.0005,5) - 202.82112*Pow->powN(r/0.0005,6)
98 + 268.2301*Pow->powN(r/0.0005,7) - 217.75316*Pow->powN(r/0.0005,8)
99 + 98.96285*Pow->powN(r/0.0005,9) - 19.27077*Pow->powN(r/0.0005,10);
100
101 if (r > 0.0005 && r <= 0.005)
102 return 0.01118 + 0.06715*((r-.0005)/.0045)
103 - 0.09236*Pow->powN((r-.0005)/.0045,2) + 0.26224*Pow->powN((r-.0005)/.0045,3)
104 - 0.64784*Pow->powN((r-.0005)/.0045,4) + 1.16830*Pow->powN((r-.0005)/.0045,5)
105 - 1.43858*Pow->powN((r-.0005)/.0045,6) + 1.13771*Pow->powN((r-.0005)/.0045,7)
106 - 0.51839*Pow->powN((r-.0005)/.0045,8) + 0.10302*Pow->powN((r-.0005)/.0045,9);
107
108 if (r > 0.005 && r <= 0.05)
109 return 0.05244+0.32101*((r-.005)/.045)
110 - 0.52574*Pow->powN((r-.005)/.045,2) + 2.80540*Pow->powN((r-.005)/.045,3)
111 - 14.88036*Pow->powN((r-.005)/.045,4) + 55.46869*Pow->powN((r-.005)/.045,5)
112 -133.64517*Pow->powN((r-.005)/.045,6) + 202.88434*Pow->powN((r-.005)/.045,7)
113 -186.86758*Pow->powN((r-.005)/.045,8) + 95.19530*Pow->powN((r-.005)/.045,9)
114 - 20.55275*Pow->powN((r-.005)/.045,10);
115
116 if(r > 0.05 && r <= 0.25) return 0.25585+0.75532*((r-.05)/.2)-0.73676*Pow->powN((r-.05)/.2,2)+3.65653*Pow->powN((r-.05)/.2,3)-13.80528*Pow->powN((r-.05)/.2,4)+33.35932*Pow->powN((r-.05)/.2,5)-50.0410*Pow->powN((r-.05)/.2,6)+45.13793*Pow->powN((r-.05)/.2,7)-22.4072*Pow->powN((r-.05)/.2,8)+4.70141*Pow->powN((r-.05)/.2,9);
117
118 if(r > 0.25 && r <= 0.50) return 0.87609+0.74687*((r-.25)/.25)+0.02849*Pow->powN((r-.25)/.25,2)+0.06145*Pow->powN((r-.25)/.25,3)-0.09589*Pow->powN((r-.25)/.25,4)+0.29798*Pow->powN((r-.25)/.25,5)-0.57707*Pow->powN((r-.25)/.25,6)+0.66181*Pow->powN((r-.25)/.25,7)-0.40720*Pow->powN((r-.25)/.25,8)+0.10370*Pow->powN((r-.25)/.25,9);
119
120 if(r > 0.5 && r <= 0.75) return 1.69622+0.93896*((r-.5)/.25)+0.16428*Pow->powN((r-.5)/.25,2)+0.21761*Pow->powN((r-.5)/.25,3)-0.96904*Pow->powN((r-.5)/.25,4)+3.34951*Pow->powN((r-.5)/.25,5)-6.35177*Pow->powN((r-.5)/.25,6)+6.90120*Pow->powN((r-.5)/.25,7)-3.98682*Pow->powN((r-.5)/.25,8)+0.95276*Pow->powN((r-.5)/.25,9);
121
122 if(r > 0.75 && r <= 0.95) return 2.91217+1.52474*((r-.75)/.2)-4.99340*Pow->powN((r-.75)/.2,2)+58.72977*Pow->powN((r-.75)/.2,3)-313.30984*Pow->powN((r-.75)/.2,4)+946.0791*Pow->powN((r-.75)/.2,5)-1679.85559*Pow->powN((r-.75)/.2,6)+1740.83984*Pow->powN((r-.75)/.2,7)-973.51886*Pow->powN((r-.75)/.2,8)+227.06831*Pow->powN((r-.75)/.2,9);
123 if(r > 0.95 && r <= 0.975) return 5.50137-0.99765*((r-.95)/.025)+27.57678*Pow->powN((r-.95)/.025,2)-218.47931*Pow->powN((r-.95)/.025,3)+1024.0426*Pow->powN((r-.95)/.025,4)-3005.86182*Pow->powN((r-.95)/.025,5)+5684.52295*Pow->powN((r-.95)/.025,6)-6919.36182*Pow->powN((r-.95)/.025,7)+5235.71777*Pow->powN((r-.95)/.025,8)-2240.06934*Pow->powN((r-.95)/.025,9)+413.9299*Pow->powN((r-.95)/.025,10);
124
125 if(r > 0.975 && r <= 0.995) return 6.52172+1.21273*((r-.975)/.02)+0.69998*Pow->powN((r-.975)/.02,2)-1.78886*Pow->powN((r-.975)/.02,3)+11.57883*Pow->powN((r-.975)/.02,4)-39.41592*Pow->powN((r-.975)/.02,5)+88.32992*Pow->powN((r-.975)/.02,6)-127.68685*Pow->powN((r-.975)/.02,7)+115.97678*Pow->powN((r-.975)/.02,8)-60.09069*Pow->powN((r-.975)/.02,9)+13.66798*Pow->powN((r-.975)/.02,10);
126 if(r > 0.995 && r <= 0.999) return 9.00502+1.31798*((r-.995)/.004)-1.17448*Pow->powN((r-.995)/.004,2)+20.15941*Pow->powN((r-.995)/.004,3)-114.27763*Pow->powN((r-.995)/.004,4)+370.04855*Pow->powN((r-.995)/.004,5)-701.888*Pow->powN((r-.995)/.004,6)+776.28204*Pow->powN((r-.995)/.004,7)-462.68823*Pow->powN((r-.995)/.004,8)+115.05296*Pow->powN((r-.995)/.004,9);
127 if(r > 0.999 && r <= 0.9997) return 11.83792-1.8952*((r-.999)/.0007)+50.30901*Pow->powN((r-.999)/.0007,2)-239.56978*Pow->powN((r-.999)/.0007,3)+514.90747*Pow->powN((r-.999)/.0007,4)-508.73672*Pow->powN((r-.999)/.0007,5)+191.09637*Pow->powN((r-.999)/.0007,6);
128 if(r > 0.9997) return 20.;
129 }
130/*
131 Madland-Nix Spectrum
132*/
133 if(option == 1) {
134 if(r <= 1.001065092e-03) return 1.946313876*Pow->powA(r,0.6667261950);
135 else if(r > 1.001065092e-03 && r <= 1.001389105e-02) return 2.00504119*Pow->powA(r,0.6709990736);
136 else if(r > 1.001389105e-02 && r <= 5.022359145e-02) return 2.107978578*Pow->powA(r,0.7077041191);
137 else if(r > 5.022359145e-02 && r <= 1.000989427e-01) return 2.280517358*Pow->powA(r,0.7077041191);
138 else if(r > 1.000989427e-01 && r <= 1.500872491e-01) return 2.444108408*Pow->powA(r,0.73764526215);
139 else if(r > 1.500872491e-01 && r <= 2.002079974e-01) return 2.621855634*Pow->powA(r,0.7745779546);
140 else if(r > 2.002079974e-01 && r <= 2.25221648e-01) return 2.753099265*Pow->powA(r,0.8044994010);
141 else if(r > 2.25221648e-01 && r <= 2.501564538e-01) return 2.834010751*Pow->powA(r,0.8239187384);
142 else if(r > 2.501564538e-01 && r <= 2.752546770e-01) return 2.911676280*Pow->powA(r,0.8434235719);
143 else if(r > 2.752546770e-01 && r <= 3.000964724e-01) return 2.988430135*Pow->powA(r,0.8635883266);
144 else if(r > 3.000964724e-01 && r <= 3.500470095e-01) return 3.099471293*Pow->powA(r,0.8942289512);
145 else if(r > 3.500470095e-01 && r <= 4.001118970e-01) return 3.244686176*Pow->powA(r,0.9378302608);
146 else if(r > 4.001118970e-01 && r <= 5.000461778e-01) return 3.543403932*Pow->powA(r,1.0411008510);
147 else if(r > 5.000461778e-01 && r <= 5.501318506e-01) return 3.708358099*Pow->powA(r,1.1068317830);
148 else if(r > 5.501318506e-01 && r <= 6.000655433e-01) return 3.889805304*Pow->powA(r,1.1868908770);
149 else if(r > 6.000655433e-01 && r <= 6.500147305e-01) return 4.092497225*Pow->powA(r,1.2865658570);
150 else if(r > 6.500147305e-01 && r <= 7.000271284e-01) return 4.322906068*Pow->powA(r,1.4140909190);
151 else if(r > 7.000271284e-01 && r <= 7.501159110e-01) return 4.589909069*Pow->powA(r,1.5828217210);
152 else if(r > 7.501159110e-01 && r <= 8.000662513e-01) return 4.906598744*Pow->powA(r,1.8162034790);
153 else if(r > 8.000662513e-01 && r <= 8.500772033e-01) return 5.297053797*Pow->powA(r,2.1626825870);
154 else if(r > 8.500772033e-01 && r <= 8.750123088e-01) return 5.650277904*Pow->powA(r,2.5517142900);
155 else if(r > 8.750123088e-01 && r <= 9.000106866e-01) return 5.947741976*Pow->powA(r,2.9383159800);
156 else if(r > 9.000106866e-01 && r <= 9.250286977e-01) return 6.317014169*Pow->powA(r,3.5155713570);
157 else if(r > 9.250286977e-01 && r <= 9.350074655e-01) return 6.625757778*Pow->powA(r,4.1118364020);
158 else if(r > 9.350074655e-01 && r <= 9.400070002e-01) return 6.784126941*Pow->powA(r,4.4594479870);
159 else if(r > 9.400070002e-01 && r <= 9.500026229e-01) return 6.969180156*Pow->powA(r,4.9019105900);
160 else if(r > 9.500026229e-01 && r <= 9.600065896e-01) return 7.254643542*Pow->powA(r,5.6894827520);
161 else if(r > 9.600065896e-01 && r <= 9.700165577e-01) return 7.613500497*Pow->powA(r,6.8841593900);
162 else if(r > 9.700165577e-01 && r <= 9.750157135e-01) return 7.944100103*Pow->powA(r,8.2544400860);
163 else if(r > 9.750157135e-01 && r <= 9.800101585e-01) return 8.228439642*Pow->powA(r,9.6531190300);
164 else if(r > 9.800101585e-01 && r <= 9.850018119e-01) return 8.586524083*Pow->powA(r,11.783756400);
165 else if(r > 9.850018119e-01 && r <= 9.875072929e-01) return 8.917364901*Pow->powA(r,14.240137310);
166 else if(r > 9.875072929e-01 && r <= 9.900006975e-01) return 9.202675761*Pow->powA(r,16.76089029);
167 else if(r > 9.900006975e-01 && r <= 9.925048152e-01) return 9.562781386*Pow->powA(r,20.61962568);
168 else if(r > 9.925048152e-01 && r <= 9.935030103e-01) return 9.867915664*Pow->powA(r,24.69147261);
169 else if(r > 9.935030103e-01 && r <= 9.945000177e-01) return 10.08727342*Pow->powA(r,28.07701487);
170 else if(r > 9.945000177e-01 && r <= 9.950025127e-01) return 10.27382614*Pow->powA(r,31.36001051);
171 else if(r > 9.950025127e-01 && r <= 9.955029368e-01) return 10.41724243*Pow->powA(r,34.13127669);
172 else if(r > 9.955029368e-01 && r <= 9.960005970e-01) return 10.57636221*Pow->powA(r,37.50088614);
173 else if(r > 9.960005970e-01 && r <= 9.965016080e-01) return 10.75639015*Pow->powA(r,41.72354164);
174 else if(r > 9.965016080e-01 && r <= 9.970001795e-01) return 10.96366661*Pow->powA(r,47.18729543);
175 else if(r > 9.970001795e-01 && r <= 9.975004375e-01) return 11.20771170*Pow->powA(r,54.54899604);
176 else if(r > 9.975004375e-01 && r <= 9.978504408e-01) return 11.45202216*Pow->powA(r,63.11906699);
177 else if(r > 9.978504408e-01 && r <= 9.989524675e-01)
178 return 2.72756636666e5-5.47258138432e5*r+2.74514044871e5*Pow->powN(r,2);
179 else if(r > 9.989524675e-01 && r <= 9.994929298e-01)
180 return 1.14946879661e6-2.30252188973e6*r+1.15306661788e6*Pow->powN(r,2);
181 else if(r > 9.994929298e-01 && r <= 9.997558922e-01)
182 return 4.90621526236e6-9.81982943883e6*r+4.91362868673e6*Pow->powN(r,2);
183 else if(r > 9.997558922e-01 && r <= 9.998830120e-01)
184 return 2.11365688795184e7-4.22884732250404e7*r+2.11519198434219e7*Pow->powN(r,2);
185 else if(r > 9.998830120e-01 && r <= 9.999441620e-01)
186 return 9.18987945911229e7-1.83829506875257e8*r+9.19307287711182e7*Pow->powN(r,2);
187 else if(r > 9.999441620e-01 && r <= 9.999734440e-01)
188 return 4.02781481130433e8-8.05629656768407e8*r+4.02848193115356e8*Pow->powN(r,2);
189 else if(r > 9.999734440e-01 && r <= 9.999874120e-01)
190 return 1.77804635135775e9-3.55623257045546e9*r+1.77818623756641e9*Pow->powN(r,2);
191 else if(r > 9.999874120e-01 && r <= 9.999940510e-01)
192 return 7.90099032702915e9-1.58022749659903e10*r+7.90128465842187e9*Pow->powN(r,2);
193 else if(r > 9.999940510e-01 && r <= 9.999971960e-01)
194 return 3.53223507413091e10-7.06453227162775e10*r+3.53229719954219e10*Pow->powN(r,2);
195 else if(r > 9.999971960e-01 && r <= 9.999986820e-01)
196 return 1.58786475903785e11-3.17574266841213e11*r+1.58787790958875e11*Pow->powN(r,2);
197 else if(r > 9.999986820e-01 && r <= 9.999993820e-01)
198 return 7.17433904438156e11-1.43487059972047e12*r+7.17436695304750e11*Pow->powN(r,2);
199 else if(r > 9.999993820e-01 && r <= 9.999997110e-01)
200 return 3.257374123945330e12-6.514754184993900e12*r+3.257380061072000e12*Pow->powN(r,2);
201 else if(r > 9.999997110e-01 && r <= 9.999998650e-01)
202 return 1.48641255466171e13-2.97282637539286e13*r+1.48641382073360e13*Pow->powN(r,2);
203 else if(r > 9.999998650e-01 && r <= 9.999999370e-01)
204 return 6.82056055248876e13-1.36411238119518e14*r+6.82056325946560e13*Pow->powN(r,2);
205 else if(r > 9.999999370e-01 && r <= 1.000000000e00)
206 return 3.14919363013517e14-6.29838784079090e14*r+3.14919421065600e14*Pow->powN(r,2);
207 }
208/*
209 Frohner Watt Spectrum
210*/
211 if (option == 2) {
212 a=1.175;
213 b=1.040;
214
215 G4int icounter=0;
216 G4int icounter_max=1024;
217 do {
218 gpar = std::sqrt(Pow->powA(1+0.125*a*b,2.)-1)+(1+0.125*a*b);
219 g2=-G4Log(fisslibrng());
220 ferg=a*gpar*g2;
221
222 icounter++;
223 if ( icounter > icounter_max ) {
224 G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl;
225 break;
226 }
227
228 } while (Pow->powA((1-gpar)*(1+g2)-G4Log(fisslibrng()),2.) > b*ferg);
229 // Loop checking, 11.03.2015, T. Koi
230 return ferg;
231 }
232
233 //
234 // Fall through
235 //
236
237 G4cout << " SmpNEngCf252: unrecognized option = " << option << G4endl;
238 return -1.0;
239}
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:166

References fisslibrng(), G4cout, G4endl, G4Log(), G4Pow::GetInstance(), G4Pow::powA(), and G4Pow::powN().

Referenced by G4fissionEvent().

◆ G4SmpNuDistDataPu239()

G4int G4fissionEvent::G4SmpNuDistDataPu239 ( G4double  erg)
private

Definition at line 62 of file G4SmpNuDistDataPu239.cc.

62 {
63
64/*
65 Description
66 Sample Number of Neutrons from fission in Pu-239 using
67 Zucker and Holden's tabulated data for Pu-239
68*/
69
70/*
71 Input
72 erg - incident neutron energy
73 Output
74 G4SmpNuDistDataPu239 - sampled multiplicity
75
76*/
77
78 G4double cpnu;
79 G4double pnu[8] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
80 G4double eng;
81 G4double r;
82
83/*
84 Check if energy is within the range of experimental values
85*/
86 if (erg > 10) eng=10.;
87 else eng=erg;
88
89 r=fisslibrng();
90
91/*
92 Pu-239 nu distribution
93*/
95 if (eng <= 5.0) pnu[0] = 0.0108826e0 - 0.00207694e0*eng
96 - 6.5e-4*Pow->powN(eng,2) + 4.023e-4*Pow->powN(eng,3)
97 - 7.93e-5*Pow->powN(eng,4) + 5.53666667e-6*Pow->powN(eng,5);
98 if (eng > 5 && eng <= 10) pnu[0] = 0.078606e0 - 5.17531e-2*eng
99 + 1.42034e-2*Pow->powN(eng,2) - 1.96292e-3*Pow->powN(eng,3)
100 + 1.34512e-4*Pow->powN(eng,4) - 3.63416e-6*Pow->powN(eng,5);
101 if (r <= pnu[0]) return 0;
102
103
104 if (eng <= 5.0) pnu[1] = 0.0994916e0 - 0.01979542e0*eng
105 - 0.00236583e0*Pow->powN(eng,2) + 0.0020581e0*Pow->powN(eng,3)
106 - 4.14016667e-4*Pow->powN(eng,4) + 2.85666667e-5*Pow->powN(eng,5);
107 if (eng > 5 && eng <= 10) pnu[1] = 0.10052e0 - 2.61361e-2*eng
108 + 3.78355e-3*Pow->powN(eng,2) - 3.70667e-4*Pow->powN(eng,3)
109 + 1.95458e-5*Pow->powN(eng,4) - 3.87499e-7*Pow->powN(eng,5);
110 cpnu=pnu[0]+pnu[1];
111 if (r <= cpnu) return 1;
112
113
114 if (eng <= 5.0) pnu[2] = 0.2748898e0 - 0.01565248e0*eng
115 - 0.00749681e0*Pow->powN(eng,2) + 0.00217121e0*Pow->powN(eng,3)
116 - 3.13041667e-4*Pow->powN(eng,4) + 1.88183333e-5*Pow->powN(eng,5);
117 if (eng > 5 && eng <= 10) pnu[2] = 0.282487e0 - 0.0261342e0*eng
118 - 1.16895e-3*Pow->powN(eng,2) + 1.9888e-4*Pow->powN(eng,3)
119 - 6.41257e-6*Pow->powN(eng,4) + 1.02502e-7*Pow->powN(eng,5);
120 cpnu=cpnu+pnu[2];
121 if (r <= cpnu) return 2;
122
123 if (eng <= 5.0) pnu[3] = 0.3269196e0 + 0.00428312e0*eng
124 - 0.00189322e0*Pow->powN(eng,2) - 4.31925001e-4*Pow->powN(eng,3)
125 + 1.18466667e-4*Pow->powN(eng,4) - 9.04166668e-6*Pow->powN(eng,5);
126 if (eng > 5 && eng <= 10) pnu[3] = 0.329058e0 + 4.023e-3*eng
127 - 3.06402e-3*Pow->powN(eng,2) + 2.2628e-4*Pow->powN(eng,3)
128 - 1.50875e-5*Pow->powN(eng,4) + 4.39168e-7*Pow->powN(eng,5);
129 cpnu=cpnu+pnu[3];
130 if (r <= cpnu) return 3;
131
132 if (eng <= 5.0) pnu[4] = 0.2046061e0 + 0.02633899e0*eng
133 + 0.0041514e0*Pow->powN(eng,2) - 0.00275542e0*Pow->powN(eng,3)
134 + 5.0325e-4*Pow->powN(eng,4) - 3.32158333e-5*Pow->powN(eng,5);
135 if (eng > 5 && eng <= 10) pnu[4] = 0.18992e0 + 4.55188e-2*eng
136 - 7.06316e-3*Pow->powN(eng,2) + 7.29916e-4*Pow->powN(eng,3)
137 - 4.71791e-5*Pow->powN(eng,4) + 1.185e-6*Pow->powN(eng,5);
138 cpnu=cpnu+pnu[4];
139 if (r <= cpnu) return 4;
140
141 if (eng <= 5.0) pnu[5] = 0.0726834e0 + 0.00116043e0*eng
142 + 0.007572e0*Pow->powN(eng,2) - 0.00161972e0*Pow->powN(eng,3)
143 + 2.3545e-4*Pow->powN(eng,4) - 1.546e-5*Pow->powN(eng,5);
144 if (eng > 5 && eng <= 10) pnu[5] = 0.0779212e0 - 1.35849e-3*eng
145 + 6.68583e-3*Pow->powN(eng,2) - 7.98649e-4*Pow->powN(eng,3)
146 + 4.88625e-5*Pow->powN(eng,4) - 1.54167e-6*Pow->powN(eng,5);
147 cpnu=cpnu+pnu[5];
148 if (r <= cpnu) return 5;
149
150 if (eng <= 5.0) pnu[6] = 0.0097282e0 + 0.00494589e0*eng
151 + 0.00115294e0*Pow->powN(eng,2) - 3.25191667e-4*Pow->powN(eng,3)
152 + 6.00083333e-5*Pow->powN(eng,4) - 3.745e-6*Pow->powN(eng,5);
153 if (eng > 5 && eng <= 10) pnu[6] = 7.85432e-3 + 7.33182e-3*eng
154 - 2.03705e-4*Pow->powN(eng,2) + 8.73787e-5*Pow->powN(eng,3)
155 - 4.24164e-6*Pow->powN(eng,4) + 2.37499e-7*Pow->powN(eng,5);
156 cpnu=cpnu+pnu[6];
157 if (r <= cpnu) return 6;
158
159 if (eng <= 5.0) pnu[7] = 6.301e-4 + 1.10666667e-4*eng
160 + 4.28016667e-4*Pow->powN(eng,2) + 1.12041667e-5*Pow->powN(eng,3)
161 - 4.31666667e-6*Pow->powN(eng,4) + 3.29166667e-7*Pow->powN(eng,5);
162 if (eng > 5 && eng <= 10) pnu[7] = 1.5323e-3 - 7.91857e-4*eng
163 + 8.01017e-4*Pow->powN(eng,2) - 6.82833e-5*Pow->powN(eng,3)
164 + 4.38333e-6*Pow->powN(eng,4) - 6.0e-8*Pow->powN(eng,5);
165 cpnu=cpnu+pnu[7];
166 if (r <= cpnu) return 7;
167 else return 8;
168}

References fisslibrng(), G4Pow::GetInstance(), and G4Pow::powN().

Referenced by G4fissionEvent().

◆ G4SmpNuDistDataPu239_241()

G4int G4fissionEvent::G4SmpNuDistDataPu239_241 ( G4double  nubar)
private

Definition at line 62 of file G4SmpNuDistDataPu239_241.cc.

62 {
63
64/*
65 Description
66 Sample Number of Neutrons from fission in Pu-239 and Pu-241 using
67 Zucker and Holden's tabulated data for Pu-239
68 The P(nu) distribution is given as a function of the average
69 number of neutrons from fission, based on interpolation of the
70 Pu-239 data from Zucker and Holden.
71*/
72
73/*
74 Input
75 nubar - average number of neutrons per fission
76 Output
77 G4SmpNuDistDataPu239_241 - sampled multiplicity
78
79*/
80
81 G4double pnu[9], cpnu, sum;
82 G4double r;
83
84/*
85 Check if nubar is within the range of experimental values
86*/
87 if(nubar >= 2.85 && nubar <= 4.25) {
88/*
89 Use Zucker and Holden Data
90*/
92 pnu[0]=-2.412937e-3*Pow->powN(nubar,3)+3.210687e-2*Pow->powN(nubar,2)-1.434037e-1*nubar+2.150733e-1;
93 pnu[1]=-2.650615e-2*Pow->powN(nubar,3)+3.290389e-1*Pow->powN(nubar,2)-1.389007*nubar+2.002327;
94 pnu[2]=3.232028e-2*Pow->powN(nubar,3)-3.176093e-1*Pow->powN(nubar,2)+8.605098e-1*nubar-3.411191e-1;
95 pnu[3]=1.623289e-2*Pow->powN(nubar,3)-2.414705e-1*Pow->powN(nubar,2)+1.007282*nubar-9.583769e-1;
96 pnu[4]=1.932275e-2*Pow->powN(nubar,3)-2.923666e-1*Pow->powN(nubar,2)+1.421383*nubar-1.924025;
97 pnu[5]=-6.185679e-2*Pow->powN(nubar,3)+6.82888e-1*Pow->powN(nubar,2)-2.347653*nubar+2.647049;
98 pnu[6]=1.79773e-2*Pow->powN(nubar,3)-1.60516e-1*Pow->powN(nubar,2)+5.228077e-1*nubar-5.939556e-1;
99 pnu[7]=3.530038e-3*Pow->powN(nubar,4)-4.925425e-2*Pow->powN(nubar,3)+2.726784e-1*Pow->powN(nubar,2)-6.81281e-1*nubar+6.347577e-1;
100 pnu[8]=2.837523e-3*Pow->powN(nubar,3)-2.678644e-2*Pow->powN(nubar,2)+8.545638e-2*nubar-9.156078e-2;
101
102 sum=pnu[0]+pnu[1]+pnu[2]+pnu[3]+pnu[4]+pnu[5]+pnu[6]+pnu[7]+pnu[8];
103
104 pnu[0]=pnu[0]/sum;
105 pnu[1]=pnu[1]/sum;
106 pnu[2]=pnu[2]/sum;
107 pnu[3]=pnu[3]/sum;
108 pnu[4]=pnu[4]/sum;
109 pnu[5]=pnu[5]/sum;
110 pnu[6]=pnu[6]/sum;
111 pnu[7]=pnu[7]/sum;
112 pnu[8]=pnu[8]/sum;
113
114 r=fisslibrng();
115
116 if(r <= pnu[0]) return 0;
117
118 cpnu=pnu[0]+pnu[1];
119 if(r <= cpnu) return 1;
120
121 cpnu=cpnu+pnu[2];
122 if(r <= cpnu) return 2;
123
124 cpnu=cpnu+pnu[3];
125 if(r <= cpnu) return 3;
126
127 cpnu=cpnu+pnu[4];
128 if(r <= cpnu) return 4;
129
130 cpnu=cpnu+pnu[5];
131 if(r <= cpnu) return 5;
132
133 cpnu=cpnu+pnu[6];
134 if(r <= cpnu) return 6;
135
136 cpnu=cpnu+pnu[7];
137 if(r <= cpnu) return 7;
138 else return 8;
139
140 } else {
141/*
142 Use Terrell's formula
143*/
144 return (G4int) G4SmpTerrell(nubar);
145 }
146}

References fisslibrng(), G4SmpTerrell(), G4Pow::GetInstance(), and G4Pow::powN().

Referenced by G4fissionEvent().

◆ G4SmpNuDistDataPu239_241_MC()

G4int G4fissionEvent::G4SmpNuDistDataPu239_241_MC ( G4double  nubar)
private

Definition at line 61 of file G4SmpNuDistDataPu239_241_MC.cc.

61 {
62
63/*
64 Description
65 Sample Number of Neutrons from fission in Pu-239 and Pu-241 using
66 Zucker and Holden's tabulated data for Pu-239
67 The 11 P(nu) distributions are given as a function of nubar,
68 the average number of neutrons from induced fission for the
69 11 different energies (0 to 10 MeV), based on the Pu-239 data
70 from Zucker and Holden.
71*/
72
73/*
74 Input
75 nubar - average number of neutrons per fission
76 Output
77 G4SmpNuDistDataPu239_241_MC - sampled multiplicity
78
79*/
80
81 static G4double Pu239nu [11] [9] = {
82 {.0108826, .0994916, .2748898, .3269196, .2046061, .0726834, .0097282, .0006301, .0001685},
83 {.0084842, .0790030, .2536175, .3289870, .2328111, .0800161, .0155581, .0011760, .0003469},
84 {.0062555, .0611921, .2265608, .3260637, .2588354, .0956070, .0224705, .0025946, .0005205},
85 {.0045860, .0477879, .1983002, .3184667, .2792811, .1158950, .0301128, .0048471, .0007233},
86 {.0032908, .0374390, .1704196, .3071862, .2948565, .1392594, .0386738, .0078701, .0010046},
87 {.0022750, .0291416, .1437645, .2928006, .3063902, .1641647, .0484343, .0116151, .0014149},
88 {.0014893, .0222369, .1190439, .2756297, .3144908, .1892897, .0597353, .0160828, .0029917},
89 {.0009061, .0163528, .0968110, .2558524, .3194566, .2134888, .0729739, .0213339, .0020017},
90 {.0004647, .0113283, .0775201, .2335926, .3213289, .2356614, .0886183, .0274895, .0039531},
91 {.0002800, .0071460, .0615577, .2089810, .3200121, .2545846, .1072344, .0347255, .0054786},
92 {.0002064, .0038856, .0492548, .1822078, .3154159, .2687282, .1295143, .0432654, .0075217}
93 };
94 static G4double Pu239nubar [11] = {
95 2.8760000,
96 3.0088800,
97 3.1628300,
98 3.3167800,
99 3.4707300,
100 3.6246800,
101 3.7786300,
102 3.9325800,
103 4.0865300,
104 4.2404900,
105 4.3944400
106 };
107 G4double fraction, r, cum;
108 G4int engind, nu;
109
110/*
111 Check if nubar is within the range of experimental values
112*/
113 if(nubar >= Pu239nubar[0] && nubar <= Pu239nubar[10]) {
114/*
115 Use Zucker and Holden Data
116*/
117 engind = 1;
118 while (nubar > Pu239nubar[engind]){ engind++;}
119 // Loop checking, 11.03.2015, T. Koi
120 fraction = (nubar-Pu239nubar[engind-1])/(Pu239nubar[engind]-Pu239nubar[engind-1]);
121 if(fisslibrng() > fraction) engind--;
122
123 r = fisslibrng();
124 nu = 0;
125 cum = Pu239nu[engind][0];
126 while (r > cum && nu < 8){
127 // Loop checking, 11.03.2015, T. Koi
128 nu++;
129 cum += Pu239nu[engind][nu];
130 }
131 return nu;
132 } else {
133/*
134 Use Terrell's formula
135*/
136 return (G4int) G4SmpTerrell(nubar);
137 }
138}

References fisslibrng(), and G4SmpTerrell().

Referenced by G4fissionEvent().

◆ G4SmpNuDistDataU232_234_236_238()

G4int G4fissionEvent::G4SmpNuDistDataU232_234_236_238 ( G4double  nubar)
private

Definition at line 62 of file G4SmpNuDistDataU232_234_236_238.cc.

62 {
63
64/*
65 Description
66 Sample Number of Neutrons from fission in U-232, U-234, U-236
67 and U-238 using Zucker and Holden's tabulated data for U-238
68 The P(nu) distribution is given as a function of the average
69 number of neutrons from fission, based on interpolation of the
70 U-238 data from Zucker and Holden.
71*/
72
73/*
74 Input
75 nubar - average number of neutrons per fission
76 Output
77 G4SmpNuDistDataU232_234_236_238 - sampled multiplicity
78
79*/
80
81 G4double pnu[9], cpnu, sum;
82 G4double r;
83
84/*
85 Check if nubar is within the range of experimental values
86*/
87 if (nubar >= 2.25 && nubar <= 3.80) {
88/*
89 Use Zucker and Holden Data
90*/
92 pnu[0]=-7.705432e-3*Pow->powN(nubar,3)+8.904671e-2*Pow->powN(nubar,2)-3.488123e-1*nubar+4.627291e-1;
93 pnu[1]=-2.879938e-2*Pow->powN(nubar,3)+3.629189e-1*Pow->powN(nubar,2)-1.545284*nubar+2.229503;
94 pnu[2]=6.543684e-2*Pow->powN(nubar,3)-6.673117e-1*Pow->powN(nubar,2)+2.087358*nubar-1.771396;
95 pnu[3]=1.412971e-2*Pow->powN(nubar,3)-2.309842e-1*Pow->powN(nubar,2)+1.022451*nubar-1.032235;
96 pnu[4]=-5.163167e-2*Pow->powN(nubar,3)+4.457516e-1*Pow->powN(nubar,2)-1.114981*nubar+9.484241e-1;
97 pnu[5]=8.758841e-4*Pow->powN(nubar,3)+3.707461e-2*Pow->powN(nubar,2)-1.565149e-1*nubar+1.851039e-1;
98 pnu[6]=-3.871089e-5*Pow->powN(nubar,3)+1.936524e-2*Pow->powN(nubar,2)-8.091057e-2*nubar+9.019871e-2;
99 pnu[7]=3.945995e-3*Pow->powN(nubar,3)-2.697509e-2*Pow->powN(nubar,2)+6.237296e-2*nubar-4.820745e-2;
100 pnu[8]=1.708054e-3*Pow->powN(nubar,4)-1.706039e-2*Pow->powN(nubar,3)+6.550213e-2*Pow->powN(nubar,2)-1.135e-1*nubar+7.443828e-2;
101
102 sum=pnu[0]+pnu[1]+pnu[2]+pnu[3]+pnu[4]+pnu[5]+pnu[6]+pnu[7]+pnu[8];
103
104 pnu[0]=pnu[0]/sum;
105 pnu[1]=pnu[1]/sum;
106 pnu[2]=pnu[2]/sum;
107 pnu[3]=pnu[3]/sum;
108 pnu[4]=pnu[4]/sum;
109 pnu[5]=pnu[5]/sum;
110 pnu[6]=pnu[6]/sum;
111 pnu[7]=pnu[7]/sum;
112 pnu[8]=pnu[8]/sum;
113
114 r=fisslibrng();
115
116 if(r <= pnu[0]) return 0;
117
118 cpnu=pnu[0]+pnu[1];
119 if(r <= cpnu) return 1;
120
121 cpnu=cpnu+pnu[2];
122 if(r <= cpnu) return 2;
123
124 cpnu=cpnu+pnu[3];
125 if(r <= cpnu) return 3;
126
127 cpnu=cpnu+pnu[4];
128 if(r <= cpnu) return 4;
129
130 cpnu=cpnu+pnu[5];
131 if(r <= cpnu) return 5;
132
133 cpnu=cpnu+pnu[6];
134 if(r <= cpnu) return 6;
135
136 cpnu=cpnu+pnu[7];
137 if(r <= cpnu) return 7;
138 else return 8;
139
140 } else {
141/*
142 Use Terrell's formula
143*/
144 return (G4int) G4SmpTerrell(nubar);
145 }
146}

References fisslibrng(), G4SmpTerrell(), G4Pow::GetInstance(), and G4Pow::powN().

Referenced by G4fissionEvent().

◆ G4SmpNuDistDataU232_234_236_238_MC()

G4int G4fissionEvent::G4SmpNuDistDataU232_234_236_238_MC ( G4double  nubar)
private

Definition at line 61 of file G4SmpNuDistDataU232_234_236_238_MC.cc.

61 {
62
63/*
64 Description
65 Sample Number of Neutrons from fission in U-232, U-234, U-236,
66 and U-238 using Zucker and Holden's tabulated data for U-238
67 The 11 P(nu) distributions are given as a function of nubar,
68 the average number of neutrons from induced fission for the
69 11 different energies (0 to 10 MeV), based on the U-238 data
70 from Zucker and Holden.
71*/
72
73/*
74 Input
75 nubar - average number of neutrons per fission
76 Output
77 G4SmpNuDistDataU232_234_236_238_MC - sampled multiplicity
78
79*/
80
81 static G4double U238nu [11] [9] = {
82 {.0396484, .2529541, .2939544, .2644470, .1111758, .0312261, .0059347, .0005436, .0001158},
83 {.0299076, .2043215, .2995886, .2914889, .1301480, .0363119, .0073638, .0006947, .0001751},
84 {.0226651, .1624020, .2957263, .3119098, .1528786, .0434233, .0097473, .0009318, .0003159},
85 {.0170253, .1272992, .2840540, .3260192, .1779579, .0526575, .0130997, .0013467, .0005405},
86 {.0124932, .0984797, .2661875, .3344938, .2040116, .0640468, .0173837, .0020308, .0008730},
87 {.0088167, .0751744, .2436570, .3379711, .2297901, .0775971, .0225619, .0030689, .0013626},
88 {.0058736, .0565985, .2179252, .3368863, .2541575, .0933127, .0286200, .0045431, .0031316},
89 {.0035997, .0420460, .1904095, .3314575, .2760413, .1112075, .0355683, .0065387, .0031316},
90 {.0019495, .0309087, .1625055, .3217392, .2943792, .1313074, .0434347, .0091474, .0046284},
91 {.0008767, .0226587, .1356058, .3076919, .3080816, .1536446, .0522549, .0124682, .0067176},
92 {.0003271, .0168184, .1111114, .2892434, .3160166, .1782484, .0620617, .0166066, .0095665}
93 };
94 static G4double U238nubar [11] = {
95 2.2753781,
96 2.4305631,
97 2.5857481,
98 2.7409331,
99 2.8961181,
100 3.0513031,
101 3.2064881,
102 3.3616731,
103 3.5168581,
104 3.6720432,
105 3.8272281
106 };
107 G4double fraction, r, cum;
108 G4int engind, nu;
109
110/*
111 Check if nubar is within the range of experimental values
112*/
113 if(nubar >= U238nubar[0] && nubar <= U238nubar[10]) {
114/*
115 Use Zucker and Holden Data
116*/
117 engind = 1;
118 while (nubar > U238nubar[engind]){ engind++;}
119 // Loop checking, 11.03.2015, T. Koi
120 fraction = (nubar-U238nubar[engind-1])/(U238nubar[engind]-U238nubar[engind-1]);
121 if(fisslibrng() > fraction) engind--;
122
123 r = fisslibrng();
124 nu = 0;
125 cum = U238nu[engind][0];
126 while (r > cum && nu < 8){
127 // Loop checking, 11.03.2015, T. Koi
128 nu++;
129 cum += U238nu[engind][nu];
130 }
131 return nu;
132 } else {
133/*
134 Use Terrell's formula
135*/
136 return (G4int) G4SmpTerrell(nubar);
137 }
138}

References fisslibrng(), and G4SmpTerrell().

Referenced by G4fissionEvent().

◆ G4SmpNuDistDataU233_235()

int G4fissionEvent::G4SmpNuDistDataU233_235 ( G4double  nubar)
private

Definition at line 63 of file G4SmpNuDistDataU233_235.cc.

63 {
64
66/*
67 Description
68 Sample Number of Neutrons from fission in U-233 and U-235 using
69 Zucker and Holden's tabulated data for U-235
70 The P(nu) distribution is given as a function of the average
71 number of neutrons from fission, based on interpolation of the
72 U-235 data from Zucker and Holden.
73*/
74
75/*
76 Input
77 nubar - average number of neutrons per fission
78 Output
79 G4SmpNuDistDataU233_235 - sampled multiplicity
80
81*/
82
83 G4double pnu[8], cpnu, sum;
84 G4double r;
85
86/*
87 Check if nubar is within the range of experimental values
88*/
89 if(nubar >= 2.25 && nubar <= 4.0) {
90/*
91 Use Zucker and Holden Data
92*/
93 if(nubar <= 2.8738) pnu[0]=-9.279554e-02*Pow->powN(nubar,3)+8.036687e-01*Pow->powN(nubar,2)-2.342684*nubar+2.309035;
94 else if(nubar > 2.8738 && nubar <= 3.4272) pnu[0]=1.50072e-2*Pow->powN(nubar,2)-1.109109e-1*nubar+2.063133e-1;
95 else pnu[0]=1.498897e+3*G4Exp(-3.883864*nubar);
96
97 if(nubar <= 3.2316) pnu[1]=3.531126e-2*Pow->powN(nubar,3)-2.787213e-1*Pow->powN(nubar,2)+5.824072e-1*nubar-1.067136e-1;
98 else pnu[1]=6.574492e-2*Pow->powN(nubar,2)-5.425741e-1*nubar+1.123199;
99
100 pnu[2]=1.274643e-2*Pow->powN(nubar,3)-1.387954e-1*Pow->powN(nubar,2)+3.264669e-1*nubar+1.77148e-1;
101
102 pnu[3]=5.473738e-2*Pow->powN(nubar,5)-8.835826e-1*Pow->powN(nubar,4)+5.657201*Pow->powN(nubar,3)-1.802669e+1*Pow->powN(nubar,2)+2.867937e+1*nubar-1.794296e+1;
103
104 pnu[4]=-3.591076e-2*Pow->powN(nubar,3)+3.092624e-1*Pow->powN(nubar,2)-7.184805e-1*nubar+5.649400e-1;
105
106 if(nubar <= 2.8738) pnu[5]=1.699374e-2*Pow->powN(nubar,2)-1.069558e-3*nubar-6.981430e-2;
107 else pnu[5]=2.100175e-2*Pow->powN(nubar,3)-1.705788e-1*Pow->powN(nubar,2)+5.575467e-1*nubar-6.245873e-1;
108
109 if(nubar <= 3.0387) pnu[6]=9.431919e-7*Pow->powA(nubar,8.958848);
110 else pnu[6]=4.322428e-3*Pow->powN(nubar,3)-2.094790e-2*Pow->powN(nubar,2)+4.449671e-2*nubar-4.435987e-2;
111
112 pnu[7]=5.689084e-3*Pow->powN(nubar,4)-6.591895e-2*Pow->powN(nubar,3)+2.886861e-1*Pow->powN(nubar,2)-5.588146e-1*nubar+4.009166e-1;
113
114 sum=pnu[0]+pnu[1]+pnu[2]+pnu[3]+pnu[4]+pnu[5]+pnu[6]+pnu[7];
115
116 pnu[0]=pnu[0]/sum;
117 pnu[1]=pnu[1]/sum;
118 pnu[2]=pnu[2]/sum;
119 pnu[3]=pnu[3]/sum;
120 pnu[4]=pnu[4]/sum;
121 pnu[5]=pnu[5]/sum;
122 pnu[6]=pnu[6]/sum;
123 pnu[7]=pnu[7]/sum;
124
125 r=fisslibrng();
126
127 if(r <= pnu[0]) return (int) 0;
128
129 cpnu=pnu[0]+pnu[1];
130 if(r <= cpnu) return (int) 1;
131
132 cpnu=cpnu+pnu[2];
133 if(r <= cpnu) return (int) 2;
134
135 cpnu=cpnu+pnu[3];
136 if(r <= cpnu) return (int) 3;
137
138 cpnu=cpnu+pnu[4];
139 if(r <= cpnu) return (int) 4;
140
141 cpnu=cpnu+pnu[5];
142 if(r <= cpnu) return (int) 5;
143
144 cpnu=cpnu+pnu[6];
145 if(r <= cpnu) return (int) 6;
146 else return (int) 7;
147 } else {
148/*
149 Use Terrell's formula
150*/
151 return (int) G4SmpTerrell(nubar);
152 }
153}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179

References fisslibrng(), G4Exp(), G4SmpTerrell(), G4Pow::GetInstance(), G4Pow::powA(), and G4Pow::powN().

Referenced by G4fissionEvent().

◆ G4SmpNuDistDataU233_235_MC()

G4int G4fissionEvent::G4SmpNuDistDataU233_235_MC ( G4double  nubar)
private

Definition at line 61 of file G4SmpNuDistDataU233_235_MC.cc.

61 {
62
63/*
64 Description
65 Sample Number of Neutrons from fission in U-233 and U-235 using
66 Zucker and Holden's tabulated data for U-235
67 The 11 P(nu) distributions are given as a function of nubar,
68 the average number of neutrons from induced fission for the
69 11 different energies (0 to 10 MeV), based on the U-235 data
70 from Zucker and Holden.
71*/
72
73/*
74 Input
75 nubar - average number of neutrons per fission
76 Output
77 G4SmpNuDistDataU233_235_MC - sampled multiplicity
78
79*/
80
81 static G4double U235nu [11] [8] = {
82 {.0317223, .1717071, .3361991, .3039695, .1269459, .0266793, .0026322, .0001449},
83 {.0237898, .1555525, .3216515, .3150433, .1444732, .0356013, .0034339, .0004546},
84 {.0183989, .1384891, .3062123, .3217566, .1628673, .0455972, .0055694, .0011093},
85 {.0141460, .1194839, .2883075, .3266568, .1836014, .0569113, .0089426, .0019504},
86 {.0115208, .1032624, .2716849, .3283426, .2021206, .0674456, .0128924, .0027307},
87 {.0078498, .0802010, .2456595, .3308175, .2291646, .0836912, .0187016, .0039148},
88 {.0046272, .0563321, .2132296, .3290407, .2599806, .1045974, .0265604, .0056322},
89 {.0024659, .0360957, .1788634, .3210507, .2892537, .1282576, .0360887, .0079244},
90 {.0012702, .0216090, .1472227, .3083032, .3123950, .1522540, .0462449, .0107009},
91 {.0007288, .0134879, .1231200, .2949390, .3258251, .1731879, .0551737, .0135376},
92 {.0004373, .0080115, .1002329, .2779283, .3342611, .1966100, .0650090, .0175099}
93 };
94 static G4double U235nubar [11] = {
95 2.4140000,
96 2.5236700,
97 2.6368200,
98 2.7623400,
99 2.8738400,
100 3.0386999,
101 3.2316099,
102 3.4272800,
103 3.6041900,
104 3.7395900,
105 3.8749800
106 };
107 G4double fraction, r, cum;
108 G4int engind, nu;
109
110/*
111 Check if nubar is within the range of experimental values
112*/
113 if(nubar >= U235nubar[0] && nubar <= U235nubar[10]) {
114/*
115 Use Zucker and Holden Data
116*/
117 engind = 1;
118 while (nubar > U235nubar[engind]){ engind++;}
119 // Loop checking, 11.03.2015, T. Koi
120 fraction = (nubar-U235nubar[engind-1])/(U235nubar[engind]-U235nubar[engind-1]);
121 if(fisslibrng() > fraction) engind--;
122
123 r = fisslibrng();
124 nu = 0;
125 cum = U235nu[engind][0];
126 while (r > cum && nu < 7){
127 // Loop checking, 11.03.2015, T. Koi
128 nu++;
129 cum += U235nu[engind][nu];
130 }
131 return nu;
132 } else {
133/*
134 Use Terrell's formula
135*/
136 return (G4int) G4SmpTerrell(nubar);
137 }
138}

References fisslibrng(), and G4SmpTerrell().

Referenced by G4fissionEvent().

◆ G4SmpNuDistDataU235()

G4int G4fissionEvent::G4SmpNuDistDataU235 ( G4double  erg,
G4int  option 
)
private

Definition at line 62 of file G4SmpNuDistDataU235.cc.

62 {
63
64/*
65 Description
66 Sample Number of Neutrons from fission in U-235 using probability
67 distributions based on either
68 (option 0) Zucker and Holden's tabulated data for U-235
69 (option 1) Zucker and Holden's tabulated data for U-235 and
70 Gwin, Spencer and Ingle tabulated data for U-235
71 at thermal energies
72*/
73
74/*
75 Input
76 erg - incident neutron energy
77 option - 0 for sampling Zucker and Holden probability distributions
78 1 for sampling probability distributions based on Zucker
79 and Holden tabulated distributions as well as Gwin,
80 Spencer and Ingle tabulated distributions at thermal
81 energies
82 Output
83 G4SmpNuDistDataU235 - sampled multiplicity
84
85*/
86
87 G4double cpnu;
88 G4double pnu[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
89 G4double eng;
90 G4double r;
91
92/*
93 Check if energy is within the range of experimental values
94*/
95 if (erg > 10) eng=10.;
96 else eng=erg;
97
98 r=fisslibrng();
99/*
100 U-235 nu distribution
101*/
103 if (option == 0) {
104 if (eng <= 3.0) pnu[0]=0.0317223e0-9.67117e-3*eng+1.9726e-3*Pow->powN(eng,2)-2.33933e-4*Pow->powN(eng,3);
105 if (eng > 3 && eng <= 7) pnu[0]=-1.24147e-2+2.52982e-2*eng-7.88108e-3*Pow->powN(eng,2)+9.10008e-4*Pow->powN(eng,3)-3.67208e-5*Pow->powN(eng,4);
106 if (eng > 7 && eng <= 10) pnu[0]=6.31258e-2-1.89764e-2*eng+1.94475e-3*Pow->powN(eng,2)-6.74e-5*Pow->powN(eng,3);
107 if (r <= pnu[0]) return 0;
108
109 if (eng <= 4.0) pnu[1]=0.171707e0-0.0178305e0*eng+3.42286e-3*Pow->powN(eng,2)-2.1168e-3*Pow->powN(eng,3)+3.84226e-4*Pow->powN(eng,4)-1.44289e-5*Pow->powN(eng,5);
110 if (eng > 4 && eng <= 7) pnu[1]=9.8633e-2+3.53323e-2*eng-1.15037e-2*Pow->powN(eng,2)+7.4e-4*Pow->powN(eng,3);
111 if (eng > 7 && eng <= 10) pnu[1]=0.628295-0.180677*eng+1.80664e-2*Pow->powN(eng,2)-6.2015e-4*Pow->powN(eng,3);
112 cpnu=pnu[0]+pnu[1];
113 if (r <= cpnu) return 1;
114
115 if (eng <= 4.0) pnu[2]=0.336199e0-1.59569e-2*eng+2.78036e-3*Pow->powN(eng,2)-1.59278e-3*Pow->powN(eng,3)+2.21742e-4*Pow->powN(eng,4);
116 if (eng > 4 && eng <= 8) pnu[2]=0.229153e0+5.27561e-2*eng-1.29288e-2*Pow->powN(eng,2)+5.67233e-4*Pow->powN(eng,3)+8.06667e-6*Pow->powN(eng,4);
117 if (eng > 8 && eng <= 10) pnu[2]=-0.395206e0+0.227399e0*eng-2.86051e-2*Pow->powN(eng,2)+1.08196e-3*Pow->powN(eng,3);
118 cpnu=cpnu+pnu[2];
119 if (r <= cpnu) return 2;
120
121 if (eng <= 5.0) pnu[3]=0.30395461e0+0.01348261e0*eng-0.00262298e0*Pow->powN(eng,2)+1.99482407e-4*Pow->powN(eng,3);
122 if (eng > 5 && eng <= 10) pnu[3]=0.10992355e0+0.09246839e0*eng-0.00885344e0*Pow->powN(eng,2)-7.60589252e-4*Pow->powN(eng,3)+1.50973591e-4*Pow->powN(eng,4)-6.20436503e-6*Pow->powN(eng,5);
123 cpnu=cpnu+pnu[3];
124 if (r <= cpnu) return 3;
125
126 if (eng <= 4.0) pnu[4]=0.126946e0+1.64489e-2*eng+2.44029e-3*Pow->powN(eng,2)-2.1019e-3*Pow->powN(eng,3)+8.50104e-4*Pow->powN(eng,4)-1.10127e-4*Pow->powN(eng,5);
127 if (eng > 4 && eng <= 8) pnu[4]=0.263373e0-7.47799e-2*eng+2.0588e-2*Pow->powN(eng,2)-1.55132e-3*Pow->powN(eng,3)+3.025e-5*Pow->powN(eng,4);
128 if (eng > 8 && eng <= 10) pnu[4]=-0.277491e0+0.157606e0*eng-1.38467e-2*Pow->powN(eng,2)+4.20357e-4*Pow->powN(eng,3);
129 cpnu=cpnu+pnu[4];
130 if (r <= cpnu) return 4;
131
132 if (eng <= 4.0) pnu[5]=0.0266793e0+9.05206e-3*eng-6.58754e-4*Pow->powN(eng,2)+6.26292e-4*Pow->powN(eng,3)-9.75958e-5*Pow->powN(eng,4);
133 if (eng > 4 && eng <= 8) pnu[5]=0.0693092e0-1.46524e-2*eng+3.2841e-3*Pow->powN(eng,2)+1.50833e-4*Pow->powN(eng,3)-2.13e-5*Pow->powN(eng,4);
134 if (eng > 8 && eng <= 10) pnu[5]=0.881442e0-0.271486e0*eng+3.15097e-2*Pow->powN(eng,2)-1.12095e-3*Pow->powN(eng,3);
135 cpnu=cpnu+pnu[5];
136 if (r <= cpnu) return 5;
137
138
139 if (eng <= 4.0) pnu[6]=0.0026322e0+2.44017e-4*eng+4.55992e-4*Pow->powN(eng,2)+1.25233e-4*Pow->powN(eng,3)-2.35417e-5*Pow->powN(eng,4);
140 if (eng > 4 && eng <= 8) pnu[6]=-5.3989e-3+9.48298e-3*eng-2.95864e-3*Pow->powN(eng,2)+5.43025e-4*Pow->powN(eng,3)-2.75625e-5*Pow->powN(eng,4);
141 if (eng > 8 && eng <= 10) pnu[6]=0.177058-5.57839e-2*eng+6.81359e-3*Pow->powN(eng,2)-2.35568e-4*Pow->powN(eng,3);
142 cpnu=cpnu+pnu[6];
143 if (r <= cpnu) return 6;
144 else return 7;
145
146 } else if (option == 1) {
147 if (eng <= 3.0) pnu[0]=0.0291000e0-4.836167e-3*eng-6.72500e-4*Pow->powN(eng,2)+2.076667e-4*Pow->powN(eng,3);
148 if (eng > 3 && eng <= 7) pnu[0]=-1.23950e-2+2.52790e-2*eng-7.874333e-3*Pow->powN(eng,2)+9.09000e-4*Pow->powN(eng,3)-3.666667e-5*Pow->powN(eng,4);
149 if (eng > 7 && eng <= 10) pnu[0]=6.328200e-2-1.903283e-2*eng+1.951500e-3*Pow->powN(eng,2)-6.766667e-5*Pow->powN(eng,3);
150 if (r <= pnu[0]) return 0;
151
152 if (eng <= 4.0) pnu[1]=0.166000e0-0.005591833e0*eng-5.624500e-3*Pow->powN(eng,2)+7.673333e-4*Pow->powN(eng,3)-2.00000e-6*Pow->powN(eng,4);
153 if (eng > 4 && eng <= 7) pnu[1]=9.860600e-2+3.534733e-2*eng-1.150650e-2*Pow->powN(eng,2)+7.401667e-4*Pow->powN(eng,3);
154 if (eng > 7 && eng <= 10) pnu[1]=0.628401e0-0.1807157e0*eng+1.807100e-2*Pow->powN(eng,2)-6.203333e-4*Pow->powN(eng,3);
155 cpnu=pnu[0]+pnu[1];
156 if (r <= cpnu) return 1;
157
158 if (eng <= 4.0) pnu[2]=0.336200e0-1.596058e-2*eng+2.783625e-3*Pow->powN(eng,2)-1.593917e-3*Pow->powN(eng,3)+2.21875e-4*Pow->powN(eng,4);
159 if (eng > 4 && eng <= 8) pnu[2]=0.2292350e0+5.26925e-2*eng-1.291067e-2*Pow->powN(eng,2)+5.650000e-4*Pow->powN(eng,3)+8.166667e-6*Pow->powN(eng,4);
160 if (eng > 8 && eng <= 10) pnu[2]=0.3838230e0-3.4439e-2*eng+6.0800e-4*Pow->powN(eng,2);
161 cpnu=cpnu+pnu[2];
162 if (r <= cpnu) return 2;
163
164 if (eng <= 4.0) pnu[3]=0.3074000e0+0.00794125e0*eng-0.0002580417e0*Pow->powN(eng,2)-1.875000e-5*Pow->powN(eng,3)-2.145833e-5*Pow->powN(eng,4);
165 if (eng > 4 && eng <= 7) pnu[3]=0.3152270e0-2.623667e-3*eng+2.785000e-3*Pow->powN(eng,2)-3.273333e-4*Pow->powN(eng,3);
166 if (eng > 7 && eng <= 10) pnu[3]=0.6476430e0-0.1046148e0*eng+1.181600e-2*Pow->powN(eng,2)-5.051667e-4*Pow->powN(eng,3);
167 cpnu=cpnu+pnu[3];
168 if (r <= cpnu) return 3;
169
170 if (eng <= 4.0) pnu[4]=0.133300e0+5.853750e-3*eng+6.200875e-3*Pow->powN(eng,2)-8.95250e-4*Pow->powN(eng,3)+1.36250e-5*Pow->powN(eng,4);
171 if (eng > 4 && eng <= 7) pnu[4]=0.2379650e0-5.548167e-2*eng+1.517350e-2*Pow->powN(eng,2)-8.858333e-4*Pow->powN(eng,3);
172 if (eng > 7 && eng <= 10) pnu[4]=-0.5408690e0+0.2461313e0*eng-2.372350e-2*Pow->powN(eng,2)+7.861667e-4*Pow->powN(eng,3);
173 cpnu=cpnu+pnu[4];
174 if (r <= cpnu) return 4;
175
176 if (eng <= 4.0) pnu[5]=0.025900e0+1.067450e-2*eng-1.794000e-3*Pow->powN(eng,2)+9.50500e-4*Pow->powN(eng,3)-1.3000e-4*Pow->powN(eng,4);
177 if (eng > 4 && eng <= 7) pnu[5]=0.0871960e0-2.823683e-2*eng+7.0955e-3*Pow->powN(eng,2)-3.176667e-4*Pow->powN(eng,3);
178 if (eng > 7 && eng <= 10) pnu[5]=-0.591650e0+0.2236360e0*eng-2.373100e-2*Pow->powN(eng,2)+9.25000e-4*Pow->powN(eng,3);
179 cpnu=cpnu+pnu[5];
180 if (r <= cpnu) return 5;
181
182 if (eng <= 4.0) pnu[6]=0.002100e0+1.35500e-3*eng-3.235833e-4*Pow->powN(eng,2)+3.48500e-4*Pow->powN(eng,3)-4.591667e-5*Pow->powN(eng,4);
183 if (eng > 4 && eng <= 8) pnu[6]=1.767200e-2-8.055667e-3*eng+1.96650e-3*Pow->powN(eng,2)-6.283333e-5*Pow->powN(eng,3);
184 if (eng > 8 && eng <= 10) pnu[6]=-0.2485310e0+8.72590e-2*eng-9.14550e-3*Pow->powN(eng,2)+3.555000e-4*Pow->powN(eng,3);
185 cpnu=cpnu+pnu[6];
186 if (r <= cpnu) return 6;
187 else return 7;
188 }
189 //
190 // Fall through
191 //
192
193 G4cout << " SmpNuDistDataU235: unrecognized option = " << option << G4endl;
194 return -1;
195
196}

References fisslibrng(), G4cout, G4endl, G4Pow::GetInstance(), and G4Pow::powN().

Referenced by G4fissionEvent().

◆ G4SmpNuDistDataU238()

G4int G4fissionEvent::G4SmpNuDistDataU238 ( G4double  erg)
private

Definition at line 62 of file G4SmpNuDistDataU238.cc.

62 {
63
64/*
65 Description
66 Sample Number of Neutrons from fission in U-238 using
67 Zucker and Holden's tabulated data for U-238
68*/
69
70/*
71 Input
72 erg - incident neutron energy
73 Output
74 G4SmpNuDistDataU238 - sampled multiplicity
75
76*/
77
78 G4double cpnu;
79 G4double pnu[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
80 G4double eng;
81 G4double r;
82
83/*
84 Check if energy is within the range of experimental values
85*/
86 if (erg > 10) eng=10.;
87 else eng=erg;
88
89 r=fisslibrng();
90/*
91 U-238 nu distribution
92*/
94 if (eng <= 5.0) pnu[0]=0.0396484e0-1.14202e-2*eng+1.94627e-3*Pow->powN(eng,2)-2.95412e-4*Pow->powN(eng,3)+2.98333e-5*Pow->powN(eng,4)-1.31417e-6*Pow->powN(eng,5);
95 if (eng > 5 && eng <= 10) pnu[0]=0.0360013e0-8.06662e-3*eng+6.59461e-4*Pow->powN(eng,2)-3.54123e-5*Pow->powN(eng,3)+2.03749e-6*Pow->powN(eng,4)-5.91663e-8*Pow->powN(eng,5);
96 if (r <= pnu[0]) return 0;
97
98 if (eng <= 5.0) pnu[1]=0.252954e0-5.17151e-2*eng+2.84558e-3*Pow->powN(eng,2)+2.93563e-4*Pow->powN(eng,3)-5.99833e-5*Pow->powN(eng,4)+3.34417e-6*Pow->powN(eng,5);
99 if (eng > 5 && eng <= 10) pnu[1]=0.259093e0-5.7936e-2*eng+5.50734e-3*Pow->powN(eng,2)-3.09607e-4*Pow->powN(eng,3)+1.20957e-5*Pow->powN(eng,4)-2.49997e-7*Pow->powN(eng,5);
100 cpnu=pnu[0]+pnu[1];
101 if (r <= cpnu) return 1;
102
103 pnu[2]=0.29395353e0+0.01098908e0*eng-0.00565976e0*Pow->powN(eng,2)+3.14515399e-4*Pow->powN(eng,3)-5.66793415e-6*Pow->powN(eng,4)+1.54070513e-7*Pow->powN(eng,5);
104 cpnu=cpnu+pnu[2];
105 if (r <= cpnu) return 2;
106
107 if (eng <= 5.0) pnu[3]=0.264447e0+3.02825e-2*eng-3.12762e-3*Pow->powN(eng,2)-1.5875e-4*Pow->powN(eng,3)+4.91667e-5*Pow->powN(eng,4)-3.38667e-6*Pow->powN(eng,5);
108 if (eng > 5 && eng <= 10) pnu[3]=0.262024e0+3.37134e-2*eng-5.01711e-3*Pow->powN(eng,2)+3.58761e-4*Pow->powN(eng,3)-2.17959e-5*Pow->powN(eng,4)+5.10834e-7*Pow->powN(eng,5);
109 cpnu=cpnu+pnu[3];
110 if (r <= cpnu) return 3;
111
112 if (eng <= 5) pnu[4]=0.111176e0+1.66321e-2*eng+2.56307e-3*Pow->powN(eng,2)-2.17754e-4*Pow->powN(eng,3)-5.96667e-6*Pow->powN(eng,4)+7.44167e-7*Pow->powN(eng,5);
113 if (eng > 5 && eng <= 10) pnu[4]=0.107859e0+1.88862e-2*eng+2.07521e-3*Pow->powN(eng,2)-2.08099e-4*Pow->powN(eng,3)+3.23745e-6*Pow->powN(eng,4)-1.24999e-7*Pow->powN(eng,5);
114 cpnu=cpnu+pnu[4];
115 if (r <= cpnu) return 4;
116
117 if (eng <= 5.0) pnu[5]=0.0312261e0+4.12932e-3*eng+9.18413e-4*Pow->powN(eng,2)+4.36542e-5*Pow->powN(eng,3)-5.9125e-6*Pow->powN(eng,4)+3.20833e-7*Pow->powN(eng,5);
118 if (eng > 5 && eng <= 10) pnu[5]=0.0324008e0+3.04772e-3*eng+1.3327e-3*Pow->powN(eng,2)-3.96916e-5*Pow->powN(eng,3)+2.94583e-6*Pow->powN(eng,4)-7.66666e-8*Pow->powN(eng,5);
119 cpnu=cpnu+pnu[5];
120 if (r <= cpnu) return 5;
121
122 if (eng <= 5.0) pnu[6]=5.9347e-3+9.80023e-4*eng+4.24667e-4*Pow->powN(eng,2)+3.04458e-5*Pow->powN(eng,3)-6.46667e-6*Pow->powN(eng,4)+4.30833e-7*Pow->powN(eng,5);
123 if (eng > 5 && eng <= 10) pnu[6]=6.5421e-3+3.07834e-4*eng+7.39454e-4*Pow->powN(eng,2)-4.70459e-5*Pow->powN(eng,3)+3.44583e-6*Pow->powN(eng,4)-8.91667e-8*Pow->powN(eng,5);
124 cpnu=cpnu+pnu[6];
125 if (r <= cpnu) return 6;
126
127 if (eng <= 5.0) pnu[7]=5.436e-4+1.3756e-4*eng-5.0e-7*Pow->powN(eng,2)+1.35917e-5*Pow->powN(eng,3)+5.0e-7*Pow->powN(eng,4)-5.16667e-8*Pow->powN(eng,5);
128 if (eng > 5 && eng <= 10) pnu[7]=9.212e-4-1.57585e-4*eng+8.41126e-5*Pow->powN(eng,2)+4.14166e-6*Pow->powN(eng,3)+5.37501e-7*Pow->powN(eng,4)-6.66668e-9*Pow->powN(eng,5);
129 cpnu=cpnu+pnu[7];
130 if (r <= cpnu) return 7;
131 else return 8;
132}

References fisslibrng(), G4Pow::GetInstance(), and G4Pow::powN().

Referenced by G4fissionEvent().

◆ G4SmpNugDist()

G4int G4fissionEvent::G4SmpNugDist ( G4int  isotope,
G4double  nubar 
)
private

Definition at line 67 of file G4SmpNugDist.cc.

67 {
68
69/*
70 Description
71 Sample Number of Photons from neutron induced fission in
72 all isotopes using Tim Valentine's model (negative binomial
73 distribution, using nubar as a model parameter)
74*/
75
76/*
77 Input
78 iso - isotope
79 Output
80 G4SmpNugDist - sampled multiplicity
81*/
82
83 static G4double logcoeff[nfissg+1] = {
84 0.00000000000000e+00,
85 3.25809653802149e+00,
86 5.86078622346587e+00,
87 8.09437844497297e+00,
88 1.00753799138395e+01,
89 1.18671393830676e+01,
90 1.35093671183247e+01,
91 1.50291928720691e+01,
92 1.64462588918558e+01,
93 1.77753948391357e+01,
94 1.90281578076311e+01,
95 2.02137814732888e+01,
96 2.13397927361450e+01,
97 2.24124295384099e+01,
98 2.34369338549243e+01,
99 2.44177631079360e+01,
100 2.53587464524005e+01,
101 2.62632027266277e+01,
102 2.71340310844251e+01,
103 2.79737817391769e+01,
104 2.87847119553932e+01,
105 2.95688309141589e+01,
106 3.03279360625106e+01,
107 3.10636428574894e+01,
108 3.17774093252521e+01,
109 3.24705565058120e+01,
110 3.31442856005149e+01,
111 3.37996924530920e+01,
112 3.44377798564689e+01,
113 3.50594680730467e+01,
114 3.56656038766170e+01,
115 3.62569683628670e+01,
116 3.68342837279018e+01,
117 3.73982191769817e+01,
118 3.79493960962713e+01,
119 3.84883925970040e+01,
120 3.90157475227212e+01,
121 3.95319639951220e+01,
122 4.00375125617872e+01,
123 4.05328339990172e+01,
124 4.10183418147990e+01
125 };
126 G4int i, A, Z;
127 G4double cpi[nfissg+1];
128 G4double p, q, nubarg;
129 G4double r;
130
131/*
132 No data is available for induced fission gamma number
133 distributions. Sample the negative binomial cumulative
134 probability distribution.
135*/
136 A = (G4int) (isotope-1000*((G4int)(isotope/1000)));
137 Z = (G4int) ((isotope-A)/1000);
138 G4Pow* Pow = G4Pow::GetInstance();
139 nubarg = ((2.51-1.13e-5*Pow->powA(G4double(Z),2.)*std::sqrt(G4double(A)))*nubar+4.0)
140 /(-1.33+119.6*Pow->A13(G4double(Z))/G4double(A));
141 p = 1.*alphanegbin/(alphanegbin+nubarg);
142 q = 1.-p;
143 cpi[0] = G4Exp(logcoeff[0]+26.*G4Log(p));
144 for (i=1; i<=nfissg; i++) cpi[i] = cpi[i-1] + G4Exp(logcoeff[i]+26.*G4Log(p)+i*G4Log(q));
145 for (i=0; i<=nfissg; i++) cpi[i] = cpi[i]/cpi[nfissg-1];
146
147 r=fisslibrng();
148
149 for(i=0; i<=nfissg; i++) if (r <= cpi[i]) return i;
150
151 //
152 // Fall through
153 //
154
155 G4cout << " SmpNugDist: random number " << r << " out of range " << G4endl;
156 return -1;
157
158}
#define alphanegbin
Definition: G4SmpNugDist.cc:65
#define nfissg
Definition: G4SmpNugDist.cc:64
const G4int Z[17]
const G4double A[17]
G4double A13(G4double A) const
Definition: G4Pow.cc:120

References A, G4Pow::A13(), alphanegbin, fisslibrng(), G4cout, G4endl, G4Exp(), G4Log(), G4Pow::GetInstance(), nfissg, G4Pow::powA(), and Z.

Referenced by G4fissionEvent(), and G4SmpSpNugDistData().

◆ G4SmpNVel()

G4double G4fissionEvent::G4SmpNVel ( G4double  eng,
G4double cosdiru,
G4double cosdirv,
G4double cosdirw 
)
private

Definition at line 61 of file G4SmpNVel.cc.

61 {
62
63/*
64 Description
65 Knowing the neutron energy, determine its velocity and the 3 direction cosines
66*/
67
68/*
69 Input
70 eng - energy of neutron
71 Output
72 - velocity
73 - 3 components of the neutron velocity
74 in arguments (cosdiru, cosdirv, cosdirw)
75*/
76
77 const G4double rme = 939.56563; /* Rest Mass Energy equivalents for neutrons (MeV) */
78 const G4double cspeed = 2.99792458e+8; /* speed of light (m/sec) */
79
80 G4double vel;
81 G4double ratio = eng/rme;
82
83 if (ratio > 1.e-8) {
84/* Relativistic vel calculation */
85 vel = cspeed*std::sqrt(1.-rme*rme/((rme+eng)*(rme+eng)));
86 } else {
87/* Non-relativistic vel calculation */
88 vel = cspeed*std::sqrt(2.*eng/rme);
89 }
90
91 G4SmpIsoDir(cosdiru, cosdirv, cosdirw);
92
93 return vel;
94}
void G4SmpIsoDir(G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
Definition: G4SmpIsoDir.cc:62

References G4SmpIsoDir().

Referenced by G4fissionEvent().

◆ G4SmpPVel()

G4double G4fissionEvent::G4SmpPVel ( G4double  eng,
G4double cosdiru,
G4double cosdirv,
G4double cosdirw 
)
private

Definition at line 61 of file G4SmpPVel.cc.

61 {
62
63/*
64 Description
65 Knowing the photon energy, determine its velocity and the 3 direction cosines
66*/
67
68/*
69 Input
70 eng - energy of photon
71 Output
72 - velocity
73 - 3 components of the photon velocity
74 as arugments (cosdiru, cosdirv, cosdirw)
75*/
76
77 const G4double cspeed = 2.99792458e+8; /* speed of light (m/sec) */
78
79 G4SmpIsoDir(cosdiru, cosdirv, cosdirw);
80
81 return cspeed;
82}

References G4SmpIsoDir().

Referenced by G4fissionEvent().

◆ G4SmpSpNubarData()

G4double G4fissionEvent::G4SmpSpNubarData ( G4int  isotope)
private

Definition at line 62 of file G4SmpSpNubarData.cc.

62 {
63
64/*
65 Description
66 Determine average number of neutrons from spontaneous fission for
67 Th-232,
68 U-232, U-233, U-234, U-235, U-236, U-238
69 Np-237,
70 Pu-239, Pu-240, Pu-241, Pu-242
71 Am-241,
72 Cm-242, Cm-244,
73 Bk-249,
74 Cf-252
75 Based on Ensslin's data.
76 N. Ensslin, et.al., "Application Guide to Neutron Multiplicity Counting,"
77 LA-13422-M (November 1998)
78*/
79
80/*
81 Input
82 iso - isotope
83 Output
84 G4SmpSpNubarData - average number of neutrons
85 -1. is the isotope has
86 no nubar data
87*/
88
89 G4int i;
90
91 static G4int spzaid [nSPfissNubarIso] = {
92 90232, 92232, 92233, 92234, 92235,
93 92236, 92238, 93237, 94238, 94239,
94 94240, 94241, 94242, 95241, 96242,
95 96244, 97249, 98252 };
96 static G4double spnubar [nSPfissNubarIso] = {
97 2.14, 1.71, 1.76, 1.81, 1.86,
98 1.91, 2.01, 2.05, 2.21, 2.16,
99 2.156, 2.25, 2.145, 3.22, 2.54,
100 2.72, 3.40, 3.757
101 };
102
103// Find nubar
104 for (i=0; i<nSPfissNubarIso; i++) {
105 if (isotope == spzaid[i]) {
106 return spnubar[i];
107 }
108 }
109// no nubar available for that isotope
110 return -1.;
111}
#define nSPfissNubarIso

References nSPfissNubarIso.

Referenced by G4SmpSpNuDistData(), and G4SmpSpNugDistData().

◆ G4SmpSpNuDistData()

G4int G4fissionEvent::G4SmpSpNuDistData ( G4int  isotope,
G4int  Cf252option 
)
private

Definition at line 63 of file G4SmpSpNuDistData.cc.

63 {
64
65/*
66 Description
67 Sample Number of Neutrons from spontaneous fission
68 (a) from the neutron multiplicity data for
69 U-238, Pu-238, Pu-240, Pu-242, Cm-242, Cm-244
70 using Holden and Zucker's tabulated data
71 Cf-252 using either Spencer's tabulated data or
72 Boldeman's data
73 (b) from Terrell's approximation using nubar for
74 Th-232,
75 U-232, U-233, U-234, U-235, U-236,
76 Np-237,
77 Pu-239, Pu-241,
78 Am-241,
79 Bk-249
80 using Ensslin's data.
81*/
82
83/*
84 Input
85 iso - isotope
86 Cf252option - 0 to use Spencer's tabulated data
87 1 to use Boldeman's data
88 Output
89 G4SmpSpNuDistData - sampled multiplicity
90 -1 is the isotope has
91 no multiplicity data,
92 nor any nubar data
93*/
94
95 G4int i, index;
96 G4double sum, nubar;
97 G4double r;
98
99 static G4double sfnu [nSPfissIso][nSPfissn] = {
100 {0.0481677,0.2485215,0.4253044,0.2284094,0.0423438,0.0072533,
101 0.0000000,0.0000000,0.0000000,0.0000000,0.0000000},
102
103 {0.0631852,0.2319644,0.3333230,0.2528207,0.0986461,0.0180199,
104 0.0020407,0.0000000,0.0000000,0.0000000,0.0000000},
105
106 {0.0679423,0.2293159,0.3341228,0.2475507,0.0996922,0.0182398,
107 0.0031364,0.0000000,0.0000000,0.0000000,0.0000000},
108
109 {0.0212550,0.1467407,0.3267531,0.3268277,0.1375090,0.0373815,
110 0.0025912,0.0007551,0.0001867,0.0000000,0.0000000},
111
112 {0.0150050,0.1161725,0.2998427,0.3331614,0.1837748,0.0429780,
113 0.0087914,0.0002744,0.0000000,0.0000000,0.0000000},
114
115 {0.0540647,0.2053880,0.3802279,0.2248483,0.1078646,0.0276366,
116 0.0000000,0.0000000,0.0000000,0.0000000,0.0000000},
117
118 {0.0021100,0.0246700,0.1229000,0.2714400,0.3076300,0.1877000,
119 0.0677000,0.0140600,0.0016700,0.0001000,0.0000000},
120
121 {0.0020900,0.0262100,0.1262000,0.2752000,0.3018000,0.1846000,
122 0.0668000,0.0150000,0.0021000,0.0000000,0.0000000} };
123
124/*
125 sample the spontaneous fission neutron number distribution
126*/
127 index = -1;
128
129 if (isotope == 92238) index = 0;
130 else if (isotope == 94240) index = 1;
131 else if (isotope == 94242) index = 2;
132 else if (isotope == 96242) index = 3;
133 else if (isotope == 96244) index = 4;
134 else if (isotope == 94238) index = 5;
135 else if (isotope == 98252 && Cf252option == 0) index = 6;
136 else if (isotope == 98252 && Cf252option == 1) index = 7;
137
138 if (index != -1) {
139 r=fisslibrng();
140
141 sum = 0.;
142 for (i = 0; i < nSPfissn-1; i++) {
143 sum = sum + sfnu[index][i];
144 if (r <= sum || sfnu[index][i+1] == 0.) return i;
145 }
146 //
147 // Fall through
148 //
149 G4cout << " Random number out of range in SmpSpNuDistData " << G4endl;
150 return -1;
151
152 } else {
153// There is no full multiplicity distribution data available
154// for that isotope, let's try to find a nubar for it in
155// N. Ensslin, et.al., "Application Guide to Neutron
156// Multiplicity Counting," LA-13422-M (November 1998)
157// and use Terrell's approximation
158 nubar = G4SmpSpNubarData(isotope);
159 if (nubar != -1.) {
160 return (G4int) G4SmpTerrell(nubar);
161 } else {
162// There is no nubar information for that isotope, return -1,
163// meaning no data available for that isotope
164 return -1;
165 }
166 }
167}
#define nSPfissIso
#define nSPfissn
G4double G4SmpSpNubarData(G4int isotope)

References fisslibrng(), G4cout, G4endl, G4SmpSpNubarData(), G4SmpTerrell(), nSPfissIso, and nSPfissn.

Referenced by G4fissionEvent().

◆ G4SmpSpNugDistData()

G4int G4fissionEvent::G4SmpSpNugDistData ( G4int  isotope)
private

Definition at line 62 of file G4SmpSpNugDistData.cc.

62 {
63
64/*
65 Description
66 Sample Number of Photons from spontaneous fission in
67 (a) Cf-252 using the double Poisson model from Brunson;
68 (b) Th-232,
69 U-232, U-233, U-234, U-235, U-236, U-238*,
70 Np-237,
71 Pu-238*, Pu-239, Pu-240*, Pu-241, Pu-242*,
72 Am-241,
73 Cm-242*, Cm-244*,
74 Bk-249
75 using the negative binomial distribution based on the
76 spontaneous fission neutron nubar from Ensslin's
77 tabulated data or Holden and Zucker's tabulated data
78 (for isotopes denoted with asterix *).
79*/
80
81/*
82 Input
83 iso - isotope
84 Output
85 G4SmpSpNugDistData - sampled multiplicity
86 -1 if there is no multiplicity data for that isotope
87*/
88
89 G4int i;
90 G4double sum, nubar;
91 G4double r;
92
93 static G4double Cf252spdist [nSPfissg] = {
94 5.162699e-4,3.742057e-3,1.360482e-2,3.312786e-2,6.090540e-2,
95 9.043537e-2,1.133984e-1,1.240985e-1,1.216759e-1,1.092255e-1,
96 9.137106e-2,7.219960e-2,5.438060e-2,3.923091e-2,2.714690e-2,
97 1.800781e-2,1.143520e-2,6.942099e-3,4.025720e-3,2.229510e-3,
98 1.179602e-3,5.966936e-4,2.888766e-4,1.340137e-4,5.965291e-5,
99 2.551191e-5,1.049692e-5,4.160575e-6,1.590596e-6,0.000000e+0
100 };
101
102/*
103 sample the spontaneous fission photon number distribution
104*/
105 nubar=0.;
106 if (isotope == 98252) {
107// Cf-252 using the G4double Poisson model from Brunson;
108 r=fisslibrng();
109
110 sum = 0.;
111 for (i = 0; i < nSPfissg-1; i++) {
112 sum = sum + Cf252spdist[i];
113 if (r <= sum || Cf252spdist[i+1] == 0.) return i;
114 }
115 } else if (isotope == 92238) {
116/*
117 using the spontaneous fission nubar from
118 Holden and Zucker's tabulated data
119*/
120 nubar = 1.9900002;
121 } else if (isotope == 94240) {
122 nubar = 2.1540006;
123 } else if (isotope == 94242) {
124 nubar = 2.1489998;
125 } else if (isotope == 96242) {
126 nubar = 2.54;
127 } else if (isotope == 96244) {
128 nubar = 2.7200005;
129 } else if (isotope == 94238) {
130 nubar = 2.2100301;
131 }
132
133 if (nubar != 0.) {
134 return G4SmpNugDist(isotope, nubar);
135 } else {
136/*
137 using the spontaneous fission nubar from
138 N. Ensslin, et.al., "Application Guide to Neutron
139 Multiplicity Counting," LA-13422-M (November 1998)
140*/
141 nubar = G4SmpSpNubarData(isotope);
142 if (nubar != -1.) {
143 return G4SmpNugDist(isotope, nubar);
144 } else {
145// There is no nubar information for that isotope, return -1,
146// meaning no data available for that isotope
147 return -1;
148 }
149 }
150}
#define nSPfissg

References fisslibrng(), G4SmpNugDist(), G4SmpSpNubarData(), and nSPfissg.

Referenced by G4fissionEvent().

◆ G4SmpTerrell()

G4double G4fissionEvent::G4SmpTerrell ( G4double  nubar)
private

Definition at line 68 of file G4SmpTerrell.cc.

68 {
69/*
70 Description
71 Sample Fission Number from Terrell's modified Gaussian distribution
72
73 method uses Red Cullen's algoritm UCRL-TR-222526
74*/
75
76/*
77 Input
78 nubar - average number of neutrons per fission
79 Output
80 G4SmpTerrell - sampled multiplicity
81
82*/
83
84 G4double width;
85 G4double temp1, temp2, expo, cshift;
86 G4double rw, theta, sampleg;
87
88
89 if (nubar < WIDTH) {
90 std::ostringstream o;
91 o << nubar;
92 std::string errMsg = "fission nubar out of range, nubar=" + o.str();
93 G4fissionerr(6, "SmpTerrell", errMsg);
94 }
95
96 width = SQRT2 * WIDTH;
97 temp1 = nubar + 0.5;
98 temp2 = temp1/width;
99 temp2 *= temp2;
100 expo = G4Exp(-temp2);
101 cshift = temp1 + BSHIFT * WIDTH * expo/(1. - expo);
102
103 G4int icounter = 0;
104 G4int icounter_max = 1024;
105 do {
106 rw = std::sqrt(-G4Log(fisslibrng()));
107 theta = TWOPI * fisslibrng();
108 sampleg = width * rw * std::cos(theta) + cshift;
109 icounter++;
110 if ( icounter > icounter_max ) {
111 G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl;
112 break;
113 }
114 } while (sampleg < 0.0);
115 // Loop checking, 11.03.2015, T. Koi
116
117 return std::floor(sampleg);
118}
#define WIDTH
Definition: G4SmpTerrell.cc:66
#define TWOPI
Definition: G4SmpTerrell.cc:63
#define SQRT2
Definition: G4SmpTerrell.cc:64
#define BSHIFT
Definition: G4SmpTerrell.cc:65
void G4fissionerr(G4int iSever, std::string chSubNam, std::string chMsg)
Definition: G4fissionerr.cc:64

References BSHIFT, fisslibrng(), G4cout, G4endl, G4Exp(), G4fissionerr(), G4Log(), SQRT2, TWOPI, and WIDTH.

Referenced by G4fissionEvent(), G4SmpNuDistDataPu239_241(), G4SmpNuDistDataPu239_241_MC(), G4SmpNuDistDataU232_234_236_238(), G4SmpNuDistDataU232_234_236_238_MC(), G4SmpNuDistDataU233_235(), G4SmpNuDistDataU233_235_MC(), and G4SmpSpNuDistData().

◆ G4SmpWatt()

G4double G4fissionEvent::G4SmpWatt ( G4double  ePart,
G4int  iso 
)
private

Definition at line 66 of file G4SmpWatt.cc.

66 {
67
68/*
69 Description
70 Sample Watt Spectrum as in TART (Kalos algorithm)
71*/
72
73/*
74 Input
75 ePart - energy of incoming particle
76 iso - isotope
77 Output
78 - energy of incoming particle
79*/
80
81 static G4int nZA [nZAfis]= {
82 90231, 90232, 90233,
83 91233,
84 92232, 92233, 92234, 92235, 92236, 92237, 92238, 92239, 92240,
85 93235, 93236, 93237, 93238,
86 94237, 94238, 94239, 94240, 94241, 94242, 94243,
87 95241, 95242, 95243,
88 96242, 96243, 96244, 96245, 96246, 96247, 96248,
89 97249,
90 98249, 98250, 98251, 98252};
91
92 static G4double Watta [nZAfis][3] = {
93 {6.00949285e-05, -8.36695381e-03, 9.50939496e-01},
94 {6.54348443e-05, -8.86574327e-03, 9.55404490e-01},
95 {7.08173682e-05, -9.22676286e-03, 9.50088329e-01},
96 {6.35839062e-05, -8.63645973e-03, 9.24583535e-01},
97 {8.21929628e-05, 4.01922936e-03, 1.152121164e00},
98 {6.21335718e-05, -8.45651858e-03, 9.14717276e-01},
99 {6.81386135e-05, -8.99142394e-03, 9.21954824e-01},
100 {7.32627297e-05, -9.36908697e-03, 9.20107976e-01},
101 {8.06505279e-05, -9.95416671e-03, 9.27890410e-01},
102 {8.33208285e-05, -1.01073057e-02, 9.17691654e-01},
103 {8.96944680e-05, -1.06491070e-02, 9.25496030e-01},
104 {9.44608097e-05, -1.08940419e-02, 9.17795511e-01},
105 {1.01395704e-04, -1.15098159e-02, 9.29395462e-01},
106 {6.81110009e-05, -8.91619352e-03, 9.00047566e-01},
107 {7.21126359e-05, -9.20179363e-03, 8.95722889e-01},
108 {7.82371142e-05, -9.67050621e-03, 8.99574933e-01},
109 {8.27256297e-05, -9.99353009e-03, 8.97461897e-01},
110 {7.29458059e-05, -9.22415170e-03, 8.80996165e-01},
111 {8.02383914e-05, -9.78291439e-03, 8.88964070e-01},
112 {8.50641730e-05, -1.01099145e-02, 8.87304833e-01},
113 {9.10537157e-05, -1.05303084e-02, 8.89438514e-01},
114 {9.43014320e-05, -1.07133543e-02, 8.82632055e-01},
115 {1.02655616e-04, -1.13154691e-02, 8.91617174e-01},
116 {1.06118094e-04, -1.14971777e-02, 8.85181637e-01},
117 {9.08474473e-05, -1.04296303e-02, 8.71942958e-01},
118 {9.35633054e-05, -1.05612167e-02, 8.63930371e-01},
119 {1.01940441e-04, -1.11573929e-02, 8.73153437e-01},
120 {9.19501202e-05, -1.04229157e-02, 8.58681822e-01},
121 {9.42991674e-05, -1.05098872e-02, 8.49103546e-01},
122 {1.02747171e-04, -1.11371417e-02, 8.60434431e-01},
123 {1.05024967e-04, -1.12138980e-02, 8.51101942e-01},
124 {1.14130011e-04, -1.18692049e-02, 8.62838259e-01},
125 {1.15163673e-04, -1.18553822e-02, 8.51306646e-01},
126 {1.27169055e-04, -1.27033210e-02, 8.68623539e-01},
127 {1.24195213e-04, -1.24047085e-02, 8.48974077e-01},
128 {1.12616150e-04, -1.15135023e-02, 8.19708800e-01},
129 {1.23637465e-04, -1.22869889e-02, 8.35392018e-01},
130 {1.22724317e-04, -1.21677963e-02, 8.22569523e-01},
131 {1.33891595e-04, -1.29267762e-02, 8.37122909e-01} };
132
133 G4double a; /* Watt Parameters */
134 G4double b=1.0;
135
136 G4double rand1,rand2;
137 G4double x,y,z;
138 G4double eSmp;
139 G4int i;
140
141
142/*
143 Find Watt parameters for isotope
144*/
145 G4int isoindex=-1;
146 for (i=0; isoindex == -1 && i<nZAfis; i++) {
147 if (iso == nZA[i]) isoindex = i;
148 }
149 if (isoindex == -1) {
150 std::ostringstream o;
151 o << iso;
152 std::string errMsg = "No Watt spectrum available for iso " + o.str();
153 G4fissionerr(6, "SmpWatt", errMsg);
154 }
155
156 a= Watta[isoindex][2] + ePart*(Watta[isoindex][1] + ePart*Watta[isoindex][0]);
157
158 x= 1. + (b/(8.*a));
159 y= (x + std::sqrt(x*x-1.))/a;
160 z= a*y - 1.;
161
162 G4int icounter = 0;
163 G4int icounter_max = 1024;
164 do {
165
166 rand1= -G4Log(fisslibrng());
167 rand2= -G4Log(fisslibrng());
168 eSmp= y*rand1;
169
170 icounter++;
171 if ( icounter > icounter_max ) {
172 G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl;
173 break;
174 }
175
176 } while ((rand2-z*(rand1+1.))*(rand2-z*(rand1+1.)) > b*y*rand1 ||
177 eSmp < WATTEMIN || eSmp > WATTEMAX);
178 // Loop checking, 11.03.2015, T. Koi
179
180 return eSmp;
181}
#define nZAfis
Definition: G4SmpWatt.cc:58
#define WATTEMAX
Definition: G4SmpWatt.cc:60

References fisslibrng(), G4cout, G4endl, G4fissionerr(), G4Log(), nZAfis, and WATTEMAX.

Referenced by G4fissionEvent().

◆ getNeutronAge()

G4double G4fissionEvent::getNeutronAge ( G4int  index)
inline

Definition at line 139 of file G4fissionEvent.hh.

139 {
140 if (index >= 0 && index < neutronNu) return neutronAges[index];
141 else return -1;
142 }

References neutronAges, and neutronNu.

◆ getNeutronDircosu()

G4double G4fissionEvent::getNeutronDircosu ( G4int  index)
inline

Definition at line 107 of file G4fissionEvent.hh.

107 {
108 if (index >= 0 && index < neutronNu) return neutronDircosu[index];
109 else return -1;
110 }

References neutronDircosu, and neutronNu.

Referenced by G4FissionLibrary::ApplyYourself(), and G4SFDecay::DecayIt().

◆ getNeutronDircosv()

G4double G4fissionEvent::getNeutronDircosv ( G4int  index)
inline

Definition at line 111 of file G4fissionEvent.hh.

111 {
112 if (index >= 0 && index < neutronNu) return neutronDircosv[index];
113 else return -1;
114 }

References neutronDircosv, and neutronNu.

Referenced by G4FissionLibrary::ApplyYourself(), and G4SFDecay::DecayIt().

◆ getNeutronDircosw()

G4double G4fissionEvent::getNeutronDircosw ( G4int  index)
inline

Definition at line 115 of file G4fissionEvent.hh.

115 {
116 if (index >= 0 && index < neutronNu) return neutronDircosw[index];
117 else return -1;
118 }

References neutronDircosw, and neutronNu.

Referenced by G4FissionLibrary::ApplyYourself(), and G4SFDecay::DecayIt().

◆ getNeutronEnergy()

G4double G4fissionEvent::getNeutronEnergy ( G4int  index)
inline

Definition at line 99 of file G4fissionEvent.hh.

99 {
100 if (index >= 0 && index < neutronNu) return neutronEnergies[index];
101 else return -1;
102 }

References neutronEnergies, and neutronNu.

Referenced by G4FissionLibrary::ApplyYourself(), and G4SFDecay::DecayIt().

◆ getNeutronNu()

G4int G4fissionEvent::getNeutronNu ( )
inline

Definition at line 93 of file G4fissionEvent.hh.

93 {
94 return neutronNu;
95 }

References neutronNu.

Referenced by G4SFDecay::DecayIt(), and G4FissionLibrary::SampleMult().

◆ getNeutronVelocity()

G4double G4fissionEvent::getNeutronVelocity ( G4int  index)
inline

Definition at line 103 of file G4fissionEvent.hh.

103 {
104 if (index >= 0 && index < neutronNu) return neutronVelocities[index];
105 else return -1;
106 }

References neutronNu, and neutronVelocities.

◆ getPhotonAge()

G4double G4fissionEvent::getPhotonAge ( G4int  index)
inline

Definition at line 143 of file G4fissionEvent.hh.

143 {
144 if (index >= 0 && index < photonNu) return photonAges[index];
145 else return -1;
146 }

References photonAges, and photonNu.

◆ getPhotonDircosu()

G4double G4fissionEvent::getPhotonDircosu ( G4int  index)
inline

Definition at line 127 of file G4fissionEvent.hh.

127 {
128 if (index >= 0 && index < photonNu) return photonDircosu[index];
129 else return -1;
130 }

References photonDircosu, and photonNu.

Referenced by G4FissionLibrary::ApplyYourself(), and G4SFDecay::DecayIt().

◆ getPhotonDircosv()

G4double G4fissionEvent::getPhotonDircosv ( G4int  index)
inline

Definition at line 131 of file G4fissionEvent.hh.

131 {
132 if (index >= 0 && index < photonNu) return photonDircosv[index];
133 else return -1;
134 }

References photonDircosv, and photonNu.

Referenced by G4FissionLibrary::ApplyYourself(), and G4SFDecay::DecayIt().

◆ getPhotonDircosw()

G4double G4fissionEvent::getPhotonDircosw ( G4int  index)
inline

Definition at line 135 of file G4fissionEvent.hh.

135 {
136 if (index >= 0 && index < photonNu) return photonDircosw[index];
137 else return -1;
138 }

References photonDircosw, and photonNu.

Referenced by G4FissionLibrary::ApplyYourself(), and G4SFDecay::DecayIt().

◆ getPhotonEnergy()

G4double G4fissionEvent::getPhotonEnergy ( G4int  index)
inline

Definition at line 119 of file G4fissionEvent.hh.

119 {
120 if (index >= 0 && index < photonNu) return photonEnergies[index];
121 else return -1;
122 }

References photonEnergies, and photonNu.

Referenced by G4FissionLibrary::ApplyYourself(), and G4SFDecay::DecayIt().

◆ getPhotonNu()

G4int G4fissionEvent::getPhotonNu ( )
inline

Definition at line 96 of file G4fissionEvent.hh.

96 {
97 return photonNu;
98 }

References photonNu.

Referenced by G4SFDecay::DecayIt(), and G4FissionLibrary::SampleMult().

◆ getPhotonVelocity()

G4double G4fissionEvent::getPhotonVelocity ( G4int  index)
inline

Definition at line 123 of file G4fissionEvent.hh.

123 {
124 if (index >= 0 && index < photonNu) return photonVelocities[index];
125 else return -1;
126 }

References photonNu, and photonVelocities.

◆ rngf2d()

G4double G4fissionEvent::rngf2d ( void  )
staticprivate

Definition at line 74 of file G4rngc.cc.

74 {
75 return (G4double) rngfptr();
76}
static float(* rngfptr)(void)

References rngfptr.

Referenced by setRNGf().

◆ setCf252Option()

static void G4fissionEvent::setCf252Option ( G4int  ndist,
G4int  neng 
)
inlinestatic

Definition at line 156 of file G4fissionEvent.hh.

156 {
157 Cf252ndistoption = ndist;
158 Cf252nengoption = neng;
159 };

References Cf252ndistoption, and Cf252nengoption.

◆ setCorrelationOption()

static void G4fissionEvent::setCorrelationOption ( G4int  correlation)
inlinestatic

Definition at line 150 of file G4fissionEvent.hh.

150 {
151 correlationoption = correlation;
152 };
static G4int correlationoption

References correlationoption.

◆ setDelayOption()

static void G4fissionEvent::setDelayOption ( G4int  delay)
inlinestatic

Definition at line 147 of file G4fissionEvent.hh.

147 {
148 delayoption = delay;
149 };
static G4int delayoption

References delayoption.

◆ setNudistOption()

static void G4fissionEvent::setNudistOption ( G4int  nudist)
inlinestatic

Definition at line 153 of file G4fissionEvent.hh.

153 {
154 nudistoption = nudist;
155 };

References nudistoption.

◆ setRNGd()

static void G4fissionEvent::setRNGd ( G4double(*)(void)  funcptr)
inlinestatic

Definition at line 164 of file G4fissionEvent.hh.

164 {
165 rngdptr = funcptr;
166 }
static G4double(* rngdptr)(void)

References rngdptr.

Referenced by setrngd_().

◆ setRNGf()

static void G4fissionEvent::setRNGf ( float(*)(void)  funcptr)
inlinestatic

Definition at line 160 of file G4fissionEvent.hh.

160 {
161 rngfptr = funcptr;
162 rngdptr = rngf2d;
163 }
static G4double rngf2d(void)
Definition: G4rngc.cc:74

References rngdptr, rngf2d(), and rngfptr.

Referenced by setrngf_().

Field Documentation

◆ Cf252ndistoption

G4int G4fissionEvent::Cf252ndistoption =0
staticprivate

Definition at line 84 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), and setCf252Option().

◆ Cf252nengoption

G4int G4fissionEvent::Cf252nengoption =0
staticprivate

Definition at line 85 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), and setCf252Option().

◆ correlationoption

G4int G4fissionEvent::correlationoption =0
staticprivate

Definition at line 82 of file G4fissionEvent.hh.

Referenced by setCorrelationOption().

◆ delayoption

G4int G4fissionEvent::delayoption =0
staticprivate

Definition at line 81 of file G4fissionEvent.hh.

Referenced by setDelayOption().

◆ neutronAges

G4double* G4fissionEvent::neutronAges
private

Definition at line 70 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getNeutronAge(), and ~G4fissionEvent().

◆ neutronDircosu

G4double* G4fissionEvent::neutronDircosu
private

Definition at line 67 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getNeutronDircosu(), and ~G4fissionEvent().

◆ neutronDircosv

G4double* G4fissionEvent::neutronDircosv
private

Definition at line 68 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getNeutronDircosv(), and ~G4fissionEvent().

◆ neutronDircosw

G4double* G4fissionEvent::neutronDircosw
private

Definition at line 69 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getNeutronDircosw(), and ~G4fissionEvent().

◆ neutronEnergies

G4double* G4fissionEvent::neutronEnergies
private

Definition at line 65 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getNeutronEnergy(), and ~G4fissionEvent().

◆ neutronNu

G4int G4fissionEvent::neutronNu
private

◆ neutronVelocities

G4double* G4fissionEvent::neutronVelocities
private

Definition at line 66 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getNeutronVelocity(), and ~G4fissionEvent().

◆ nudistoption

G4int G4fissionEvent::nudistoption =3
staticprivate

Definition at line 83 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), and setNudistOption().

◆ photonAges

G4double* G4fissionEvent::photonAges
private

Definition at line 78 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getPhotonAge(), and ~G4fissionEvent().

◆ photonDircosu

G4double* G4fissionEvent::photonDircosu
private

Definition at line 75 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getPhotonDircosu(), and ~G4fissionEvent().

◆ photonDircosv

G4double* G4fissionEvent::photonDircosv
private

Definition at line 76 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getPhotonDircosv(), and ~G4fissionEvent().

◆ photonDircosw

G4double* G4fissionEvent::photonDircosw
private

Definition at line 77 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getPhotonDircosw(), and ~G4fissionEvent().

◆ photonEnergies

G4double* G4fissionEvent::photonEnergies
private

Definition at line 73 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getPhotonEnergy(), and ~G4fissionEvent().

◆ photonNu

G4int G4fissionEvent::photonNu
private

◆ photonVelocities

G4double* G4fissionEvent::photonVelocities
private

Definition at line 74 of file G4fissionEvent.hh.

Referenced by G4fissionEvent(), getPhotonVelocity(), and ~G4fissionEvent().

◆ rngdptr

G4double(* G4fissionEvent::rngdptr)(void)=0 ( void  )
staticprivate

Definition at line 86 of file G4fissionEvent.hh.

Referenced by setRNGd(), and setRNGf().

◆ rngfptr

G4float(* G4fissionEvent::rngfptr)(void)=0 ( void  )
staticprivate

Definition at line 87 of file G4fissionEvent.hh.

Referenced by rngf2d(), and setRNGf().


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