c c diagonalisiert eine hermitesche Matrix c Das Programm bestimmt die Dimension der Matrix selbständig und c geht dabei davon aus, dass die letzte Zeile bzw. Spalte besetzt ist. c c program diag implicit none integer k,L,Dim,ThisDim Parameter (Dim=1000) integer Error * complex*16 Matrix(Dim,Dim) complex*16 wk(3*Dim+1) real*8 Eigenwerte(Dim) real*8 rk(3*Dim+1) * character Filename*50 * real time1 integer*4 Count1,Count2,Rate,Max * do L=1,Dim do k=1,Dim Matrix(k,L) = DCMPLX(0.d0,0.d0) enddo enddo * ThisDim = 0 * * Einlesen * call GETARG(1,FileName) open(1,file=Filename) 100 read(1,*,err=110,end=110) k,L,Matrix(k,L) IF(k.gt.ThisDim) ThisDim=k IF(L.gt.ThisDim) ThisDim=L goto 100 110 continue close(1) write(6,*) 'Dimension der Matrix = ',ThisDim * * Diagonalisieren * call System_Clock(Count1,Rate,Max) call ZHEEV('N','U',ThisDim,Matrix,Dim,Eigenwerte,wk, & 3*Dim+1,rk,Error) call System_Clock(count2,Rate,Max) time1=1.d0*(Count2-Count1)/Rate write(6,*) 'Zeit fuer ZHEEV: ',time1,' sec' * * Ausgeben * do k=1,ThisDim write(6,'(i6,a,f15.7)') k,' : ',Eigenwerte(k) enddo * * * end