! ================================================================================== ! 确定计算时刻河段上下游边界条件值的子程序 ! ================================================================================== ! ! 说明:下游外边界条件都给定一个过程,有ndata个数据点(1小时间隔),水位边界即为水位过程, ! 流量边界即为流量过程,水位流量关系边界只限挡潮闸情况,给出闸下潮位过程。 ! 河道末端挡潮闸水位流量关系简化成Q=C1*B*e*dZ^C2。Z>Ztide且Z>Zctr时开闸, ! 否则关闸,Zctr是挡潮闸运行控制水位,保证内河不会过低。 ! ---------------------------------------------------------------------------------- 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) INTEGER::DB2(nriver),NUB(2,nriver),NDB(2,nriver) REAL::UBV(ndata,nriver),Aphi(2,nriver),DBV(ndata,nriver) REAL::Gate(4,nriver),ql,Zctr ! calcu REAL::dt,sita,Bsor1,Bsor2 ! zzqq REAL::Z0(nsect,nriver),Q0(nsect,nriver),Z(nsect,nriver) REAL::Q(nsect,nriver),V(nsect,nriver) ! r_bv REAL::condu,condd(3) REAL:: ZQ(NDATA) TC=DT*FLOAT(TSTEP)/3600.0 ! 上游边界处理 IF(UB2(RIVER).EQ.1)THEN ! 外 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 ! 内 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 ! 下游边界处理 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