Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4GaussHermiteQ Class Reference

#include <G4GaussHermiteQ.hh>

Inheritance diagram for G4GaussHermiteQ:

Public Member Functions

 G4GaussHermiteQ (function pFunction, G4int nHermite)
 G4GaussHermiteQ (const G4GaussHermiteQ &)=delete
G4GaussHermiteQoperator= (const G4GaussHermiteQ &)=delete
G4double Integral () const
Public Member Functions inherited from G4VGaussianQuadrature
 G4VGaussianQuadrature (function pFunction)
virtual ~G4VGaussianQuadrature ()
 G4VGaussianQuadrature (const G4VGaussianQuadrature &)=delete
G4VGaussianQuadratureoperator= (const G4VGaussianQuadrature &)=delete
G4double GetAbscissa (G4int index) const
G4double GetWeight (G4int index) const
G4int GetNumber () const

Additional Inherited Members

Protected Member Functions inherited from G4VGaussianQuadrature
G4double GammaLogarithm (G4double xx)
Protected Attributes inherited from G4VGaussianQuadrature
function fFunction
G4doublefAbscissa = nullptr
G4doublefWeight = nullptr
G4int fNumber = 0

Detailed Description

Definition at line 43 of file G4GaussHermiteQ.hh.

Constructor & Destructor Documentation

◆ G4GaussHermiteQ() [1/2]

G4GaussHermiteQ::G4GaussHermiteQ ( function pFunction,
G4int nHermite )

Definition at line 40 of file G4GaussHermiteQ.cc.

41 : G4VGaussianQuadrature(pFunction)
42{
43 const G4double tolerance = 1.0e-12;
44 const G4int maxNumber = 12;
45
46 G4int i = 1, j = 1, k = 1;
47 G4double newton0 = 0.;
48 G4double newton1 = 0.0, temp1 = 0.0, temp2 = 0.0, temp3 = 0.0, temp = 0.0;
49 G4double piInMinusQ = std::pow(pi, -0.25); // 1.0/std::sqrt(std::sqrt(pi)) ??
50
51 fNumber = (nHermite + 1) / 2;
54
55 for(i = 1; i <= fNumber; ++i)
56 {
57 if(i == 1)
58 {
59 newton0 =
60 std::sqrt((G4double)(2 * nHermite + 1)) -
61 1.85575001 * std::pow((G4double)(2 * nHermite + 1), -0.16666999);
62 }
63 else if(i == 2)
64 {
65 newton0 -= 1.14001 * std::pow((G4double) nHermite, 0.425999) / newton0;
66 }
67 else if(i == 3)
68 {
69 newton0 = 1.86002 * newton0 - 0.86002 * fAbscissa[0];
70 }
71 else if(i == 4)
72 {
73 newton0 = 1.91001 * newton0 - 0.91001 * fAbscissa[1];
74 }
75 else
76 {
77 newton0 = 2.0 * newton0 - fAbscissa[i - 3];
78 }
79 for(k = 1; k <= maxNumber; ++k)
80 {
81 temp1 = piInMinusQ;
82 temp2 = 0.0;
83 for(j = 1; j <= nHermite; ++j)
84 {
85 temp3 = temp2;
86 temp2 = temp1;
87 temp1 = newton0 * std::sqrt(2.0 / j) * temp2 -
88 std::sqrt(((G4double)(j - 1)) / j) * temp3;
89 }
90 temp = std::sqrt((G4double) 2 * nHermite) * temp2;
91 newton1 = newton0;
92 G4double ratio = std::numeric_limits<G4double>::max();
93 if(temp > 0.0)
94 {
95 ratio = temp1 / temp;
96 }
97 newton0 = newton1 - ratio;
98 if(std::fabs(newton0 - newton1) <= tolerance)
99 {
100 break;
101 }
102 }
103 if(k > maxNumber)
104 {
105 G4Exception("G4GaussHermiteQ::G4GaussHermiteQ()", "OutOfRange",
107 "Too many iterations in Gauss-Hermite constructor.");
108 }
109 fAbscissa[i - 1] = newton0;
110 fWeight[i - 1] = 2.0 / (temp * temp);
111 }
112}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
G4VGaussianQuadrature(function pFunction)

Referenced by G4GaussHermiteQ(), and operator=().

◆ G4GaussHermiteQ() [2/2]

G4GaussHermiteQ::G4GaussHermiteQ ( const G4GaussHermiteQ & )
delete

Member Function Documentation

◆ Integral()

G4double G4GaussHermiteQ::Integral ( ) const

Definition at line 119 of file G4GaussHermiteQ.cc.

120{
121 G4double integral = 0.0;
122 for(G4int i = 0; i < fNumber; ++i)
123 {
124 integral +=
126 }
127 return integral;
128}

◆ operator=()

G4GaussHermiteQ & G4GaussHermiteQ::operator= ( const G4GaussHermiteQ & )
delete

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