2016-07-04 3 views
1

gfortran 컴파일러에서 f77로 작성된 코드에 대해 다음 오류가 발생합니다. 비 호환성 문제를 극복하기 위해 -std = legacy를 사용하고 있습니다. 그러나 gfortran은 여전히 ​​다음 오류를 생성합니다. 나는 여러 가지 일을 시도했지만 그걸 없애지는 못했다. 확실한 도움을 주시면 감사하겠습니다. 다음은 오류 메시지이며 다음은 오류를 생성하는 코드입니다. 감사!gfortran 오류 : (1)에서 함수 정의의 예상 인수 인수 목록

gfortran -ff2c -std = 기존 -Ofast -C -o 빈/ref_syn erzsol3.f qbessel.f qfcoolr.f qbessel.f : 136.29 :

COMPLEX FUNCTION BESHS0*16(X, IFAIL)        
         1 

오류 : 예상 형식 인수 목록에서 (1)

 DOUBLE PRECISION FUNCTION BESFJ0(X) 
C  BESSEL FUNCTION J0(X) 
C 
     DOUBLE PRECISION X 
     DOUBLE PRECISION SRNAME 
     DOUBLE PRECISION A, B, C, CX, G, SX, T2, T, TBPI, XBIG, XVSMAL, Y 
     DOUBLE PRECISION DCOS, DSIN, DSQRT 
C  .. 
     DATA SRNAME /8H BESFJ0/
     DATA XBIG,XVSMAL,TBPI/3.4D+15,3.2D-9,6.36619772367581343D-1/ 
C 
     T = DABS(X) 
C  ERROR 1 TEST 
     IF (T.GT.XBIG) GO TO 60 
C  X RANGE TEST 
     IF (T.GT.8.0D0) GO TO 40 
C  SMALL X 
C  TEST FOR VERY SMALL X 
     IF (T.GT.XVSMAL) GO TO 20 
     BESFJ0 = 1.0D0 
     GO TO 80 
    20 T = 3.125D-2*T*T - 1.0D0 
     T2 = 2.0D0*T 
C 
C 
     A= +4.00000D-14 
     B=T2*A -1.943834690000D-12 
     C=T2*B-A +7.848696314000D-11 
     A=T2*C-B -2.679253530560D-9 
     B=T2*A-C +7.608163592419D-8 
     C=T2*B-A -1.761946907762D-6 
     A=T2*C-B +3.246032882101D-5 
     B=T2*A-C -4.606261662063D-4 
     C=T2*B-A +4.819180069468D-3 
     A=T2*C-B -3.489376941141D-2 
     B=T2*A-C +1.580671023321D-1 
     C=T2*B-A -3.700949938726D-1 
     A=T2*C-B +2.651786132033D-1 
     B=T2*A-C -8.723442352852D-3 
     Y=T*B-A +1.577279714749D-1 
C 
     BESFJ0 = Y 
     GO TO 80 
C 
C  LARGE X 
    40 G = T - 0.5D0/TBPI 
     Y = DSQRT(TBPI/T) 
     CX = DCOS(G)*Y 
     SX = -DSIN(G)*Y*8.0D0/T 
     T = 128.0D0/(T*T) - 1.0D0 
C 
C 
     Y= +9.99457276D-1+T*( -5.36366929D-4+T*( +6.13732440D-6+ 
    AT*( -2.06823782D-7+T*( +1.30451717D-8)))) 
C 
     G= -1.55551139D-2+T*( +6.83314931D-5+T*( -1.47708215D-6+ 
    AT*( +7.10458046D-8+T*( -5.81753275D-9+T*(+6.75219505D-10))))) 
C 
C 
     BESFJ0 = Y*CX + G*SX 
     GO TO 80 
