2013-06-04 2 views
0

J'ai copié un programme FORTRAN 66/IV à partir d'un rapport de 1988, et j'essaye de le compiler avec gfortran (mingw for windows). J'ai réduit une longue liste d'erreurs à 3 (plus 2 avertissements), et je ne peux pas aller plus loin malgré tous mes efforts. Je serais reconnaissant pour toute aide et conseil.Erreurs de compilation avec gfortran

Les erreurs:

green.f:298.16: 
RDE=(EXPR(J)/REYLOC(J)-EXPR(J-1)/REYLOC(J-1))/ZDIFF 
     1 
Error: PROCEDURE attribute conflicts with COMMON attribute in 'expr' at (1) 
green.f:412.7: 
1,5X,F10.4) 
    1 
Error: Nonnegative width required in format string at (1) 
green.f:390.19: 
WRITE(OUT,11)(Z(J),CUR(J),CP(J),PH(J),RMSQ(J),U(J),Q(J),J=1,P) 
      1 
Error: FORMAT label 11 at (1) not defined 
green.f:249.61: 
CALL OPTION(MSQLOC,RAD,LOCR,RDASH,X,Y,FEQ,HALFCO,H,H1,IMBAL, 
                1 
Warning: Type mismatch in argument 'imbalcrxn' at (1); passed REAL(4) to INTEGER(4) 
green.f:122.72: 
1OUT) 
                     1 
Warning: Missing actual argument for argument 'out' at (1) 

Voici le code source:

