Geant4 10.7.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)
Definition: G4Exception.cc:35
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4double GammaLogarithm(G4double xx)

◆ 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: