CayoGoncalves
Programmer
Hello. I need help to understand why my code is not giving me double numerical precision.
In this piece of code, I create a function that is analytically normalized, but when I calculate the numerical normalization factor, it seems to be with single precision. Here it is:
I get 0.999998932390816, and it should be 1.0d0.
I use complex vectors because later in the code they will become complex.
I don't understand where is the problem. Can someone help me, please?
Thanks in advance,
Cayo
In this piece of code, I create a function that is analytically normalized, but when I calculate the numerical normalization factor, it seems to be with single precision. Here it is:
Code:
program dyna
implicit none
integer i
integer, parameter :: Nq1=61
real(kind=8), parameter :: saw2au=1822.889950851334d0
real(kind=8), parameter :: nitro=14.0067d0*saw2au
real(kind=8), parameter :: mredu=nitro**2.0d0/(2.0d0*nitro)
real(kind=8) :: e0,pi,ch,x,x0,stepX,w,expo,c0,c1
complex(kind=8) :: soma,vec0(Nq1)
pi = 3.141592653589793d0
e0=0.005d0
x0=2.09970623d0
stepX=0.01d0
w=2.d0*e0
c0 = ((mredu*w)/pi)**(1.d0/4.d0)
c1 = (4.d0/pi*(mredu*w)**3.d0)**(1.d0/4.d0)
do i=1,Nq1
ch=(i-(Nq1-1.d0)/2.d0-1.d0)*stepX
x=x0+ch
expo = dexp(-(x-x0)**2.d0*mredu*w/2.d0)
vec0(i) = c0 * expo
end do
!----------------------------------------!
!normalizing !
soma=0.0d0 !
do i=1,Nq1 !
soma=soma+conjg(vec0(i))*vec0(i)*stepX !
end do !
vec0=vec0/sqrt(soma) !
!----------------------------------------!
write(*,'(a24,2(f23.15))')'normalization constant =',soma
end program
I get 0.999998932390816, and it should be 1.0d0.
I use complex vectors because later in the code they will become complex.
I don't understand where is the problem. Can someone help me, please?
Thanks in advance,
Cayo