- #1
llello
- 32
- 0
Hey folks, I'm having an issue using a routine from the netlib that is supposed to calculate eigenvalues and eigenvectors. The canned routine can be found here:
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)
enddoclose(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
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)
enddoclose(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