主题:我的程序为什么当矩阵打了就出错啊?请高手指点!
请高手指点一下:
我的程序怎么当矩阵一大就出错啊?小的时候运行都很好的啊:
program caculation
use IMSL
implicit none
integer i,q, k,r,p,j,a,b,LDH,LDS,LDEVEC,NOUT
real t,u
integer, parameter :: n=10
integer,parameter :: m=6
real :: H(4*n*m,4*n*m)
real :: S(4*n*m,4*n*m)
complex:: EVAL(4*m*n)
complex :: EVEC(4*m*n,4*m*n)
complex :: ALPHA(4*m*n)
real :: aBETA(4*m*n)
real:: PI
open (unit=20,file='caculation v.text')
t=-2.79
u=0.3
LDEVEC=4*m*n
LDH=4*m*n
LDS=4*m*n
do a=1,4*m*n
do b=1,4*m*n
H(b,a)=0
end do
end do
do i=1,4*n*m-1
H(i,i+1)=t
H(i+1,i)=t
S(i,i+1)=u
S(i+1,i)=u
end do
do q=1,m-1
H(4*q*n,4*q*n+1)=0
H(4*q*n+1,4*q*n)=0
S(4*q*n,4*q*n+1)=0
S(4*q*n+1,4*q*n)=0
end do
do r=0,m-2
do k=0,n-1
H(4*r*n+4*k+1,4*n*(r+1)+4*k+2)=t
H(4*r*n+4*k+2,4*n*(r+1)+4*k+1)=t
S(4*r*n+4*k+1,4*n*(r+1)+4*k+2)=u
S(4*r*n+4*k+2,4*n*(r+1)+4*k+1)=u
end do
end do
do r=0,m-2
do p=1,n
H(4*n*r+4*p,4*n*(r+1)+4*p-1)=t
H(4*n*(r+1)+4*p-1,4*n*r+4*p)=t
S(4*n*r+4*p,4*n*(r+1)+4*p-1)=u
S(4*n*(r+1)+4*p-1,4*n*r+4*p)=u
end do
end do
CALL GVCRG (4*m*n, H, LDH, S, LDS, ALPHA, ABETA, EVEC, LDEVEC) !!!!!!!question!
DO 10 I=1, 4*M*N
EVAL(I) = ALPHA(I)/ABETA(I)
10 CONTINUE
PI = GPIRG(4*M*N,4*M*N,H,LDH,S,LDS,ALPHA,ABETA,EVEC,LDEVEC)
CALL UMACH (2, NOUT)
CALL WRCRN ('EVAL', 1, 4*M*N, EVAL, 1, 0)
CALL WRCRN ('EVEC', 4*M*N, 4*M*N, EVEC, LDEVEC, 0)
WRITE (NOUT,'(/,A,F6.3)') ' Performance index = ', PI
! Solve for reciprocals of values
! CALL GVCRG (4*M*N, S, LDS,H, LDH, ALPHA, aBETA, EVEC, LDEVEC)
! DO 20 I=1, 4*M*N
! EVAL(I) = ALPHA(I)/aBETA(I)
! 20 CONTINUE
! Compute performance index
! PI = GPIRG(4*M*N,4*M*N,S,LDS,H,LDH,ALPHA,aBETA,EVEC,LDEVEC)
! Print results
! CALL WRCRN ('EVAL reciprocals', 1, 4*M*N, EVAL, 1, 0)
! CALL WRCRN ('EVEC', 4*M*N, 4*M*N, EVEC, LDEVEC, 0)
! WRITE (NOUT,'(/,A,F6.3)') ' Performance index = ', PI
do i=1,4*m*n
write(20,*) eval(i)
end do
write(20,*) "this is vectors 1"
do i=1,4*m*n
do j=1,4*m*n
write(20,*) evec(j,i)
end do
write(20,*) "this is vector ",i+1
end do
end
我的程序怎么当矩阵一大就出错啊?小的时候运行都很好的啊:
program caculation
use IMSL
implicit none
integer i,q, k,r,p,j,a,b,LDH,LDS,LDEVEC,NOUT
real t,u
integer, parameter :: n=10
integer,parameter :: m=6
real :: H(4*n*m,4*n*m)
real :: S(4*n*m,4*n*m)
complex:: EVAL(4*m*n)
complex :: EVEC(4*m*n,4*m*n)
complex :: ALPHA(4*m*n)
real :: aBETA(4*m*n)
real:: PI
open (unit=20,file='caculation v.text')
t=-2.79
u=0.3
LDEVEC=4*m*n
LDH=4*m*n
LDS=4*m*n
do a=1,4*m*n
do b=1,4*m*n
H(b,a)=0
end do
end do
do i=1,4*n*m-1
H(i,i+1)=t
H(i+1,i)=t
S(i,i+1)=u
S(i+1,i)=u
end do
do q=1,m-1
H(4*q*n,4*q*n+1)=0
H(4*q*n+1,4*q*n)=0
S(4*q*n,4*q*n+1)=0
S(4*q*n+1,4*q*n)=0
end do
do r=0,m-2
do k=0,n-1
H(4*r*n+4*k+1,4*n*(r+1)+4*k+2)=t
H(4*r*n+4*k+2,4*n*(r+1)+4*k+1)=t
S(4*r*n+4*k+1,4*n*(r+1)+4*k+2)=u
S(4*r*n+4*k+2,4*n*(r+1)+4*k+1)=u
end do
end do
do r=0,m-2
do p=1,n
H(4*n*r+4*p,4*n*(r+1)+4*p-1)=t
H(4*n*(r+1)+4*p-1,4*n*r+4*p)=t
S(4*n*r+4*p,4*n*(r+1)+4*p-1)=u
S(4*n*(r+1)+4*p-1,4*n*r+4*p)=u
end do
end do
CALL GVCRG (4*m*n, H, LDH, S, LDS, ALPHA, ABETA, EVEC, LDEVEC) !!!!!!!question!
DO 10 I=1, 4*M*N
EVAL(I) = ALPHA(I)/ABETA(I)
10 CONTINUE
PI = GPIRG(4*M*N,4*M*N,H,LDH,S,LDS,ALPHA,ABETA,EVEC,LDEVEC)
CALL UMACH (2, NOUT)
CALL WRCRN ('EVAL', 1, 4*M*N, EVAL, 1, 0)
CALL WRCRN ('EVEC', 4*M*N, 4*M*N, EVEC, LDEVEC, 0)
WRITE (NOUT,'(/,A,F6.3)') ' Performance index = ', PI
! Solve for reciprocals of values
! CALL GVCRG (4*M*N, S, LDS,H, LDH, ALPHA, aBETA, EVEC, LDEVEC)
! DO 20 I=1, 4*M*N
! EVAL(I) = ALPHA(I)/aBETA(I)
! 20 CONTINUE
! Compute performance index
! PI = GPIRG(4*M*N,4*M*N,S,LDS,H,LDH,ALPHA,aBETA,EVEC,LDEVEC)
! Print results
! CALL WRCRN ('EVAL reciprocals', 1, 4*M*N, EVAL, 1, 0)
! CALL WRCRN ('EVEC', 4*M*N, 4*M*N, EVEC, LDEVEC, 0)
! WRITE (NOUT,'(/,A,F6.3)') ' Performance index = ', PI
do i=1,4*m*n
write(20,*) eval(i)
end do
write(20,*) "this is vectors 1"
do i=1,4*m*n
do j=1,4*m*n
write(20,*) evec(j,i)
end do
write(20,*) "this is vector ",i+1
end do
end