- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi everyone,
I am trying to compile my code but it gives error.
My code block is:
SUBROUTINE KINEW(QQ,BB,SO,N,DXX,YNN,I,ZZ,YO,QQ0,QQP,QQF,TP,TN,&
&TMAX&
&,DT,P,L)
REAL N,L
DIMENSION DX(400),AO(400),YO(400),A(400),DIS(400),U(I)
AREA(B,YY,Z)=(B+Z*YY)*YY
PERI(B,YY,Z)=B+2*YY*(1+Z**2)**.5
WRITE(3,*)'THIS PRINT OUT IS CALCULATED FROM KINEMATIC WAVE'
QIN=QQ
WID=120.
S=S0
CON=N
DL=DXX
COEF=5./3
ALPHA=S**0.5/(CON*WID**(2./3))
DX(1)=0.
DO 15 K=1,I-1
DX(K+1)=DX(K)+DL
15 CONTINUE
! DETERMINATION OF AREAS AT STEADY STATE FLOW
DO 20 K=1,I
AO(K)=AREA(WID,YO(K),ZZ)
20 CONTINUE
WRITE(3,79)
79 FORMAT(2X,'TIME = 0',/)
WRITE(3,801) QIN
801 FORMAT (2X,'INITIAL DISCHARGE=',F9.4,/)
WRITE(3,802)
802 FORMAT (5X,'LENGTH ',6X,' DPETH ',6X,'AREA'/)
WRITE(3,803)(DX(K),YO(K),AO(K),K=1,I)
803 FORMAT (2X,F12.4,3X,F10.4,3X,F10.4)
WRITE(*,*)'ENTER THE PRINT OUT TIME INTERVAL, (sec)'
READ(*,*)J
DO 30 LTIME=1,TMAX
WRITE(*,*)LTIME
! EQUATIONS OF FLOOD HYDROGRAPH
Q=QQ0+(QQP-QQ0)/TP*LTIME
IF(LTIME.GT.TP) Q=QQP-(QQP-QQF)/(TN-TP)*(LTIME-TP)
IF(LTIME.GT.TN) Q=QQF
! DETERMINATION OF AREAS AND WATER DEPTHS AT TIME LEVEL N
Y(1)=0.01
121 ETOTAL=(Q*CON)/S**.5
ECHECK=(AREA(WID,Y(1),ZZ))**(5./3.)/(PERI(WID,Y(1),ZZ))**(2./3.)
IF(ETOTAL.LT.ECHECK) GOTO 122
Y(1)=Y(1)+.01
GOTO 121
122 A(1)=AREA(WID,Y(1),ZZ)
DX(1)=0
DO 40 K=2,I-1
DX(K+1)=DX(K)+DL
Y1=(AO(K+1)-AO(K-1))/(2.*DL)
Y2=ALPHA*DT*COEF*AO(K)**(COEF-1)
A(K)=AO(K)-Y2*Y1
40 CONTINUE
DO 80 K=I,I
Y1=(AO(K)-AO(K-1))/DL
Y2=ALPHA*DT*COEF*AO(K)**(COEF-1)
A(K)=AO(K)+Y2*Y1
80 CONTINUE
DO 50 K=2,I
DIS(K)=ALPHA*A(K)**COEF
Y(K)=A(K)/WID
50 CONTINUE
IF(J.EQ.LTIME) THEN
J=J+J
WRITE(3,151)LTIME
151 FORMAT(//,2X,'TIME=',I6,/)
WRITE(3,157) Q
157 FORMAT (2X,'DISCHARGE=',F10.4,/)
WRITE(3,205)
205 FORMAT (5X,'LENGTH ',6X' DEPTH ',6X,'AREA ',/)
WRITE(3,206) (DX(K),Y(K),A(K),K=1,I)
206 FORMAT (2X,F12.4,3X,F10.4,3X,F10.4)
ENDIF
! REPLACING
DO 60 K=1,1
YO(K)=Y(K)
AO(K)=A(K)
60 CONTINUE
30 CONTINUE
RETURN
END
Note: Please find attached code file.
And that gives error:
main.f95:317:4: 317 | Y(1)=0.01 | 1 Error: The function result on the lhs of the assignment at (1) must have the pointer attribute. main.f95:321:4: 321 | Y(1)=Y(1)+.01 | 1 Error: The function result on the lhs of the assignment at (1) must have the pointer attribute. main.f95:338:4: 338 | Y(K)=A(K)/WID | 1 Error: The function result on the lhs of the assignment at (1) must have the pointer attribute. main.f95:310:18: 310 | DO 30 LTIME=1,TMAX | 1 Warning: Deleted feature: End expression in DO loop at (1) must be integer
I would be happy take your advice to compile without failing. Thank you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The Y array is not declared, so the compiler thinks it is an external function.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi I am sharing all error details:
Also I uploaded the code file as an attachment
main.f95:317:4: 317 | Y(1)=0.01 | 1 Error: The function result on the lhs of the assignment at (1) must have the pointer attribute. main.f95:321:4: 321 | Y(1)=Y(1)+.01 | 1 Error: The function result on the lhs of the assignment at (1) must have the pointer attribute. main.f95:338:4: 338 | Y(K)=A(K)/WID | 1 Error: The function result on the lhs of the assignment at (1) must have the pointer attribute. main.f95:310:18: 310 | DO 30 LTIME=1,TMAX | 1
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The Y array is not declared, so the compiler thinks it is an external function.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you I solved the error by declaring Y array in code. At last, the code gives error like below, if you have any suggestions I would appreciate it.
Note: I tried to declare L and Tmax but it still give the error
My code block:
YC=YCOB*BB
IF(YNN.GT.YC)THEN
WRITE(3,551)
551 FORMAT('HYDRAULIC PARAMETERS RESULT IN MILD SLOPE' ,/)
ELSE
WRITE(3,552)
552 FORMAT('THIS PROGRAM IS NOT VALID FOR STEEP SLOPE CASE' ,/)
GO TO 553
ENDIF
IF(ICHECK.EQ.1) THEN
H0=0.1
98 X=P/H0
IF(X.GE.2.8)THEN
CO=2.175
ELSE
C0=.018*X**7-.218*X**6+1.084*X**5-2.872*X**4+4.37*X**3-3.847*X**&
&2+1.889*X+1.72
ENDIF
QCHECK=C0*L*H0**1.5
IF(QQ.LT.QCHECK) GOTO 101
H0=H0+.05
GOTO 98
101 YMAX = P+H0
ELSE
YMAX=0.0826*QQ**2/(NNN**2*C**2*D**4)
ENDIF
KZ=ZZ
WRITE(3,15)QQ,YMAX,YNN,BB,KZ,S0,N,DXX,YC
15 FORMAT(10X,'Q(m3/s =',F6.1,/,10x,'Ymax(m)=',F6.3,/,10X,'Yn(&
&m)=',F6.3,/,/,10X,'B(m)=',f6.1,/,10x,'Z=1V:',I1,'H',/,10X,'So&
&=',F6.5,/,10X,'n=',F6.3,/,10X,'DX(m)=',F6.3,/,10X,'Yc(m)=&
&',F6.3,///)
WRITE(3,50)
50 FORMAT(1X,'I',5X,'Z',6X,'Y',5X,'A',5X,'P',5X,'R',6X,'U',7X,'Sf',6X&
&,'H',7X,'HE',5X,'LENGTH',/,6X,'(m)'4X,'(m)',2X'(m2)',3X,'(m)',3X&
&,'(m)',3X,'(m/s)',11X,'(m)',5X,'(m)',/,78('At'),/)
T=0.
Z1=0.
Y1=Ymax
I=1
A1=AREA(BB,Y1,ZZ)
P1=PERI(BB,Y1,ZZ)
R1=A1/P1
U1=QQ/A1
S1=(U1*N/R1**(2./3.))**2
H1=Z1+Y1+U1**2/19.625201
WRITE(3,51)I,Z1,Y1,A1,P1,R1,U1,S1,H1
51 FORMAT(1X,I3,1X,F6.3,1X,F6.3,1X,2(F7.1,1X),2(F6.3,1X),F7.6,1X,F6.3&
&,1X,F6.2,3X,F7.1)
30 I=I+1
T=T+DXX
Z2=Z1+S0*DXX
Y2=0.
10 Y2=Y2+0.01
A2=AREA(BB,Y2,ZZ)
P2=PERI(BB,Y2,ZZ)
R2=A2/P2
U2=QQ/A2
S2=(U2*N/R2**(2./3.))**2
H2=Z2+Y2+U2**2/19.62
H22=H1+.4*DXX*(S1+S2)
HE=H2-H22
HHE=HE*100
IF(ABS(HE).LT.0.0074) GOTO 20
GOTO 10
20 FRU2 = U2/(9.81*Y2)**.5
DELY=HE/(1-FRU2**2+(3*S2*DXX)/(2*R2))
Y2=Y2-DELY
WRITE(3,51)I,Z2,Y2,A2,P2,R2,U2,S2,H2,HHE,T
IF(Y2.LE.YNN) GOTO 40
WRITE(*,*)I,Y2
TERSY(I)=Y2
Y1=Y2
A1=A2
P1=P2
R1=R2
U1=U2
S1=S2
Z1=Z2
H1=H2
S1=S2
GOTO 30
40 WRITE(3,75) T
75 FORMAT(//,10X,'TOTAL LENGTH IS',F7.1,'m',//)
YO(1) = YNN
YO(1) =YMAX
WRITE(*,*)T,I
DO 597 K =2,I-1
YO(K)=TERSY(I-K+1)
597 CONTINUE
WRITE(*,9)
9 FORMAT(//,15('!'),3X,'PLEASE WAIT COMPUTATION CONTUNIES',3X,15('!'&
&))
IF(IMETHOD.EQ.5)CALL COMPW(QQ,BB,S0,N,DXX,YNN,I,ZZ,YO,ICHECK,D,&
&C,NNN,QQ0,QQP,QQF,TP,TN,TMAX,DT,P,L)
IF(IMETHOD.EQ.6)&
&CALL DIFFW(QQ,BB,S0,N,DXX,YNN,I,ZZ,YO,QQP,QQ&
&F,TP,TN,TMAX,DT,P,L)
IF(IMETHOD.EQ.7)&
&CALL KINEW(QQ,BB,S0,N,DXX,YNN,I,ZZ,YO,QQ0,QQP,QQ&
&F,TP,TN,TMAX,DT,P,L)
553 STOP
END
error :
main.f95:180:25: 180 | &F,TP,TN,TMAX,DT,P,L) | 1 Error: Missing actual argument for argument ‘l’ at (1) main.f95:183:25: 183 | &F,TP,TN,TMAX,DT,P,L) | 1 Error: Type mismatch in argument ‘tmax’ at (1); passed REAL(4) to INTEGER(4)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you I solved the error by declaring Y array in code. At last, the code gives error like below, if you have any suggestions I would appreciate it.
Note: I tried to declare L and Tmax but it still give the error
My code:
dimension YO(400), TERSY(400)
REAL N,L
REAL :: L
L = 100 ! Assign a proper value to L before passing it
character*14 FILEOU
AREA(B,YY,Z)=(B+Z*YY)*YY
PERI(B,YY,Z)=B+2*YY*(1+Z**2)**0.5
WRITE(*,8)
8 format(/,19X,'PLEASE ENTER THE OUTPUT FILE NAME',//)
READ(*,8008)FILEOU
8008 FORMAT(A14)
OPEN(3,FILE=FILEOU)
READ(*,*)QWE
WRITE(*,*)'DOWNSTREAM BOUNDARY CONDITION:'
WRITE(*,*)'SPILLWAY (1), BOTTOM OUTLET (2)'
READ(*,*)ICHECK
IF(ICHECK.EQ.1)then
WRITE(*,*)'ENTER SPILLWAY HEIGHT, P(m)'
read(*,*)P
WRITE(*,*)'ENTER SPILLWAY CREST LENGTH, L(m)'
READ(*,*)L
ENDIF
IF(ICHECK.EQ.2) THEN
WRITE(*,*)'ENTER DISCHARGE COEFFICIENT'
READ(*,*)C
WRITE(*,*)'ENTER DIAMETER OF BOTTOM OUTLET(m)'
READ(*,*)D
WRITE(*,*)'ENTER THE NUMBER OF BOTTOM OUTLETS'
READ(*,*)NNN
ENDIF
WRITE(*,*)'ENTER STEADY - STATE DISCHARGE (m^3/s)'
READ(*,*)QQ
WRITE(*,*)'ENTER BOTTOM WIDTH(m)'
READ(*,*)BB
WRITE(*,*)'ENTER SIDE INCLINATION'
READ(*,*)ZZ
WRITE(*,*)'ENTER BED SLOPE'
READ(*,*)S0
WRITE(*,*)'ENTER MANNING ROUGHNESS'
READ(*,*)N
WRITE(*,*)'ENTER Dx(m)'
READ(*,*)DXX
WRITE(*,*)'CHOOSE THE SOLUTION TECHNIQUE:'
WRITE(*,*)'COMPLETE DYNAMIC WAVE(5)'
WRITE(*,*)'DIFFUSIVE WAVE(6)'
WRITE(*,*)'KINEMATIC WAVE(7)'
READ(*,*)IMETHOD
WRITE(*,*)'ENTER TIME INTERVAL Dt, (sec)'
READ(*,*)Dt
WRITE(*,*)'ENTER THE HYDROGRAPH PARAMETERS :'
WRITE(*,*)'Qo(m^3/S)'
READ(*,*)QQ0
WRITE(*,*)'Qp (m^3/s) AND Tp(sec)'
READ(*,*)QQP
READ(*,*)Tp
WRITE(*,*)'Qf(m^3/s) AND Tn (sec)'
READ(*,*)QQF
READ(*,*)Tn
WRITE(*,*)'Tmax(sec)'
READ(*,*)
TmaxYNN=0.01
99 ETOTAL=(QQ*N)/S0**.5
ECHECK=AREA(BB,YNN,ZZ)**(5./3.)/PERI(BB,YNN,ZZ)**(2./3.)
IF(ETOTAL.LT.ECHECK)GOTO 100
YNN=YNN+.01
GOTO 99
100 W=QQ/(3.132*BB**2.5)
IF(ZZ.EQ.0)THEN
YCOB=W**.672717*1.022785
ELSE IF(ZZ.EQ.5) THEN
YCOB=W**.602684*0.748173
ELSE IF(ZZ.EQ.1) THEN
YCOB=W**.574105*0.657397
ELSE IF(ZZ.EQ.1.5) THEN
YCOB=W**.564345*0.625201
ELSE IF(ZZ.EQ.2) THEN
YCOB=W**.552851*0.584043
ELSE IF(ZZ.EQ.2.5) THEN
YCOB=W**.545379*0.552333
ELSE IF(ZZ.EQ.3) THEN
YCOB=W**.537298*0.523298
ELSE IF(ZZ.EQ.4) THEN
YCOB=W**.524667*0.487638
END IF
YC=YCOB*BB
IF(YNN.GT.YC)THEN
WRITE(3,551)
551 FORMAT('HYDRAULIC PARAMETERS RESULT IN MILD SLOPE' ,/)
ELSE
WRITE(3,552)
552 FORMAT('THIS PROGRAM IS NOT VALID FOR STEEP SLOPE CASE' ,/)
GO TO 553
ENDIF
IF(ICHECK.EQ.1) THEN
H0=0.1
98 X=P/H0
IF(X.GE.2.8)THEN
CO=2.175
ELSE
C0=.018*X**7-.218*X**6+1.084*X**5-2.872*X**4+4.37*X**3-3.847*X**&
&2+1.889*X+1.72
ENDIF
QCHECK=C0*L*H0**1.5
IF(QQ.LT.QCHECK) GOTO 101
H0=H0+.05
GOTO 98
101 YMAX = P+H0
ELSE
YMAX=0.0826*QQ**2/(NNN**2*C**2*D**4)
ENDIF
KZ=ZZ
WRITE(3,15)QQ,YMAX,YNN,BB,KZ,S0,N,DXX,YC
15 FORMAT(10X,'Q(m3/s =',F6.1,/,10x,'Ymax(m)=',F6.3,/,10X,'Yn(&
&m)=',F6.3,/,/,10X,'B(m)=',f6.1,/,10x,'Z=1V:',I1,'H',/,10X,'So&
&=',F6.5,/,10X,'n=',F6.3,/,10X,'DX(m)=',F6.3,/,10X,'Yc(m)=&
&',F6.3,///)
WRITE(3,50)
50 FORMAT(1X,'I',5X,'Z',6X,'Y',5X,'A',5X,'P',5X,'R',6X,'U',7X,'Sf',6X&
&,'H',7X,'HE',5X,'LENGTH',/,6X,'(m)'4X,'(m)',2X'(m2)',3X,'(m)',3X&
&,'(m)',3X,'(m/s)',11X,'(m)',5X,'(m)',/,78('At'),/)
T=0.
Z1=0.
Y1=Ymax
I=1
A1=AREA(BB,Y1,ZZ)
P1=PERI(BB,Y1,ZZ)
R1=A1/P1
U1=QQ/A1
S1=(U1*N/R1**(2./3.))**2
H1=Z1+Y1+U1**2/19.625201
WRITE(3,51)I,Z1,Y1,A1,P1,R1,U1,S1,H1
51 FORMAT(1X,I3,1X,F6.3,1X,F6.3,1X,2(F7.1,1X),2(F6.3,1X),F7.6,1X,F6.3&
&,1X,F6.2,3X,F7.1)
30 I=I+1
T=T+DXX
Z2=Z1+S0*DXX
Y2=0.
10 Y2=Y2+0.01
A2=AREA(BB,Y2,ZZ)
P2=PERI(BB,Y2,ZZ)
R2=A2/P2
U2=QQ/A2
S2=(U2*N/R2**(2./3.))**2
H2=Z2+Y2+U2**2/19.62
H22=H1+.4*DXX*(S1+S2)
HE=H2-H22
HHE=HE*100
IF(ABS(HE).LT.0.0074) GOTO 20
GOTO 10
20 FRU2 = U2/(9.81*Y2)**.5
DELY=HE/(1-FRU2**2+(3*S2*DXX)/(2*R2))
Y2=Y2-DELY
WRITE(3,51)I,Z2,Y2,A2,P2,R2,U2,S2,H2,HHE,T
IF(Y2.LE.YNN) GOTO 40
WRITE(*,*)I,Y2
TERSY(I)=Y2
Y1=Y2
A1=A2
P1=P2
R1=R2
U1=U2
S1=S2
Z1=Z2
H1=H2
S1=S2
GOTO 30
40 WRITE(3,75) T
75 FORMAT(//,10X,'TOTAL LENGTH IS',F7.1,'m',//)
YO(1) = YNN
YO(1) =YMAX
WRITE(*,*)T,I
DO 597 K =2,I-1
YO(K)=TERSY(I-K+1)
597 CONTINUE
WRITE(*,9)
9 FORMAT(//,15('!'),3X,'PLEASE WAIT COMPUTATION CONTUNIES',3X,15('!'&
&))
IF(IMETHOD.EQ.5)CALL COMPW(QQ,BB,S0,N,DXX,YNN,I,ZZ,YO,ICHECK,D,&
&C,NNN,QQ0,QQP,QQF,TP,TN,TMAX,DT,P,L)
IF(IMETHOD.EQ.6)&
&CALL DIFFW(QQ,BB,S0,N,DXX,YNN,I,ZZ,YO,QQP,QQ&
&F,TP,TN,TMAX,DT,P,L)
IF(IMETHOD.EQ.7)&
&CALL KINEW(QQ,BB,S0,N,DXX,YNN,I,ZZ,YO,QQ0,QQP,QQ&
&F,TP,TN,TMAX,DT,P,L)
553 STOP
END
error code:
main.f95:180:25: 180 | &F,TP,TN,TMAX,DT,P,L) | 1 Error: Missing actual argument for argument ‘l’ at (1) main.f95:183:25: 183 | &F,TP,TN,TMAX,DT,P,L) | 1 Error: Type mismatch in argument ‘tmax’ at (1); passed REAL(4) to INTEGER(4)

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page