Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 90 additions & 24 deletions hrldas/IO_code/module_NoahMP_hrldas_driver.F

Large diffs are not rendered by default.

216 changes: 214 additions & 2 deletions hrldas/IO_code/module_hrldas_netcdf_io.F
Original file line number Diff line number Diff line change
Expand Up @@ -751,13 +751,69 @@ subroutine read_crop_input(wrfinput_flnm, &

end subroutine read_crop_input

!---------------------------------------------------------------------------------------------------------

subroutine read_tile_drain_map(tdinput_flnm, &
xstart, xend, &
ystart, yend, &
td_fraction)

implicit none
character(len=*), intent(in) :: tdinput_flnm
integer, intent(in) :: xstart, xend, ystart, yend
real, dimension(xstart:xend,ystart:yend), intent(out) :: td_fraction
character(len=24) :: name
integer :: ierr,iret
integer :: ncid, varid
integer :: rank

#ifdef _PARALLEL_
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
if (ierr /= MPI_SUCCESS) stop "MPI_COMM_RANK"
#else
rank = 0
#endif


! Open the NetCDF file.
if (rank == 0) write(*,'("tdinput_flnm: ''", A, "''")') trim(tdinput_flnm)
#ifdef _PARALLEL_
ierr = nf90_open_par(tdinput_flnm, NF90_NOWRITE, MPI_COMM_WORLD, MPI_INFO_NULL, ncid)
#else
ierr = nf90_open(tdinput_flnm, NF90_NOWRITE, ncid)
#endif
if (ierr /= 0) then
write(*,'("read_tile_drain_map: Problem opening tdinput file: ''", A, "''")') trim(tdinput_flnm)
#ifdef _PARALLEL_
call mpi_finalize(ierr)
if (ierr /= 0) write(*, '("Problem with MPI_finalize.")')
#endif
stop
endif

! Get Tile Drain Fraction
name = "TD_FRACTION"
iret = nf90_inq_varid(ncid, name, varid)
if (iret == 0) then
ierr = nf90_get_var(ncid, varid, td_fraction, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
else
write(*,*) "MODULE_HRLDAS_NETCDF_IO: Problem finding variable '"//trim(name)//"' in NetCDF file. Using default values."
endif

! Close the NetCDF file
ierr = nf90_close(ncid)
if (ierr /= 0) stop "MODULE_NOAHLSM_HRLDAS_INPUT: read_tile_drain_map: NF90_CLOSE"

end subroutine read_tile_drain_map

!---------------------------------------------------------------------------------------------------------

subroutine read_3d_soil(spatial_filename,xstart, xend,ystart, yend, &
nsoil,bexp_3d,smcdry_3d,smcwlt_3d,smcref_3d,smcmax_3d, &
dksat_3d,dwsat_3d,psisat_3d,quartz_3d,refdk_2d,refkdt_2d,&
irr_frac_2d,irr_har_2d,irr_lai_2d,irr_mad_2d,filoss_2d,sprir_rate_2d,&
micir_rate_2d,firtfac_2d,ir_rain_2d)
micir_rate_2d,firtfac_2d,ir_rain_2d,bvic_2d,axaj_2d,bxaj_2d,xxaj_2d,&
bdvic_2d,gdvic_2d,bbvic_2d,klatfac,tdsmcfac,tddc,tddcoef,tdddrain,tdradi,tdspac)

implicit none
character(len=*), intent(in) :: spatial_filename
Expand All @@ -783,7 +839,21 @@ subroutine read_3d_soil(spatial_filename,xstart, xend,ystart, yend, &
real, dimension(xstart:xend,ystart:yend), intent(out) :: micir_rate_2d
real, dimension(xstart:xend,ystart:yend), intent(out) :: firtfac_2d
real, dimension(xstart:xend,ystart:yend), intent(out) :: ir_rain_2d

real, dimension(xstart:xend,ystart:yend), intent(out) :: bvic_2d
real, dimension(xstart:xend,ystart:yend), intent(out) :: axaj_2d
real, dimension(xstart:xend,ystart:yend), intent(out) :: bxaj_2d
real, dimension(xstart:xend,ystart:yend), intent(out) :: xxaj_2d
real, dimension(xstart:xend,ystart:yend), intent(out) :: bdvic_2d
real, dimension(xstart:xend,ystart:yend), intent(out) :: gdvic_2d
real, dimension(xstart:xend,ystart:yend), intent(out) :: bbvic_2d
real, dimension(xstart:xend,ystart:yend), intent(out) :: klatfac
real, dimension(xstart:xend,ystart:yend), intent(out) :: tdsmcfac
real, dimension(xstart:xend,ystart:yend), intent(out) :: tddc
real, dimension(xstart:xend,ystart:yend), intent(out) :: tddcoef
real, dimension(xstart:xend,ystart:yend), intent(out) :: tdddrain
real, dimension(xstart:xend,ystart:yend), intent(out) :: tdradi
real, dimension(xstart:xend,ystart:yend), intent(out) :: tdspac

character(len=24) :: name
character(len=256) :: units
integer :: ierr,iret, varid,isoil
Expand Down Expand Up @@ -1033,6 +1103,148 @@ subroutine read_3d_soil(spatial_filename,xstart, xend,ystart, yend, &

iret = nf90_get_var(ncid, varid, ir_rain_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))

! additional runoff opt_run=6~8
name = "BVIC"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, bvic_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "AXAJ"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, axaj_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "BXAJ"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, bxaj_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "XXAJ"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, xxaj_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "BDVIC"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, bdvic_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "GDVIC"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, gdvic_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "BBVIC"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, bbvic_2d, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))