00000001  PROGRAM GREEN 
00000002  REAL TRAD(100),CUR(100),V(100),EXPR(100),Z(100),MSQ(100),U(100) 
00000003 1,XX(100),REYLOC(100),Y(3),YDASH(3),AA(21),NU,INCR,LSCALE,LAT, 
00000004 2IMB,LIMIT,MINF,MINFSQ,Z1(100),LOCR,MSQLOC,Q(100),PH(100), 
00000005 3CP(100),RI(100),RSTAR(100),RK(100),FACT,TW(100),DR(100),DRAG, 
00000006 4XEXP(20),DEXP(20),THEXP(20),HEXP(20),FCEXP(20),DSTP(100), 
00000007 5THPLT(100),HPLT(100),CFPLT(100) 
00000008  INTEGER AXIS,COND,CURV,FSTART,STRET,DIL,P,HQ,TQ,DEV,SURF,OUT 
00000009 1,P1,NSTA 
00000010  CHARACTER*8 LABEL 
00000011  COMMON/CB1/AXIS,CURV,COND,FSTART,STRET,DIL,P,DEV,JTE,RATIO 
00000012  COMMON/CB2/REC,TRAD,UDASH,Z,J,U,RK 
00000013  COMMON/CB3/CUR,EXPR,REYLOC 
00000014  COMMON/CB4/MINFSQ,TINF,RC 
00000015  COMMON/CB5/RTHETA,THETA,FEQ,HALFC,CRXN,H,H1,RICH,FACT 
00000016  COMMON/CB6/MINF,TSTAG,M,TQ,HQ,IRPT,IDENT,KK,HDASH 
00000017  COMMON/CB7/NSTA,XEXP,DEXP,THEXP,HEXP,CFEXP,P1,LABEL 
00000018  CALL DIG 
00000019  CALL SIMBEG 
00000020  DEV=15 
00000021  OUT=16 
00000022  IRPT=1 
00000023 35 CALL INPUT(TRAD,CUR,EXPR,V,Z,Z1,XX,Y1,Y2,RC,REC,SURF,LS,RK) 
00000024  
00000025  
00000026  P1=P 
00000027  Y(1)=Y1 
00000028  Y(2)=Y2 
00000029  WRITE(OUT,20)IDENT,MINF,RC 
00000030  CALL EVALFP(PINF,HQINF,REC,Q,V,MSQ,U,P,REYLOC,PH,CP,RK) 
00000031   
00000032   
00000033  IF(IRPT.GT.2)GOTO 21 
00000034  CALL INDATA(Z,Z1,XX,CUR,PH,CP,MSQ,U,Q,SURF,AXIS,P,CURV,OUT,RK) 
00000035   
00000036   
00000037 21 IF(HQ.NE.0)GOTO 14 
00000038  H=(Y(1)+1)*(1+0.2*REC*MSQ(LS))-1 
00000039  GOTO 15 
00000040 14 H=Y(1) 
00000041  Y(1)=(Y(1)+1)/(1+0.2*REC*MSQ(LS))-1 
00000042 15 IF(TQ.NE.1) GOTO 16 
00000043  Y(2)=Y(2)*TRAD(LS) 
00000044  RTHETA=Y(2)*REYLOC(LS)/TRAD(LS) 
00000045  GOTO 17 
00000046 16 RTHETA=Y(2) 
00000047  Y(2)=TRAD(LS)*Y(2)/REYLOC(LS) 
00000048 17 J=LS+1 
00000049  X=Z(LS) 
00000050  CALL FUNC(5,YDASH,X,Y,LS) 
00000051  
00000052  
00000053  RI(LS)=RICH 
00000054  RSTAR(LS)=Y(2) 
00000055  SLOPE=UDASH/U(LS) 
00000056  DH1DHB=-1.72/(Y(1)-1)**2.0-0.2*(Y(1)-1) 
00000057  IF(FSTART.EQ.0)GOTO 9 
00000058  Y(3)=Y(2)*DH1DHB*HDASH/TRAD(LS)+H1*(HALFC-(H+1)*Y(2)*SLOP 
00000059 1E/TRAD(LS)) 
00000060  Y(3)=Y(3)-CRXN/TRAD(LS) 
00000061 9 CF=2*HALFC 
00000062  TW(LS)=HALFC*1.2*REYLOC(LS)*REYLOC(LS)*1.51E-5*1.51E-5 
00000063  RW3=THETA*H 
00000064  G=SQRT(1/HALFC)*(1-1/Y(1)) 
00000065  PI=-H*THETA*UDASH/(U(LS)*HALFC) 
00000066  CFS=CF*Q(LS) 
00000067  IF(COND.EQ.0.AND.CURV.EQ.0.AND.STRET.EQ.0.AND.DIL.EQ.0)GOTO4 
00000068  WRITE(OUT,5) 
00000069  IF(COND.GT.0)WRITE(OUT,6) 
00000070  IF(CURV.GT.0)WRITE(OUT,8) 
00000071  IF(DIL.GT.0)WRITE(OUT,18) 
00000072  IF(STRET.GT.0.AND.(AXIS.EQ.1.OR.COND.GT.0))WRITE(OUT,12) 
00000073 4 IF(FSTART.GT.0)WRITE(OUT,11)HDASH 
00000074  WRITE(OUT,2) 
00000075  WRITE(OUT,3)Z1(LS),Y(1),CF,RTHETA,THETA,RW3,H,CFR,G,PI,Y(3),FEQ 
00000076  
00000077  
00000078  DSTP(LS)=RW3 
00000079  THPLT(LS)=THETA 
00000080  HPLT(LS)=H 
00000081  CFPLT(LS)=CF 
00000082  
00000083  DEL=Z(LS+1)-Z(LS) 
00000084  CALL STEP(YDASH,Y,DEL) 
00000085  
00000086  
00000087  LL=LS+1 
00000088  DRAG=0.0 
00000089  DO 10 J=LL,P 
00000090  
00000091  
00000092  SW1=Z(J)-Z(J-1) 
00000093  LIMIT=Z(J) 
00000094  IF(SQ1.LT.DEL)DEL=SW1 
00000095 13 CALL VINT(3,DEL,X,Y,LIMIT,0.5E-5,1000,YDASH,AA,21,OUT,J) 
00000096  
00000097  
00000098  IF(Y(3).LE.-0.009)Y(3)=-0.009 
00000099  X=Z(J) 
00000100  CALL FUNC(0,YDASH,X,Y,J) 
00000101  CF=2.0*HALFC 
00000102  TW(J)=HALFC*1.2*REYLOC(J)*REYLOC(J)*1.51E-5*1.51E-5 
00000103  RSTAR(J)=Y(2) 
00000104  RI(J)=RICH 
00000105  RW3=THETA*H 
00000106  CFR=CF*Q(J) 
00000107  G=SQRT(1.0/HALFC)*(1.0-1/Y(1)) 
00000108  PI=-H*THETA*UDASH/(U(J)*HALFC) 
00000109  DR(J)=((TW(J)+TW(J-1))/2)*(Z1(J)-Z1(J-1))*0.0325 
00000110  DRAG=DRAG+DR(J) 
00000111  WRITE(OUT,3)Z1(J),Y(1),CF,RTHETA,THETA,RW3,H,CFR,G,PI,Y(3),FEQ 
00000112  
00000113  
00000114  DSTP(J)=RW3 
00000115  THPLT(J)=THETA 
00000116  HPLT(J)=H 
00000117  CFPLT(J)=CF 
00000118  
00000119 10 CONTINUE 
00000120  WRITE(OUT,40)DRAG 
00000121  IF(AXIS.EQ.1.OR.CURV.GT.0) CALL CUORAX(AXIS,CURV,P,RSTAR,RI,Z1,LS, 
00000122 1OUT) 
0000
00000124  
00000125  CALL ENDPLT 
00000126  
00000127  READ(DEV,*)IRPT 
00000128  IF(IRPT.GT.5)STOP 
00000129  GOTO 35 
00000130 2 FORMAT(3(/),1H ,5X,1HX,7X,2HHT,5X,5HCFLOC,4X,6HRTHETA,6X,5HTHETA 
00000131 1,5X,7HDELSTAR,5X,1HH,6X,5HCFREF,8X,1HG,9X,2HPI,8X,1HF,7X,3HFEQ) 
00000132 3 FORMAT(1H ,1PE10.3,1X,0PF6.3,1X,F8.5,1X,3(1PE10.3,1X),0PF7.3,1X, 
00000133 1F8.5,1X,2(1PE10.3,1X),0PF8.5,1X,F8.5) 
00000134 40 FORMAT(1H,20X,26HTOTAL SKIN FRICTION DRAG= ,F12.6) 
00000135 5 FORMAT(1H0,20HALLOWANCES MADE FOR:) 
00000136 6 FORMAT(1H ,20X,26HCONVERGENCE AND DIVERGENCE) 
00000137 18 FORMAT(1H ,20X,10HDILATATION) 
00000138 8 FORMAT(1H ,20X,22HLONGITUDINAL CURVATURE) 
00000139 11 FORMAT(1H0,23HINITIAL VALUE OF DH/DX=,F9.4) 
00000140 12 FORMAT(1H ,20X,18HLATERAL STRETCHING) 
00000141 20 FORMAT(1H1,3X,73HLAG ENTRAINMENT B.L CALCULATION FOR TWO DIMENSION 
00000142 1AL AND AXISYMMETRIC FLOW,5(/),1H,10HIDENT. NO.,1X,I5,5X,6HMINF= , 
00000143 2E11.4,5X,4HRC= ,E11.4) 
00000144  STOP 
00000145  END 
00000146  
00000147  SUBROUTINE INPUT(TRAD,CUR,EXPR,V,Z,Z1,XX,Y1,Y2,RC,REC,SURF,LS,RK) 
00000148  REAL TRAD(100),CUR(100),V(100),EXPR(100),Z(100),Z1(100),XX(100), 
00000149 1MINF,RK(100),XEXP(20),DEXP(20),THEXP(20),HEXP(20),CFEXP(20) 
00000150  INTEGER AXIS,COND,CURV,STRET,FSTART,DIL,P,SURF,DEV,TQ,HQ,NSTA,P1 
00000151  CHARACTER*8 LABEL 
00000152  COMMON/CB1/AXIS,CURV,COND,FSTART,STRET,DIL,P,DEV,JTE,RATIO 
00000153  COMMON/CB6/MINF,TSTAG,M,TQ,HQ,IRPT,IDENT,KK,HDASH 
00000154  COMMON/CB7/NSTA,XEXP,DEXP,THEXP,HEXP,CFEXP,P1,LABEL 
00000155  GOTO(20,5,6,8,9),IRPT 
00000156 20 READ(DEV,*)P,AXIS,SURF 
00000157  READ(DEV,*)JTE 
00000158  DO 10 J=1,P 
00000159  TRAD(J)=1.0 
00000160 10 CONTINUE 
00000161  IF(SURF.EQ.0.AND.AXIS.EQ.0)GOTO 3 
00000162  READ(DEV,*)(Z1(J),XX(J),J=1,P) 
00000163  IF(AXIS.EQ.0) GOTO 4 
00000164  DO 11 J=1,P 
00000165  TRAD(J)=XX(J) 
00000166 11 CONTINUE 
00000167 4 IF(SURF.EQ.0)GOTO 1 
00000168  Z(1)=0.0 
00000169  DO 13 J=2,P 
00000170  DELZ=Z1(J)-Z1(J-1) 
00000171  DELX=XX(J)-XX(J-1) 
00000172  Z(J)=SQRT(DELZ*DELZ*DELX*DELX)+Z(J-1) 
00000173 13 CONTINUE 
00000174  GOTO 5 
00000175 3 READ(DEV,*)(Z1(J),J=1,P) 
00000176 1 DO 14 J=1,P 
00000177  Z(J)=Z1(J) 
00000178 14 CONTINUE 
00000179 5 READ(DEV,*)M 
00000180  READ(DEV,*)(V(J),J=1,P) 
00000181  READ(DEV,*)(RK(J),J=1,P) 
00000182 6 READ(DEV,*)COND,CURV,STRET,FSTART,DIL 
00000183  IF(COND.NE.1) GOTO7 
00000184  READ(DEV,*)(EXPR(J),J=1,P) 
00000185 7 IF(CURV.NE.1) GOTO 8 
00000186  READ(DEV,*)(CUR(J),J=1,P) 
00000187 8 READ(DEV,*)Y2,Y1,RC,MINF,TSTAG,REC 
00000188  READ(DEV,*),TQ,HQ,LS 
00000189 9 IF(FSTART.EQ.1) READ(DEV,*)HDASH 
00000190  READ(DEV,*)IDENT 
00000191  
00000192  
00000193  READ(DEV,*)LABEL 
00000194  READ(DEV,*)NSTA 
00000195  READ(DEV,*)(XEXP(I),I=1,NSTA) 
00000196  READ(DEV,*)(DEXP(I),I=1,NSTA) 
00000197  READ(DEV,*)(THEXP(I),I=1,NSTA) 
00000198  READ(DEV,*)(HEXP(I),I=1,NSTA) 
00000199  READ(DEV,*)(CFEXP(I),I=1,NSTA) 
00000200  RETURN 
00000201  END 
00000202  
00000203  SUBROUTINE FUNC(N,YDASH,X,Y,LL) 
00000204  REAL TRAD(100),CUR(100),Z(100),U(100),MSQLOC,LOCR,Y(3),YDASH(3), 
00000205 1LAMDA,IMBAL,LAT,LSQ,NEWK,RK(100),FACT 
00000206  INTEGER AX,CU,CO,FS,ST,DIL,P,DEV,LL 
00000207  COMMON/CB1/AX,CU,CO,FS,ST,DIL,P,DEV,JTE,RATIO 
00000208  COMMON/CB2/REC,TRAD,UDASH,Z,J,U,RK 
00000209  COMMON/CB5/RTHETA,THETA,FEQ,HALFC,CRXN,H,H1,RICH,FACT 
00000210  CRXN=0.0 
00000211  LAMDA=1 
00000212  IMBAL=0.0 
00000213  RAD=1.0 
00000214  SW1=Z(J)-Z(J-1) 
00000215  IF(AX.GT.0)RAD=(TRAD(J-1)+(X-Z(J-1))*(TRAD(J)-TRAD(J-1))/SW1) 
00000216  UDASH=(U(J)-U(J-1))/SW1 
00000217  ULOC=U(J-1)+UDASH*(X-Z(J-1)) 
00000218  CALL VELMR(MSQLOC,TLOC,LOCR,ULOC) 
00000219  
00000220  
00000221  IF(Y(1).GT.2.65)Y(1)=2.65 
00000222  H=(1+Y(1))*(1+0.2*REC*MSQLOC)-1.0 
00000223  THETA=Y(2)/RAD 
00000224  DELTA=0.0 
00000225 10 RTHETA=LOCR*THETA 
00000226  
00000227  
00000228  FACT=1+(2000-RTHETA)*0.00003734 
00000229  IF(FACT.LT.1.0)THEN 
00000230  FACT=1.0 
00000231  END IF 
00000232  HALFCO=FACT*(0.005065/(0.4342945*ALOG(RTHETA*(1+.056*MSQLOC) 
00000233 1)-1.02)-0.000375)/SQRT(1+0.2*MSQLOC) 
00000234  
00000235  IF(J.GT.JTE)HALFCO=0 
00000236  HBO=1/(1-6.55*SQRT(HALFCO*(1+0.04*MSQLOC))) 
00000237  HALFC=HALFCO*(0.9/(Y(1)/HBO-0.4)-0.5) 
00000238  CALL SFCR(HALFC,RK(LL),AAA) 
00000239  
00000240  
00000241  HALFC=HALFC*AAA 
00000242  IF(HALFC.LT.0.000001) HALFC=0.000001 
00000243  H1=3.15+1.72/(Y(1)-1)-0.01*(Y(1)-1)**2.0 
00000244  DH1DHB=-1.72/(Y(1)-1)**2.0-0.02*(Y(1)-1) 
00000245  Q=((Y(1)-1.0)/(6.432*Y(1)))**2.0/(1.0+0.04*MSQLOC) 
00000246  FEQ=H1*(HALFC-(H+1.0)*(HALFC-Q)/(0.8*H)) 
00000247  RDASH=RAD*HALFC-(H+2-MSQLOC)*Y(2)*UDASH/ULOC 
00000248  DU=THETA*(H1+H)*UDASH/ULOC 
00000249  CALL OPTION(MSQLOC,RAD,LOCR,RDASH,X,Y,FEQ,HALFCO,H,H1,IMBAL, 
00000250 1CRXN,RICH,LAMDA,DU) 
00000251  
00000252  
00000253  IF(FEQ.LT.0.0)FEQ=0.0 
00000254  IF(N.EQ.0)RETURN 
00000255  IF(N.EQ.5) Y(3)=FEQ 
00000256  DUEQ=(H1+H)*(HALFC-FEQ/H1)/(H+1) 
00000257  FMA=SQRT(1+0.1*MSQLOC) 
00000258  FMB=1+0.075*MSQLOC*(1+0.2*MSQLOC)/(1+0.1*MSQLOC) 
00000259  YDASH(1)=((RAD+DELTA)*Y(3)-RAD*(H1*HALFC)+H1*(H+1)*Y(2)*UDASH/ 
00000260 1ULOC+CRXN)/Y(2)/DH1DHB 
00000261  YDASH(2)=RDASH+IMBAL 
00000262  IF(Y(3).LE.-0.009)Y(3)=0.009 
00000263  YDASH(3)=(Y(3)*(Y(3)+0.02)+0.5333*HALFCO)/(Y(3)+0.01)*(2.8* 
00000264 1LAMDA*FMA*(SQRT(0.64*HALFCO+0.024*FEQ+1.2*FEQ*FEQ)-SQRT(0.64* 
00000265 2HALFCO+0.024*Y(3)+1.2*Y(3)*Y(3)))+DUEQ-DU*FMB)/(Y(2)*(H1+H)) 
00000266 3 RETURN 
00000267  END 
00000268  
00000269  SUBROUTINE VELMR(MSQLOC,TLOC,LOCR,ULOC) 
00000270  REAL MSQLOC,MINFSQ,LOCR 
00000271  COMMON/CB4/MINFSQ,TINF,RC 
00000272  MSQLOC=ULOC*ULOC*MINFSQ/(1+0.2*MINFSQ*(1-ULOC*ULOC)) 
00000273  TLOC=TINF*(1+0.2*MINFSQ)/(1+0.2*MSQLOC) 
00000274  LOCR=RC*ULOC*TLOC/TINF*(TLOC+114)/(TINF+114) 
00000275  RETURN 
00000276  END 
00000277  
00000278  SUBROUTINE OPTION(MSQLOC,RAD,LOCR,RDASH,X,Y,FEQ,HALFCO,H,H1,IMBAL, 
00000279 1 CRXN,RICH,LAMBDA,DU) 
00000280  REAL REYLOC(100),EXP(100),Z(100),Y(3),LOCR,CUR(100),IMBAL,LDASH, 
00000281 1LAT,LSCALE,U(100),TRAD(100),MSQLOC,LAMDA,LSQ,L1,L2,L3 
00000282  INTEGER AX,CU,CO,FS,ST,DIL,P,DEV,JTE,RATIO 
00000283  COMMON/CB1/AX,CU,CO,FS,ST,DIL,P,DEV,JTE,RATIO 
00000284  COMMON/CB3/CUR,EXPR,REYLOC 
00000285  COMMON/CB2/REC,TRAD,UDASH,Z,J,U,RK 
00000286  IMBAL=0.0000 
00000287  RSLOPE=0.0000 
00000288  RICH=0.0 
00000289  DPHIDZ=0.0 
00000290  CRXN=0.0000 
00000291  L1=1.0 
00000292  L2=1.0 
00000293  L3=1.0 
00000294  SW4=1+0.2*REC*MSQLOC 
00000295  ZDIFF=Z(J)-Z(J-1) 
00000296  IF(CO.EQ.0)GOTO 2 
00000297  LDASH=(REYLOC(J)-REYLOC(J-1))/ZDIFF 
00000298  RDE=(EXPR(J)/REYLOC(J)-EXPR(J-1)/REYLOC(J-1))/ZDIFF 
00000299  IMBAL=RDE-RDASH 
00000300  CRXN=-IMBAL*2*(H1*(Y(1)-1)-Y(1))/(2*Y(1)-1) 
00000301  IF(J.GT.JTE)GOTO 4 
00000302 2 IF(CU.EQ.0.AND.ST.EQ.0.AND.DIL.EQ.0)GOTO 5 
00000303  IF(CU.EQ.0)GOTO 3 
00000304  CURV=CUR(J-1)+(CUR(J)-CUR(J-1))*(X-Z(J-1))/ZDIFF 
00000305  RICH=0.6667*(1+0.2*MSQLOC)*(0.3+H1/Y(1))*Y(2)*(H1+H)*CURV/RAD 
00000306 3 IF(ST.EQ.0)GOTO 4 
00000307  DPHIDZ=-IMBAL/Y(2)/(2*Y(1)-1) 
00000308  RSLOPE=(TRAD(J)-TRAD(J-1))/(ZDIFF*RAD) 
00000309 4 ALPHA=4.5 
00000310  IF(CURV.GT.0.0)ALPHA=7.0 
00000311  L1=1+ALPHA*RICH 
00000312  IF(ST.EQ.1)L2=1-2.33*(H1/Y(1)+0.3)*(H+H1)*Y(2)/RAD*(DPHIDZ+RSLOPE 
00000313 1) 
00000314  IF(DIL.EQ.1)L3=1+2.33*MSQLOC*(1+H1/Y(1))*DU/RAD 
00000315  LAMDA=L1*L2*L3 
00000316  IF(J.GT.JTE)LAMDA=0.5 
00000317  IF(LAMDA.LT.0.499)LAMDA=0.499 
00000318  LSQ=LAMDA*LAMDA 
00000319  C=0.5333*HALFCO*(1-1/LSQ)-0.02*FEQ/LSQ-FEQ*FEQ/LSQ 
00000320  IF(C.GT.0.0000999)C=0.0000999 
00000321  FEQ=SQRT(0.0001-C)-0.01 
00000322 5 RETURN 
00000323  END 
00000324  
00000325  SUBROUTINE EVALFP(PINF,HQINF,REC,Q,V,MSQ,U,P,REYLOC,PH,CP,RK) 
00000326  REAL MINF,V(100),MINFSQ,U(100),MSQ(100),REYLOC(100),Q(100), 
00000327 1PH(100),CP(100),RK(100) 
00000328  INTEGER P,TQ,HQ 
00000329  COMMON/CB4/MINFSQ,TINF,RC 
00000330  COMMON/CB6/MINF,TSTAG,M,TQ,HQ,IRPT,IDENT,KK,HDASH 
00000331  MINFSQ=MINF*MINF 
00000332  TR=1.0+0.2*MINFSQ 
00000333  PINF=TR**(-3.5) 
00000334  HQINF=TR**3.5/(0.7*MINFSQ) 
00000335  TINF=TSTAG/TR 
00000336  GOTO(1,2,3,4,5),M 
00000337 1 DO 10 JJ=1,P 
00000338  MSQ(JJ)=MINFSQ*V(JJ)*V(JJ)/(1.0+0.2*MINFSQ*(1.0-V(JJ)*V(JJ))) 
00000339  CALL COMPTU(M,MSQ,U,V,TR,REYLOC,JJ,Q,CP,PH,PINF,HQINF) 
00000340 10 CONTINUE 
00000341  GOTO 5 
00000342 2 DO 11 JJ=1,P 
00000343  QQ=1.0+0.7*MINFSQ*V(JJ) 
00000344  MSQ(JJ)=5.0*(TR*QQ**(-0.2857143)-1.0) 
00000345  CALL COMPTU(M,MSQ,U,V,TR,REYLOC,JJ,Q,CP,PH,PINF,HQINF) 
00000346 11 CONTINUE 
00000347  GOTO 5 
00000348 3 DO 12 JJ=1,P 
00000349  MSQ(JJ)=5.0*(V(JJ)**(-0.2857143)-1.0) 
00000350  CALL COMPTU(M,MSQ,U,V,TR,REYLOC,JJ,Q,CP,PH,PINF,HQINF) 
00000351 12 CONTINUE 
00000352  GOTO 5 
00000353 4 DO 13 JJ=1,P 
00000354  MSQ(JJ)=V(JJ)*V(JJ) 
00000355  CALL COMPTU(M,MSQ,U,V,TR,REYLOC,JJ,Q,CP,PH,PINF,HQINF) 
00000356 13 CONTINUE 
00000357 5 RETURN 
00000358  END 
00000359  
00000360  SUBROUTINE COMPTU(M,MSQ,U,V,TR,REYLOC,JJ,Q,CP,PH,PINF,HQINF) 
00000361  COMMON/CB4/MINFSQ,TINF,RC 
00000362  REAL MSQ(100),MINFSQ,U(100),V(100),REYLOC(100),Q(100),PH(100), 
00000363 1CP(100) 
00000364  IF(M-1)3,1,3 
00000365 3 U(JJ)=SQRT(TR*MSQ(JJ)/(MINFSQ*(1.0+0.2*MSQ(11)))) 
00000366  GOTO 2 
00000367 1 U(JJ)=V(JJ) 
00000368 2 TLOC=TINF*(1+0.2*MINFSQ)/(1.0+0.2*MSQ(JJ)) 
00000369  REYLOC(JJ)=RC*U(JJ)*TLOC/TINF*(TLOC+114)/(TINF+114) 
00000370  Q(JJ)=U(JJ)*U(JJ)*(TLOC/TINF)**2.5 
00000371  PH(JJ)=(1+0.2*MSQ(JJ))**(-3.5) 
00000372  CP(JJ)=(PH(JJ)-PINF)*HQINF 
00000373  RETURN 
00000374  END 
00000375  
00000376  SUBROUTINE INDATA(Z,Z1,XX,CUR,PH,CP,MSQ,U,Q,SURF,AXIS,P,CURV, 
00000377 1OUT,RK) 
00000378  REAL Z(100),Z1(100),XX(100),CUR(100),PH(100),CP(100),RMSQ(100), 
00000379 1MSQ(100),U(100),Q(100),RK(100) 
00000380  INTEGER SURF,CURV,AXIS,P,OUT 
00000381  DO 15 J=1,P 
00000382  RMSQ(J)=SQRT(MSQ(J)) 
00000383 15 CONTINUE 
00000384  IF(SURF.GT.0.OR.AXIS.GT.0)GOTO 1 
00000385  IF(CURV.GT.0)GOTO 2 
00000386  WRITE(OUT,20) 
00000387  WRITE(OUT,10)(Z(J),CP(J),PH(J),RMSQ(J),U(J),Q(J),RK(J),J=1,P) 
00000388  RETURN 
00000389 2 WRITE(OUT,21) 
00000390  WRITE(OUT,11)(Z(J),CUR(J),CP(J),PH(J),RMSQ(J),U(J),Q(J),J=1,P) 
00000391  RETURN 
00000392 1 IF(AXIS.GT.0)GOTO 3 
00000393  IF(CURV.GT.0)GOTO 4 
00000394  WRITE(OUT,22) 
00000395  GOTO 6 
00000396 4 WRITE(OUT,23) 
00000397  GOTO 7 
00000398 3 IF(CURV.GT.9)GOTO 5 
00000399  WRITE(OUT,24) 
00000400 6 WRITE(OUT,12)(Z1(J),XX(J),Z(J),CP(J),PH(J),RMSQ(J),U(J),Q(J), 
00000401 1RK(J),J=1,P) 
00000402  RETURN 
00000403 5 WRITE(OUT,25) 
00000404 7 DO 16 J=1,P 
00000405  WRITE(OUT,13)Z1(J),XX(J),Z(J),CUR(J),CP(J),PH(J),RMSQ(J), 
00000406 1U(J),Q(J) 
00000407 16 CONTINUE 
00000408  RETURN 
00000409 10 FORMAT(1H ,20X,1PE11.4,3X,0PF10.4,3X,F7.5,5X,F6.4,5X,F7.4,3X, 
00000410 1F10.4,3X,1PE11.4) 
00000411 11 FORMAT(1H ,20X,1PE11.4,5X,E11.4,3X,0PF10.4,3X,F7.5,5X,F6.4,5X,F7.4 
00000412 1,5X,F10.4) 
00000413 12 FORMAT(1H ,10X,1PE11.4,5X,E11.4,5X,E11.4,3X,0PF10.4,3X,F7.5,5X, 
00000414 1F6.4,5X,F7.4,3X,F10.4,3X,F7.4) 
00000415 13 FORMAT(1H ,4X,1PE11.4,4X,E11.4,4X,E11.4,4X,E11.4,2X,0PF10.4,2X, 
00000416 1F7.5,4X,F6.4,4X,F7.4,2X,F10.4) 
00000417 20 FORMAT(1H0,25X,1HX,13X,2HCP,9X,3HP/H,9X,1HM,8X,6HU/UREF,6X, 
00000418 16HQ/QREF,6X,2HRK) 
00000419 21 FORMAT(1H0,25X,1HX,14X,5HLCURV,10X,2HCP,9X,3HP/H,9X,1HM,8X, 
00000420 16HU/UREF,6X,6HQ/QREF) 
00000421 22 FORMAT(1H0,15X,1HX,15X,1HZ,15X,1HS,13X,2HCP,9X,3HP/H,9X,1HM,8X, 
00000422 16HU/UREF,6X,6HQ/QREF) 
00000423 23 FORMAT(1H0,10X,1HX,14X,1HZ,14X,1HS,13X,5HLCURV,9X,2HCP,8X,3HP/H, 
00000424 18X,1HM,7X,6HU/UREF,5X,6HQ/QREF) 
00000425 24 FORMAT(1H0,15X,1HX,14X,3HRAD,14X,1HS,13X,2HCP,9X,3HP/H,9X,1HM, 
00000426 18X,6HU/UREF,6X,6HQ/QREF,6X,2HRK) 
00000427 25 FORMAT(1H0,10X,1HX,13X,3HRAD,13X,1HS,13X,5HLCURV,9X,2HCP,8X, 
00000428 13HP/H,8X,1HM,7X,6HU/UREF,5X,6HQ/QREF) 
00000429  END 
00000430  
00000431  SUBROUTINE STEP(YDASH,Y,DEL) 
00000432  REAL YDASH(3),Y(3),S(3) 
00000433  DO 1 I=1,3 
00000434  IF(ABS(YDASH(I)).LT.0.1E-05)YDASH(I)=0.1E-05 
00000435 1 CONTINUE 
00000436  VAR=0.01 
00000437  S(1)=ABS(VAR/YDASH(1)) 
00000438  S(2)=ABS(VAR*Y(2)/YDASH(2)) 
00000439  S(3)=DEL*VAR 
00000440  DEL=S(1) 
00000441  DO 2 I=1,3 
00000442  IF(S(I).LT.DEL)DEL=S(I) 
00000443 2 CONTINUE 
00000444  RETURN 
00000445  END 
00000446  
00000447  SUBROUTINE CUORAX(AXIS,CURV,P,RSTAR,RI,Z1,LS,OUT) 
00000448  REAL RSTAR(100),RI(100),Z1(100) 
00000449  INTEGER AXIS,CURV,P,OUT 
00000450  IF(AXIS.EQ.1.AND.CURV.GT.0)GOTO 1 
00000451  IF(AXIS.EQ.0)GOTO 2 
00000452  WRITE(OUT,20) 
00000453  WRITE(OUT,10)(Z1(J),RSTAR(J),J=LS,P) 
00000454  RETURN 
00000455 2 WRITE(OUT,21) 
00000456  WRITE(OUT,10)(Z1(J),RI(J),J=LS,P) 
00000457  RETURN 
00000458 1 WRITE(OUT,22) 
00000459  WRITE(OUT,12)(Z1(J),RSTAR(J),RI(J),J=LS,P) 
00000460  RETURN 
00000461 10 FORMAT(1H ,1PE11.4,5X,E13.6) 
00000462 12 FORMAT(1H ,1PE11.4,5X,E13.6,5X,E13.6) 
00000463 20 FORMAT(///1H0,6X,1HX,13X,7HR*THETA) 
00000464 21 FORMAT(///1H0,6X,1HX,9X,14HRICHARDSON NO.) 
00000465 22 FORMAT(///1HO,6X,1HX,13X,7HR*THETA,7X,14HRICHARDSON NO.) 
00000466  END 
00000467  
00000468  SUBROUTINE VINT(N,H,X,Y,XD,E,NS,DY,RK,N7,OUT,J) 
00000469  INTEGER QD,QDP,TD,TDP,V0,VE,U0,RD,OUT,LL 
00000470  DIMENSION Y(N),DY(N),RK(N7) 
00000471 1 IF(ABS(XD-X).LT.1E-20)GOTO 100 
00000472  IF(ABS(H).LT.1E-20)GOTO 100 
00000473  G0=5*E 
00000474  ED=0.03125*G0 
00000475 2 V0=0 
00000476  GOTO 23 
00000477 3 QD=0 
00000478  H0=0 
00000479 9 X0=X 
00000480  F0=XD-X 
00000481  Y0=F0-H 
00000482  IF(H.GT.0.)GOTO 10 
00000483  Y0=-Y0 
00000484 10 IF(Y0.GT.0.)GOTO 11 
00000485  HD=F0 
00000486  U0=-1 
00000487  GOTO 12 
00000488 11 HD=H 
00000489  U0=0 
00000490 12 V0=V0+1 
00000491  IF(V0.GT.NS) GOTO 100 
00000492  QDP=QD+1 
00000493 13 DO 22 TDP=QDP,7,1 
00000494  TD=TDP-1 
00000495  X=X0+H0 
00000496  IF(TD.EQ.QD) GOTO 15 
00000497  CALL FUNC(N,DY,X,Y,J) 
00000498 15 DO 21 RD=1,N,1 
00000499  GOTO (120,121,122,123,124,125,126),TDP 
00000500 120  RK(5*N*RD)=Y(RD) 
00000501  GOTO 21 
00000502 121  RK(RD)=HD*DY(RD) 
00000503  H0=0.5*HD 
00000504  F0=0.5*RK(RD) 
00000505  GOTO 20 
00000506 122  RK(N+RD)=HD*DY(RD) 
00000507  F0=0.25*(RK(RD)+RK(N+RD)) 
00000508  GOTO 20 
00000509 123  RK(2*N+RD)=HD*DY(RD) 
00000510  H0=HD 
00000511  F0=-RK(N+RD)+2.*RK(2*N+RD) 
00000512  GOTO 20 
00000513 124  RK(3*N+RD)=HD*DY(RD) 
00000514  H0=0.66666666667*HD 
00000515  F0=(7.*RK(RD)+10.*RK(N+RD)+RK(3*N+RD))/27. 
00000516  GOTO 20 
00000517 125  RK(4*N+RD)=HD*DY(RD) 
00000518  H0=0.2*HD 
00000519  F0=(28.*RK(RD)-125.*RK(N+RD)+546.*RK(2*N+RD)+54.*RK(3*N+RD)- 
00000520 1378.*RK(4*N+RD))/625. 
00000521  GOTO 20 
00000522 126  RK(6*N+RD)=HD*DY(RD) 
00000523  F0=0.1666666667*(RK(RD)+4.*RK(2*N+RD)+RK(3*N+RD)) 
00000524  X=X0+HD 
00000525  ER=(-42.*RK(RD)-224.*RK(2*N+RD)-21.*RK(3*N+RD)+162.*RK(4*N+RD) 
00000526 1+125.*RK(6*N+RD))/67.2 
00000527  YN=RK(5*N+RD)+F0 
00000528  IF(ABS(YN).LT.1E-8) YN=1 
00000529  ER=ABS(ER/YN) 
00000530  IF(ER.GT.G0) GOTO 115 
00000531  IF(ED.GT.ER) GOTO 20 
00000532  QD=-1 
00000533 20 Y(RD)=RK(5*N+RD)+F0 
00000534 21 CONTINUE 
00000535 22 CONTINUE 
00000536  IF(QD.LT.0)GOTO 23 
00000537  IF(U0.LT.0)GOTO 23 
00000538  H=2.*H 
00000539 23 F0=XD-X 
00000540  IF(H.GT.0) GOTO 25 
00000541  F0=-F0 
00000542 25 IF(F0.GT.0.)GOTO 3 
00000543  RETURN 
00000544 115  DO 24 RD=1,N 
00000545  DY(RD)=RK(RD)/HD 
00000546 24 CONTINUE 
00000547  H=0.5*HD 
00000548  QD=1 
00000549  GOTO 11 
00000550 100  WRITE(OUT,101)H,XD,X,VO 
00000551 101  FORMAT(19H VINT HAS FAILE H=,E11.4,3HXD=,E11.4,2HX=,E11.4,3HV0=, 
00000552 1I4) 
00000553  STOP 
00000554 102  RETURN 
00000555  END 
00000556  
00000557  SUBROUTINE SFCR(HALFC,RK,AAA) 
00000558  REAL Y1,Y2,K1,K2,AAA,NUM,DEN 
00000559  Y1=HALFC 
00000560  K1=2.439*ALOG(RK)-3.0-(1.0/SQRT(HALFC)) 
00000561  K2=1.2195 
00000562 5 NUM=SQRT(Y1)+Y1*(K1+(K2*ALOG(Y1))) 
00000563  DEN=K1/2.0+K2*(1.0+(ALOG(Y1))/2.0) 
00000564  Y2=Y1-NUM/DEN 
00000565  IF (ABS((Y2-Y1)/Y2).LT.0.000001) GOTO 10 
00000566  Y1=Y2 
00000567  GOTO 5 
00000568 10 AAA=Y2/HALFC 
00000569  RETURN 
00000570  END 
+0

Salut, désolé - c'est mon premier message sur l'échange de la pile. J'ai fait les changements que vous avez suggérés. – user2452600

+0

La première chose serait d'utiliser flag -Wall et de se concentrer sur les avertissements que vous obtenez du compilateur. Par exemple, il vous aurait averti des lignes tronquées. Ensuite, je recommande d'utiliser ftnchek, ou si vous avez un peu d'argent, ils vous auraient probablement parlé des erreurs. –

Répondre

2

OK, quelques réflexions:

Je pense que l'erreur à la ligne 412 est que la ligne 411 est trop longue. Vintage FORTRAN avait des limites strictes sur les longueurs de ligne, essentiellement tout le code devait être dans les colonnes 7:72. Le code que vous avez posté inclut beaucoup de lignes avec un caractère (habituellement un 1 comme cela arrive mais le vieux FORTRAN ne se soucie pas vraiment du caractère utilisé) dans la colonne 6. La ligne 412 en est un exemple. Ce le caractère de continuation indique au compilateur que la ligne 412 continue la ligne 411. Je pense que ce qui s'est passé ici est que la ligne 411 s'étend au-delà de la colonne 72 et le compilateur ignore tous les caractères dans les positions 73 ou ultérieures. déclaration mal formée. Je vous suggère de prendre les derniers caractères sur la ligne 411 et de les transférer à la ligne 412.

Si mes soupçons sont corrects, cela devrait corriger vos 2 dernières erreurs.

Je ne vois pas vraiment le problème qui cause la première de vos erreurs. Donc, dans les meilleures traditions de débogage, j'affirme vaguement que c'est peut-être une erreur plus tôt dans le code que le compilateur ne parvient pas à diagnostiquer correctement.

La première de vos avertissements

Warning: Type mismatch in argument 'imbalcrxn' 

est en fait une erreur subtile. Votre code ne définit pas de variable appelée imbalcrxn, bien qu'il définisse des variables appelées imbal et crxn. Pour une raison quelconque, votre compilateur n'a d'abord pas remarqué la virgule séparant ces deux noms de variables dans la suite, et deuxièmement, parce que Fortran vous permettra, sauf indication contraire, de vous référer aux variables non déclarées et de les taper implicitement pour vous. Ici vous avez créé par inadvertance une variable appelée imbalcrxn qui, parce que son nom commence par un i a été donné type d'entier par défaut. Et, à cause du millésime de votre code, la discordance entre les arguments réels et factices n'est pas vérifiée.

Vous pouvez probablement résoudre ce problème en déplaçant la virgule à la fin de la ligne 249 à la position 7 sur la ligne 250.

Je pense que la mise en garde à la ligne 122 est également due à une ligne trop longue.

Maintenant il est temps pour mon dîner, si j'ai le temps plus tard, je vais me balancer et voir à quelle distance vous avez. Expr n'est pas déclarée en tant que tableau dans l'option sous-programme.

+0

Merci beaucoup pour votre aide! J'ai réussi à le compiler en fonction de vos conseils sur les largeurs de colonnes. La première erreur est survenue en raison d'une faute de frappe. – user2452600

1

Probable EXP (100) est une faute de frappe doit être EXPR (100) sur la ligne 280.

Le symbole EXP n'est jamais utilisé, et quel horrible choix d'un nom de tableau si c'est, je suis surpris il n'y a pas en conflit avec le type intrinsèque d'erreur/avertissement.Tous les tableaux qui apparaissent en commun doivent également être déclarés correctement sous forme de tableaux dans chaque sous-programme où ils sont utilisés. L'erreur dit "EXPR n'est pas un tableau (non déclaré) donc il doit être une fonction (procédure), mais alors il ne peut pas être une fonction parce que c'est en commun." Par ailleurs, ils utilisent DEXP en tant que matrice. Je changerais cela globalement en autre chose, juste regarder votre longueur de ligne si vous utilisez un nom plus long.

+0

Merci, vous avez raison EXP devrait être EXPR. J'ai aussi changé DEXP en DEXPR - après avoir lu plus loin, je vois que dans les anciennes versions de fortran DEXP est une fonction exponentielle pour les nombres double précision. – user2452600