更新 Fortran/MAIN_UFRN.f90

This commit is contained in:
zzx 2025-05-14 18:10:54 +08:00
parent fdeb585e72
commit 8d1e85068b

View File

@ -1,105 +1,105 @@
SUBROUTINE MAIN_UFRN(nriver ,& ! SUBROUTINE MAIN_UFRN(nriver ,& !
nsect ,& ! nsect ,& !
krc ,& ! krc ,& !
ndata ,& ! ndata ,& !
Ns ,& ! Ns ,& !
Pc ,& ! Pc ,& !
Nrc ,& ! Nrc ,& !
Lc ,& ! Lc ,& !
Dric ,& ! Dric ,& !
XJ ,& ! XJ ,& !
Asave ,& ! Asave ,& !
ds ,& ! ds ,& !
bd ,& ! bd ,& !
zd ,& ! zd ,& !
sm ,& ! sm ,& !
rough ,& ! rough ,& !
ZZ0 ,& ! ZZ0 ,& !
Zctr ,& ! Zctr ,& !
Qp ,& ! Qp ,& !
UB1 ,& !112,3 UB1 ,& !112,3
UB2 ,& !212 UB2 ,& !212
DB1 ,& !112,3 DB1 ,& !112,3
DB2 ,& !212 DB2 ,& !212
UBV ,& ! UBV ,& !
NUB ,& ! NUB ,& !
DBV ,& ! DBV ,& !
Gate ,& !Gate(1,i) = Gate(2,i) = Gate(3,i) = C1Gate(4,i) = C2 Q=C1*B*e*dZ^C2中的C1和C2 Gate ,& !Gate(1,i) = Gate(2,i) = Gate(3,i) = C1Gate(4,i) = C2 Q=C1*B*e*dZ^C2中的C1和C2
NDB ,& ! NDB ,& !
Aphi ,& ! Aphi ,& !
period ,& ! period ,& !
dt ,& ! dt ,& !
sita ,& ! sita ,& !
sorz ,& ! sorz ,& !
sorq ,& ! sorq ,& !
epsz ,& ! epsz ,& !
epsq ,& ! epsq ,& !
Bsor1 ,& ! Bsor1 ,& !
Bsor2 ,& ! Bsor2 ,& !
Z ,& ! Z ,& !
Q )& ! Q )& !
BIND(C, NAME="MAIN_UFRN") BIND(C, NAME="MAIN_UFRN")
!DEC$ ATTRIBUTES DLLEXPORT::MAIN_UFRN !DEC$ ATTRIBUTES DLLEXPORT::MAIN_UFRN
IMPLICIT NONE IMPLICIT NONE
INTEGER::nriver ! INTEGER::nriver !
INTEGER::nsect ! INTEGER::nsect !
INTEGER::krc ! INTEGER::krc !
INTEGER::ndata ! INTEGER::ndata !
INTEGER::MRIVER INTEGER::MRIVER
integer River,tstep integer River,tstep
INTEGER::I INTEGER::I
INTEGER::II INTEGER::II
! !
INTEGER::Ns(nriver) ! : NRIVER INTEGER::Ns(nriver) ! : NRIVER
INTEGER::Pc(nriver) ! : NRIVER INTEGER::Pc(nriver) ! : NRIVER
INTEGER::Nrc(krc,nriver) ! 1-2-3-: KRC, NRIVER INTEGER::Nrc(krc,nriver) ! 1-2-3-: KRC, NRIVER
INTEGER::Lc(krc,nriver) ! : KRC, NRIVER INTEGER::Lc(krc,nriver) ! : KRC, NRIVER
! !
INTEGER::UB1(nriver) ! 1-2-3-: NRIVER INTEGER::UB1(nriver) ! 1-2-3-: NRIVER
INTEGER::UB2(nriver) ! 1-2-: NRIVER INTEGER::UB2(nriver) ! 1-2-: NRIVER
INTEGER::DB1(nriver) ! : NRIVER INTEGER::DB1(nriver) ! : NRIVER
INTEGER::DB2(nriver) ! : NRIVER INTEGER::DB2(nriver) ! : NRIVER
INTEGER::NUB(2,nriver) ! : 2, NRIVER INTEGER::NUB(2,nriver) ! : 2, NRIVER
INTEGER::NDB(2,nriver) ! : 2, NRIVER INTEGER::NDB(2,nriver) ! : 2, NRIVER
REAL::ZZ0 ! m REAL::ZZ0 ! m
REAL::Zctr ! m REAL::Zctr ! m
REAL::period ! REAL::period !
REAL::dt ! REAL::dt !
REAL::sita ! 0.5~1.0 REAL::sita ! 0.5~1.0
REAL::sorz ! 0~1 REAL::sorz ! 0~1
REAL::sorq ! 0~1 REAL::sorq ! 0~1
REAL::epsz ! m REAL::epsz ! m
REAL::epsq ! m?/s REAL::epsq ! m?/s
REAL::Bsor1 ! REAL::Bsor1 !
REAL::Bsor2 ! REAL::Bsor2 !
REAL::ql REAL::ql
REAL::condu,condd(3) REAL::condu,condd(3)
REAL::Bs,As,Rs,Cs REAL::Bs,As,Rs,Cs
! !
REAL::Dric(krc,nriver) ! 1-1: KRC, NRIVER REAL::Dric(krc,nriver) ! 1-1: KRC, NRIVER
REAL::Qj(ndata,krc,nriver) ! : NDATA, KRC, NRIVER REAL::Qj(ndata,krc,nriver) ! : NDATA, KRC, NRIVER
REAL::Asave(krc,nriver) ! m?: KRC, NRIVER REAL::Asave(krc,nriver) ! m?: KRC, NRIVER
! !
REAL::ds(nsect - 1,nriver) ! m: nsect - 1, NRIVER REAL::ds(nsect - 1,nriver) ! m: nsect - 1, NRIVER
REAL::bd(nsect,nriver) ! m: NSECT, NRIVER REAL::bd(nsect,nriver) ! m: NSECT, NRIVER
REAL::zd(nsect,nriver) ! m: NSECT, NRIVER REAL::zd(nsect,nriver) ! m: NSECT, NRIVER
REAL::sm(nsect,nriver) ! -: NSECT, NRIVER REAL::sm(nsect,nriver) ! -: NSECT, NRIVER
REAL::rough(nsect,nriver) ! : NSECT, NRIVER REAL::rough(nsect,nriver) ! : NSECT, NRIVER
! !
REAL::UBV(ndata,nriver) ! /: NDATA, NRIVER REAL::UBV(ndata,nriver) ! /: NDATA, NRIVER
REAL::DBV(ndata,nriver) ! /: NDATA, NRIVER REAL::DBV(ndata,nriver) ! /: NDATA, NRIVER
REAL::Gate(4,nriver) ! C1C2: 4, NRIVER REAL::Gate(4,nriver) ! C1C2: 4, NRIVER
REAL::Aphi(2,nriver) ! : 2, NRIVER REAL::Aphi(2,nriver) ! : 2, NRIVER
REAL::Qp(ndata) ! m?/s: NDATA REAL::Qp(ndata) ! m?/s: NDATA
REAL::Z0(nsect,nriver) REAL::Z0(nsect,nriver)
REAL::Q0(nsect,nriver) REAL::Q0(nsect,nriver)
@ -109,7 +109,7 @@ SUBROUTINE MAIN_UFRN(nriver ,& !
REAL::Zc(nsect,nriver),Qc(nsect,nriver) REAL::Zc(nsect,nriver),Qc(nsect,nriver)
REAL::XJ(ndata,nriver*krc) REAL::XJ(ndata,nriver*krc)
REAL::maxtstep INTEGER::maxtstep
REAL::maxiter REAL::maxiter
REAL::ttime REAL::ttime
REAL::fc REAL::fc
@ -129,7 +129,7 @@ SUBROUTINE MAIN_UFRN(nriver ,& !
MRIVER = nsect - 1 MRIVER = nsect - 1
Scanal = 0.0 ! Scanalql Scanal = 0.0 ! Scanalql
DO I = 1,ndata DO I = 1,ndata
DO J = 1,KRC DO J = 1,KRC
@ -141,15 +141,15 @@ SUBROUTINE MAIN_UFRN(nriver ,& !
DO J = 1,nriver DO J = 1,nriver
DO I = 1,Ns(j)-1 DO I = 1,Ns(j)-1
Scanal = Scanal + ds(i,j) ! 0 Scanal = Scanal + ds(i,j) ! 0
END DO END DO
END DO END DO
! !
maxtstep=period*3600/dt maxtstep=period*3600/dt
maxiter=1000 ! 仿 maxiter=1000 ! 仿
! !
DO river=1,nriver DO river=1,nriver
DO Is=1,Ns(river) DO Is=1,Ns(river)
Z0(Is,river)=ZZ0 Z0(Is,river)=ZZ0
@ -157,9 +157,9 @@ SUBROUTINE MAIN_UFRN(nriver ,& !
END DO END DO
END DO END DO
DO tstep=1,maxtstep ! DO tstep=1,maxtstep !
ttime=dt*tstep/3600.0 ! ttime=dt*tstep/3600.0 !
iter=0 iter=0
DO river=1,nriver DO river=1,nriver
@ -169,11 +169,11 @@ SUBROUTINE MAIN_UFRN(nriver ,& !
END DO END DO
END DO END DO
! !
call int_a( ttime ,& ! // call int_a( ttime ,& ! //
ndata ,& ! ndata ,& !
Qp ,& ! 线 Qp ,& ! 线
fc ) ! // fc ) ! //
ql=fc/Scanal ql=fc/Scanal
@ -187,7 +187,7 @@ SUBROUTINE MAIN_UFRN(nriver ,& !
END DO END DO
DO river=1,nriver DO river=1,nriver
! !
call sub_bound( NRIVER ,& call sub_bound( NRIVER ,&
NSECT ,& NSECT ,&
MRIVER ,& MRIVER ,&
@ -226,7 +226,7 @@ SUBROUTINE MAIN_UFRN(nriver ,& !
condu ,& condu ,&
condd ) condd )
! Z和流量Q ! Z和流量Q
call sub_QZ( NRIVER ,& call sub_QZ( NRIVER ,&
NSECT ,& NSECT ,&
MRIVER ,& MRIVER ,&
@ -315,7 +315,7 @@ SUBROUTINE MAIN_UFRN(nriver ,& !
DO river=1,nriver DO river=1,nriver
DO Is=1,Ns(river) DO Is=1,Ns(river)
! !
call sub_sect(NRIVER ,& call sub_sect(NRIVER ,&
NSECT ,& NSECT ,&
MRIVER ,& MRIVER ,&