更新 Fortran/SUB_QZ.f90

This commit is contained in:
zzx 2025-05-09 17:55:58 +08:00
parent 09b57710b8
commit c852e41e3c

View File

@ -1,5 +1,5 @@
! ==================================================================================
! Z和流量Q的子程序
! Z和流量Q的子程序
! ==================================================================================
subroutine sub_QZ( NRIVER ,&
NSECT ,&
@ -62,14 +62,18 @@
INTEGER::Ns(nriver),Pc(nriver),Nrc(krc,nriver),Lc(krc,nriver)
REAL::Dric(krc,nriver),Qj(ndata,krc,nriver),Asave(krc,nriver)
! section
REAL::ds(mriver,nriver),bd(nsect,nriver),zd(nsect,nriver),sm(nsect,nriver), rough(nsect,nriver)
REAL::ds(mriver,nriver),bd(nsect,nriver),zd(nsect,nriver),&
sm(nsect,nriver), rough(nsect,nriver)
! boundary
INTEGER::UB1(nriver),UB2(nriver),DB1(nriver),DB2(nriver),NUB(2,nriver),NDB(2,nriver)
REAL::UBV(ndata,nriver),Aphi(2,nriver),DBV(ndata,nriver),Gate(4,nriver),ql,Zctr
INTEGER::UB1(nriver),UB2(nriver),DB1(nriver),DB2(nriver),&
NUB(2,nriver),NDB(2,nriver)
REAL::UBV(ndata,nriver),Aphi(2,nriver),DBV(ndata,nriver),&
Gate(4,nriver),ql,Zctr
! calcu
REAL::dt,sita,Bsor1,Bsor2
! zzqq
REAL::Z0(nsect,nriver),Q0(nsect,nriver),Z(nsect,nriver),Q(nsect,nriver),V(nsect,nriver)
REAL::Z0(nsect,nriver),Q0(nsect,nriver),Z(nsect,nriver),&
Q(nsect,nriver),V(nsect,nriver)
! r_bv
REAL::condu,condd(3)
! BARC
@ -83,7 +87,7 @@
if(UB1(river).eq.2)Q(1,river)=condu
! ----------------------------------------------------------------------------------
! LMPR
! LMPR
! ----------------------------------------------------------------------------------
P(1)=condu
R(1)=0.0
@ -137,9 +141,9 @@
if(Ik.ne.1)then
! ------------------------------------------------------
!
!
!
! M点处的水面宽BARQ和水位Z
! M点处的水面宽BARQ和水位Z
! ------------------------------------------------------
call sub_sect( NRIVER ,&
NSECT ,&
@ -187,11 +191,12 @@
Zm=f(Z0(k,river),Z(k,river),Z0(k+1,river),Z(k+1,river))
! ------------------------------------------------------
!
!
! ------------------------------------------------------
a1=1.0
c1=2.0*sita*dt/(ds(k,river)*Bm)
e1=Z0(k,river)+Z0(k+1,river)+(1.0-sita)/sita*c1*(Q0(k,river)-Q0(k+1,river))+2.0*dt*ql/Bm
e1=Z0(k,river)+Z0(k+1,river)+(1.0-sita)/sita*c1*(Q0(k,river)&
-Q0(k+1,river))+2.0*dt*ql/Bm
a2=2.0*sita*dt/ds(k,river)*((Qm/Am)**2.0*Bm-9.8*Am)
c2=1.0-4.0*sita*dt/ds(k,river)*Qm/Am
d2=1.0+4.0*sita*dt/ds(k,river)*Qm/Am
@ -227,11 +232,14 @@
Rs ,&
Cs )
AZm2=As
e2=(1.0-sita)/sita*a2*(Z0(k+1,river)-Z0(k,river))+(1.0-4.0*(1.0-sita)*dt/ds(k,river)*Qm/Am)*Q0(k+1,river)+(1.0+4.0*(1.0-sita)*dt/ds(k,river)*Qm/Am)*Q0(k,river)+2.0*dt*(Qm/Am)**2.0*(AZm2-AZm1)/ds(k,river)-2.0*dt*9.8*abs(Qm)*Qm/(Am*Cm*Cm*Rm)
e2=(1.0-sita)/sita*a2*(Z0(k+1,river)-Z0(k,river))+(1.0-4.0*&
(1.0-sita)*dt/ds(k,river)*Qm/Am)*Q0(k+1,river)+(1.0+4.0*&
(1.0-sita)*dt/ds(k,river)*Qm/Am)*Q0(k,river)+2.0*dt*&
(Qm/Am)**2.0*(AZm2-AZm1)/ds(k,river)-2.0*dt*9.8*abs(Qm)*Qm/(Am*Cm*Cm*Rm)
else
! --------------------------------------------------------
! Lc=1Lc=2Lc=3
! Lc=1Lc=2Lc=3
! --------------------------------------------------------
if(Lc(Ic,river).eq.1)then
do 35 j=1,nriver
@ -279,7 +287,7 @@
end if
! ------------------------------------------------------
! 线
! 线
! ------------------------------------------------------
if(UB1(river).eq.1)then
Y1=a1*R(k)-c1
@ -293,7 +301,7 @@
R(k+1)=(d2*Y1-c1*Y2)/Y5
end if
! ------------------------------------------------------
! 线
! 线
! ------------------------------------------------------
if(UB1(river).eq.2)then
Y1=a1-c1*R(k)
@ -317,10 +325,11 @@
CC1=CC2
100 continue
! ----------------------------------------------------------------------------------
! Q和水位Z
! Q和水位Z
! ----------------------------------------------------------------------------------
if(UB1(river).eq.1)then
Q(Ns(river),river)=(condd(3)-condd(1)*P(Ns(river)))/(condd(1)*R(Ns(river))+condd(2))
Q(Ns(river),river)=(condd(3)-condd(1)*P(Ns(river)))/&
(condd(1)*R(Ns(river))+condd(2))
do 120 i=Ns(river),2,-1
Z(i,river)=P(i)+R(i)*Q(i,river)
Q(i-1,river)=L(i)+M(i)*Q(i,river)
@ -328,7 +337,8 @@
end if
if(UB1(river).eq.2)then
Z(Ns(river),river)=(condd(3)-condd(2)*P(Ns(river)))/(condd(2)*R(Ns(river))+condd(1))
Z(Ns(river),river)=(condd(3)-condd(2)*P(Ns(river)))/&
(condd(2)*R(Ns(river))+condd(1))
do 130 i=Ns(river),2,-1
Q(i,river)=P(i)+R(i)*Z(i,river)
Z(i-1,river)=L(i)+M(i)*Z(i,river)