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

#include <G4GaussLaguerreQ.hh>

Inheritance diagram for G4GaussLaguerreQ:

Public Member Functions

 G4GaussLaguerreQ (function pFunction, G4double alpha, G4int nLaguerre)
 G4GaussLaguerreQ (const G4GaussLaguerreQ &)=delete
G4GaussLaguerreQoperator= (const G4GaussLaguerreQ &)=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 44 of file G4GaussLaguerreQ.hh.

Constructor & Destructor Documentation

◆ G4GaussLaguerreQ() [1/2]

G4GaussLaguerreQ::G4GaussLaguerreQ ( function pFunction,
G4double alpha,
G4int nLaguerre )

Definition at line 42 of file G4GaussLaguerreQ.cc.

44 : G4VGaussianQuadrature(pFunction)
45{
46 const G4double tolerance = 1.0e-10;
47 const G4int maxNumber = 12;
48 G4int i = 1, k = 1;
49 G4double newton0 = 0.0, newton1 = 0.0, temp1 = 0.0, temp2 = 0.0, temp3 = 0.0,
50 temp = 0.0, cofi = 0.0;
51
52 fNumber = nLaguerre;
55
56 for(i = 1; i <= fNumber; ++i) // Loop over the desired roots
57 {
58 if(i == 1)
59 {
60 newton0 = (1.0 + alpha) * (3.0 + 0.92 * alpha) /
61 (1.0 + 2.4 * fNumber + 1.8 * alpha);
62 }
63 else if(i == 2)
64 {
65 newton0 += (15.0 + 6.25 * alpha) / (1.0 + 0.9 * alpha + 2.5 * fNumber);
66 }
67 else
68 {
69 cofi = i - 2;
70 newton0 += ((1.0 + 2.55 * cofi) / (1.9 * cofi) +
71 1.26 * cofi * alpha / (1.0 + 3.5 * cofi)) *
72 (newton0 - fAbscissa[i - 3]) / (1.0 + 0.3 * alpha);
73 }
74 for(k = 1; k <= maxNumber; ++k)
75 {
76 temp1 = 1.0;
77 temp2 = 0.0;
78 for(G4int j = 1; j <= fNumber; ++j)
79 {
80 temp3 = temp2;
81 temp2 = temp1;
82 temp1 =
83 ((2 * j - 1 + alpha - newton0) * temp2 - (j - 1 + alpha) * temp3) / j;
84 }
85 temp = (fNumber * temp1 - (fNumber + alpha) * temp2) / newton0;
86 newton1 = newton0;
87 newton0 = newton1 - temp1 / temp;
88 if(std::fabs(newton0 - newton1) <= tolerance)
89 {
90 break;
91 }
92 }
93 if(k > maxNumber)
94 {
95 G4Exception("G4GaussLaguerreQ::G4GaussLaguerreQ()", "OutOfRange",
97 "Too many iterations in Gauss-Laguerre constructor");
98 }
99
100 fAbscissa[i - 1] = newton0;
101 fWeight[i - 1] = -std::exp(GammaLogarithm(alpha + fNumber) -
103 (temp * fNumber * temp2);
104 }
105}
@ 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)
G4double GammaLogarithm(G4double xx)

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

◆ G4GaussLaguerreQ() [2/2]

G4GaussLaguerreQ::G4GaussLaguerreQ ( const G4GaussLaguerreQ & )
delete

Member Function Documentation

◆ Integral()

G4double G4GaussLaguerreQ::Integral ( ) const

Definition at line 115 of file G4GaussLaguerreQ.cc.

116{
117 G4double integral = 0.0;
118 for(G4int i = 0; i < fNumber; ++i)
119 {
120 integral += fWeight[i] * fFunction(fAbscissa[i]);
121 }
122 return integral;
123}

◆ operator=()

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

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