SUB_SHUILIANGJISUAN/Fortran/SUB_BOUND.f90

162 lines
3.7 KiB
Fortran
Raw Normal View History

2025-05-09 17:45:43 +08:00
! ==================================================================================
! ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>̺Ӷ<CCBA><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α߽<CEB1><DFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>
! ==================================================================================
!
! ˵<><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD>ndata<74><61><EFBFBD><EFBFBD><EFBFBD>ݵ㣨1Сʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮλ<CBAE>߽缴Ϊˮλ<CBAE><CEBB><EFBFBD>̣<EFBFBD>
! <20><><EFBFBD><EFBFBD><EFBFBD>߽缴Ϊ<E7BCB4><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD>ˮλ<CBAE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>߽<EFBFBD>ֻ<EFBFBD>޵<EFBFBD><DEB5><EFBFBD>բ<EFBFBD><D5A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>բ<EFBFBD>³<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>̡<EFBFBD>
! <20>ӵ<EFBFBD>ĩ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD>բˮλ<CBAE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>򻯳<EFBFBD>Q=C1*B*e*dZ^C2<43><32>Z>Ztide<64><65>Z>Zctrʱ<72><CAB1>բ<EFBFBD><D5A2>
! <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>բ<EFBFBD><D5A2>Zctr<74>ǵ<EFBFBD><C7B5><EFBFBD>բ<EFBFBD><D5A2><EFBFBD>п<EFBFBD><D0BF><EFBFBD>ˮλ<CBAE><CEBB><EFBFBD><EFBFBD>֤<EFBFBD>ںӲ<DABA><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD>
! ----------------------------------------------------------------------------------
SUBROUTINE SUB_BOUND( NRIVER ,&
NSECT ,&
MRIVER ,&
KRC ,&
NDATA ,&
river ,&
tstep ,&
Ns ,&
Pc ,&
Nrc ,&
Lc ,&
Dric ,&
Qj ,&
Asave ,&
UB1 ,&
UB2 ,&
DB1 ,&
DB2 ,&
NUB ,&
NDB ,&
UBV ,&
Aphi ,&
DBV ,&
Gate ,&
ql ,&
Zctr ,&
dt ,&
sita ,&
Bsor1 ,&
Bsor2 ,&
Z0 ,&
Q0 ,&
Z ,&
Q ,&
V ,&
condu ,&
condd )
INTEGER::NRIVER
INTEGER::NSECT
INTEGER::MRIVER
INTEGER::KRC
INTEGER::NDATA
INTEGER RIVER,TSTEP
! node
INTEGER::Ns(nriver),Pc(nriver),Nrc(krc,nriver),Lc(krc,nriver)
REAL::Dric(krc,nriver),Qj(ndata,krc,nriver),Asave(krc,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
! calcu
REAL::dt,sita,Bsor1,Bsor2
! zzqq
REAL::Z0(nsect,nriver),Q0(nsect,nriver),Z(nsect,nriver),Q(nsect,nriver),V(nsect,nriver)
! r_bv
REAL::condu,condd(3)
REAL:: ZQ(NDATA)
TC=DT*FLOAT(TSTEP)/3600.0
! <20><><EFBFBD>α߽紦<DFBD><E7B4A6>
IF(UB2(RIVER).EQ.1)THEN ! <20><>
DO II=1,NDATA
ZQ(II)=UBV(II,RIVER)
END DO
CALL INT_A(TC,NDATA,ZQ,FC)
CONDU=FC
ELSEIF(UB2(RIVER).EQ.2)THEN ! <20><>
IR=NUB(1,RIVER)
IS=NUB(2,RIVER)
IF(UB1(RIVER).EQ.1)THEN
CONDU=Z(IS,IR)
END IF
IF(UB1(RIVER).EQ.2)THEN
CONDU=Q(IS+1,IR)
END IF
END IF
! <20><><EFBFBD>α߽紦<DFBD><E7B4A6>
IF(DB2(RIVER).EQ.1)THEN
DO II=1,NDATA
ZQ(II)=DBV(II,RIVER)
END DO
CALL INT_A(TC,NDATA,ZQ,FC)
IF(DB1(RIVER).EQ.1)THEN
CONDD(1)=1.0
CONDD(2)=0.0
CONDD(3)=FC
ELSE IF(DB1(RIVER).EQ.2)THEN
CONDD(1)=0.0
CONDD(2)=1.0
CONDD(3)=FC
ELSE IF(DB1(RIVER).EQ.3)THEN
ZU0=Z0(NS(RIVER)-1,RIVER)
ZU=Z0(NS(RIVER)-1,RIVER)
ZU=(1-BSOR1)*ZU0+BSOR1*ZU
B=GATE(1,RIVER)
QMAX=GATE(2,RIVER)
C1=GATE(3,RIVER)
C2=GATE(4,RIVER)
IF(ZU>FC.AND.ZU>=ZCTR)THEN
DZ=ZU-FC
EK=5.0*DZ
IF(DZ<0.15)THEN
E=0.0
END IF
QQ=C1*B*EK*DZ**C2
QQ=(1-BSOR1)*Q0(NS(RIVER),RIVER)+BSOR1*QQ
IF(QQ>QMAX)THEN
QQ=QMAX
END IF
CONDD(1)=0.0
CONDD(2)=1.0
CONDD(3)=QQ
ELSE
CONDD(1)=0.0
CONDD(2)=1.0
CONDD(3)=0.0
END IF
END IF
ELSEIF(DB2(RIVER).EQ.2)THEN
IR=NDB(1,RIVER)
IS=NDB(2,RIVER)
IF(DB1(RIVER).EQ.1)THEN
CONDD(1)=1.0
CONDD(2)=0.0
CONDD(3)=Z(IS,IR)
ELSE
AH=APHI(1,RIVER)
PHI=APHI(2,RIVER)
IF(Z(NS(RIVER),RIVER)>=Z(IS,IR))THEN
QQ=AH*PHI*SQRT(2*9.8*(Z(NS(RIVER),RIVER)-Z(IS,IR)))
ELSE
QQ=-AH*PHI*SQRT(2*9.8*(Z(IS,IR)-Z(NS(RIVER),RIVER)))
END IF
QQ=(1-BSOR2)*Q0(NS(RIVER),RIVER)+BSOR2*QQ
CONDD(1)=0.0
CONDD(2)=1.0
CONDD(3)=QQ
END IF
END IF
END SUBROUTINE SUB_BOUND