- #1

- 32

- 0

http://www.netlib.org/seispack/rgg.f

I want to find the eigenvalues of a matrix (a more complex hamiltonian), so for my simple attempt to get this code to work, I input the diagonal matrix with 1 and 2 on the diagonals. So if everything worked fine, this canned routine should just spit out 1 and 2. So my issue comes in when I run this, it spits out a segmentation fault error and I can't sort out why it isn't working. Anyone have any insight into where I'm going wrong? My trial code is given below.

program trial

implicit none

double precision, allocatable, dimension(:,:) :: hamiltonian

double precision, allocatable, dimension(:,:) :: identity

double precision, allocatable, dimension(:) :: reigenval

double precision, allocatable, dimension(:) :: ieigenval

double precision, allocatable, dimension(:) :: denom

double precision, allocatable, dimension(:,:) :: eigenvec

double precision trueValue(100)

double precision answer, pos, xstep

integer i, j, m, n, k, gridsize

gridsize = 2

k = gridsize

allocate(hamiltonian(k,k),identity(k,k),reigenval(k),ieigenval(k),denom(k),eigenvec(k,k))

! makes the matrices

do i=1, gridsize

do j=1, gridsize

hamiltonian(i,j) = delta(i,j)*i

identity(i,j) = delta(i,j)

enddo

enddo

! calls the canned routine

call rgg(k,k,hamiltonian,identity,reigenval,ieigenval,denom,0,eigenvec,0)

open (unit=15, file='eigenvalueSHO.txt', access='append', status='new')

do i=1, gridsize

write(15,*) i, reigenval(i)

enddo

close(unit=15)

deallocate(hamiltonian,identity,reigenval,ieigenval,denom,eigenvec)

contains

! function to calculate kronecker delta

double precision function delta(m,n) result(answer)

integer, intent(in) :: m

integer, intent(in) :: n

if (m .eq. n) then

answer = 1.0

else

answer = 0.0

endif

end function delta

end program