! tile drainage
name = "KLAT_FAC"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, klatfac, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "TDSMC_FAC"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, tdsmcfac, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "TD_DC"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, tddc, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "TD_DCOEF"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, tddcoef, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "TD_DDRAIN"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, tdddrain, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "TD_RADI"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, tdradi, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))
!
name = "TD_SPAC"
iret = nf90_inq_varid(ncid, trim(name), varid)
if (iret /= 0) then
print*, 'ncid = ', ncid
write(*,*) "FATAL ERROR: In read_3d_soil(): Problem finding variable '"//trim(name)//"' in NetCDF file: " // trim(spatial_filename)
stop
endif

iret = nf90_get_var(ncid, varid, tdspac, start=(/xstart,ystart/), count=(/xend-xstart+1,yend-ystart+1/))


! Close the NetCDF file
ierr = nf90_close(ncid)
Expand Down
13 changes: 13 additions & 0 deletions hrldas/run/README.namelist
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,14 @@
! **3 -> original surface and subsurface runoff (free drainage)
! 4 -> BATS surface and subsurface runoff (free drainage)
! 5 -> Miguez-Macho&Fan groundwater scheme (Miguez-Macho et al. 2007 JGR; Fan et al. 2007 JGR)
! 6 -> Variable Infiltration Capacity Model surface runoff scheme (Wood et al., 1992, JGR)
! 7 -> Xiananjiang Infiltration and surface runoff scheme ((Jayawardena and Zhou, 2000)
! 8 -> Dynamic VIC surface runoff scheme (Liang and Xie, 2001)

DVIC_INFILTRATION_OPTION = 1 ! options for infiltration in dynamic VIC runoff scheme (only works when RUNOFF_OPTION=8, default=1)
! **1 -> Philip scheme
! 2 -> Green-Ampt scheme
! 3 -> Smith-Parlange scheme

SURFACE_DRAG_OPTION = 1 ! options for surface layer drag coeff [default = none]

Expand Down Expand Up @@ -225,5 +233,10 @@
2 -> micro/drip irrigation
3 -> surface flooding

TILE_DRAINAGE_OPTION = 0, ! options for tile drainage [default = 0] (currently only tested & works with opt_run=3)
geogrid must have been run with GEOGRID.TBL.ARW.noahmp, use with caution
0 -> No tile drainage
1 -> Simple drainage
2 -> Hooghoudt's equation based tile drainage

/
Loading