Reputation: 43
I have copied a FORTRAN 66/IV program from a 1988 report, and I am trying to compile it with gfortran (mingw for windows). I have reduced a long list of errors down to 3 (plus 2 warnings), and I cannot get any further despite my best efforts. I would be grateful for any help and advice.
The errors:
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)
This is the source code:
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)
00000123
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
Upvotes: 0
Views: 4390
Reputation: 6999
expr is not declared as an array in subroutine option. Likely EXP(100) is a typo should be EXPR(100) on line 280.
The symbol EXP is never used, and what a horrible choice of an array name if it is, I'm surprised there isnt some conflicting with intrinsic type of error/warning.
All of your arrays that appear in common need to also be declared properly as arrays in each subroutine where they are used. The error says "EXPR isnt an array (not declared so) so it must be a function (procedure), but then It cant be a function either because its in common."
By the way they are using DEXP as an array. I'd globally change that to something else, just watch your line length if you use a longer name.
Upvotes: 1
Reputation: 78364
OK, some thoughts:
I suspect that the error at line 412 is that line 411 is too long. Vintage FORTRAN had strict limits on line lengths, essentially all the code had to be in columns 7:72. The code you've posted includes many lines with a character (usually a 1
as it happens but old FORTRAN doesn't really care what character is used) in column 6. Line 412 is an example of this. This continuation character tells the compiler that line 412 continues line 411. I think that what has happened here is that line 411 extends beyond column 72 and the compiler ignores any characters in positions 73 or later so when it reads the continuation it finds a mal-formed statement. I suggest you take the last few characters on line 411 and transfer them to line 412.
If my suspicion is correct that should fix your latter 2 errors.
I can't really see the problem that is causing the first of your errors. So, in the best traditions of debugging, I vaguely assert that it may be an error earlier in the code that the compiler fails to diagnose correctly.
The first of your warnings
Warning: Type mismatch in argument 'imbalcrxn'
is actually a subtle error. Your code doesn't define a variable called imbalcrxn
, though it does define variables called imbal
and crxn
. For some reason your compiler has, firstly, not noticed the comma separating those two variable names across the continuation, and, secondly, because Fortran will, unless you tell it otherwise, allow you to refer to undeclared variables and implicitly type them for you. Here you have inadvertently created a variable called imbalcrxn
which, because its name begins with an i
has been given type of default integer. And, because of the vintage of your code, the mismatch between actual and dummy arguments goes unchecked.
You can probably fix this by moving the comma at the end of line 249 to position 7 on line 250.
I think the warning at line 122 is also due to a too-long line.
Now it's time for my dinner, if I have time later I'll swing by and see how far you've got.
Upvotes: 2