Error due to large array?

From: joto (a_at_a.com)
Date: 04/07/04


Date: Wed, 7 Apr 2004 15:17:46 -0400

Hi, when i try to execute the following program i get an error saying:
the system can not execute the specified program. If i make my arrays
smaller (all arrays less than about 5000), the program works. I'm using
the student eddition of fortran 95, is this due to some restriciton in
it? Is there anything i can do to get the program working with large
arrays?

The part of the code which is giving me trouble is:

DIMENSION X(2200), Y(2200), C(12400,12400), CE(12400,12400),
TE(12400,12400),T(2200,2200)
DIMENSION B(12400), NL(4100,3), NDP(200), VAL(200)
DIMENSION V(2200), P(3), Q(3), XL(3), YL(3)
DIMENSION YVAL(2200), VVAL(2200), NDV(2200), NDY(2200)

And the entire program follows. I've posted the unev.dat file in a
seperate message, because it's large.

Thanks

DIMENSION X(2200), Y(2200), C(12400,12400), CE(12400,12400),
TE(12400,12400),T(2200,2200)
DIMENSION B(12400), NL(4100,3), NDP(200), VAL(200)
DIMENSION V(2200), P(3), Q(3), XL(3), YL(3)
DIMENSION YVAL(2200), VVAL(2200), NDV(2200), NDY(2200)
DATA ER,E0/2.5,8.81E-12/

OPEN (5,FILE="unev.dat")
READ(5,10) NE,ND,NP
10 FORMAT(3I4)
READ(5,20) (I,(NL(I,J),J=1,3),I=1,NE)
20 FORMAT(4I10)
READ(5,30) (I,X(I),Y(I),I=1,ND)
30 FORMAT(I10,2F6.2)
READ(5,40) (NDP(I),VAL(I),I=1,NP)
40 FORMAT(I10,F6.2)
READ(5,41) (NDY(I),YVAL(I),I=1,ND)
41 FORMAT(I4,F6.2)
READ(5,43) (NDV(I),VVAL(I),I=1,ND)
43 FORMAT(I4,F16.3)

DO 50 M=1,ND
B(M)=0.0
DO 50 N=1,ND
C(M,N)=0.0
T(M,N)=0.0
50 CONTINUE
DO 140 I=1,NE
DO 60 J=1,3
K=NL(I,J)
XL(J)=X(K)
YL(J)=Y(K)
60 CONTINUE
P(1)=YL(2)-YL(3)
P(2)=YL(3)-YL(1)
p(3)=YL(1)-YL(2)
Q(1)=XL(3)-XL(2)
Q(2)=XL(1)-XL(3)
Q(3)=XL(2)-XL(1)
AREA=0.5*ABS(P(2)*Q(3)-Q(2)*P(3))
DO 70 M=1,3
DO 70 N=1,3
CE(M,N)=(P(M)*P(N)+Q(M)*Q(N))/(4.0*AREA)
IF(M.NE.N) THEN
TE(M,N)=AREA/12
ENDIF
IF(M.EQ.N) THEN
TE(M,N)=AREA/6
ENDIF
70 CONTINUE
DO 130 J=1,3
IR=NL(I,J)
DO 80 K=1,NP
IF(IR.EQ.NDP(K)) GO TO 120
80 CONTINUE
DO 110 L=1,3
IC=NL(I,L)
DO 90 K=1,NP
IF(IC.EQ.NDP(K)) GO TO 100
90 CONTINUE
C(IR,IC)=C(IR,IC)+CE(J,L)
B(IR)=B(IR)+TE(J,L)*YVAL(IR)/VVAL(IR)
GO TO 110
100 B(IR)=B(IR)-CE(J,L)*VAL(K)+(TE(J,L)*YVAL(NDP(K)))/VVAL(NDP(K))
110 CONTINUE
GO TO 130
120 CONTINUE
C(IR,IR)=1.0
B(IR)=VAL(K)
130 CONTINUE
140 CONTINUE
NMAX=5000
CALL INVERSE(C,ND,NMAX)
DO 150 I=1,ND
V(I)=0.0
DO 150 J=1,ND
V(I)=V(I)+C(I,J)*B(J)
150 CONTINUE
WRITE(6,160) ND,NE,NP
160 FORMAT(2X,'NO. OF NODES = ',I3,2X, 'NO. OF ELEMENTS = ' , I3,2X, 'NO.
OF FIXED NODES = ',I3,/)
WRITE(6,170)
170 FORMAT(2X,'NODE',5X,'X Y',7X,'POTENTIAL',/)
WRITE(6,180) (I,X(I), Y(I),V(I), I=1,ND)
180 FORMAT(2X,I3,2X,F6.2,2X,F6.2,2X,F100.50/)

STOP
END

SUBROUTINE INVERSE(SX,N,IDM)
DIMENSION SX(IDM,IDM)
ESP=1.0E-5
DO 50 K=1,N
DO 30 J=1,N
IF(J.EQ.K) GO TO 30
IF(ABS(SX(K,K))) 20,10,20
10 SX(K,K)=ESP
20 SX(K,J)=SX(K,J)/SX(K,K)
30 CONTINUE
SX(K,K)=1.0/SX(K,K)
DO 40 I=1,N
             IF(I.EQ.K) GO TO 40
             DO 41 J=1,N
                IF(J.EQ.K) GO TO 41
                SX(I,J)=SX(I,J)-SX(K,J)*SX(I,K)
  41 CONTINUE
 40 CONTINUE
DO 50 I=1,N
IF(I.EQ.K) GO TO 50
SX(I,K)=-SX(I,K)*SX(K,K)
50 CONTINUE
RETURN
END


Quantcast