readlwq.f
来自「水文模型的原始代码」· F 代码 · 共 184 行
F
184 行
subroutine readlwq
!! ~ ~ ~ PURPOSE ~ ~ ~
!! this subroutine reads data from the lake water quality input file (.lwq).
!! This file contains data related to initial pesticide and nutrient levels
!! in the lake/reservoir and transformation processes occuring within the
!! lake/reservoir. Data in the lake water quality input file is assumed to
!! apply to all reservoirs in the watershed.
!! ~ ~ ~ INCOMING VARIABLES ~ ~ ~
!! name |units |definition
!! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!! i |none |reservoir number
!! res_vol(:) |m**3 |reservoir volume
!! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!! ~ ~ ~ OUTGOING VARIABLES ~ ~ ~
!! name |units |definition
!! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!! chlar(:) |none |chlorophyll-a production coefficient for
!! |reservoir
!! ires1(:) |none |beginning of mid-year nutrient settling
!! |"season"
!! ires2(:) |none |end of mid-year nutrient settling "season"
!! lkpst_conc(:) |mg/m**3 |pesticide concentration in lake water
!! lkpst_koc(:) |m**3/g |pesticide partition coefficient between
!! |water and sediment in lake water
!! lkpst_mix(:) |m/day |mixing velocity (diffusion/dispersion) in
!! |lake water for pesticide
!! lkpst_rea(:) |1/day |pesticide reaction coefficient in lake water
!! lkpst_rsp(:) |m/day |resuspension velocity in lake water for
!! |pesticide sorbed to sediment
!! lkpst_stl(:) |m/day |settling velocity in lake water for
!! |pesticide sorbed to sediment
!! lkpst_vol(:) |m/day |pesticide volatilization coefficient in lake
!! |water
!! lkspst_act(:) |m |depth of active sediment layer in lake for
!! |for pesticide
!! lkspst_bry(:) |m/day |pesticide burial velocity in lake bed
!! |sediment
!! lkspst_conc(:)|mg/m**3 |pesticide concentration in lake bed sediment
!! lkspst_rea(:) |1/day |pesticide reaction coefficient in lake bed
!! |sediment
!! nsetlr(1,:) |m/day |nitrogen settling rate for mid-year
!! |period (read in as m/year and converted to
!! |m/day)
!! nsetlr(2,:) |m/day |nitrogen settling rate for remainder of
!! |year (read in as m/year and converted to
!! |m/day)
!! psetlr(1,:) |m/day |phosphorus settling rate for mid-year
!! |period (read in as m/year and converted to
!! |m/day)
!! psetlr(2,:) |m/day |phosphorus settling rate for remainder of
!! |year (read in as m/year and converted to
!! |m/day)
!! res_nh3(:) |kg N |amount of ammonia in reservoir
!! res_no2(:) |kg N |amount of nitrite in reservoir
!! res_no3(:) |kg N |amount of nitrate in reservoir
!! res_orgn(:) |kg N |amount of organic N in reservoir
!! res_orgp(:) |kg P |amount of organic P in reservoir
!! res_solp(:) |kg P |amount of soluble P in reservoir
!! seccir(:) |none |water clarity coefficient for reservoir
!! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!! ~ ~ ~ LOCAL DEFINITIONS ~ ~ ~
!! name |units |definition
!! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!! eof |none |end of file flag
!! nh3i |mg N/L |initial concentration of ammonia in reservoir
!! no2i |mg N/L |initial concentration of nitrite in reservoir
!! no3i |mg N/L |initial concentration of nitrate in reservoir
!! orgni |mg N/L |initial concentration of organic N in
!! |reservoir
!! orgpi |mg P/L |initial concentration of organic P in
!! |reservoir
!! solpi |mg P/L |initial concentration of soluble P in
!! |reservoir
!! titldum |NA |title line of .lwq file
!! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!! ~ ~ ~ ~ ~ ~ END SPECIFICATIONS ~ ~ ~ ~ ~ ~
use parm
integer :: eof
character (len=80) :: titldum
real :: orgpi, solpi, orgni, no3i, nh3i, no2i
real :: lkarea
eof = 0
titldum = ""
orgpi = 0.
solpi = 0.
orgni = 0.
no3i = 0.
nh3i = 0.
no2i = 0.
!! read lake water quality data
do
read (106,1000,iostat=eof) titldum
if (eof < 0) exit
read (106,1000,iostat=eof) titldum
if (eof < 0) exit
read (106,*,iostat=eof) ires1(i)
if (eof < 0) exit
read (106,*,iostat=eof) ires2(i)
if (eof < 0) exit
read (106,*,iostat=eof) psetlr(1,i)
if (eof < 0) exit
read (106,*,iostat=eof) psetlr(2,i)
if (eof < 0) exit
read (106,*,iostat=eof) nsetlr(1,i)
if (eof < 0) exit
read (106,*,iostat=eof) nsetlr(2,i)
if (eof < 0) exit
read (106,*,iostat=eof) chlar(i)
if (eof < 0) exit
read (106,*,iostat=eof) seccir(i)
if (eof < 0) exit
read (106,*,iostat=eof) orgpi
if (eof < 0) exit
read (106,*,iostat=eof) solpi
if (eof < 0) exit
read (106,*,iostat=eof) orgni
if (eof < 0) exit
read (106,*,iostat=eof) no3i
if (eof < 0) exit
read (106,*,iostat=eof) nh3i
if (eof < 0) exit
read (106,*,iostat=eof) no2i
if (eof < 0) exit
read (106,1000,iostat=eof) titldum
if (eof < 0) exit
read (106,*,iostat=eof) lkpst_conc(i)
if (eof < 0) exit
read (106,*,iostat=eof) lkpst_rea(i)
if (eof < 0) exit
read (106,*,iostat=eof) lkpst_vol(i)
if (eof < 0) exit
read (106,*,iostat=eof) lkpst_koc(i)
if (eof < 0) exit
read (106,*,iostat=eof) lkpst_stl(i)
if (eof < 0) exit
read (106,*,iostat=eof) lkpst_rsp(i)
if (eof < 0) exit
read (106,*,iostat=eof) lkpst_mix(i)
if (eof < 0) exit
read (106,*,iostat=eof) lkspst_conc(i)
if (eof < 0) exit
read (106,*,iostat=eof) lkspst_rea(i)
if (eof < 0) exit
read (106,*,iostat=eof) lkspst_bry(i)
if (eof < 0) exit
read (106,*,iostat=eof) lkspst_act(i)
if (eof < 0) exit
exit
end do
!! convert units
psetlr(1,i) = psetlr(1,i) / 365. !m/yr -> m/day
psetlr(2,i) = psetlr(2,i) / 365.
nsetlr(1,i) = nsetlr(1,i) / 365.
nsetlr(2,i) = nsetlr(2,i) / 365.
! set initial n and p concentrations --> (ppm) * (m^3) / 1000 = kg
! ppm = t/m^3 * 10^6
res_solp(i) = solpi * res_vol(i) / 1000.
res_orgp(i) = orgpi * res_vol(i) / 1000.
res_no3(i) = no3i * res_vol(i) / 1000.
res_no2(i) = no2i * res_vol(i) / 1000.
res_nh3(i) = nh3i * res_vol(i) / 1000.
res_orgn(i) = orgni * res_vol(i) / 1000.
!! lake pesticide mass
lkpst_mass(i) = lkpst_conc(i) * res_vol(i)
lkarea = br1(i) * res_vol(i) ** br2(i)
lkspst_mass(i) = lkspst_conc(i) * lkspst_act(i) * lkarea * 10000.
close (106)
return
1000 format (a80)
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?