C 
    60 WRITE(6,61) SRNAME 
    61 FORMAT(1X,//,'ERROR IN ',A8) 
     BESFJ0 = DSQRT(TBPI/T) 
C 
    80 RETURN 
     END 
     DOUBLE PRECISION FUNCTION BESFJ1(X) 
C  BESSEL FUNCTION J1(X) 
C 
     DOUBLE PRECISION X 
     DOUBLE PRECISION SRNAME 
     DOUBLE PRECISION A, B, C, CX, G, SX, T2, T, TBPI, XBIG, XVSMAL, Y 
     DOUBLE PRECISION DCOS, DSIN, DSQRT 
     DATA SRNAME /8H BESFJ1/
     DATA XVSMAL,XBIG,TBPI/3.2D-9,3.4D+15,6.36619772367581343D-1/ 
C 
     T = DABS(X) 
C  ERROR 1 TEST 
     IF (T.GT.XBIG) GO TO 60 
C  X RANGE TEST 
     IF (T.GT.8.0D0) GO TO 40 
C  SMALL X 
     Y = 4.0D0 
C  TEST FOR VERY SMALL X 
     IF (T.LE.XVSMAL) GO TO 20 
     T = 3.125D-2*T*T - 1.0D0 
     T2 = 2.0D0*T 
C 
     A= -5.777404200000D-13 
     B=T2*A +2.528123664000D-11 
     C=T2*B-A -9.424212981600D-10 
     A=T2*C-B +2.949707007278D-8 
     B=T2*A-C -7.617587805400D-7 
     C=T2*B-A +1.588701923993D-5 
     A=T2*C-B -2.604443893486D-4 
     B=T2*A-C +3.240270182684D-3 
     C=T2*B-A -2.917552480615D-2 
     A=T2*C-B +1.777091172397D-1 
     B=T2*A-C -6.614439341345D-1 
     C=T2*B-A +1.287994098858D+0 
     A=T2*C-B -1.191801160541D+0 
     Y=T*A-C +6.483587706053D-1 
C 
C 
    20 BESFJ1 = Y*X*0.125D0 
     GO TO 80 
C 
C  LARGE X 
    40 G = T - 1.5D0/TBPI 
     Y = DSIGN(DSQRT(TBPI/T),X) 
     CX = DCOS(G)*Y 
     SX = -DSIN(G)*Y*8.0D0/T 
     T = 128.0D0/(T*T) - 1.0D0 
C 
C 
     Y= +1.00090703D+0+T*( +8.98804504D-4+T*( -7.95959347D-6+ 
    AT*( +2.47105358D-7+T*( -1.49751260D-8)))) 
C 
C 
C 
     G= +4.67768740D-2+T*( -9.62145905D-5+T*( +1.82113970D-6+ 
    AT*( -8.29018528D-8+T*( +6.58335466D-9+T*(-7.49818190D-10))))) 
C 
C 
     BESFJ1 = Y*CX + G*SX 
     GO TO 80 
C  ERROR 1 EXIT 
    60 WRITE(6,61) SRNAME 
    61 FORMAT(1X,//,'ERROR IN ',A8) 
     BESFJ1 = DSQRT(TBPI/T) 
C 
    80 RETURN 
     END 
     COMPLEX FUNCTION BESHS0*16(X, IFAIL) 
C  COMPLEX*16 BESHS0 
C----------------------------------------------------------------------- 
C  BESSEL FUNCTION HS0(X) 
C 
C       COMPUTED USING CHEBYSHEV REPRESENTATION 
C 
C----------------------------------------------------------------------- 
C 
     DOUBLE PRECISION X 
     INTEGER IFAIL 
     DOUBLE PRECISION SRNAME 
     DOUBLE PRECISION A, B, C, CX, G, SX, T2, T, TBPI, XBIG, XVSMAL, Y 
     DOUBLE PRECISION DCOS, DSIN, DSQRT, P, Q, Z 
     DATA SRNAME /8H BESHS0/
     DATA XBIG,XVSMAL,TBPI/3.4D+15,3.2D-9,6.36619772367581343D-1/ 
C 
     T = DABS(X) 
C  ERROR 1 TEST 
     IF (T.GT.XBIG) GO TO 60 
     IFAIL = 0 
C  X RANGE TEST 
     IF (T.GT.8.0D0) GO TO 40 
C  SMALL X 
C  TEST FOR VERY SMALL X 
     IF (T.GT.XVSMAL) GO TO 20 
     BESFJ0 = 1.0D0 
     GO TO 80 
    20 T = 3.125D-2*T*T - 1.0D0 
     T2 = 2.0D0*T 
C 
C 
     A= +4.00000D-14 
     B=T2*A -1.943834690000D-12 
     C=T2*B-A +7.848696314000D-11 
     A=T2*C-B -2.679253530560D-9 
     B=T2*A-C +7.608163592419D-8 
     C=T2*B-A -1.761946907762D-6 
     A=T2*C-B +3.246032882101D-5 
     B=T2*A-C -4.606261662063D-4 
     C=T2*B-A +4.819180069468D-3 
     A=T2*C-B -3.489376941141D-2 
     B=T2*A-C +1.580671023321D-1 
     C=T2*B-A -3.700949938726D-1 
     A=T2*C-B +2.651786132033D-1 
     B=T2*A-C -8.723442352852D-3 
     Y=T*B-A +1.577279714749D-1 
C 
     BESHS0 = DCMPLX(Y,0.0D0) 
     GO TO 80 
C 
C  LARGE X 
    40 G = T - 0.5D0/TBPI 
     Y = DSQRT(TBPI/T) 
     CX = DCOS(G)*Y 
     SX = DSIN(G)*Y 
     Z = 128.0D0/(T*T) - 1.0D0 
C 
C 
     P= +9.99457276D-1+Z*( -5.36366929D-4+Z*( +6.13732440D-6+ 
    AZ*( -2.06823782D-7+Z*( +1.30451717D-8)))) 
C 
C 
     Q= -1.55551139D-2+Z*( +6.83314931D-5+Z*( -1.47708215D-6+ 
    AZ*( +7.10458046D-8+Z*( -5.81753275D-9+Z*(+6.75219505D-10))))) 
C 
     Q = Q*8.0D0/T 
C 
     BESHS0 = DCMPLX(P,Q)*DCMPLX(CX,SX) 
     GO TO 80 
C 
C  ERROR 1 EXIT 
    60 WRITE(6,61) SRNAME 
    61 FORMAT(1X,//,'ERROR IN ',A8) 
     BESHS0 = DCMPLX(TBPI/T,0.0D0) 
C 
    80 RETURN 
     END 
+0

모든 포트란 질문에 대해 [tag : fortran] 태그를 사용하십시오. –

답변

2

내 코드의 함수 정의 따라서하지 포트란 77

정확한 구문 대부분 정확하다

포트란 아니다
COMPLEX*16 FUNCTION BESHS0(X, IFAIL) 

표준 포트란 77이 아니지만 대부분의 컴파일러에서 허용해야합니다.

BTW, Bessel 함수는 Fortran 2008에 포함되어 있습니다 (이 특정 버전인지 확실하지 않음).

+0

블라디미르, 지정된 bin 폴더에서 실행 파일을 만들 권한이 없다는 것을 깨닫지 못하고 질문을 게시하기 전에 시도했습니다. 사실 그것은 문제 였고 현재 수정되었습니다. 고마워요! – januka