Returns Gn = Hn / sqrt(2^n n!) / pi^(1/4), where Hn are the hermite polynomials i.e. int dx Gm * Gn exp(-x^2) = 1
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real, | intent(in), | dimension (-ntgrid:,:,:,:) | :: | xptsdum | ||
real, | intent(out), | dimension (-ntgrid:,:,:,:,0:) | :: | hpdum |
subroutine get_hermite_polynomials_4d (xptsdum, hpdum)
use constants, only: pi
use theta_grid, only: ntgrid
implicit none
real, dimension (-ntgrid:,:,:,:), intent (in) :: xptsdum
real, dimension (-ntgrid:,:,:,:,0:), intent (out) :: hpdum
integer :: j
double precision, dimension (:,:,:,:), allocatable :: hp1, hp2, hp3
hpdum = 0.0
allocate (hp1(-ntgrid:ntgrid,nlambda,negrid,2))
allocate (hp2(-ntgrid:ntgrid,nlambda,negrid,2))
allocate (hp3(-ntgrid:ntgrid,nlambda,negrid,2))
hp1 = real(1.0,kind(hp1(0,1,1,1)))
hp2 = real(0.0,kind(hp2(0,1,1,1)))
hpdum(:,:,:,:,0) = 1.0
do j=1, size(hpdum,5)-1
hp3 = hp2
hp2 = hp1
hp1 = sqrt(2./j)*xptsdum*hp2 - sqrt(real(j-1)/j)*hp3
hpdum(:,:,:,:,j) = hp1
end do
hpdum = hpdum/pi**(0.25)
deallocate (hp1,hp2,hp3)
end subroutine get_hermite_polynomials_4d