fortran 编译错误 求帮助
发表于 : 2011-10-06 11:16
fortran文件如下:
PROGRAM GSTA
C Grain Size Trend Analysis, on the basis of the combined trend
C of the following types of trends:
C Type 1: Better sorted, coarser and more positively skewed
C Type 2: Better sorted, finer and more negatively skewed
C Table of Variables
C N: Total number of sampling stations
C (X,Y): Position of the sampling stations
C SM: Sample number
C MD: Mean grain size.
C SRT: Sorting coefficient.
C SK: Skewness.
C DC: Characteristic distance
C A: Scaling factor for X data
C VL: Length of the residual vector
C BITA: Direction of the residual vector, in relation to the "north"
C of the sampling grid
CHARACTER *30 FIN,FOUT
REAL X(10000), Y(10000), MD(10000), SRT(10000), SK(10000)
REAL SNP(10000), SEP(10000), VL(10000), BITA(10000)
REAL SNPP(10000), SEPP(10000)
REAL DC, DXY, NP, EP, ALPHA, A
INTEGER SM(10000), K(10000), L(10000), M(10000), N
C INPUT OF RAW DATA
WRITE(*,*) ' NAME OF INPUT FILE : '
READ(*,1) FIN
WRITE(*,*) ' NAME OF OUTPUT FILE : '
READ(*,1) FOUT
1 FORMAT(A)
OPEN(8,FILE=FIN,STATUS='OLD')
READ(8,*) N, A, DC
DO 2 I=1,N
READ(8,*) SM(I),X(I),Y(I),MD(I),SRT(I),SK(I)
2 CONTINUE
PRINT*, 'OK'
CLOSE(8)
DO 3 I=1,N
SNP(I)=0.0
SEP(I)=0.0
X(I)=A*X(I)
3 CONTINUE
C DEFINITION OF TREND VECTORS
DO 4 I=1,N-1
DO 5 J=I+1,N
DXY=SQRT((X(I)-X(J))*(X(I)-X(J))+(Y(I)-Y(J))*(Y(I)-Y(J)))
IF(DXY.GT.DC) GO TO 5
IF(MD(I).GE.MD(J).AND.SRT(I).GE.SRT(J).AND.SK(I).LE.SK(J)) THEN
CALL VECTOR(X(I),X(J),Y(I),Y(J),A,NP,EP)
SNP(I)=SNP(I)+NP
SEP(I)=SEP(I)+EP
END IF
IF(MD(I).LE.MD(J).AND.SRT(I).LE.SRT(J).AND.SK(I).GE.SK(J)) THEN
CALL VECTOR(X(J),X(I),Y(J),Y(I),A,NP,EP)
SNP(J)=SNP(J)+NP
SEP(J)=SEP(J)+EP
END IF
IF(MD(I).LE.MD(J).AND.SRT(I).GE.SRT(J).AND.SK(I).GE.SK(J)) THEN
CALL VECTOR(X(I),X(J),Y(I),Y(J),A,NP,EP)
SNP(I)=SNP(I)+NP
SEP(I)=SEP(I)+EP
END IF
IF(MD(I).GE.MD(J).AND.SRT(I).LE.SRT(J).AND.SK(I).LE.SK(J)) THEN
CALL VECTOR(X(J),X(I),Y(J),Y(I),A,NP,EP)
SNP(J)=SNP(J)+NP
SEP(J)=SEP(J)+EP
END IF
5 CONTINUE
4 CONTINUE
C DEFINITION THE RESIDUAL PATTERN
DO 6 I=1,N
L(I)=0
SNPP(I)=0.0
SEPP(I)=0.0
DO 7 J=1,N
DXY=SQRT((X(I)-X(J))*(X(I)-X(J))+(Y(I)-Y(J))*(Y(I)-Y(J)))
IF(DXY.EQ.0.0) GO TO 7
IF(DXY.GT.DC) GO TO 7
SNPP(I)=SNPP(I)+SNP(J)
SEPP(I)=SEPP(I)+SEP(J)
L(I)=L(I)+1
7 CONTINUE
6 CONTINUE
DO 8 I=1,N
SNPP(I)=SNPP(I)/FLOAT(L(I)+1)
SEPP(I)=SEPP(I)/FLOAT(L(I)+1)
VL(I)=SQRT(SNPP(I)*SNPP(I)+SEPP(I)*SEPP(I))
IF(SEPP(I).EQ.0.0.AND.SNPP(I).EQ.0.0) THEN
BITA(I)=0.0
GO TO 8
END IF
BITA(I)=ATAN2(SEPP(I),SNPP(I))*180.0/3.1416
IF(BITA(I).LT.0.0) THEN
BITA(I)=BITA(I)+360.00
END IF
8 CONTINUE
DO 9 I=1,N
X(I)=X(I)/A
9 CONTINUE
C OUTPUT OF RESULTS
OPEN(10,FILE=FOUT,STATUS='UNKNOWN')
WRITE(10,10)
10 FORMAT(12H INPUT DATA)
WRITE(10,11) (SM(I),X(I),Y(I),MD(I),SRT(I),SK(I),I=1,N)
11 FORMAT(I5,2F10.1,3F10.2)
WRITE(10,12)
12 FORMAT(12H OUTPUT DATA)
WRITE(10,13)
13 FORMAT('TRENDS OF TYPES 1 AND 2')
WRITE(10,14) DC
14 FORMAT(1X,'DC =',F8.1)
WRITE(10,15)
15 FORMAT('NUMBER POSITION LENGTH DIRECTION (N)')
WRITE(10,16) (SM(I),X(I),Y(I),VL(I),BITA(I),I=1,N)
16 FORMAT(I5,2F12.2,2F10.2)
CLOSE(10)
STOP
END
C TO DEFINE A VECTOR FROM STATION 2 TO STATION 1
SUBROUTINE VECTOR(XX2, XX1, YY2, YY1, A, NP, EP)
REAL ALPHA, XX2, XX1, YY2, YY1, A, NP, EP
IF(YY1.EQ.YY2) THEN
ALPHA=0.0
ELSE
ALPHA=ATAN2((XX1-XX2)/A, (YY1-YY2))
END IF
EP=SIN(ALPHA)
NP=COS(ALPHA)
RETURN
END
文件名如下:gsta.for
在终端输入命令及结果如下:
whgl@whgl-EP43T-UD3L:~/文档/center_ka/stra_line/2700$ gfortran gsta.for -o gsta
gsta.for:1.6:
PROGRAM GSTA
1
Error: Bad continuation line at (1)
gsta.for:1.6:
PROGRAM GSTA
1
Error: Unclassifiable statement at (1)
gsta.for:130.1:
\x1A
1
Error: Non-numeric character in statement label at (1)
这是什么问题呢?
PROGRAM GSTA
C Grain Size Trend Analysis, on the basis of the combined trend
C of the following types of trends:
C Type 1: Better sorted, coarser and more positively skewed
C Type 2: Better sorted, finer and more negatively skewed
C Table of Variables
C N: Total number of sampling stations
C (X,Y): Position of the sampling stations
C SM: Sample number
C MD: Mean grain size.
C SRT: Sorting coefficient.
C SK: Skewness.
C DC: Characteristic distance
C A: Scaling factor for X data
C VL: Length of the residual vector
C BITA: Direction of the residual vector, in relation to the "north"
C of the sampling grid
CHARACTER *30 FIN,FOUT
REAL X(10000), Y(10000), MD(10000), SRT(10000), SK(10000)
REAL SNP(10000), SEP(10000), VL(10000), BITA(10000)
REAL SNPP(10000), SEPP(10000)
REAL DC, DXY, NP, EP, ALPHA, A
INTEGER SM(10000), K(10000), L(10000), M(10000), N
C INPUT OF RAW DATA
WRITE(*,*) ' NAME OF INPUT FILE : '
READ(*,1) FIN
WRITE(*,*) ' NAME OF OUTPUT FILE : '
READ(*,1) FOUT
1 FORMAT(A)
OPEN(8,FILE=FIN,STATUS='OLD')
READ(8,*) N, A, DC
DO 2 I=1,N
READ(8,*) SM(I),X(I),Y(I),MD(I),SRT(I),SK(I)
2 CONTINUE
PRINT*, 'OK'
CLOSE(8)
DO 3 I=1,N
SNP(I)=0.0
SEP(I)=0.0
X(I)=A*X(I)
3 CONTINUE
C DEFINITION OF TREND VECTORS
DO 4 I=1,N-1
DO 5 J=I+1,N
DXY=SQRT((X(I)-X(J))*(X(I)-X(J))+(Y(I)-Y(J))*(Y(I)-Y(J)))
IF(DXY.GT.DC) GO TO 5
IF(MD(I).GE.MD(J).AND.SRT(I).GE.SRT(J).AND.SK(I).LE.SK(J)) THEN
CALL VECTOR(X(I),X(J),Y(I),Y(J),A,NP,EP)
SNP(I)=SNP(I)+NP
SEP(I)=SEP(I)+EP
END IF
IF(MD(I).LE.MD(J).AND.SRT(I).LE.SRT(J).AND.SK(I).GE.SK(J)) THEN
CALL VECTOR(X(J),X(I),Y(J),Y(I),A,NP,EP)
SNP(J)=SNP(J)+NP
SEP(J)=SEP(J)+EP
END IF
IF(MD(I).LE.MD(J).AND.SRT(I).GE.SRT(J).AND.SK(I).GE.SK(J)) THEN
CALL VECTOR(X(I),X(J),Y(I),Y(J),A,NP,EP)
SNP(I)=SNP(I)+NP
SEP(I)=SEP(I)+EP
END IF
IF(MD(I).GE.MD(J).AND.SRT(I).LE.SRT(J).AND.SK(I).LE.SK(J)) THEN
CALL VECTOR(X(J),X(I),Y(J),Y(I),A,NP,EP)
SNP(J)=SNP(J)+NP
SEP(J)=SEP(J)+EP
END IF
5 CONTINUE
4 CONTINUE
C DEFINITION THE RESIDUAL PATTERN
DO 6 I=1,N
L(I)=0
SNPP(I)=0.0
SEPP(I)=0.0
DO 7 J=1,N
DXY=SQRT((X(I)-X(J))*(X(I)-X(J))+(Y(I)-Y(J))*(Y(I)-Y(J)))
IF(DXY.EQ.0.0) GO TO 7
IF(DXY.GT.DC) GO TO 7
SNPP(I)=SNPP(I)+SNP(J)
SEPP(I)=SEPP(I)+SEP(J)
L(I)=L(I)+1
7 CONTINUE
6 CONTINUE
DO 8 I=1,N
SNPP(I)=SNPP(I)/FLOAT(L(I)+1)
SEPP(I)=SEPP(I)/FLOAT(L(I)+1)
VL(I)=SQRT(SNPP(I)*SNPP(I)+SEPP(I)*SEPP(I))
IF(SEPP(I).EQ.0.0.AND.SNPP(I).EQ.0.0) THEN
BITA(I)=0.0
GO TO 8
END IF
BITA(I)=ATAN2(SEPP(I),SNPP(I))*180.0/3.1416
IF(BITA(I).LT.0.0) THEN
BITA(I)=BITA(I)+360.00
END IF
8 CONTINUE
DO 9 I=1,N
X(I)=X(I)/A
9 CONTINUE
C OUTPUT OF RESULTS
OPEN(10,FILE=FOUT,STATUS='UNKNOWN')
WRITE(10,10)
10 FORMAT(12H INPUT DATA)
WRITE(10,11) (SM(I),X(I),Y(I),MD(I),SRT(I),SK(I),I=1,N)
11 FORMAT(I5,2F10.1,3F10.2)
WRITE(10,12)
12 FORMAT(12H OUTPUT DATA)
WRITE(10,13)
13 FORMAT('TRENDS OF TYPES 1 AND 2')
WRITE(10,14) DC
14 FORMAT(1X,'DC =',F8.1)
WRITE(10,15)
15 FORMAT('NUMBER POSITION LENGTH DIRECTION (N)')
WRITE(10,16) (SM(I),X(I),Y(I),VL(I),BITA(I),I=1,N)
16 FORMAT(I5,2F12.2,2F10.2)
CLOSE(10)
STOP
END
C TO DEFINE A VECTOR FROM STATION 2 TO STATION 1
SUBROUTINE VECTOR(XX2, XX1, YY2, YY1, A, NP, EP)
REAL ALPHA, XX2, XX1, YY2, YY1, A, NP, EP
IF(YY1.EQ.YY2) THEN
ALPHA=0.0
ELSE
ALPHA=ATAN2((XX1-XX2)/A, (YY1-YY2))
END IF
EP=SIN(ALPHA)
NP=COS(ALPHA)
RETURN
END
文件名如下:gsta.for
在终端输入命令及结果如下:
whgl@whgl-EP43T-UD3L:~/文档/center_ka/stra_line/2700$ gfortran gsta.for -o gsta
gsta.for:1.6:
PROGRAM GSTA
1
Error: Bad continuation line at (1)
gsta.for:1.6:
PROGRAM GSTA
1
Error: Unclassifiable statement at (1)
gsta.for:130.1:
\x1A
1
Error: Non-numeric character in statement label at (1)
这是什么问题呢?