更新 Fortran/SUB_XAJMX.f90
This commit is contained in:
parent
7835711048
commit
6c7785fc6c
@ -1,60 +1,60 @@
|
|||||||
SUBROUTINE SUB_XAJMX( N ,& ! 单元出流数组大小 //输入变量
|
SUBROUTINE SUB_XAJMX( N ,& ! 单元出流数组大小 //输入变量
|
||||||
M ,& ! 无因次单位数组大小 //输入变量
|
M ,& ! 无因次单位数组大小 //输入变量
|
||||||
PAR ,& ! //输入变量
|
PAR ,& ! //输入变量
|
||||||
AREA ,& ! 单元面积 //输入变量
|
AREA ,& ! 单元面积 //输入变量
|
||||||
UH ,& ! 无因次单位线 //输入变量
|
UH ,& ! 无因次单位线 //输入变量
|
||||||
DT ,& ! 时段步长 //输入变量
|
DT ,& ! 时段步长 //输入变量
|
||||||
P ,& ! 降雨系列 //输入变量
|
P ,& ! 降雨系列 //输入变量
|
||||||
EP ,& ! 蒸发皿蒸发能力 //输入变量
|
EP ,& ! 蒸发皿蒸发能力 //输入变量
|
||||||
W ,& ! 土壤含水层 1.上层 2.下层 3.深层 //输入变量
|
W ,& ! 土壤含水层 1.上层 2.下层 3.深层 //输入变量
|
||||||
FR ,& ! 初始产流面积 //输入变量
|
FR ,& ! 初始产流面积 //输入变量
|
||||||
S ,& ! 初始自由水深 //输入变量
|
S ,& ! 初始自由水深 //输入变量
|
||||||
QRSS0 ,& ! 初始壤中流流量 //输入变量
|
QRSS0 ,& ! 初始壤中流流量 //输入变量
|
||||||
QRG0 ,& ! 初始地下水径流量 //输入变量
|
QRG0 ,& ! 初始地下水径流量 //输入变量
|
||||||
QR ) ! 单元出流 //输出变量
|
QR ) ! 单元出流 //输出变量
|
||||||
|
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
|
|
||||||
!///////////////////////////////////////变量声明//////////////////////////////////////////////
|
!///////////////////////////////////////变量声明//////////////////////////////////////////////
|
||||||
INTEGER::N !
|
INTEGER::N !
|
||||||
INTEGER::M !
|
INTEGER::M !
|
||||||
REAL::PAR(13) ! 1.上层张力水容量wum 2.下层张力水容量wl 3.深层张力水容量wdm
|
REAL::PAR(13) ! 1.上层张力水容量wum 2.下层张力水容量wl 3.深层张力水容量wdm
|
||||||
! 4.蒸发能力折算系数KC.深层蒸发系数c 6.张力水蓄水容量系数b
|
! 4.蒸发能力折算系数KC.深层蒸发系数c 6.张力水蓄水容量系数b
|
||||||
! 7.不透水面积比率imp1 8.自由水蓄水容量sm 9.自由水蓄水容量指数ex
|
! 7.不透水面积比率imp1 8.自由水蓄水容量sm 9.自由水蓄水容量指数ex
|
||||||
!10.地下水出流系数kg 11.壤中流出流系数kss 12.地下水出流系数kkg
|
!10.地下水出流系数kg 11.壤中流出流系数kss 12.地下水出流系数kkg
|
||||||
!13.壤中流出流系数kkss
|
!13.壤中流出流系数kkss
|
||||||
REAL::AREA ! 单元面积
|
REAL::AREA ! 单元面积
|
||||||
REAL::UH(M) ! 无因次单位线
|
REAL::UH(M) ! 无因次单位线
|
||||||
REAL::DT ! 时段步长
|
REAL::DT ! 时段步长
|
||||||
REAL::P(N) ! 降雨系列
|
REAL::P(N) ! 降雨系列
|
||||||
REAL::EP(N) ! 蒸发皿蒸发能力
|
REAL::EP(N) ! 蒸发皿蒸发能力
|
||||||
REAL::QR(N) ! 单元出流
|
REAL::QR(N) ! 单元出流
|
||||||
REAL::W(3) ! 土壤含水层 1.上层 2.下层 3.深层
|
REAL::W(3) ! 土壤含水层 1.上层 2.下层 3.深层
|
||||||
REAL::FR ! 初始产流面积
|
REAL::FR ! 初始产流面积
|
||||||
REAL::S ! 初始自由水深
|
REAL::S ! 初始自由水深
|
||||||
REAL::QRSS0 ! 初始壤中流流量
|
REAL::QRSS0 ! 初始壤中流流量
|
||||||
REAL::QRG0 ! 初始地下水径流量
|
REAL::QRG0 ! 初始地下水径流量
|
||||||
|
|
||||||
INTEGER::D
|
INTEGER::D
|
||||||
REAL::KSSD
|
REAL::KSSD
|
||||||
REAL::KGD
|
REAL::KGD
|
||||||
REAL::E(3)
|
REAL::E(3)
|
||||||
REAL::WM(3)
|
REAL::WM(3)
|
||||||
REAL::KC ! 蒸发能力折算系数
|
REAL::KC ! 蒸发能力折算系数
|
||||||
REAL::C ! 深层蒸发系数
|
REAL::C ! 深层蒸发系数
|
||||||
REAL::B ! 张力水蓄水容量系数
|
REAL::B ! 张力水蓄水容量系数
|
||||||
REAL::IMP1 ! 不透水面积比率
|
REAL::IMP1 ! 不透水面积比率
|
||||||
REAL::SM ! 自由水蓄水容量
|
REAL::SM ! 自由水蓄水容量
|
||||||
REAL::EX ! 自由水蓄水容量指数
|
REAL::EX ! 自由水蓄水容量指数
|
||||||
REAL::KG ! 地下水出流系数
|
REAL::KG ! 地下水出流系数
|
||||||
REAL::KSS ! 壤中流出流系数
|
REAL::KSS ! 壤中流出流系数
|
||||||
REAL::KKG ! 地下水出流系数
|
REAL::KKG ! 地下水出流系数
|
||||||
REAL::KKSS ! 壤中流出流系数
|
REAL::KKSS ! 壤中流出流系数
|
||||||
|
|
||||||
!以下变量是原vb程序中未声明的变量
|
!以下变量是原vb程序中未声明的变量
|
||||||
INTEGER::I ! 计数器 //临时变量
|
INTEGER::I ! 计数器 //临时变量
|
||||||
INTEGER::J ! 计数器 //临时变量
|
INTEGER::J ! 计数器 //临时变量
|
||||||
INTEGER::ICHECK ! 判断计算时段长度是否合适的识别码
|
INTEGER::ICHECK ! 判断计算时段长度是否合适的识别码
|
||||||
INTEGER::NN
|
INTEGER::NN
|
||||||
|
|
||||||
REAL(KIND=8),PARAMETER::C5=5.000000000
|
REAL(KIND=8),PARAMETER::C5=5.000000000
|
||||||
@ -89,11 +89,11 @@ SUBROUTINE SUB_XAJMX( N ,& !
|
|||||||
REAL::QRG
|
REAL::QRG
|
||||||
REAL::QTR
|
REAL::QTR
|
||||||
|
|
||||||
!///////////////////////////////////////变量声明//////////////////////////////////////////////
|
!///////////////////////////////////////变量声明//////////////////////////////////////////////
|
||||||
|
|
||||||
!///////////////////////////////////////计算区域//////////////////////////////////////////////
|
!///////////////////////////////////////计算区域//////////////////////////////////////////////
|
||||||
|
|
||||||
! 赋值
|
! 赋值
|
||||||
ICHECK = 1
|
ICHECK = 1
|
||||||
|
|
||||||
DO I = 1, 3
|
DO I = 1, 3
|
||||||
@ -126,7 +126,8 @@ SUBROUTINE SUB_XAJMX( N ,& !
|
|||||||
D = 24 / DT
|
D = 24 / DT
|
||||||
CI = KKSS ** (1.0 / D)
|
CI = KKSS ** (1.0 / D)
|
||||||
CG = KKG ** (1.0 / D)
|
CG = KKG ** (1.0 / D)
|
||||||
KSSD = (1.0 - (1.0 - (KG + KSS)) ** (1.0 / D)) / (1.0 + KG / KSS)
|
KSSD = (1.0 - (1.0 - (KG + KSS)) ** (1.0 / D)) &
|
||||||
|
/ (1.0 + KG / KSS)
|
||||||
KGD = KSSD * KG / KSS
|
KGD = KSSD * KG / KSS
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
@ -148,7 +149,7 @@ SUBROUTINE SUB_XAJMX( N ,& !
|
|||||||
W0 = W(1) + W(2) + W(3)
|
W0 = W(1) + W(2) + W(3)
|
||||||
PE = P(I) - EP(I)
|
PE = P(I) - EP(I)
|
||||||
|
|
||||||
! 赋初值
|
! 赋初值
|
||||||
R = 0.0
|
R = 0.0
|
||||||
RIMP = 0.0
|
RIMP = 0.0
|
||||||
|
|
||||||
@ -162,13 +163,15 @@ SUBROUTINE SUB_XAJMX( N ,& !
|
|||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
|
|
||||||
A = WMM * (1.0 - (1.0 - W0 / WM0) ** (1.0 / (1.0 + B)))
|
A = WMM * (1.0 - (1.0 - W0 / WM0) **&
|
||||||
|
(1.0 / (1.0 + B)))
|
||||||
|
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF ((PE + A) .LT. WMM) THEN
|
IF ((PE + A) .LT. WMM) THEN
|
||||||
|
|
||||||
R = PE - WM0 + W0 + WM0 * ((1.0 - (PE + A) / WMM) ** (1.0 + B))
|
R = PE - WM0 + W0 + WM0 * ((1.0 - (PE + A) /&
|
||||||
|
WMM) ** (1.0 + B))
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
|
|
||||||
@ -244,9 +247,10 @@ SUBROUTINE SUB_XAJMX( N ,& !
|
|||||||
S = X * S / FR
|
S = X * S / FR
|
||||||
SS = S
|
SS = S
|
||||||
Q = R / FR
|
Q = R / FR
|
||||||
NN = INT(Q / C5) + 1 ! 在vb程序中C5是双精度常数5
|
NN = INT(Q / C5) + 1 ! 在vb程序中C5是双精度常数5
|
||||||
Q = Q / NN
|
Q = Q / NN
|
||||||
KSSDD = (1.0 - (1.0 - (KGD + KSSD)) ** (1.0 / NN)) / (1.0 + KGD / KSSD)
|
KSSDD = (1.0 - (1.0 - (KGD + KSSD)) ** (1.0 / NN))&
|
||||||
|
/ (1.0 + KGD / KSSD)
|
||||||
KGDD = KSSDD * KGD / KSSD
|
KGDD = KSSDD * KGD / KSSD
|
||||||
RS = 0.0
|
RS = 0.0
|
||||||
RSS = 0.0
|
RSS = 0.0
|
||||||
@ -291,7 +295,8 @@ SUBROUTINE SUB_XAJMX( N ,& !
|
|||||||
|
|
||||||
ELSE IF ((Q + AU) .LT. SMMF) THEN
|
ELSE IF ((Q + AU) .LT. SMMF) THEN
|
||||||
|
|
||||||
RSD = (Q - SMF + S + SMF * (1.0 - (Q + AU) / SMMF) ** (1.0 + EX)) * FR
|
RSD = (Q - SMF + S + SMF * (1.0 - (Q + AU)&
|
||||||
|
/ SMMF) ** (1.0 + EX)) * FR
|
||||||
RSSD = (S + Q - RSD / FR) * KSSDD * FR
|
RSSD = (S + Q - RSD / FR) * KSSDD * FR
|
||||||
RGD = (S + Q - RSD / FR) * KGDD * FR
|
RGD = (S + Q - RSD / FR) * KGDD * FR
|
||||||
S = S + Q - (RSD + RSSD + RGD) / FR
|
S = S + Q - (RSD + RSSD + RGD) / FR
|
||||||
|
Loading…
Reference in New Issue
Block a user