## Recuring error with dstev (Lapack & f90 newbie...)

### Recuring error with dstev (Lapack & f90 newbie...)

Hello everybody

As said in the title, I'm new in fortran and lapack as well, so I hope that my question will not be too trivial.
Anyway, I'm banging my head on that particular problem since two days and google was not helpful this time therefore I'm here.
The code which I have problem with is the following (cleaned a bit for readability):
Code: Select all
`program hubbard_1Dimplicit none!variables  double precision :: n,mz,U,t  !real :: y  integer :: site,Hsize,i,j  double precision, dimension (:,:), allocatable :: Hamilt,Heigvec  double precision, dimension (:), allocatable :: Hdiag,Hoffdiag,Heigval!program  write (*,*) "********************"  write (*,*) "* 1D Hubbard Model *"  write (*,*) "********************"  write (*,*)  n = 4.  mz = 2.  U = 2.  t = 1.!Hamiltonian Matrix creation  allocate ( Hamilt ( Hsize , Hsize ) )  allocate ( Hdiag ( Hsize ) )  allocate ( Hoffdiag ( Hsize - 1 ) )  do i = 1,Hsize    do j = 1,Hsize      if (i == j) then        Hamilt(i,j) = U*(n+(-1)**i*mz)/2      else if ((i == j+1) .or. (i == j-1)) then        Hamilt(i,j) = -t      else        Hamilt(i,j) = 0.      end if    end do  end do  do i = 1,Hsize    Hdiag(i) = Hamilt(i,i)  end do    do i = 1,(Hsize - 1)    Hoffdiag(i) = Hamilt(i,i+1)  end do!Call Lapack routine dstev : eigenvect+eigenval of tridiagonal matrix  call diatri(Hdiag,Hoffdiag,Heigval,Heigvec,Hsize)    write (*,*) "Eigenvalue list:",Heigval    deallocate ( Hamilt )  deallocate ( Hdiag )  deallocate ( Hoffdiag )end program hubbard_1D!---------------------------------------------------------!!Diagonalization of a real symmetric tridiagonal matrix   !!---------------------------------------------------------!!input:  a(n)     = diagonal matrix elements              !!        b(n)     = off-diagonal matrix elements          !!        n        = size of the matrix                    !!output: eig(n)   = eigenvalues in ascending order        !!        vec(n,n) = eigenvectors                          !!---------------------------------------------------------!!Uses the LAPACK subroutine DSTEV                         !!---------------------------------------------------------! subroutine diatri(a,b,eig,vec,n)!-------------------------------! implicit none  integer :: n,inf real(8) :: a(n),b(n),d(n),e(n),eig(n),vec(n,n),work(max(1,2*n-2))  d=a e=b call dstev('V',n,d,e,vec,n,work,inf) eig=d  end subroutine diatri!---------------------!`

As you can see, I stole the subroutine calling dstev on the net, assuming that it will work better that the one I first wrote (not included in the previous lines).
Apparently it is not the problem.

I compiled this code on at least two different machines (mac OSX using -framework vecLib OR direct -llapack - lblas option ; and a small Unix cluster) using two different compilers (g95 or gfortran) and I don't get errors at compilation time.
BUT
when I execute the program, I get a segfault. I traced it to the call of dstev and...I'm stuck ! No idea what the problem is !

Any help will be warmly welcomed.

Thanks,

Schrall
Schrall

Posts: 2
Joined: Fri Apr 15, 2011 3:57 am

### Re: Recuring error with dstev (Lapack & f90 newbie...)

Ok, I finally found out the problem.
I simply forgot to allocate Heigvec and Heigval.

Therefore, my apologies for this post unrelated to Lapack.
Schrall

Posts: 2
Joined: Fri Apr 15, 2011 3:57 am