Skip to content

Commit 73df087

Browse files
authored
Scale qflx_parflow at the column instead of the gridcell level (#62)
* fix: change qflx_parflow_col unit to 1/hr, remove unit transformation for qflx_parflow_grc * qflx_parflow unit transformation r8 compliant * set nan values of qflx_parflow_grc to zero * clean-up * fix qflx_drain * use array operation for converting qflx_parflow units
1 parent e43ec43 commit 73df087

3 files changed

Lines changed: 25 additions & 26 deletions

File tree

src/clm5/biogeophys/SoilHydrologyMod.F90

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2362,9 +2362,13 @@ subroutine ParFlowDrainage(bounds, num_hydrologyc, filter_hydrologyc, &
23622362
! !LOCAL VARIABLES:
23632363
character(len=32) :: subname = 'ParFlowDrainage' ! subroutine name
23642364
integer :: c,j,fc ! indices
2365+
real(r8), parameter :: m_per_mm = 1.e-3_r8 ! 0.001 meters per mm
2366+
real(r8), parameter :: sec_per_hr = 3600._r8 ! 3600 s in 1 hour
2367+
23652368
!-----------------------------------------------------------------------
23662369

2367-
associate( &
2370+
associate( &
2371+
dz => col%dz , & ! Input: [real(r8) (:,:) ] layer depth (m)
23682372
qflx_snwcp_liq => waterflux_inst%qflx_snwcp_liq_col , & ! excess rainfall due to snow capping (mm H2O /s) [+]
23692373
qflx_drain => waterflux_inst%qflx_drain_col , & ! sub-surface runoff (mm H2O /s)
23702374
qflx_drain_perched => waterflux_inst%qflx_drain_perched_col , & ! perched wt sub-surface runoff (mm H2O /s)
@@ -2377,25 +2381,25 @@ subroutine ParFlowDrainage(bounds, num_hydrologyc, filter_hydrologyc, &
23772381

23782382
! COUP_OAS_PFL
23792383
! Calculate here the source/sink term for ParFlow
2380-
do j = 1, nlevsoi
2381-
do fc = 1, num_hydrologyc
2382-
c = filter_hydrologyc(fc)
2384+
do fc = 1, num_hydrologyc
2385+
c = filter_hydrologyc(fc)
2386+
do j = 1, nlevsoi
23832387
if (j == 1) then
23842388
! From SoilWaterPlantSinkMod:
23852389
! qflx_rootsoi_col(c,j) = rootr_col(c,j)*qflx_tran_veg_col(c)
2386-
qflx_parflow(c,j) = (qflx_infl(c) - qflx_rootsoi(c,j)) !* 3.6_r8 / dz(c,j)
2390+
qflx_parflow(c,j) = (qflx_infl(c) - qflx_rootsoi(c,j)) !mm/s
23872391
else
2388-
qflx_parflow(c,j) = -qflx_rootsoi(c,j) !* 3.6_r8 / dz(c,j)
2392+
qflx_parflow(c,j) = -qflx_rootsoi(c,j) !mm/s
23892393
end if
23902394
end do
2391-
end do
2392-
2393-
do fc = 1, num_hydrologyc
2394-
c = filter_hydrologyc(fc)
2395-
qflx_drain(c) = -sum(qflx_parflow(c,:)) !0._r8
2395+
! Compute subsurface run-off (mm/s)
2396+
qflx_drain(c) = -sum(qflx_parflow(c,:))
23962397
qflx_drain_perched(c) = 0._r8
23972398
qflx_rsub_sat(c) = 0._r8
23982399
qflx_qrgwl(c) = qflx_snwcp_liq(c) ! Set imbalance for snow capping
2400+
! Convert eCLM fluxes (mm/s) to ParFlow fluxes (1/hr):
2401+
! 1/hr = [mm/s] * [s/hr] * [m/mm] * [1/m]
2402+
qflx_parflow(c,1:nlevsoi) = qflx_parflow(c,1:nlevsoi) * sec_per_hr * m_per_mm * (1._r8/dz(c,1:nlevsoi))
23992403
end do
24002404

24012405
! No drainage for urban columns (necessary to account for water balance errors)

src/clm5/biogeophys/WaterfluxType.F90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ module WaterfluxType
7373
real(r8), pointer :: qflx_adv_col (:,:) ! col advective flux across different soil layer interfaces [mm H2O/s] [+ downward]
7474
real(r8), pointer :: qflx_rootsoi_col (:,:) ! col root and soil water exchange [mm H2O/s] [+ into root]
7575
#ifdef COUP_OAS_PFL
76-
real(r8), pointer :: qflx_parflow_col (:,:) ! col source/sink flux per soil layer sent to ParFlow [mm H2O/s] [- out from root]
76+
real(r8), pointer :: qflx_parflow_col (:,:) ! col source/sink flux per soil layer sent to ParFlow [1/hr] [- out from root]
7777
#endif
7878
real(r8), pointer :: qflx_infl_col (:) ! col infiltration (mm H2O /s)
7979
real(r8), pointer :: qflx_surf_col (:) ! col surface runoff (mm H2O /s)

src/clm5/main/lnd2atmMod.F90

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,6 @@ subroutine lnd2atm(bounds, &
162162
real(r8), parameter :: amC = 12.0_r8 ! Atomic mass number for Carbon
163163
real(r8), parameter :: amO = 16.0_r8 ! Atomic mass number for Oxygen
164164
real(r8), parameter :: amCO2 = amC + 2.0_r8*amO ! Atomic mass number for CO2
165-
real(r8), parameter :: m_per_mm = 1.e-3_r8 ! 0.001 meters per mm
166-
real(r8), parameter :: sec_per_hr = 3600 ! 3600 s in 1 hour
167165
! The following converts g of C to kg of CO2
168166
real(r8), parameter :: convertgC2kgCO2 = 1.0e-3_r8 * (amCO2/amC)
169167
!------------------------------------------------------------------------
@@ -433,18 +431,15 @@ subroutine lnd2atm(bounds, &
433431
lnd2atm_inst%qflx_parflow_grc (bounds%begg:bounds%endg, :), &
434432
c2l_scale_type= 'unity', l2g_scale_type='unity' )
435433

436-
do c = bounds%begc, bounds%endc
437-
if (col%hydrologically_active(c)) then
438-
if (col%itype(c) == istsoil .or. col%itype(c) == istcrop) then
439-
g = col%gridcell(c)
440-
do j = 1, nlevsoi
441-
! Convert eCLM fluxes (mm/s) to ParFlow fluxes (1/hr):
442-
! 1/hr = [mm/s] * [s/hr] * [m/mm] * [1/m]
443-
lnd2atm_inst%qflx_parflow_grc(g,j) = lnd2atm_inst%qflx_parflow_grc(g,j) * sec_per_hr * m_per_mm * (1/col%dz(c,j))
444-
enddo
445-
end if
446-
end if
447-
end do
434+
! adjust nan values after c2g, need to be rechecked
435+
do g = bounds%begg, bounds%endg
436+
do j = 1, nlevsoi
437+
if (lnd2atm_inst%qflx_parflow_grc(g,j) == spval) then
438+
lnd2atm_inst%qflx_parflow_grc(g,j) = 0._r8
439+
write(iulog,*)'WARNING: qflx_parflow_grc is nan at grid point ',g,' level',j,' replaced with 0.'
440+
end if
441+
end do
442+
enddo
448443
#endif
449444

450445
end subroutine lnd2atm

0 commit comments

Comments
 (0)