From 751d5c738df6aad2540fae3e83f45b97faf56a64 Mon Sep 17 00:00:00 2001 From: dustinswales Date: Tue, 1 Nov 2022 17:42:04 -0600 Subject: [PATCH 01/48] Set fv3atm fork used in CI to NCAR, from NOAA-EMC --- .github/workflows/ci_fv3_ccpp_prebuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci_fv3_ccpp_prebuild.yml b/.github/workflows/ci_fv3_ccpp_prebuild.yml index a32b66b7b..1d41a2891 100644 --- a/.github/workflows/ci_fv3_ccpp_prebuild.yml +++ b/.github/workflows/ci_fv3_ccpp_prebuild.yml @@ -26,7 +26,7 @@ jobs: run: echo "GIT_REMOTE_HASH=`git rev-parse HEAD`" >> $GITHUB_ENV - name: Checkout latest fv3atm - run: git clone https://github.com/NOAA-EMC/fv3atm.git + run: git clone https://github.com/NCAR/fv3atm.git - name: Initialize submodules run: | From a4aac0362433d0912ad497bf2e5375b150e5fd49 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Thu, 10 Nov 2022 19:24:07 -0500 Subject: [PATCH 02/48] adding soil color data --- physics/GFS_debug.F90 | 10 +- physics/GFS_debug.meta | 7 + physics/GFS_phys_time_vary.fv3.F90 | 12 +- physics/GFS_phys_time_vary.fv3.meta | 7 + physics/GFS_surface_generic_post.F90 | 14 +- physics/GFS_surface_generic_post.meta | 28 +++ physics/GFS_surface_generic_pre.F90 | 31 ++- physics/GFS_surface_generic_pre.meta | 30 ++- physics/gcycle.F90 | 8 +- physics/noahmp_tables.f90 | 23 +- physics/noahmpdrv.F90 | 6 +- physics/noahmpdrv.meta | 7 + physics/sfcsub.F | 328 ++++++++++++++++++++------ 13 files changed, 401 insertions(+), 110 deletions(-) diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index 5e6419256..279b6df22 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -488,6 +488,10 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%vtype_save', Sfcprop%vtype_save) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%stype' , Sfcprop%stype) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%stype_save', Sfcprop%stype_save) + + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%scolor' , Sfcprop%scolor) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%scolore_save', Sfcprop%scolor_save) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%uustar' , Sfcprop%uustar) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%oro' , Sfcprop%oro) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%oro_uf' , Sfcprop%oro_uf) @@ -1524,7 +1528,7 @@ module GFS_checkland !! \htmlinclude GFS_checkland_run.html !! subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_guess, & - flag_init, flag_restart, frac_grid, isot, ivegsrc, stype, vtype, slope, & + flag_init, flag_restart, frac_grid, isot, ivegsrc, stype,scolor, vtype, slope, & dry, icy, wet, lake, ocean, oceanfrac, landfrac, lakefrac, slmsk, islmsk, & zorl, zorlw, zorll, zorli, fice, errmsg, errflg ) @@ -1547,6 +1551,8 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ integer, intent(in ) :: isot integer, intent(in ) :: ivegsrc integer, intent(in ) :: stype(:) + integer, intent(in ) :: scolor(:) + integer, intent(in ) :: vtype(:) integer, intent(in ) :: slope(:) logical, intent(in ) :: dry(:) @@ -1591,6 +1597,8 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, flag_iter(i) :', i, blkno, flag_iter(i) write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, flag_guess(i) :', i, blkno, flag_guess(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, stype(i) :', i, blkno, stype(i) + + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, scolor(i) :', i, blkno, scolor(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, vtype(i) :', i, blkno, vtype(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, slope(i) :', i, blkno, slope(i) write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, dry(i) :', i, blkno, dry(i) diff --git a/physics/GFS_debug.meta b/physics/GFS_debug.meta index 23175ce0f..1ad24e1d6 100644 --- a/physics/GFS_debug.meta +++ b/physics/GFS_debug.meta @@ -543,6 +543,13 @@ dimensions = (horizontal_loop_extent) type = integer intent = in +[scolor] + standard_name = soil_color_classification + long_name = soil color for lsm + units = index + dimensions = (horizontal_loop_extent) + type = integer + intent = in [vtype] standard_name = vegetation_type_classification long_name = vegetation type for lsm diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index 796856ad3..1e40df0ca 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -160,6 +160,7 @@ subroutine GFS_phys_time_vary_init ( real(kind_phys), intent(inout) :: tsnoxy (:,lsnow_lsm_lbound:) real(kind_phys), intent(inout) :: smoiseq(:,:) real(kind_phys), intent(inout) :: zsnsoxy(:,lsnow_lsm_lbound:) + real(kind_phys), intent(inout) :: slc(:,:) real(kind_phys), intent(inout) :: smc(:,:) real(kind_phys), intent(inout) :: stc(:,:) @@ -168,6 +169,7 @@ subroutine GFS_phys_time_vary_init ( real(kind_phys), intent(in) :: canopy(:) real(kind_phys), intent(in) :: tg3(:) integer, intent(in) :: stype(:) + real(kind_phys), intent(in) :: con_t0c integer, intent(in) :: nthrds @@ -465,8 +467,8 @@ subroutine GFS_phys_time_vary_init ( !$OMP shared(isbarren_table,isice_table,isurban_table) & !$omp shared(iswater_table,laim_table,sla_table,bexp_table) & !$omp shared(stc,smc,slc,tg3,snowxy,tsnoxy,snicexy,snliqxy) & -!$omp shared(zsnsoxy,STYPE,SMCMAX_TABLE,SMCWLT_TABLE,zs,dzs) & -!$omp shared(DWSAT_TABLE,DKSAT_TABLE,PSISAT_TABLE,smoiseq) & +!$omp shared(zsnsoxy,stype,smcmax_table,smcwlt_table,zs,dzs) & +!$omp shared(dwsat_table,dksat_table,psisat_table,smoiseq) & !$OMP shared(smcwtdxy,deeprechxy,rechxy,errmsg,errflg) & !$OMP private(vegtyp,masslai,masssai,snd,dzsno,dzsnso,isnow) & !$OMP private(soiltyp,bexp,smcmax,smcwlt,dwsat,dksat,psisat,ddz) @@ -717,7 +719,7 @@ subroutine GFS_phys_time_vary_timestep_init ( kice, ialb, isot, ivegsrc, input_nml_file, use_ufo, nst_anl, frac_grid, fhcyc, phour, & lakefrac, min_seaice, min_lakeice, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, & tsfc, tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, zorli, zorll, & - zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, stype, shdmin, shdmax, snowd, & + zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, stype,scolor, shdmin, shdmax, snowd, & !soil color cv, cvb, cvt, oro, oro_uf, xlat_d, xlon_d, slmsk, landfrac, & do_ugwp_v1, jindx1_tau, jindx2_tau, ddy_j1tau, ddy_j2tau, tau_amf, errmsg, errflg) @@ -763,7 +765,7 @@ subroutine GFS_phys_time_vary_timestep_init ( zorli(:), zorll(:), zorlo(:), weasd(:), snoalb(:), & canopy(:), vfrac(:), shdmin(:), shdmax(:), & snowd(:), cv(:), cvb(:), cvt(:), oro(:), oro_uf(:), slmsk(:) - integer, intent(inout) :: vtype(:), stype(:), slope(:) + integer, intent(inout) :: vtype(:), stype(:),scolor(:), slope(:) !soil color character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -899,7 +901,7 @@ subroutine GFS_phys_time_vary_timestep_init ( frac_grid, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, tsfc, & tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, & zorli, zorll, zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, & - stype, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, & + stype,scolor, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, & !soil color xlat_d, xlon_d, slmsk, imap, jmap) endif endif diff --git a/physics/GFS_phys_time_vary.fv3.meta b/physics/GFS_phys_time_vary.fv3.meta index f37235975..202ef9853 100644 --- a/physics/GFS_phys_time_vary.fv3.meta +++ b/physics/GFS_phys_time_vary.fv3.meta @@ -1712,6 +1712,13 @@ dimensions = (horizontal_dimension) type = integer intent = inout +[scolor] + standard_name = soil_color_classification + long_name = soil color for lsm + units = index + dimensions = (horizontal_dimension) + type = integer + intent = in [shdmin] standard_name = min_vegetation_area_fraction long_name = min fractional coverage of green vegetation diff --git a/physics/GFS_surface_generic_post.F90 b/physics/GFS_surface_generic_post.F90 index 76d3f570c..9faebc8cf 100644 --- a/physics/GFS_surface_generic_post.F90 +++ b/physics/GFS_surface_generic_post.F90 @@ -21,10 +21,10 @@ module GFS_surface_generic_post !> \section arg_table_GFS_surface_generic_post_init Argument Table !! \htmlinclude GFS_surface_generic_post_init.html !! - subroutine GFS_surface_generic_post_init (vtype, stype, slope, vtype_save, stype_save, slope_save, errmsg, errflg) + subroutine GFS_surface_generic_post_init (vtype, stype,scolor, slope, vtype_save, stype_save,scolor_save, slope_save, errmsg, errflg) - integer, dimension(:), intent(in) :: vtype_save, stype_save, slope_save - integer, dimension(:), intent(out) :: vtype, stype, slope + integer, dimension(:), intent(in) :: vtype_save, stype_save,scolor_save, slope_save + integer, dimension(:), intent(out) :: vtype, stype, scolor,slope ! CCPP error handling character(len=*), intent(out) :: errmsg @@ -37,6 +37,7 @@ subroutine GFS_surface_generic_post_init (vtype, stype, slope, vtype_save, stype ! Restore vegetation, soil and slope type vtype(:) = vtype_save(:) stype(:) = stype_save(:) + scolor(:) = scolor_save(:) slope(:) = slope_save(:) end subroutine GFS_surface_generic_post_init @@ -53,7 +54,7 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl v10mi_cpl, tsfci_cpl, psurfi_cpl, nnirbmi_cpl, nnirdfi_cpl, nvisbmi_cpl, nvisdfi_cpl, nswsfci_cpl, nswsfc_cpl, nnirbm_cpl, & nnirdf_cpl, nvisbm_cpl, nvisdf_cpl, gflux, evbsa, evcwa, transa, sbsnoa, snowca, snohfa, paha, ep, ecan, etran, edir, waxy, & runoff, srunoff, runof, drain, tecan, tetran, tedir, twa, lheatstrg, h0facu, h0facs, zvfun, hflx, evap, hflxq, hffac, & - isot, ivegsrc, islmsk, vtype, stype, slope, vtype_save, stype_save, slope_save, errmsg, errflg) + isot, ivegsrc, islmsk, vtype, stype,scolor, slope, vtype_save, stype_save,scolor_save, slope_save, errmsg, errflg) implicit none @@ -85,8 +86,8 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl real(kind=kind_phys), dimension(:), intent(out) :: hflxq real(kind=kind_phys), dimension(:), intent(out) :: hffac - integer, intent(in) :: isot, ivegsrc, islmsk(:), vtype_save(:), stype_save(:), slope_save(:) - integer, intent(out) :: vtype(:), stype(:), slope(:) + integer, intent(in) :: isot, ivegsrc, islmsk(:), vtype_save(:), stype_save(:),scolor_save(:), slope_save(:) + integer, intent(out) :: vtype(:), stype(:),scolor(:), slope(:) ! CCPP error handling variables character(len=*), intent(out) :: errmsg @@ -274,6 +275,7 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl ! Restore vegetation, soil and slope type vtype(:) = vtype_save(:) stype(:) = stype_save(:) + scolor(:) = scolor_save(:) slope(:) = slope_save(:) end subroutine GFS_surface_generic_post_run diff --git a/physics/GFS_surface_generic_post.meta b/physics/GFS_surface_generic_post.meta index aeb5c9754..9658be7d8 100644 --- a/physics/GFS_surface_generic_post.meta +++ b/physics/GFS_surface_generic_post.meta @@ -22,6 +22,13 @@ dimensions = (horizontal_dimension) type = integer intent = out +[scolor] + standard_name = soil_color_classification + long_name = soil color for lsm + units = index + dimensions = (horizontal_dimension) + type = integer + intent = out [slope] standard_name = surface_slope_classification long_name = sfc slope type for lsm @@ -43,6 +50,13 @@ dimensions = (horizontal_dimension) type = integer intent = in +[scolor_save] + standard_name = soil_color_classification_save + long_name = soil color for lsm save + units = index + dimensions = (horizontal_dimension) + type = integer + intent = in [slope_save] standard_name = surface_slope_classification_save long_name = sfc slope type for lsm save @@ -988,6 +1002,13 @@ dimensions = (horizontal_loop_extent) type = integer intent = out +[scolor] + standard_name = soil_color_classification + long_name = soil color for lsm + units = index + dimensions = (horizontal_loop_extent) + type = integer + intent = out [slope] standard_name = surface_slope_classification long_name = sfc slope type for lsm @@ -1009,6 +1030,13 @@ dimensions = (horizontal_loop_extent) type = integer intent = in +[scolor_save] + standard_name = soil_color_classification_save + long_name = soil color for lsm save + units = index + dimensions = (horizontal_loop_extent) + type = integer + intent = in [slope_save] standard_name = surface_slope_classification_save long_name = sfc slope type for lsm save diff --git a/physics/GFS_surface_generic_pre.F90 b/physics/GFS_surface_generic_pre.F90 index 6ecb2f713..5d321814c 100644 --- a/physics/GFS_surface_generic_pre.F90 +++ b/physics/GFS_surface_generic_pre.F90 @@ -21,16 +21,16 @@ module GFS_surface_generic_pre !> \section arg_table_GFS_surface_generic_pre_init Argument Table !! \htmlinclude GFS_surface_generic_pre_init.html !! - subroutine GFS_surface_generic_pre_init (nthreads, im, slmsk, isot, ivegsrc, stype, vtype, slope, & - vtype_save, stype_save, slope_save, errmsg, errflg) + subroutine GFS_surface_generic_pre_init (nthreads, im, slmsk, isot, ivegsrc, stype,scolor, vtype, slope, & + vtype_save, stype_save,scolor_save, slope_save, errmsg, errflg) implicit none ! Interface variables integer, intent(in) :: nthreads, im, isot, ivegsrc real(kind_phys), dimension(:), intent(in) :: slmsk - integer, dimension(:), intent(inout) :: vtype, stype, slope - integer, dimension(:), intent(out) :: vtype_save, stype_save, slope_save + integer, dimension(:), intent(inout) :: vtype, stype, scolor,slope + integer, dimension(:), intent(out) :: vtype_save, stype_save,scolor_save, slope_save ! CCPP error handling character(len=*), intent(out) :: errmsg @@ -49,22 +49,23 @@ subroutine GFS_surface_generic_pre_init (nthreads, im, slmsk, isot, ivegsrc, sty ! Save current values of vegetation, soil and slope type vtype_save(:) = vtype(:) stype_save(:) = stype(:) + scolor_save(:) = scolor(:) slope_save(:) = slope(:) - call update_vegetation_soil_slope_type(nthreads, im, isot, ivegsrc, islmsk, vtype, stype, slope) + call update_vegetation_soil_slope_type(nthreads, im, isot, ivegsrc, islmsk, vtype, stype,scolor, slope) end subroutine GFS_surface_generic_pre_init !> \section arg_table_GFS_surface_generic_pre_run Argument Table !! \htmlinclude GFS_surface_generic_pre_run.html !! - subroutine GFS_surface_generic_pre_run (nthreads, im, levs, vfrac, islmsk, isot, ivegsrc, stype, vtype, slope, & + subroutine GFS_surface_generic_pre_run (nthreads, im, levs, vfrac, islmsk, isot, ivegsrc, stype, scolor,vtype, slope, & prsik_1, prslk_1, tsfc, phil, con_g, sigmaf, work3, zlvl, & drain_cpl, dsnow_cpl, rain_cpl, snow_cpl, lndp_type, n_var_lndp, sfc_wts, & lndp_var_list, lndp_prt_list, & z01d, zt1d, bexp1d, xlai1d, vegf1d, lndp_vgf, & cplflx, flag_cice, islmsk_cice, slimskin_cpl, & - wind, u1, v1, cnvwind, smcwlt2, smcref2, vtype_save, stype_save, slope_save, & + wind, u1, v1, cnvwind, smcwlt2, smcref2, vtype_save, stype_save,scolor_save, slope_save, & errmsg, errflg) use surface_perturbation, only: cdfnor @@ -77,8 +78,8 @@ subroutine GFS_surface_generic_pre_run (nthreads, im, levs, vfrac, islmsk, isot, real(kind=kind_phys), intent(in) :: con_g real(kind=kind_phys), dimension(:), intent(in) :: vfrac, prsik_1, prslk_1 - integer, dimension(:), intent(inout) :: vtype, stype, slope - integer, dimension(:), intent(out) :: vtype_save(:), stype_save(:), slope_save(:) + integer, dimension(:), intent(inout) :: vtype, stype,scolor, slope + integer, dimension(:), intent(out) :: vtype_save(:), stype_save(:),scolor_save(:), slope_save(:) real(kind=kind_phys), dimension(:), intent(inout) :: tsfc real(kind=kind_phys), dimension(:,:), intent(in) :: phil @@ -159,9 +160,10 @@ subroutine GFS_surface_generic_pre_run (nthreads, im, levs, vfrac, islmsk, isot, ! Save current values of vegetation, soil and slope type vtype_save(:) = vtype(:) stype_save(:) = stype(:) + scolor_save(:) = scolor(:) slope_save(:) = slope(:) - call update_vegetation_soil_slope_type(nthreads, im, isot, ivegsrc, islmsk, vtype, stype, slope) + call update_vegetation_soil_slope_type(nthreads, im, isot, ivegsrc, islmsk, vtype, stype,scolor, slope) do i=1,im sigmaf(i) = max(vfrac(i), 0.01_kind_phys) @@ -191,16 +193,19 @@ subroutine GFS_surface_generic_pre_run (nthreads, im, levs, vfrac, islmsk, isot, end subroutine GFS_surface_generic_pre_run - subroutine update_vegetation_soil_slope_type(nthreads, im, isot, ivegsrc, islmsk, vtype, stype, slope) + subroutine update_vegetation_soil_slope_type(nthreads, im, isot, ivegsrc, islmsk, vtype, stype,scolor, slope) implicit none integer, intent(in) :: nthreads, im, isot, ivegsrc, islmsk(:) - integer, intent(inout) :: vtype(:), stype(:), slope(:) + integer, intent(inout) :: vtype(:), stype(:),scolor(:), slope(:) integer :: i !$OMP parallel do num_threads(nthreads) default(none) private(i) & -!$OMP shared(im, isot, ivegsrc, islmsk, vtype, stype, slope) +!$OMP shared(im, isot, ivegsrc, islmsk, vtype, stype,scolor, slope) + +! scolor is a place holder now, how to update soil color based on the mask/veg/sot src + do i=1,im if (islmsk(i) == 2) then if (isot == 1) then diff --git a/physics/GFS_surface_generic_pre.meta b/physics/GFS_surface_generic_pre.meta index f5b7f7f27..d78988787 100644 --- a/physics/GFS_surface_generic_pre.meta +++ b/physics/GFS_surface_generic_pre.meta @@ -50,6 +50,13 @@ dimensions = (horizontal_dimension) type = integer intent = inout +[scolor] + standard_name = soil_color_classification + long_name = soil color for lsm + units = index + dimensions = (horizontal_dimension) + type = integer + intent = inout [vtype] standard_name = vegetation_type_classification long_name = vegetation type for lsm @@ -71,6 +78,13 @@ dimensions = (horizontal_dimension) type = integer intent = out +[scolor_save] + standard_name = soil_color_classification_save + long_name = soil color for lsm save + units = index + dimensions = (horizontal_dimension) + type = integer + intent = out [vtype_save] standard_name = vegetation_type_classification_save long_name = vegetation type for lsm save @@ -162,6 +176,13 @@ dimensions = (horizontal_loop_extent) type = integer intent = inout +[scolor] + standard_name = soil_color_classification + long_name = soil color for lsm + units = index + dimensions = (horizontal_loop_extent) + type = integer + intent = inout [vtype] standard_name = vegetation_type_classification long_name = vegetation type for lsm @@ -190,6 +211,13 @@ dimensions = (horizontal_loop_extent) type = integer intent = out +[scolor_save] + standard_name = soil_color_classification_save + long_name = soil color for lsm save + units = index + dimensions = (horizontal_loop_extent) + type = integer + intent = out [slope_save] standard_name = surface_slope_classification_save long_name = sfc slope type for lsm save @@ -470,4 +498,4 @@ units = 1 dimensions = () type = integer - intent = out \ No newline at end of file + intent = out diff --git a/physics/gcycle.F90 b/physics/gcycle.F90 index 5f4f959c6..aea978a41 100644 --- a/physics/gcycle.F90 +++ b/physics/gcycle.F90 @@ -21,7 +21,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, frac_grid, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, tsfc, & tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, & zorli, zorll, zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, & - stype, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, & + stype,scolor, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, & !scolor: soil color xlat_d, xlon_d, slmsk, imap, jmap) ! ! @@ -74,6 +74,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, slmsk(:) integer, intent(inout) :: vtype(:), & stype(:), & + scolor(:), & !soil color slope(:) integer, intent(in) :: imap(:), jmap(:) @@ -87,6 +88,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, slpfcs (nx*ny), & vegfcs (nx*ny), & sltfcs (nx*ny), & + slcfcs (nx*ny), & !soil color TSFFCS (nx*ny), & ZORFCS (nx*ny), & AISFCS (nx*ny), & @@ -128,6 +130,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, slpfcs = real(slope) vegfcs = real(vtype) sltfcs = real(stype) + slcfcs = real(scolor) !soil color ! if (frac_grid) then do ix=1,npts @@ -227,7 +230,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, shdmin, shdmax, slpfcs, snoalb, tsffcs, & weasd, zorfcs, albfc1, tg3, canopy, & smcfc1, stcfc1, slmsk, aisfcs, & - vfrac, vegfcs, sltfcs, alffc1, cv, & + vfrac, vegfcs, sltfcs, slcfcs,alffc1, cv, & !slcfcs: soil color cvb, cvt, me, nthrds, & nlunit, size(input_nml_file), input_nml_file, & min_ice, ialb, isot, ivegsrc, & @@ -247,6 +250,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, slope = int(slpfcs) vtype = int(vegfcs) stype = int(sltfcs) + scolor = int(slcfcs) !soil color ! do ix=1,npts zorll(ix) = ZORFCS(ix) diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index 2e3e2920e..0e9f64af1 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -13,7 +13,8 @@ module noahmp_tables integer, private, parameter :: mvt = 30 ! use 30 instead of 27 integer, private, parameter :: mband = 2 - integer, private, parameter :: msc = 8 +! integer, private, parameter :: msc = 8 + integer, private, parameter :: msc = 20 integer, private, parameter :: max_soiltyp = 30 integer, private, parameter :: ncrop = 5 integer, private, parameter :: nstage = 8 @@ -741,12 +742,24 @@ module noahmp_tables ! &_______________________________________________________________________& real :: albsat_table(msc,mband) !< saturated soil albedos: 1=vis, 2=nir - data(albsat_table(i,1),i=1,8)/0.15,0.11,0.10,0.09,0.08,0.07,0.06,0.05/ - data(albsat_table(i,2),i=1,8)/0.30,0.22,0.20,0.18,0.16,0.14,0.12,0.10/ +! data(albsat_table(i,1),i=1,8)/0.15,0.11,0.10,0.09,0.08,0.07,0.06,0.05/ +! data(albsat_table(i,2),i=1,8)/0.30,0.22,0.20,0.18,0.16,0.14,0.12,0.10/ + + data(albsat_table(i,1),i=1,20) /0.25,0.23,0.21,0.20,0.19,0.18,0.17,0.16,& + & 0.15,0.14,0.13,0.12,0.11,0.10,0.09,0.08,0.07,0.06,0.05,0.04 / + + data(albsat_table(i,2),i=1,20) /0.50,0.46,0.42,0.40,0.38,0.36,0.34,0.32,& + & 0.30,0.28,0.26,0.24,0.22,0.20,0.18,0.16,0.14,0.12,0.10,0.08 / real :: albdry_table(msc,mband) !< dry soil albedos: 1=vis, 2=nir - data(albdry_table(i,1),i=1,8)/0.27,0.22,0.20,0.18,0.16,0.14,0.12,0.10/ - data(albdry_table(i,2),i=1,8)/0.54,0.44,0.40,0.36,0.32,0.28,0.24,0.20/ +! data(albdry_table(i,1),i=1,8)/0.27,0.22,0.20,0.18,0.16,0.14,0.12,0.10/ +! data(albdry_table(i,2),i=1,8)/0.54,0.44,0.40,0.36,0.32,0.28,0.24,0.20/ + + data(albdry_table(i,1),i=1,20) /0.36,0.34,0.32,0.31,0.30,0.29,0.28,0.27,& + & 0.26,0.25,0.24,0.23,0.22,0.20,0.18,0.16,0.14,0.12,0.10,0.08/ + + data(albdry_table(i,2),i=1,20) /0.61,0.57,0.53,0.51,0.49,0.48,0.45,0.43,& + & 0.41,0.39,0.37,0.35,0.33,0.31,0.29,0.27,0.25,0.23,0.21,0.16/ real :: albice_table(mband) !< albedo land ice: 1=vis, 2=nir data (albice_table(i),i=1,mband) /0.80, 0.55/ diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index fed823ead..dfdbd1bc6 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -131,7 +131,7 @@ end subroutine noahmpdrv_init subroutine noahmpdrv_run & !................................... ! --- inputs: - ( im, km, lsnowl, itime, ps, u1, v1, t1, q1, soiltyp, & + ( im, km, lsnowl, itime, ps, u1, v1, t1, q1, soiltyp,soilcol,& vegtype, sigmaf, dlwflx, dswsfc, snet, delt, tg3, cm, ch, & prsl1, prslk1, prslki, prsik1, zf,pblh, dry, wind, slopetyp, & shdmin, shdmax, snoalb, sfalb, flag_iter,con_g, & @@ -206,6 +206,7 @@ subroutine noahmpdrv_run & real(kind=kind_phys), dimension(:) , intent(in) :: t1 ! layer 1 temperature [K] real(kind=kind_phys), dimension(:) , intent(in) :: q1 ! layer 1 specific humidity [kg/kg] integer , dimension(:) , intent(in) :: soiltyp ! soil type (integer index) + integer , dimension(:) , intent(in) :: soilcol ! soil color (integer index) integer , dimension(:) , intent(in) :: vegtype ! vegetation type (integer index) real(kind=kind_phys), dimension(:) , intent(in) :: sigmaf ! areal fractional cover of green vegetation real(kind=kind_phys), dimension(:) , intent(in) :: dlwflx ! downward longwave radiation [W/m2] @@ -753,7 +754,8 @@ subroutine noahmpdrv_run & soil_category = soiltyp(i) slope_category = slopetyp(i) - soil_color_category = 4 + soil_color_category = soilcol(i) +! soil_color_category = 4 call transfer_mp_parameters(vegetation_category, soil_category, & slope_category, soil_color_category, crop_type,parameters) diff --git a/physics/noahmpdrv.meta b/physics/noahmpdrv.meta index 3235b7c90..208788889 100644 --- a/physics/noahmpdrv.meta +++ b/physics/noahmpdrv.meta @@ -174,6 +174,13 @@ dimensions = (horizontal_loop_extent) type = integer intent= in +[soilcol] + standard_name = soil_color_classification + long_name = soil color at each grid cell + units = index + dimensions = (horizontal_loop_extent) + type = integer + intent= in [vegtype] standard_name = vegetation_type_classification long_name = vegetation type at each grid cell diff --git a/physics/sfcsub.F b/physics/sfcsub.F index dae710760..4a247a1a7 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -16,8 +16,8 @@ module sfccyc_module ! integer kpdtsf,kpdwet,kpdsno,kpdzor,kpdais,kpdtg3,kpdplr,kpdgla, & kpdmxi,kpdscv,kpdsmc,kpdoro,kpdmsk,kpdstc,kpdacn,kpdveg, - & kpdvet,kpdsot - &, kpdvmn,kpdvmx,kpdslp,kpdabs + & kpdvet,kpdsot,kpdsoc, + & kpdvmn,kpdvmx,kpdslp,kpdabs &, kpdsnd, kpdabs_0, kpdabs_1, kpdalb(4) parameter(kpdtsf=11, kpdwet=86, kpdsno=65, kpdzor=83, ! & kpdalb=84, kpdais=91, kpdtg3=11, kpdplr=224, @@ -26,7 +26,7 @@ module sfccyc_module & kpdoro=8, kpdmsk=81, kpdstc=11, kpdacn=91, kpdveg=87, !cbosu max snow albedo uses a grib id number of 159, not 255. & kpdvmn=255, kpdvmx=255,kpdslp=236, kpdabs_0=255, - & kpdvet=225, kpdsot=224,kpdabs_1=159, + & kpdvet=225, kpdsot=224,kpdsoc=255,kpdabs_1=159, & kpdsnd=66 ) ! integer, parameter :: kpdalb_0(4)=(/212,215,213,216/) @@ -37,6 +37,7 @@ module sfccyc_module integer, parameter :: xdata=7200, ydata=3600, mdata=xdata*ydata integer :: veg_type_landice integer :: soil_type_landice + integer :: soil_color_landice integer :: num_threads ! ! @@ -81,7 +82,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & &, vmnfcs,vmxfcs,slpfcs,absfcs & &, tsffcs,snofcs,zorfcs,albfcs,tg3fcs & &, cnpfcs,smcfcs,stcfcs,slifcs,aisfcs & - &, vegfcs,vetfcs,sotfcs,alffcs & + &, vegfcs,vetfcs,sotfcs,socfcs,alffcs & &, cvfcs,cvbfcs,cvtfcs,me,nthrds,nlunit & &, sz_nml,input_nml_file & &, min_ice & @@ -125,15 +126,17 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & vetsmn,vetimx,vetimn,vetjmx,vetjmn, & & sotlmx,sotlmn,sotomx,sotomn,sotsmx, & & sotsmn,sotimx,sotimn,sotjmx,sotjmn, & + & soclmx,soclmn,socomx,socomn,socsmx, & + & socsmn,socimx,socimn,socjmx,socjmn, & & alslmx,alslmn,alsomx,alsomn,alssmx, & & alssmn,alsimx,alsimn,alsjmx,alsjmn, & & epstsf,epsalb,epssno,epswet,epszor, & & epsplr,epsoro,epssmc,epsscv,eptsfc, & & epstg3,epsais,epsacn,epsveg,epsvet, & - & epssot,epsalf,qctsfs,qcsnos,qctsfi, & + & epssot,epssoc,epsalf,qctsfs,qcsnos,qctsfi, & & aislim,snwmin,snwmax,cplrl,cplrs, & & cvegl,czors,csnol,csnos,czorl,csots, & - & csotl,cvwgs,cvetl,cvets,calfs, & + & csotl,csocs,csocl,cvwgs,cvetl,cvets,calfs, & & fcalfl,fcalfs,ccvt,ccnp,ccv,ccvb, & & calbl,calfl,calbs,ctsfs,grboro, & & grbmsk,ctsfl,deltf,caisl,caiss, & @@ -142,6 +145,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & faiss,fsnol,bltmsk,falbs,cvegs,percrit, & & deltsfc,critp2,critp3,blnmsk,critp1, & & fcplrl,fcplrs,fczors,fvets,fsotl,fsots, & + & fsocl,fsocs, & & fvetl,fplrs,fvegl,fvegs,fcsnol,fcsnos, & & fczorl,fcalbs,fctsfl,fctsfs,fcalbl, & & falfs,falfl,fh,crit,zsca,ztsfc,tem1,tem2 & @@ -167,7 +171,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & &, sihnew integer imsk,jmsk,ifp,irtscv,irtacn,irtais,irtsno,irtzor, & - & irtalb,irtsot,irtalf,j,irtvet,irtsmc,irtstc,irtveg, & + & irtalb,irtsot,irtsoc,irtalf,j,irtvet,irtsmc,irtstc,irtveg,& & irtwet,k,iprnt,kk,irttsf,iret,i,igrdbg,iy,im,id, & & icalbl,icalbs,icalfl,ictsfs,lugb,len,lsoil,ih, & & ictsfl,iczors,icplrl,icplrs,iczorl,icalfs,icsnol, & @@ -238,6 +242,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & ! sli .. land/sea/sea-ice mask. (1/0/2 respectively) ! veg .. vegetation cover ! sot .. soil type +! soc .. soil color !cwu [+2l] add sih & sic ! sih .. sea ice thickness ! sic .. sea ice concentration @@ -364,6 +369,10 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & parameter(sotlmx=16.,sotlmn=1.0,sotomx=0.0,sotomn=0.0, & sotsmx=16.,sotsmn=1.0,sotimx=0.,sotimn=0., & sotjmx=0.,sotjmn=0.) +! soil color + parameter(soclmx=20.,soclmn=1.0,socomx=0.0,socomn=0.0, + & socsmx=20.,socsmn=1.0,socimx=0.,socimn=0., + & socjmx=0.,socjmn=0.) ! fraction of vegetation for strongly and weakly zeneith angle dependent ! albedo parameter(alslmx=1.0,alslmn=0.0,alsomx=0.0,alsomn=0.0, @@ -378,7 +387,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & epsais=0.,epsacn=0.01,epsveg=0.01, & epssih=0.001,epssic=0.001, & epsvmn=0.01,epsvmx=0.01,epsabs=0.001,epsslp=0.01, - & epsvet=.01,epssot=.01,epsalf=.001) + & epsvet=.01,epssot=.01,epssoc=0.01,epsalf=.001) ! ! quality control of analysis snow and sea ice ! @@ -427,6 +436,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & ! vegetation cover analysis analysis ! vegetation type analysis analysis ! soil type analysis analysis +! soil color analysis analysis ! sea-ice thickness forecast forecast ! sea-ice concentration analysis analysis ! vegetation cover min analysis analysis @@ -467,14 +477,14 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & ! character*500 fntsfc,fnwetc,fnsnoc,fnzorc,fnalbc,fnaisc & &, fnplrc,fntg3c,fnscvc,fnsmcc,fnstcc,fnacnc & - &, fnvegc,fnvetc,fnsotc & + &, fnvegc,fnvetc,fnsotc,fnsocc & &, fnvmnc,fnvmxc,fnslpc,fnabsc, fnalbc2 real (kind=kind_io8) tsfclm(len), wetclm(len), snoclm(len) & &, zorclm(len), albclm(len,4), aisclm(len) & &, tg3clm(len), acnclm(len), cnpclm(len) & &, cvclm (len), cvbclm(len), cvtclm(len) & &, scvclm(len), tsfcl2(len), vegclm(len) & - &, vetclm(len), sotclm(len), alfclm(len,2), sliclm(len) & + &, vetclm(len), sotclm(len), socclm(len),alfclm(len,2), sliclm(len)& &, smcclm(len,lsoil), stcclm(len,lsoil) & &, sihclm(len), sicclm(len) & &, vmnclm(len), vmxclm(len), slpclm(len), absclm(len) @@ -483,7 +493,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & ! character*500 fntsfa,fnweta,fnsnoa,fnzora,fnalba,fnaisa & &, fnplra,fntg3a,fnscva,fnsmca,fnstca,fnacna & - &, fnvega,fnveta,fnsota & + &, fnvega,fnveta,fnsota,fnsoca & &, fnvmna,fnvmxa,fnslpa,fnabsa ! real (kind=kind_io8) tsfanl(len), wetanl(len), snoanl(len) & @@ -491,7 +501,8 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & &, tg3anl(len), acnanl(len), cnpanl(len) & &, cvanl (len), cvbanl(len), cvtanl(len) & &, scvanl(len), tsfan2(len), veganl(len) & - &, vetanl(len), sotanl(len), alfanl(len,2), slianl(len) & + &, vetanl(len), sotanl(len), socanl(len) & + &, alfanl(len,2), slianl(len) & &, smcanl(len,lsoil), stcanl(len,lsoil) & &, sihanl(len), sicanl(len) & &, vmnanl(len), vmxanl(len), slpanl(len), absanl(len) @@ -505,7 +516,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & &, tg3fcs(len), acnfcs(len), cnpfcs(len) & &, cvfcs (len), cvbfcs(len), cvtfcs(len) & &, slifcs(len), vegfcs(len) & - &, vetfcs(len), sotfcs(len), alffcs(len,2) & + &, vetfcs(len), sotfcs(len), socfcs(len), alffcs(len,2) & &, smcfcs(len,lsoil), stcfcs(len,lsoil) & &, sihfcs(len), sicfcs(len), sitfcs(len) & &, vmnfcs(len), vmxfcs(len), slpfcs(len), absfcs(len) & @@ -536,7 +547,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & ! real (kind=kind_io8), allocatable, dimension(:) :: & & tsffcsd, snofcsd, tg3fcsd, zorfcsd, slifcsd, aisfcsd, & - & cnpfcsd, vegfcsd, vetfcsd, sotfcsd, sihfcsd, sicfcsd, & + & cnpfcsd, vegfcsd, vetfcsd, sotfcsd, socfcsd, sihfcsd, sicfcsd, & & vmnfcsd, vmxfcsd, slpfcsd, absfcsd real (kind=kind_io8), allocatable, dimension(:,:) :: & & smcfcsd, stcfcsd, albfcsd @@ -574,6 +585,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & ! rec. 16 canopy water content (cnpanl) -----> f10m ! rec. 17 vegetation type ! rec. 18 soil type +! rec. 18 soil color ? add later? ! rec. 19 zeneith angle dependent vegetation fraction (two types) ! rec. 20 uustar ! rec. 21 ffmm @@ -609,11 +621,11 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & namelist/namsfc/fnglac,fnmxic, & fntsfc,fnwetc,fnsnoc,fnzorc,fnalbc,fnaisc, & fnplrc,fntg3c,fnscvc,fnsmcc,fnstcc,fnacnc, - & fnvegc,fnvetc,fnsotc,fnalbc2, + & fnvegc,fnvetc,fnsotc,fnsocc,fnalbc2, & fnvmnc,fnvmxc,fnslpc,fnabsc, & fntsfa,fnweta,fnsnoa,fnzora,fnalba,fnaisa, & fnplra,fntg3a,fnscva,fnsmca,fnstca,fnacna, - & fnvega,fnveta,fnsota, + & fnvega,fnveta,fnsota,fnsoca, & fnvmna,fnvmxa,fnslpa,fnabsa, & fnmskh, & ldebug,lgchek,lqcbgs,critp1,critp2,critp3, @@ -622,6 +634,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & ftsfl,ftsfs,falbl,falbs,faisl,faiss,fsnol,fsnos, & fzorl,fzors,fplrl,fplrs,fsmcl,fsmcs, & fstcl,fstcs,fvegl,fvegs,fvetl,fvets,fsotl,fsots, + & fsocl,fsocs, & fctsfl,fctsfs,fcalbl,fcalbs,fcsnol,fcsnos, & fczorl,fczors,fcplrl,fcplrs,fcsmcl,fcsmcs, & fcstcl,fcstcs,fsalfl,fsalfs,fcalfl,flalfs, @@ -647,6 +660,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & data fnalbc2/'global_albedo4.1x1.grb'/ data fntsfc/'global_sstclim.2x2.grb'/ data fnsotc/'global_soiltype.1x1.grb'/ + data fnsocc/'C96.soil_color.tileX.nc'/ data fnvegc/'global_vegfrac.1x1.grb'/ data fnvetc/'global_vegtype.1x1.grb'/ data fnglac/'global_glacier.2x2.grb'/ @@ -683,6 +697,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & data fnvega/' '/ data fnveta/' '/ data fnsota/' '/ + data fnsoca/' '/ !clu [+4l] add fn()a for vmn, vmx, abs, slp data fnvmna/' '/ data fnvmxa/' '/ @@ -704,6 +719,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & data fplrl/0.0/, fplrs/0.0/ data fvetl/0.0/, fvets/99999.0/ data fsotl/0.0/, fsots/99999.0/ + data fsocl/0.0/, fsocs/99999.0/ data fvegl/0.0/, fvegs/99999.0/ !cwu [+4l] add f()l and f()s for sih, sic and aislim, sihlim data fsihl/99999.0/, fsihs/99999.0/ @@ -744,6 +760,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & fnplra,fntg3a,fnscva,fnsmca,fnstca,fnacna,fnvega, & fnvetc,fnveta, & fnsotc,fnsota, + & fnsocc,fnsoca, !clu [+2l] add fn()c and fn()a for vmn, vmx, slp, abs & fnvmnc,fnvmxc,fnabsc,fnslpc, & fnvmna,fnvmxa,fnabsa,fnslpa, @@ -753,6 +770,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & ftsfl,ftsfs,falbl,falbs,faisl,faiss,fsnol,fsnos, & fzorl,fzors,fplrl,fplrs,fsmcl,fsmcs,falfl,falfs, & fstcl,fstcs,fvegl,fvegs,fvetl,fvets,fsotl,fsots, + & fsocl,fsocs, & fctsfl,fctsfs,fcalbl,fcalbs,fcsnol,fcsnos, & fczorl,fczors,fcplrl,fcplrs,fcsmcl,fcsmcs, & fcstcl,fcstcs,fcalfl,fcalfs, @@ -771,6 +789,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & ctsfl, ctsfs, calbl, calfl, calbs, calfs, csmcs, & csnol, csnos, czorl, czors, cplrl, cplrs, cstcl, & cstcs, cvegl, cvwgs, cvetl, cvets, csotl, csots, + & csocl, csocs, & csmcl !cwu [+1l] add c()l and c()s for sih, sic &, csihl, csihs, csicl, csics @@ -860,6 +879,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & print *,' fstcs=',fstcs(1:lsoil) print *,' aislim=',aislim,' sihnew=',sihnew print *,' isot=', isot,' ivegsrc=',ivegsrc + print *,' fnsotc =', fnsotc endif if (ivegsrc == 2) then ! sib @@ -872,6 +892,8 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & else soil_type_landice = 16 endif + + soil_color_landice = 10 !does not matter, only one source ! deltf = deltsfc / 24.0 ! @@ -981,6 +1003,15 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & csots = 0. !... soil type over sea if (fsots >= 99999.) csots = 1. if (fsots > 0. .and. fsots < 99999) csots = exp(-deltf/fsots) +! + csocl = 0. !... soil color over land + if (fsocl >= 99999.) csocl = 1. + if (fsocl > 0. .and. fsocl < 99999) csocl = exp(-deltf/fsocl) +! + csocs = 0. !... soil color over sea + if (fsocs >= 99999.) csots = 1. + if (fsocs > 0. .and. fsocs < 99999) csocs = exp(-deltf/fsocs) + !cwu [+16l]--------------------------------------------------------------- ! @@ -1109,16 +1140,16 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & call clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & fntsfc,fnwetc,fnsnoc,fnzorc,fnalbc,fnaisc, & fntg3c,fnscvc,fnsmcc,fnstcc,fnacnc,fnvegc, - & fnvetc,fnsotc, + & fnvetc,fnsotc,fnsocc, & fnvmnc,fnvmxc,fnslpc,fnabsc, & tsfclm,tsfcl2,wetclm,snoclm,zorclm,albclm,aisclm, & tg3clm,cvclm ,cvbclm,cvtclm, & cnpclm,smcclm,stcclm,sliclm,scvclm,acnclm,vegclm, - & vetclm,sotclm,alfclm, + & vetclm,sotclm,socclm,alfclm, & vmnclm,vmxclm,slpclm,absclm, & kpdtsf,kpdwet,kpdsno,kpdzor,kpdalb,kpdais, & kpdtg3,kpdscv,kpdacn,kpdsmc,kpdstc,kpdveg, - & kpdvet,kpdsot,kpdalf,tsfcl0, + & kpdvet,kpdsot,kpdsoc,kpdalf,tsfcl0, & kpdvmn,kpdvmx,kpdslp,kpdabs, & deltsfc, lanom &, imsk, jmsk, slmskh, rla, rlo, gausm, blnmsk, bltmsk,me @@ -1128,6 +1159,10 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & ! ! scale surface roughness and albedo to model required units ! +! do i=1,len +! print *, 'BEFORE QC socclm (i) is ',socclm (i) +! enddo + zsca=100. call scale(zorclm,len,zsca) zsca=0.01 @@ -1150,7 +1185,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & ! ! make sure vegetation type and soil type are non zero over land ! - call landtyp(vetclm,sotclm,slpclm,slmskl,len) + call landtyp(vetclm,sotclm,socclm,slpclm,slmskl,len) ! !cwu [-1l/+1l] !* ice concentration or ice mask (only ice mask used in the model now) @@ -1317,6 +1352,20 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & sotlmx,sotlmn,sotomx,sotomn,sotimx,sotimn, & sotjmx,sotjmn,sotsmx,sotsmn,epssot, & rla,rlo,len,kqcm,percrit,lgchek,me) +! soil color + call qcmxmn('socc ',socclm,slmskl,snoclm,icefl1, + & soclmx,soclmn,socomx,socomn,socimx,socimn, + & socjmx,socjmn,socsmx,socsmn,epssoc, + & rla,rlo,len,kqcm,percrit,lgchek,me) + +! do i=1,len +! print *, 'AFTER QC socclm (i) is ',socclm (i) +! enddo + +! write(6,*) 'socclm after QC ' +! znnt=1. +! call nntprt(socclm,len,znnt) + !cwu [+8l] --------------------------------------------------------------- call qcmxmn('sihc ',sihclm,sliclm,snoclm,icefl1, & sihlmx,sihlmn,sihomx,sihomn,sihimx,sihimn, @@ -1382,6 +1431,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & call monitr('vegclm',vegclm,sliclm,snoclm,len) call monitr('vetclm',vetclm,sliclm,snoclm,len) call monitr('sotclm',sotclm,sliclm,snoclm,len) + call monitr('socclm',socclm,sliclm,snoclm,len) !cwu [+2l] add sih, sic call monitr('sihclm',sihclm,sliclm,snoclm,len) call monitr('sicclm',sicclm,sliclm,snoclm,len) @@ -1405,16 +1455,20 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & call filanl(tsfanl,tsfan2,wetanl,snoanl,zoranl,albanl,aisanl, & tg3anl,cvanl ,cvbanl,cvtanl, & cnpanl,smcanl,stcanl,slianl,scvanl,veganl, - & vetanl,sotanl,alfanl, + & vetanl,sotanl,socanl,alfanl, & sihanl,sicanl, & vmnanl,vmxanl,slpanl,absanl, & tsfclm,tsfcl2,wetclm,snoclm,zorclm,albclm,aisclm, & tg3clm,cvclm ,cvbclm,cvtclm, & cnpclm,smcclm,stcclm,sliclm,scvclm,vegclm, - & vetclm,sotclm,alfclm, + & vetclm,sotclm,socclm,alfclm, & sihclm,sicclm, & vmnclm,vmxclm,slpclm,absclm, & len,lsoil) + +! do i=1,len +! print *, 'AFTER FILANL (i) is ',socanl (i) +! enddo ! ! reverse scaling to match with grib analysis input ! @@ -1440,24 +1494,28 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & call analy(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & fntsfa,fnweta,fnsnoa,fnzora,fnalba,fnaisa, & fntg3a,fnscva,fnsmca,fnstca,fnacna,fnvega, - & fnveta,fnsota, + & fnveta,fnsota,fnsoca, & fnvmna,fnvmxa,fnslpa,fnabsa, & tsfanl,wetanl,snoanl,zoranl,albanl,aisanl, & tg3anl,cvanl ,cvbanl,cvtanl, & smcanl,stcanl,slianl,scvanl,acnanl,veganl, - & vetanl,sotanl,alfanl,tsfan0, + & vetanl,sotanl,socanl,alfanl,tsfan0, & vmnanl,vmxanl,slpanl,absanl, & kpdtsf,kpdwet,kpdsno,kpdsnd,kpdzor,kpdalb,kpdais, & kpdtg3,kpdscv,kpdacn,kpdsmc,kpdstc,kpdveg, - & kpdvet,kpdsot,kpdalf, + & kpdvet,kpdsot,kpdsoc,kpdalf, & kpdvmn,kpdvmx,kpdslp,kpdabs, & irttsf,irtwet,irtsno,irtzor,irtalb,irtais, & irttg3,irtscv,irtacn,irtsmc,irtstc,irtveg, - & irtvet,irtsot,irtalf + & irtvet,irtsot,irtsoc,irtalf &, irtvmn,irtvmx,irtslp,irtabs, & imsk, jmsk, slmskh, rla, rlo, gausm, blnmsk, bltmsk &, me, lanom) +! do i=1,len +! print *, 'AFTER ANALY (i) is ',socanl (i) +! enddo + ! if(lprnt) print *,' tsfanl=',tsfanl(iprnt) ! ! scale zor and alb to match forecast model units @@ -1705,6 +1763,15 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & sotlmx,sotlmn,sotomx,sotomn,sotimx,sotimn, & sotjmx,sotjmn,sotsmx,sotsmn,epssot, & rla,rlo,len,kqcm,percrit,lgchek,me) +! soil color + call qcmxmn('soca ',socanl,slmskl,snoanl,icefl1, + & soclmx,soclmn,socomx,socomn,socimx,socimn, + & socjmx,socjmn,socsmx,socsmn,epssoc, + & rla,rlo,len,kqcm,percrit,lgchek,me) +! do i=1,len +! print *, 'AFTER QC (i) is ',socanl (i) +! enddo + !clu [+16l]---------------------------------------------------------------------- ! call qcmxmn('vmna ',vmnanl,slianl,snoanl,icefl1, call qcmxmn('vmna ',vmnanl,slmskl,snoanl,icefl1, @@ -1758,6 +1825,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & call monitr('veganl',veganl,slianl,snoanl,len) call monitr('vetanl',vetanl,slianl,snoanl,len) call monitr('sotanl',sotanl,slianl,snoanl,len) + call monitr('socanl',socanl,slianl,snoanl,len) !cwu [+2l] add sih, sic call monitr('sihanl',sihanl,slianl,snoanl,len) call monitr('sicanl',sicanl,slianl,snoanl,len) @@ -1789,7 +1857,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & call filfcs(tsffcs,wetfcs,snofcs,zorfcs,albfcs, & tg3fcs,cvfcs ,cvbfcs,cvtfcs, & cnpfcs,smcfcs,stcfcs,slifcs,aisfcs, - & vegfcs,vetfcs,sotfcs,alffcs, + & vegfcs,vetfcs,sotfcs,socfcs,alffcs, !cwu [+1l] add ()fcs for sih, sic & sihfcs,sicfcs, !clu [+1l] add ()fcs for vmn, vmx, slp, abs @@ -1797,12 +1865,17 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & tsfanl,wetanl,snoanl,zoranl,albanl, & tg3anl,cvanl ,cvbanl,cvtanl, & cnpanl,smcanl,stcanl,slianl,aisanl, - & veganl,vetanl,sotanl,alfanl, + & veganl,vetanl,sotanl,socanl,alfanl, !cwu [+1l] add ()anl for sih, sic & sihanl,sicanl, !clu [+1l] add ()anl for vmn, vmx, slp, abs & vmnanl,vmxanl,slpanl,absanl, & len,lsoil) + + do i=1,len + print *, 'AFTER FILFCS (i) is ',socfcs (i) + enddo + if (sig1t(1) /= 0.) then call usesgt(sig1t,slianl,tg3anl,len,lsoil,tsffcs,stcfcs, & tsfimx) @@ -1949,6 +2022,15 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & sotlmx,sotlmn,sotomx,sotomn,sotimx,sotimn, & sotjmx,sotjmn,sotsmx,sotsmn,epssot, & rla,rlo,len,kqcm,percrit,lgchek,me) + call qcmxmn('socf ',socfcs,slmskl,snofcs,icefl1, + & soclmx,soclmn,socomx,socomn,socimx,socimn, + & socjmx,socjmn,socsmx,socsmn,epssoc, + & rla,rlo,len,kqcm,percrit,lgchek,me) + +! do i=1,len +! print *, 'AFTER QC SOCFCS(i) is ',socfcs (i) +! enddo + !clu [+16l] --------------------------------------------------------------- ! call qcmxmn('vmnf ',vmnfcs,slifcs,snofcs,icefl1, @@ -2002,6 +2084,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & call monitr('vegfcs',vegfcs,slifcs,snofcs,len) call monitr('vetfcs',vetfcs,slifcs,snofcs,len) call monitr('sotfcs',sotfcs,slifcs,snofcs,len) + call monitr('socfcs',socfcs,slifcs,snofcs,len) !cwu [+2l] add sih, sic call monitr('sihfcs',sihfcs,slifcs,snofcs,len) call monitr('sicfcs',sicfcs,slifcs,snofcs,len) @@ -2066,23 +2149,23 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & tsffcs,wetfcs,snofcs,zorfcs,albfcs,aisfcs, & cvfcs ,cvbfcs,cvtfcs, & cnpfcs,smcfcs,stcfcs,slifcs,vegfcs, - & vetfcs,sotfcs,alffcs, + & vetfcs,sotfcs,socfcs,alffcs, & sihanl,sicanl, & vmnanl,vmxanl,slpanl,absanl, & tsfanl,tsfan2,wetanl,snoanl,zoranl,albanl,aisanl, & cvanl ,cvbanl,cvtanl, & cnpanl,smcanl,stcanl,slianl,veganl, - & vetanl,sotanl,alfanl, + & vetanl,sotanl,socanl,alfanl, & ctsfl,calbl,caisl,csnol,csmcl,czorl,cstcl,cvegl, & ctsfs,calbs,caiss,csnos,csmcs,czors,cstcs,cvegs, - & ccv,ccvb,ccvt,ccnp,cvetl,cvets,csotl,csots, + & ccv,ccvb,ccvt,ccnp,cvetl,cvets,csotl,csots,csocl,csocs, & calfl,calfs, & csihl,csihs,csicl,csics, & cvmnl,cvmns,cvmxl,cvmxs,cslpl,cslps,cabsl,cabss, & irttsf,irtwet,irtsno,irtzor,irtalb,irtais, & irttg3,irtscv,irtacn,irtsmc,irtstc,irtveg, & irtvmn,irtvmx,irtslp,irtabs, - & irtvet,irtsot,irtalf,landice,me) + & irtvet,irtsot,irtsoc,irtalf,landice,me) call setzro(snoanl,epssno,len) @@ -2177,6 +2260,17 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & sotlmx,sotlmn,sotomx,sotomn,sotimx,sotimn, & sotjmx,sotjmn,sotsmx,sotsmn,epssot, & rla,rlo,len,kqcm,percrit,lgchek,me) +! do i=1,len +! print *, 'BEFORE FINAL QC SOCANL(i) is ',socanl (i) +! enddo + + call qcmxmn('socm ',socanl,slmskl,snoanl,icefl1, + & soclmx,soclmn,socomx,socomn,socimx,socimn, + & socjmx,socjmn,socsmx,socsmn,epssoc, + & rla,rlo,len,kqcm,percrit,lgchek,me) +! do i=1,len +! print *, 'AFTER FINAL QC SOCANL(i) is ',socanl (i) +! enddo !cwu [+8l] add sih, sic, call qcmxmn('sihm ',sihanl,slianl,snoanl,icefl1, & sihlmx,sihlmn,sihomx,sihomn,sihimx,sihimn, @@ -2269,6 +2363,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & call monitr('veganl',veganl,slianl,snoanl,len) call monitr('vetanl',vetanl,slianl,snoanl,len) call monitr('sotanl',sotanl,slianl,snoanl,len) + call monitr('socanl',socanl,slianl,snoanl,len) !cwu [+2l] add sih, sic, call monitr('sihanl',sihanl,slianl,snoanl,len) call monitr('sicanl',sicanl,slianl,snoanl,len) @@ -2284,7 +2379,8 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & allocate (tsffcsd(len), snofcsd(len), tg3fcsd(len), & & zorfcsd(len), slifcsd(len), aisfcsd(len), & & cnpfcsd(len), vegfcsd(len), vetfcsd(len), & - & sotfcsd(len), sihfcsd(len), sicfcsd(len), & + & sotfcsd(len), socfcsd(len),sihfcsd(len), & + & sicfcsd(len), & & vmnfcsd(len), vmxfcsd(len), slpfcsd(len), & & absfcsd(len)) allocate (smcfcsd(len,lsoil), stcfcsd(len,lsoil), & @@ -2302,6 +2398,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & vegfcsd(i) = veganl(i) - vegfcs(i) vetfcsd(i) = vetanl(i) - vetfcs(i) sotfcsd(i) = sotanl(i) - sotfcs(i) + socfcsd(i) = socanl(i) - socfcs(i) !clu [+2l] add sih, sic sihfcsd(i) = sihanl(i) - sihfcs(i) sicfcsd(i) = sicanl(i) - sicfcs(i) @@ -2355,6 +2452,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & call monitr('vegdif',vegfcsd,slianl,snoanl,len) call monitr('vetdif',vetfcsd,slianl,snoanl,len) call monitr('sotdif',sotfcsd,slianl,snoanl,len) + call monitr('socdif',socfcsd,slianl,snoanl,len) !cwu [+2l] add sih, sic call monitr('sihdif',sihfcsd,slianl,snoanl,len) call monitr('sicdif',sicfcsd,slianl,snoanl,len) @@ -2365,7 +2463,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & call monitr('absdif',absfcsd,slianl,snoanl,len) endif deallocate (tsffcsd, snofcsd, tg3fcsd, zorfcsd, slifcsd, & - & aisfcsd, cnpfcsd, vegfcsd, vetfcsd, sotfcsd, & + & aisfcsd, cnpfcsd, vegfcsd, vetfcsd, sotfcsd,socfcsd, & & sihfcsd, sicfcsd, vmnfcsd, vmxfcsd, slpfcsd, & & absfcsd) deallocate (smcfcsd, stcfcsd, albfcsd) @@ -2388,6 +2486,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & vegfcs(i) = veganl(i) vetfcs(i) = vetanl(i) sotfcs(i) = sotanl(i) + socfcs(i) = socanl(i) !clu [+4l] add vmn, vmx, slp, abs vmnfcs(i) = vmnanl(i) vmxfcs(i) = vmxanl(i) @@ -3645,14 +3744,14 @@ subroutine filanl(tsfanl,tsfan2,wetanl,snoanl,zoranl,albanl, & & aisanl, & & tg3anl,cvanl ,cvbanl,cvtanl, & & cnpanl,smcanl,stcanl,slianl,scvanl,veganl, & - & vetanl,sotanl,alfanl, & + & vetanl,sotanl,socanl,alfanl, & !socanl: soil color & sihanl,sicanl, & !cwu [+1l] add ()anl for sih, sic & vmnanl,vmxanl,slpanl,absanl, & !clu [+1l] add ()anl for vmn, vmx, slp, abs & tsfclm,tsfcl2,wetclm,snoclm,zorclm,albclm, & & aisclm, & & tg3clm,cvclm ,cvbclm,cvtclm, & & cnpclm,smcclm,stcclm,sliclm,scvclm,vegclm, & - & vetclm,sotclm,alfclm, & + & vetclm,sotclm,socclm,alfclm, & !socclm: soil color & sihclm,sicclm, & !cwu [+1l] add ()clm for sih, sic & vmnclm,vmxclm,slpclm,absclm, & !clu [+1l] add ()clm for vmn, vmx, slp, abs & len,lsoil) @@ -3668,7 +3767,7 @@ subroutine filanl(tsfanl,tsfan2,wetanl,snoanl,zoranl,albanl, & & cnpanl(len), & & smcanl(len,lsoil),stcanl(len,lsoil), & & slianl(len),scvanl(len),veganl(len), & - & vetanl(len),sotanl(len),alfanl(len,2) & + & vetanl(len),sotanl(len),socanl(len),alfanl(len,2) & !socanl:soil color &, sihanl(len),sicanl(len) & &, vmnanl(len),vmxanl(len),slpanl(len),absanl(len) real (kind=kind_io8) tsfclm(len),tsfcl2(len),wetclm(len), & @@ -3679,7 +3778,7 @@ subroutine filanl(tsfanl,tsfan2,wetanl,snoanl,zoranl,albanl, & & cnpclm(len), & & smcclm(len,lsoil),stcclm(len,lsoil), & & sliclm(len),scvclm(len),vegclm(len), & - & vetclm(len),sotclm(len),alfclm(len,2) & + & vetclm(len),sotclm(len),socclm(len),alfclm(len,2) & !socclm:soil color &, sihclm(len),sicclm(len) & &, vmnclm(len),vmxclm(len),slpclm(len),absclm(len) ! @@ -3698,6 +3797,7 @@ subroutine filanl(tsfanl,tsfan2,wetanl,snoanl,zoranl,albanl, & veganl(i) = vegclm(i) ! vegetation cover vetanl(i) = vetclm(i) ! vegetation type sotanl(i) = sotclm(i) ! soil type + socanl(i) = socclm(i) ! soil color cvanl(i) = cvclm(i) ! cv cvbanl(i) = cvbclm(i) ! cvb cvtanl(i) = cvtclm(i) ! cvt @@ -3735,20 +3835,20 @@ subroutine filanl(tsfanl,tsfan2,wetanl,snoanl,zoranl,albanl, & subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & & fntsfa,fnweta,fnsnoa,fnzora,fnalba,fnaisa, & & fntg3a,fnscva,fnsmca,fnstca,fnacna,fnvega, & - & fnveta,fnsota, & + & fnveta,fnsota,fnsoca, & !fnsoca: soil color & fnvmna,fnvmxa,fnslpa,fnabsa, & !clu [+1l] add fn()a for vmn, vmx, slp, abs & tsfanl,wetanl,snoanl,zoranl,albanl,aisanl, & & tg3anl,cvanl ,cvbanl,cvtanl, & & smcanl,stcanl,slianl,scvanl,acnanl,veganl, & - & vetanl,sotanl,alfanl,tsfan0, & + & vetanl,sotanl,socanl,alfanl,tsfan0, & !soil color & vmnanl,vmxanl,slpanl,absanl, & !clu [+1l] add ()anl for vmn, vmx, slp, abs & kpdtsf,kpdwet,kpdsno,kpdsnd,kpdzor,kpdalb,kpdais,& & kpdtg3,kpdscv,kpdacn,kpdsmc,kpdstc,kpdveg, & - & kprvet,kpdsot,kpdalf, & + & kprvet,kpdsot,kpdsoc,kpdalf, & !kpdsoc: soil color & kpdvmn,kpdvmx,kpdslp,kpdabs, & !clu [+1l] add kpd() for vmn, vmx, slp, abs & irttsf,irtwet,irtsno,irtzor,irtalb,irtais, & !cggg snow mods & irttg3,irtscv,irtacn,irtsmc,irtstc,irtveg, & - & irtvet,irtsot,irtalf & + & irtvet,irtsot,irtsoc,irtalf & !irtsoc: soil color &, irtvmn,irtvmx,irtslp,irtabs & !clu [+1l] add irt() for vmn, vmx, slp, abs &, imsk, jmsk, slmskh, outlat, outlon & &, gaus, blno, blto, me, lanom) @@ -3756,9 +3856,9 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & implicit none logical lanom integer irtsmc,irtacn,irtstc,irtvet,irtveg,irtscv,irtzor,irtsno, & - & irtalb,irttg3,irtais,iret,me,kk,kpdvet,i,irtalf,irtsot, & + & irtalb,irttg3,irtais,iret,me,kk,kpdvet,i,irtalf,irtsot,irtsoc, & !irtsoc:soil color & imsk,jmsk,irtwet,lsoil,len,kpdtsf,kpdsno,kpdsnd,kpdwet,iy,& - & lugb,im,ih,id,kpdveg,kpdstc,kprvet,irttsf,kpdsot,kpdsmc, & + & lugb,im,ih,id,kpdveg,kpdstc,kprvet,irttsf,kpdsot,kpdsoc,kpdsmc,& !kpdsoc: soil color & kpdais,kpdzor,kpdtg3,kpdacn,kpdscv,j & &, kpdvmn,kpdvmx,kpdslp,kpdabs,irtvmn,irtvmx,irtslp,irtabs real (kind=kind_io8) blto,blno,fh @@ -3774,15 +3874,15 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & ! character*500 fntsfa,fnweta,fnsnoa,fnzora,fnalba,fnaisa, & & fntg3a,fnscva,fnsmca,fnstca,fnacna,fnvega, & - & fnveta,fnsota - &, fnvmna,fnvmxa,fnslpa,fnabsa + & fnveta,fnsota,fnsoca, & !fnsoca: soil color + & fnvmna,fnvmxa,fnslpa,fnabsa real (kind=kind_io8) tsfanl(len), wetanl(len), snoanl(len), & & zoranl(len), albanl(len,4), aisanl(len), & & tg3anl(len), acnanl(len), & & cvanl (len), cvbanl(len), cvtanl(len), & & slianl(len), scvanl(len), veganl(len), & - & vetanl(len), sotanl(len), alfanl(len,2), & + & vetanl(len), sotanl(len), socanl(len),alfanl(len,2), & !socanl: soil color & smcanl(len,lsoil), stcanl(len,lsoil), & & tsfan0(len) & &, vmnanl(len),vmxanl(len),slpanl(len),absanl(len) @@ -4267,6 +4367,36 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & endif endif +! +! soil color +! + irtsoc=0 + if(fnsoca(1:8).ne.' ') then + call fixrda(lugb,fnsoca,kpdsoc,slmskl, + & iy,im,id,ih,fh,socanl,len,iret + &, imsk, jmsk, slmskh, gaus,blno, blto + &, outlat, outlon, me) + irtsoc=iret + if(iret.eq.1) then + write(6,*) 'FATAL ERROR: soil color analysis read error.' + call abort + elseif(iret.eq.-1) then + if (me .eq. 0) then + print *,'old soil color analysis provided', + & ' indicating proper file name is given.' + print *,' no error suspected.' + write(6,*) 'forecast guess will be used' + endif + else + if (me .eq. 0) print *,'soil color analysis provided.' + endif + else + if (me .eq. 0) then +! print *,'************************************************' + print *,'no soil color anly available. climatology used' + endif + endif + !clu [+120l]-------------------------------------------------------------- ! ! min vegetation cover @@ -4397,13 +4527,13 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & subroutine filfcs(tsffcs,wetfcs,snofcs,zorfcs,albfcs, & & tg3fcs,cvfcs ,cvbfcs,cvtfcs, & & cnpfcs,smcfcs,stcfcs,slifcs,aisfcs, & - & vegfcs, vetfcs, sotfcs, alffcs, & + & vegfcs, vetfcs, sotfcs,socfcs, alffcs, & !socfcs: soil color & sihfcs,sicfcs, & !cwu [+1l] add ()fcs for sih, sic & vmnfcs,vmxfcs,slpfcs,absfcs, & !clu [+1l] add ()fcs for vmn, vmx, slp, abs & tsfanl,wetanl,snoanl,zoranl,albanl, & & tg3anl,cvanl ,cvbanl,cvtanl, & & cnpanl,smcanl,stcanl,slianl,aisanl, & - & veganl, vetanl, sotanl, alfanl, & + & veganl, vetanl, sotanl,socanl, alfanl, & !soil color & sihanl,sicanl, & !cwu [+1l] add ()anl for sih, sic & vmnanl,vmxanl,slpanl,absanl, & !clu [+1l] add ()anl for vmn, vmx, slp, abs & len,lsoil) @@ -4418,7 +4548,7 @@ subroutine filfcs(tsffcs,wetfcs,snofcs,zorfcs,albfcs, & & cnpfcs(len), & & smcfcs(len,lsoil),stcfcs(len,lsoil), & & slifcs(len),vegfcs(len), & - & vetfcs(len),sotfcs(len),alffcs(len,2) & + & vetfcs(len),sotfcs(len),socfcs(len),alffcs(len,2) & !socfcs: soil color &, sihfcs(len),sicfcs(len) & &, vmnfcs(len),vmxfcs(len),slpfcs(len),absfcs(len) real (kind=kind_io8) tsfanl(len),wetanl(len),snoanl(len), & @@ -4428,7 +4558,7 @@ subroutine filfcs(tsffcs,wetfcs,snofcs,zorfcs,albfcs, & & cnpanl(len), & & smcanl(len,lsoil),stcanl(len,lsoil), & & slianl(len),veganl(len), & - & vetanl(len),sotanl(len),alfanl(len,2) & + & vetanl(len),sotanl(len),socanl(len),alfanl(len,2) & !socanl:soil color &, sihanl(len),sicanl(len) & &, vmnanl(len),vmxanl(len),slpanl(len),absanl(len) ! @@ -4457,6 +4587,7 @@ subroutine filfcs(tsffcs,wetfcs,snofcs,zorfcs,albfcs, & vegfcs(i) = veganl(i) ! vegetation cover vetfcs(i) = vetanl(i) ! vegetation type sotfcs(i) = sotanl(i) ! soil type + socfcs(i) = socanl(i) ! soil color alffcs(i,1) = alfanl(i,1) ! vegetation fraction for albedo alffcs(i,2) = alfanl(i,2) ! vegetation fraction for albedo !cwu [+2l] add sih, sic @@ -4688,41 +4819,43 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & & tsffcs,wetfcs,snofcs,zorfcs,albfcs,aisfcs, & & cvfcs ,cvbfcs,cvtfcs, & & cnpfcs,smcfcs,stcfcs,slifcs,vegfcs, & - & vetfcs,sotfcs,alffcs, & + & vetfcs,sotfcs,socfcs,alffcs, & !socfcs:soil color & sihanl,sicanl, & & vmnanl,vmxanl,slpanl,absanl, & & tsfanl,tsfan2,wetanl,snoanl,zoranl,albanl,aisanl,& & cvanl ,cvbanl,cvtanl, & & cnpanl,smcanl,stcanl,slianl,veganl, & - & vetanl,sotanl,alfanl, & + & vetanl,sotanl,socanl,alfanl, & !socanl:soil color & ctsfl,calbl,caisl,csnol,csmcl,czorl,cstcl,cvegl, & & ctsfs,calbs,caiss,csnos,csmcs,czors,cstcs,cvegs, & & ccv,ccvb,ccvt,ccnp,cvetl,cvets,csotl,csots, & + & csocl,csocs, & !csocl,csocs:soil color & calfl,calfs, & & csihl,csihs,csicl,csics, & & cvmnl,cvmns,cvmxl,cvmxs,cslpl,cslps,cabsl,cabss, & & irttsf,irtwet,irtsno,irtzor,irtalb,irtais, & & irttg3,irtscv,irtacn,irtsmc,irtstc,irtveg, & & irtvmn,irtvmx,irtslp,irtabs, & - & irtvet,irtsot,irtalf, landice, me) + & irtvet,irtsot,irtsoc,irtalf, landice, me) use machine , only : kind_io8,kind_io4 use sfccyc_module, only : veg_type_landice, soil_type_landice, & - & num_threads, zero, one + & num_threads, zero, one,soil_color_landice implicit none integer k,i,im,id,iy,len,lsoil,ih,irtacn,irtsmc,irtscv,irtais, & - & irttg3,irtstc,irtalf,me,irtsot,irtveg,irtvet, irtzor, & + & irttg3,irtstc,irtalf,me,irtsot,irtsoc,irtveg,irtvet, irtzor, & !irtsoc:soil color & irtalb,irtsno,irttsf,irtwet,j & &, irtvmn,irtvmx,irtslp,irtabs logical, intent(in) :: landice - real (kind=kind_io8) rvegs,rvets,rzors,raiss,rsnos,rsots,rcnp, & - & rcvt,rcv,rcvb,rsnol,rzorl,raisl,ralbl, & - & ralfl,rvegl,ralbs,ralfs,rtsfs,rvetl,rsotl, & + real (kind=kind_io8) rvegs,rvets,rzors,raiss,rsnos,rsots,rsocs, & !rsocs:soil color + & rcnp,rcvt,rcv,rcvb,rsnol,rzorl,raisl,ralbl, & + & ralfl,rvegl,ralbs,ralfs,rtsfs,rvetl,rsotl,rsocl, & & qzors,qvegs,qsnos,qalfs,qaiss,qvets,qcvt, & - & qcnp,qcvb,qsots,qcv,qaisl,qsnol,qalfl, & - & qtsfl,qalbl,qzorl,qtsfs,qalbs,qsotl,qvegl, & + & qcnp,qcvb,qsots,qsocs,qcv,qaisl,qsnol,qalfl, & + & qtsfl,qalbl,qzorl,qtsfs,qalbs,qsotl,qsocl,qvegl, & & qvetl,rtsfl,calbs,caiss,ctsfs,czorl,cvegl, & & csnos,ccvb,ccvt,ccv,czors,cvegs,caisl,csnol, & & calbl,fh,ctsfl,ccnp,csots,calfl,csotl,cvetl, & + & csocl,csocs, & !csocl,csocs:soil color & cvets,calfs,deltsfc, & & csihl,csihs,csicl,csics, & & rsihl,rsihs,rsicl,rsics, & @@ -4739,7 +4872,7 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & & cnpfcs(len), & & smcfcs(len,lsoil),stcfcs(len,lsoil), & & slifcs(len), vegfcs(len), & - & vetfcs(len), sotfcs(len), alffcs(len,2) & + & vetfcs(len), sotfcs(len),socfcs(len), alffcs(len,2) & !socfcs:soil color &, sihfcs(len), sicfcs(len) & &, vmnfcs(len),vmxfcs(len),slpfcs(len),absfcs(len) real (kind=kind_io8) tsfanl(len),tsfan2(len), & @@ -4749,7 +4882,7 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & & cnpanl(len), & & smcanl(len,lsoil),stcanl(len,lsoil), & & slianl(len), veganl(len), & - & vetanl(len), sotanl(len), alfanl(len,2) & + & vetanl(len), sotanl(len),socanl(len), alfanl(len,2) & !socanl:soil color &, sihanl(len),sicanl(len) & &, vmnanl(len),vmxanl(len),slpanl(len),absanl(len) ! @@ -4787,6 +4920,7 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & rvegl = cvegl rvetl = cvetl rsotl = csotl + rsocl = csocl !soil color rsihl = csihl rsicl = csicl rvmnl = cvmnl @@ -4804,6 +4938,7 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & rvegs = cvegs rvets = cvets rsots = csots + rsocs = csocs !soil color rsihs = csihs rsics = csics rvmns = cvmns @@ -4885,6 +5020,11 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & rsots = 1. endif + if(irtsoc == -1) then !soil color + rsocl = 1. + rsocs = 1. + endif + if(irtacn == -1) then rsicl = 1. rsics = 1. @@ -4921,6 +5061,10 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & 101 format('rtsfs,ralbs,raiss,rsnos,rsmcs,rzors,rvegs,rsics=',11f7.3) ! print *,' ralfl=',ralfl,' ralfs=',ralfs,' rsotl=',rsotl ! *,' rsots=',rsots,' rvetl=',rvetl,' rvets=',rvets + + write(6,102) rsocl,rsocs + 102 format('rsoc1, rsocs =',10f7.3) + endif ! qtsfl = 1. - rtsfl @@ -4933,6 +5077,8 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & qvegl = 1. - rvegl qvetl = 1. - rvetl qsotl = 1. - rsotl + qsocl = 1. - rsocl !soil color + qsihl = 1. - rsihl qsicl = 1. - rsicl qvmnl = 1. - rvmnl @@ -4950,6 +5096,8 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & qvegs = 1. - rvegs qvets = 1. - rvets qsots = 1. - rsots + qsocs = 1. - rsocs + qsihs = 1. - rsihs qsics = 1. - rsics qvmns = 1. - rvmns @@ -4999,9 +5147,11 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & if(slianl(i) == zero) then vetanl(i) = vetfcs(i)*rvets + vetanl(i)*qvets sotanl(i) = sotfcs(i)*rsots + sotanl(i)*qsots + socanl(i) = socfcs(i)*rsocs + socanl(i)*qsocs else vetanl(i) = vetfcs(i)*rvetl + vetanl(i)*qvetl sotanl(i) = sotfcs(i)*rsotl + sotanl(i)*qsotl + socanl(i) = socfcs(i)*rsocl + socanl(i)*qsocl endif enddo enddo @@ -5066,7 +5216,7 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & ! enddo -! at landice points, set the soil type, slope type and +! at landice points, set the soil type, color,slope type and ! greenness fields to flag values. if (landice) then @@ -5074,6 +5224,7 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & if (nint(slianl(i)) == 1) then if (nint(vetanl(i)) == veg_type_landice) then sotanl(i) = soil_type_landice + socanl(i) = soil_color_landice veganl(i) = 0.0 slpanl(i) = 9.0 vmnanl(i) = 0.0 @@ -6895,12 +7046,12 @@ subroutine ga2la(gauin,imxin,jmxin,regout,imxout,jmxout, & end !>\ingroup mod_sfcsub - subroutine landtyp(vegtype,soiltype,slptype,slmask,len) + subroutine landtyp(vegtype,soiltype,colortype,slptype,slmask,len) use machine , only : kind_io8,kind_io4 implicit none integer i,len real (kind=kind_io8) vegtype(len),soiltype(len),slmask(len) & - &, slptype(len) + &, slptype(len),colortype(len) ! ! make sure that the soil type and veg type are non-zero over land ! @@ -6908,6 +7059,7 @@ subroutine landtyp(vegtype,soiltype,slptype,slmask,len) if (slmask(i) .eq. 1) then if (vegtype(i) .eq. 0.) vegtype(i) = 7 if (soiltype(i) .eq. 0.) soiltype(i) = 2 + if (colortype(i) .eq. 0.) colortype(i)= 4 if (slptype(i) .eq. 0.) slptype(i) = 1 endif enddo @@ -6966,16 +7118,16 @@ subroutine anomint(tsfan0,tsfclm,tsfcl0,tsfanl,len) subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & & fntsfc,fnwetc,fnsnoc,fnzorc,fnalbc,fnaisc, & & fntg3c,fnscvc,fnsmcc,fnstcc,fnacnc,fnvegc, & - & fnvetc,fnsotc, & + & fnvetc,fnsotc,fnsocc, & & fnvmnc,fnvmxc,fnslpc,fnabsc, & & tsfclm,tsfcl2,wetclm,snoclm,zorclm,albclm,aisclm,& & tg3clm,cvclm ,cvbclm,cvtclm, & & cnpclm,smcclm,stcclm,sliclm,scvclm,acnclm,vegclm,& - & vetclm,sotclm,alfclm, & + & vetclm,sotclm,socclm,alfclm, & & vmnclm,vmxclm,slpclm,absclm, & & kpdtsf,kpdwet,kpdsno,kpdzor,kpdalb,kpdais, & & kpdtg3,kpdscv,kpdacn,kpdsmc,kpdstc,kpdveg, & - & kpdvet,kpdsot,kpdalf,tsfcl0, & + & kpdvet,kpdsot,kpdsoc,kpdalf,tsfcl0, & & kpdvmn,kpdvmx,kpdslp,kpdabs, & & deltsfc, lanom & &, imsk, jmsk, slmskh, outlat, outlon & @@ -6993,13 +7145,13 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & & jy,mon1,is2,isx,kpd9,is1,l,nn,mon2,mon,is,kpdsno, & & kpdzor,kpdtsf,kpdwet,kpdscv,kpdacn,kpdais,kpdtg3,im,id, & & lugb,iy,len,lsoil,ih,kpdsmc,iprnt,me,m1,m2,k1,k2, & - & kpdvet,kpdsot,kpdstc,kpdveg,jmsk,imsk,j,ialb & + & kpdvet,kpdsot,kpdsoc,kpdstc,kpdveg,jmsk,imsk,j,ialb & &, kpdvmn,kpdvmx,kpdslp,kpdabs,landice_cat integer kpdalb(4), kpdalf(2) ! character*500 fntsfc,fnwetc,fnsnoc,fnzorc,fnalbc,fnaisc, & & fntg3c,fnscvc,fnsmcc,fnstcc,fnacnc,fnvegc, & - & fnvetc,fnsotc,fnalbc2 & + & fnvetc,fnsotc,fnsocc,fnalbc2 & &, fnvmnc,fnvmxc,fnslpc,fnabsc real (kind=kind_io8) tsfclm(len),tsfcl2(len), & & wetclm(len),snoclm(len), & @@ -7009,7 +7161,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & & cnpclm(len), & & smcclm(len,lsoil),stcclm(len,lsoil), & & sliclm(len),scvclm(len),vegclm(len), & - & vetclm(len),sotclm(len),alfclm(len,2) & + & vetclm(len),sotclm(len),socclm(len),alfclm(len,2) & &, vmnclm(len),vmxclm(len),slpclm(len),absclm(len) real (kind=kind_io8) slmskh(imsk,jmsk) real (kind=kind_io8) outlat(len), outlon(len) @@ -7051,7 +7203,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & & zor(:,:),wet(:,:), & ais(:,:), acn(:,:), scv(:,:), smc(:,:,:), & tg3(:), alb(:,:,:), alf(:,:), - & vet(:), sot(:), tsf2(:), + & vet(:), sot(:), soc(:), tsf2(:), & veg(:,:), stc(:,:,:) &, vmn(:), vmx(:), slp(:), absm(:) ! @@ -7060,7 +7212,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & data mon1s/0/, mon2s/0/, sea1s/0/, sea2s/0/ ! save first, tsf, sno, zor, wet, ais, acn, scv, smc, tg3, - & alb, alf, vet, sot, tsf2, veg, stc, + & alb, alf, vet, sot, soc,tsf2, veg, stc, & vmn, vmx, slp, absm, & mon1s, mon2s, sea1s, sea2s, dayhf, k1, k2, m1, m2, & landice_cat @@ -7115,7 +7267,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & & wet(len,2), ais(len,2), acn(len,2), & scv(len,2), smc(len,lsoil,2), & tg3(len), alb(len,4,2), alf(len,2), - & vet(len), sot(len), tsf2(len), + & vet(len), sot(len), soc(len),tsf2(len), !clu [+1l] add vmn, vmx, slp, abs & vmn(len), vmx(len), slp(len), absm(len), & veg(len,2), stc(len,lsoil,2)) @@ -7394,6 +7546,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & endif ! ! soil type + print *,'in FIXREAD fnsotc =',fnsotc ! if(fnsotc(1:8).ne.' ') then if ( index(fnsotc, "tileX.nc") == 0) then ! grib file @@ -7409,6 +7562,24 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & if (me .eq. 0) write(6,*) 'climatological soil type read in.' endif +! +! soil color +! + If(fnsocc(1:8).ne.' ') then + if ( index(fnsocc, "tileX.nc") == 0) then ! grib file + kpd7=-1 + call fixrdc(lugb,fnsocc,kpdsoc,kpd7,kpd9,slmskl, + & soc,len,iret + &, imsk, jmsk, slmskh, gaus,blno, blto + &, outlat, outlon, me) + else + call fixrdc_tile(fnsocc, tile_num_ch, i_index, j_index, + & 255, soc, 1, len, me) + if (me .eq. 0) write(6,*) 'Soil color data name is',fnsocc + endif + if (me .eq. 0) write(6,*) 'climatological soil color read in.' + endif + ! ! min vegetation cover ! @@ -8088,6 +8259,11 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & enddo endif + if(fnsocc(1:8).ne.' ') then + do i=1,len + socclm(i) = soc(i) + enddo + endif !clu ---------------------------------------------------------------------- ! @@ -8217,6 +8393,8 @@ subroutine fixrdc_tile(filename_raw, tile_num_ch, & error=nf90_inq_varid(ncid, 'vegetation_type', id_var) case(236) error=nf90_inq_varid(ncid, 'slope_type', id_var) + case(255) + ERROR=NF90_INQ_VARID(NCID, 'soil_color', id_var) case(256:257) error=nf90_inq_varid(ncid, 'vegetation_greenness', id_var) case default From 1ab05051c85c31fe33588b964cc82c32c32b7496 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Fri, 2 Dec 2022 15:18:41 -0500 Subject: [PATCH 03/48] merge with noahmp_table branch --- physics/noahmp_tables.f90 | 2035 +++++++++++++++++++++---------------- physics/noahmpdrv.F90 | 14 +- physics/noahmptable.tbl | 774 ++++++++++++++ 3 files changed, 1920 insertions(+), 903 deletions(-) create mode 100644 physics/noahmptable.tbl diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index 0e9f64af1..f43ea8608 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -13,991 +13,243 @@ module noahmp_tables integer, private, parameter :: mvt = 30 ! use 30 instead of 27 integer, private, parameter :: mband = 2 -! integer, private, parameter :: msc = 8 integer, private, parameter :: msc = 20 integer, private, parameter :: max_soiltyp = 30 integer, private, parameter :: ncrop = 5 integer, private, parameter :: nstage = 8 - - integer :: i - integer, private, parameter :: slcats = 30 + integer, private, parameter :: num_slope = 9 ! mptable.tbl vegetation parameters - integer :: isurban_table = 13 - integer :: iswater_table = 17 - integer :: isbarren_table = 16 - integer :: isice_table = 15 - integer :: iscrop_table = 12 - integer :: eblforest_table = 2 - integer :: natural_table = 14 - integer :: low_density_residential_table = 31 - integer :: high_density_residential_table = 32 - integer :: high_intensity_industrial_table = 33 - -! + integer :: isurban_table + integer :: iswater_table + integer :: isbarren_table + integer :: isice_table + integer :: iscrop_table + integer :: eblforest_table + integer :: natural_table + integer :: lcz_1_table + integer :: lcz_2_table + integer :: lcz_3_table + integer :: lcz_4_table + integer :: lcz_5_table + integer :: lcz_6_table + integer :: lcz_7_table + integer :: lcz_8_table + integer :: lcz_9_table + integer :: lcz_10_table + integer :: lcz_11_table real :: ch2op_table(mvt) !< maximum intercepted h2o per unit lai+sai (mm) - - data ( ch2op_table(i),i=1,mvt) / 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, & - & 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, & - & 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, & - & 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: dleaf_table(mvt) !< characteristic leaf dimension (m) - data ( dleaf_table(i),i=1,mvt) / 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, & - & 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, & - & 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, & - & 0.04, 0.04, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: z0mvt_table(mvt) !< momentum roughness length (m) - data ( z0mvt_table(i),i=1,mvt) / 1.09, 1.10, 0.85, 0.80, 0.80, 0.20, & - & 0.06, 0.60, 0.50, 0.12, 0.30, 0.15, & - & 1.00, 0.14, 0.00, 0.00, 0.00, 0.30, & - & 0.20, 0.03, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - -! - real :: hvt_table(mvt) !< top of canopy (m) - data ( hvt_table(i),i=1,mvt) / 20.0, 20.0, 18.0, 16.0, 16.0, 1.10, & - & 1.10, 13.0, 10.0, 1.00, 5.00, 2.00, & - & 15.0, 1.50, 0.00, 0.00, 0.00, 4.00, & - & 2.00, 0.50, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: hvb_table(mvt) !< bottom of canopy (m) - data ( hvb_table(i),i=1,mvt) / 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, & - & 0.10, 0.10, 0.10, 0.05, 0.10, 0.10, & - & 1.00, 0.10, 0.00, 0.00, 0.00, 0.30, & - & 0.20, 0.10, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: den_table(mvt) !< tree density (no. of trunks per m2) - data ( den_table (i),i=1,mvt) / 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, & - & 10.0, 10.0, 0.02, 100., 5.05, 25.0, & - & 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, & - & 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / -! real :: rc_table(mvt) !< tree crown radius (m) - - data ( rc_table (i),i=1,mvt) / 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, & - & 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, & - & 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, & - & 0.30, 0.30, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: mfsno_table(mvt) !< snowmelt curve parameter () - data ( mfsno_table(i),i=1,mvt) / 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, & - & 2.00, 2.00, 2.00, 2.00, 3.00, 3.00, & - & 4.00, 4.00, 2.50, 3.00, 3.00, 3.50, & - & 3.50, 3.50, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: scffac_table(mvt) !< snow cover factor (m) - data (scffac_table(i),i=1,mvt) / 0.005, 0.005, 0.005, 0.005, 0.005, & - & 0.008, 0.008, 0.010, 0.010, 0.010, & - & 0.010, 0.007, 0.021, 0.013, 0.015, & - & 0.008, 0.015, 0.015, 0.015, 0.015, & - & 0.000, 0.000, 0.000, 0.000, 0.000, & - & 0.000, 0.000, 0.000, 0.000, 0.000 / - -! - real :: saim_table(mvt,12) !< monthly stem area index, one-sided - - data (saim_table (i,1),i=1,mvt) / 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, & - & 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, & - & 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - -! &_______________________________________________________________________& - - data (saim_table (i,2),i=1,mvt) / 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, & - & 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, & - & 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (saim_table (i,3),i=1,mvt) / 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, & - & 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, & - & 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (saim_table (i,4),i=1,mvt) / 0.3, 0.5, 0.4, 0.4, 0.4, 0.3, & - & 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, & - & 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - -! &_______________________________________________________________________& - - data (saim_table (i,5),i=1,mvt) / 0.4, 0.5, 0.4, 0.4, 0.4, 0.3, & - & 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, & - & 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (saim_table (i,6),i=1,mvt) / 0.5, 0.5, 0.7, 0.4, 0.4, 0.3, & - & 0.2, 0.4, 0.4, 0.4, 0.4, 0.3, & - & 0.0, 0.4, 0.0, 0.0, 0.0, 0.2, & - & 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (saim_table (i,7),i=1,mvt) / 0.5, 0.5, 1.3, 0.9, 0.7, 0.6, & - & 0.4, 0.7, 0.8, 0.8, 0.6, 0.4, & - & 0.0, 0.6, 0.0, 0.0, 0.0, 0.4, & - & 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - -! &_______________________________________________________________________& - - data (saim_table (i,8),i=1,mvt) / 0.6, 0.5, 1.2, 1.2, 0.8, 0.9, & - & 0.6, 1.2, 1.2, 1.3, 0.9, 0.5, & - & 0.0, 0.9, 0.0, 0.0, 0.0, 0.6, & - & 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (saim_table (i,9),i=1,mvt) / 0.6, 0.5, 1.0, 1.6, 1.0, 1.2, & - & 0.8, 1.4, 1.3, 1.1, 0.9, 0.4, & - & 0.0, 0.7, 0.0, 0.0, 0.0, 0.8, & - & 0.7, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (saim_table (i,10),i=1,mvt) / 0.7, 0.5, 0.8, 1.4, 1.0, 0.9, & - & 0.7, 1.1, 0.7, 0.4, 0.6, 0.3, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 0.7, & - & 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - -! &_______________________________________________________________________& - - data (saim_table (i,11),i=1,mvt) / 0.6, 0.5, 0.6, 0.6, 0.5, 0.4, & - & 0.3, 0.5, 0.4, 0.4, 0.4, 0.3, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 0.3, & - & 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (saim_table (i,12),i=1,mvt) / 0.5, 0.5, 0.5, 0.4, 0.4, 0.3, & - & 0.2, 0.4, 0.4, 0.4, 0.3, 0.3, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, & - & 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - -!! lai real :: laim_table(mvt,12) !< monthly leaf area index, one-sided - - data (laim_table (i,1),i=1,mvt) / 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, & - & 0.0, 0.2, 0.3, 0.4, 0.2, 0.0, & - & 0.0, 0.2, 0.0, 0.0, 0.0, 1.0, & - & 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - -! &_______________________________________________________________________& - - data (laim_table (i,2),i=1,mvt) / 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, & - & 0.0, 0.2, 0.3, 0.5, 0.3, 0.0, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 1.0, & - & 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (laim_table (i,3),i=1,mvt) / 4.0, 4.5, 0.0, 0.3, 2.2, 0.3, & - & 0.2, 0.4, 0.5, 0.6, 0.3, 0.0, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 1.1, & - & 0.7, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (laim_table (i,4),i=1,mvt) / 4.0, 4.5, 0.6, 1.2, 2.6, 0.9, & - & 0.6, 1.0, 0.8, 0.7, 0.5, 0.0, & - & 0.0, 0.4, 0.0, 0.0, 0.0, 1.3, & - & 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - -! &_______________________________________________________________________& - - data (laim_table (i,5),i=1,mvt) / 4.0, 4.5, 1.2, 3.0, 3.5, 2.2, & - & 1.5, 2.4, 1.8, 1.2, 1.5, 1.0, & - & 0.0, 1.1, 0.0, 0.0, 0.0, 1.7, & - & 1.2, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (laim_table (i,6),i=1,mvt) / 4.0, 4.5, 2.0, 4.7, 4.3, 3.5, & - & 2.3, 4.1, 3.6, 3.0, 2.9, 2.0, & - & 0.0, 2.5, 0.0, 0.0, 0.0, 2.1, & - & 1.8, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (laim_table (i,7),i=1,mvt) / 4.0, 4.5, 2.6, 4.5, 4.3, 3.5, & - & 2.3, 4.1, 3.8, 3.5, 3.5, 3.0, & - & 0.0, 3.2, 0.0, 0.0, 0.0, 2.1, & - & 1.8, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - -! &_______________________________________________________________________& - - data (laim_table (i,8),i=1,mvt) / 4.0, 4.5, 1.7, 3.4, 3.7, 2.5, & - & 1.7, 2.7, 2.1, 1.5, 2.7, 3.0, & - & 0.0, 2.2, 0.0, 0.0, 0.0, 1.8, & - & 1.3, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (laim_table (i,9),i=1,mvt) / 4.0, 4.5, 1.0, 1.2, 2.6, 0.9, & - & 0.6, 1.0, 0.9, 0.7, 1.2, 1.5, & - & 0.0, 1.1, 0.0, 0.0, 0.0, 1.3, & - & 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (laim_table (i,10),i=1,mvt) / 4.0, 4.5, 0.5, 0.3, 2.2, 0.3, & - & 0.2, 0.4, 0.5, 0.6, 0.3, 0.0, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 1.1, & - & 0.7, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - -! &_______________________________________________________________________& - - data (laim_table (i,11),i=1,mvt) / 4.0, 4.5, 0.2, 0.0, 2.0, 0.0, & - & 0.0, 0.2, 0.3, 0.5, 0.3, 0.0, & - & 0.0, 0.3, 0.0, 0.0, 0.0, 1.0, & - & 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - data (laim_table (i,12),i=1,mvt) / 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, & - & 0.0, 0.2, 0.3, 0.4, 0.2, 0.0, & - & 0.0, 0.2, 0.0, 0.0, 0.0, 1.0, & - & 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: sla_table(mvt) !< single-side leaf area per kg [m2/kg] - data ( sla_table (i),i=1,mvt) / 80, 80, 80, 80, 80, 60, & - & 60, 60, 50, 60, 80, 80, & - & 60, 80, 0, 0, 0, 80, & - & 80, 80, 0, 0, 0, 0, & - & 0, 0, 0, 0, 0, 0 / - real :: dilefc_table(mvt) !< coeficient for leaf stress death [1/s] - data (dilefc_table (i),i=1,mvt) / 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, & - & 0.20, 0.20, 0.50, 0.20, 0.4, 0.50, & - & 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, & - & 0.40, 0.30, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: dilefw_table(mvt) !< coeficient for leaf stress death [1/s] - data (dilefw_table(i),i=1,mvt) / 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, & - & 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, & - & 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, & - & 0.20, 0.20, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: fragr_table(mvt) !< fraction of growth respiration !original was 0.3 - data ( fragr_table(i),i=1,mvt) / 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, & - & 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, & - & 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, & - & 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: ltovrc_table(mvt) !< leaf turnover [1/s] - data ( ltovrc_table(i),i=1,mvt) / 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, & - & 0.65, 0.65, 0.65, 0.50, 1.4, 1.6, & - & 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, & - & 1.4, 1.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / -! real :: c3psn_table(mvt) !< photosynthetic pathway: 0. = c4, 1. = c3 - data ( c3psn_table (i),i=1,mvt) / 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & - & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & - & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & - & 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: kc25_table(mvt) !< co2 michaelis-menten constant at 25c (pa) - data ( kc25_table (i),i=1,mvt) / 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, & - & 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, & - & 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, & - & 30.0, 30.0, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: akc_table(mvt) !< q10 for kc25 - data ( akc_table (i),i=1,mvt) / 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, & - & 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, & - & 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, & - & 2.1, 2.1, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - real :: ko25_table(mvt) !< o2 michaelis-menten constant at 25c (pa) - data ( ko25_table (i),i=1,mvt) / 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, & - & 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, & - & 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, & - & 3.e4, 3.e4, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - - real :: ako_table(mvt) !< q10 for ko25 - data ( ako_table (i),i=1,mvt) / 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, & - & 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, & - & 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, & - & 1.2, 1.2, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: vcmx25_table(mvt) !< maximum rate of carboxylation at 25c (umol co2/m**2/s) - data ( vcmx25_table(i),i=1,mvt) / 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, & - & 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, & - & 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, & - & 50.0, 50.0, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - - real :: avcmx_table(mvt) !< q10 for vcmx25 - data ( avcmx_table (i),i=1,mvt) / 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, & - & 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, & - & 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, & - & 2.4, 2.4, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - - real :: bp_table(mvt) !< minimum leaf conductance (umol/m**2/s) - data ( bp_table (i),i=1,mvt) / 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, & - & 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, & - & 1.e15, 2.e3,1.e15, 2.e3,1.e15, 2.e3, & - & 2.e3, 2.e3, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: mp_table(mvt) !< slope of conductance-to-photosynthesis relationship - data ( mp_table (i),i=1,mvt) / 6., 9., 6., 9., 9., 9., & - & 9., 9., 9., 9., 9., 9., & - & 9., 9., 9., 9., 9., 9., & - & 9., 9., 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: qe25_table(mvt) !< quantum efficiency at 25c (umol co2 / umo photon) - data ( qe25_table (i),i=1,mvt) / 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, & - & 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, & - & 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, & - & 0.06, 0.06, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: aqe_table(mvt) !< q10 for qe25 - data ( aqe_table (i),i=1,mvt) / 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & - & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & - & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & - & 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: rmf25_table(mvt) !< leaf maintenance respiration at 25c (umol co2/m**2/s) - data ( rmf25_table (i),i=1,mvt) / 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, & - & 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, & - & 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, & - & 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rms25_table(mvt) !< stem maintenance respiration at 25c (umol co2/kg bio/s) - data ( rms25_table (i),i=1,mvt) / 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, & - & 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, & - & 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, & - & 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rmr25_table(mvt) !< root maintenance respiration at 25c (umol co2/kg bio/s) - data ( rmr25_table (i),i=1,mvt) / 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, & - & 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, & - & 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: arm_table(mvt) !< q10 for maintenance respiration - data ( arm_table (i),i=1,mvt) / 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, & - & 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, & - & 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, & - & 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: folnmx_table(mvt) !< foliage nitrogen concentration when f(n)=1 (%) - data (folnmx_table (i),i=1,mvt) / 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, & - & 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, & - & 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, & - & 1.5, 1.5, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: tmin_table(mvt) !< minimum temperature for photosynthesis (k) - data ( tmin_table (i),i=1,mvt) / 265, 273, 268, 273, 268, 273, & - & 273, 273, 273, 273, 268, 273, & - & 0, 273, 0, 0, 0, 268, & - & 268, 268, 0, 0, 0, 0, & - & 0, 0, 0, 0, 0, 0 / - -! real :: xl_table(mvt) !< leaf/stem orientation index - data ( xl_table (i),i=1,mvt) / 0.010,0.010,0.010,0.250,0.250,0.010, & - & 0.010, 0.010, 0.010, -0.30, -0.025, -0.30, & - & 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, & - & 0.250, 0.250, 0.000, 0.000, 0.000, 0.000, & - & 0.001, 0.001, 0.000, 0.000, 0.000, 0.000 / -! real :: rhol_table(mvt,mband) !< leaf reflectance: 1=vis, 2=nir - - data ( rhol_table (i,1),i=1,mvt) / 0.07, 0.10, 0.07, 0.10, 0.10, 0.07, & - & 0.07, 0.07, 0.10, 0.11, 0.105, 0.11, & - & 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, & - & 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - -! &_______________________________________________________________________& - - data ( rhol_table (i,2),i=1,mvt) / 0.35, 0.45, 0.35, 0.45, 0.45, 0.35, & - & 0.35, 0.35, 0.45, 0.58, 0.515, 0.58, & - & 0.00, 0.58, 0.00, 0.00, 0.00, 0.45, & - & 0.45, 0.45, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rhos_table(mvt,mband) !< stem reflectance: 1=vis, 2=nir - - data ( rhos_table (i,1),i=1,mvt) / 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, & - & 0.16, 0.16, 0.16, 0.36, 0.26, 0.36, & - & 0.00, 0.36, 0.00, 0.00, 0.00, 0.16, & - & 0.16,0.16, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - - data ( rhos_table (i,2),i=1,mvt) / 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, & - & 0.39, 0.39, 0.39, 0.58, 0.485, 0.58, & - & 0.00, 0.58, 0.00, 0.00, 0.00, 0.39, & - & 0.39, 0.39, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - -! &_______________________________________________________________________& - real :: taul_table(mvt,mband) !< leaf transmittance: 1=vis, 2=nir -! - data ( taul_table (i,1),i=1,mvt) / 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, & - & 0.05, 0.05, 0.05, 0.07, 0.06, 0.07, & - & 0.00, 0.07, 0.00, 0.00, 0.00, 0.05, & - & 0.05, 0.05,0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - - data ( taul_table (i,2),i=1,mvt) / 0.10, 0.25, 0.10, 0.25, 0.25, 0.10, & - & 0.10, 0.10, 0.25, 0.25, 0.25, 0.25, & - & 0.00, 0.25, 0.00, 0.00, 0.00, 0.25, & - & 0.25, 0.25, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: taus_table(mvt,mband) !< stem transmittance: 1=vis, 2=nir - data(taus_table (i,1),i=1,mvt) / 0.001,0.001,0.001,0.001,0.001, 0.001, & - & 0.001, 0.001, 0.001, 0.220, 0.1105,0.220, & - & 0.000, 0.220, 0.000, 0.000, 0.000, 0.001, & - & 0.001, 0.001, 0.000, 0.000, 0.000, 0.000, & - & 0.001, 0.001, 0.000, 0.000, 0.000, 0.000 / - - - data(taus_table (i,2),i=1,mvt) / 0.001,0.001,0.001,0.001,0.001, 0.001, & - & 0.001, 0.001, 0.001, 0.380, 0.1905, 0.380, & - & 0.000, 0.380, 0.000, 0.000, 0.000, 0.001, & - & 0.001, 0.001, 0.000, 0.000, 0.000, 0.000, & - & 0.001, 0.001, 0.000, 0.000, 0.000, 0.000 / - real :: mrp_table(mvt) !< microbial respiration parameter (umol co2 /kg c/ s) - data ( mrp_table (i),i=1,mvt) / 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, & - & 0.19, 0.19, 0.40, 0.17,0.285, 0.23, & - & 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, & - & 0.20, 0.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - -! real :: cwpvt_table(mvt) !< empirical canopy wind parameter - data ( cwpvt_table (i),i=1,mvt) / 0.09, 0.335, 0.09, 0.335, 0.145, 0.50, & - & 1.00, 0.65, 0.50, 2.50, 0.585, 0.835, & - & 0.835, 0.835, 0.09, 0.09, 0.09, 0.335, & - & 0.50, 0.09, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: wrrat_table(mvt) !< wood to non-wood ratio - data ( wrrat_table (i),i=1,mvt) / 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, & - & 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, & - & 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: wdpool_table(mvt) !< wood pool (switch 1 or 0) depending on woody or not [-] - data ( wdpool_table(i),i=1,mvt) / 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, & - & 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, & - & 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: tdlef_table(mvt) !< characteristic t for leaf freezing [k] - data ( tdlef_table (i),i=1,mvt) / 278, 278, 268, 278, 268, 278, & - & 278, 278, 278, 278, 268, 278, & - & 278, 278, 0, 0, 0, 268, & - & 268, 268, 0, 0, 0, 0, & - & 0, 0, 0, 0, 0, 0 / - real :: nroot_table(mvt) !< number of soil layers with root present - data ( nroot_table (i),i=1,mvt) / 4, 4, 4, 4, 4, 3, & - & 3, 3, 3, 3, 2, 3, & - & 1, 3, 1, 1, 0, 3, & - & 3, 2, 0, 0, 0, 0, & - & 0, 0, 0, 0, 0, 0 / - real :: rgl_table(mvt) !< parameter used in radiation stress function - data ( rgl_table (i),i=1,mvt) / 30.0, 30.0, 30.0, 30.0, 30.0, 100.0,& - & 100.0, 100.0, 65.0, 100.0, 65.0, 100.0, & - & 999.0, 100.0, 999.0, 999.0, 30.0, 100.0, & - & 100.0, 100.0, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rs_table(mvt) !< minimum stomatal resistance [s m-1] - data ( rs_table (i),i=1,mvt) / 125.0, 150.0,150.0,100.0,125.0,300.0,& - & 170.0,300.0, 70.0, 40.0, 70.0, 40.0, & - & 200.0, 40.0, 999.0,999.0,100.0,150.0, & - & 150.0, 200.0,0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: hs_table(mvt) !< parameter used in vapor pressure deficit function - data ( hs_table (i),i=1,mvt) / 47.35,41.69,47.35,54.53,51.93,42.00, & - & 39.18, 42.00, 54.53, 36.35, 55.97, 36.25, & - & 999.0, 36.25, 999.0, 999.0, 51.75, 42.00, & - & 42.00, 42.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - - real :: topt_table(mvt) !< optimum transpiration air temperature [k] - data ( topt_table (i),i=1,mvt) / 298.0,298.0,298.0,298.0,298.0,298.0, & - & 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, & - & 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, & - & 298.0, 298.0, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rsmax_table(mvt) !< maximal stomatal resistance [s m-1] - data ( rsmax_table (i),i=1,mvt) / 5000., 5000.,5000.,5000.,5000.,5000.,& - & 5000., 5000., 5000., 5000., 5000., 5000., & - & 5000., 5000., 5000., 5000., 5000., 5000., & - & 5000., 5000., 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - -!!!!!!!!!!!!!! Wield not defined but read !!!!!!!!!!!!!!!!1 - - real :: slarea_table(mvt) - - data (slarea_table (i),i=1,mvt) / 0.0090,0.0200,0.0200,0.0258,0.0223, & - & 0.0227, 0.0188, 0.0227, 0.0236, 0.0060, & - & 0.0295, 0.0200, 0.0228, 0.0223, 0.02, & - & 0.02, 0.0422, 0.02, 0.02, 0.02, & - & 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0 / - -! &_______________________________________________________________________& - - real :: esp1_table(mvt) - - data (esp1_table (i),i=1,mvt) / 0.46, 0.00, 0.00,46.86,30.98, 21.62, & - & 0.11, 21.62, 22.80, 0.02, 0.815, 0.00, & - & 41.87, 0.04, 0.0, 0.0, 2.31, 0.0, & - & 0.0, 0.0,0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - real :: esp2_table(mvt) - - data (esp2_table (i),i=1,mvt) / 3.34, 0.00, 0.00, 0.38, 0.96, 0.92, & - & 0.22, 0.92, 0.59, 0.05, 0.535, 0.00, & - & 0.98, 0.09, 0.0, 0.0, 1.47, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - - real :: esp3_table(mvt) - - data (esp3_table (i),i=1,mvt) / 1.85, 0.00, 0.00, 1.84, 1.84, 1.73, & - & 1.26, 1.73, 1.37, 0.03, 0.605, 0.00, & - & 1.82, 0.05, 0.0, 0.0, 1.70, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - - -! &_______________________________________________________________________& - - real :: esp4_table(mvt) - - data (esp4_table (i),i=1,mvt) / 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: esp5_table(mvt) - - data (esp5_table (i),i=1,mvt) / 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & - & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - -!!!!!!!!!!!!!!!!!!! what are the tables used for !!!!!!!!!!!!!! ! soilparm.tbl parameters - real :: bexp_table(max_soiltyp) - - data (bexp_table(i), i=1,slcats) /2.79, 4.26, 4.74, 5.33, 3.86, 5.25,& - & 6.77, 8.72, 8.17, 10.73, 10.39, 11.55, & - & 5.25, 0.0, 2.79, 4.26, 11.55, 2.79, & - & 2.79, 0.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / + integer :: slcats + real :: bexp_table(max_soiltyp) real :: smcdry_table(max_soiltyp) - data (smcdry_table(i), i=1,slcats) /0.010, 0.028, 0.047, 0.084, 0.061,& - & 0.066, 0.069, 0.120, 0.103, 0.100, 0.126, 0.138, & - & 0.066, 0.0, 0.006, 0.028, 0.030, 0.006, & - & 0.010, 0.000, 0.000, 0.000, 0.000, 0.000, & - & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 / - real :: f1_table(max_soiltyp) - - data (f1_table(i), i=1,slcats) /-0.472, -1.044, -0.569, 0.162, 0.162, & - & -0.327, -1.491, -1.118, -1.297, -3.209, -1.916, -2.138, & - & -0.327, 0.000, -1.111, -1.044, -10.472, -0.472, & - & -0.472, 0.000, 0.000, 0.000, 0.000, 0.000, & - & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 / - real :: smcmax_table(max_soiltyp) - - data (smcmax_table(i), i=1,slcats) /0.339, 0.421, 0.434, 0.476, 0.484,& - & 0.439, 0.404, 0.464, 0.465, 0.406, 0.468, 0.468, & - & 0.439, 1.000, 0.200, 0.421, 0.468, 0.200, & - & 0.339, 0.339, 0.000, 0.000, 0.000, 0.000, & - & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 / - real :: smcref_table(max_soiltyp) - - data (smcref_table(i), i=1,slcats) /0.192, 0.283, 0.312, 0.360, 0.347, & - & 0.329, 0.315, 0.387, 0.382, 0.338, 0.404, 0.412, & - & 0.329, 0.000, 0.170, 0.283, 0.454, 0.170, & - & 0.192, 0.000, 0.000, 0.000, 0.000, 0.000, & - & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 / - real :: psisat_table(max_soiltyp) - - data (psisat_table(i), i=1,slcats) /0.069, 0.036, 0.141, 0.759, 0.955, & - & 0.355, 0.135, 0.617, 0.263, 0.098, 0.324, 0.468, & - & 0.355, 0.00, 0.069, 0.036, 0.468, 0.069, & - & 0.069, 0.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: dksat_table(max_soiltyp) - - data (dksat_table(i), i=1,slcats) /4.66e-5, 1.41e-5, 5.23e-6, 2.81e-6, & - & 2.18e-6, 3.38e-6, 4.45e-6, 2.03e-6, 2.45e-6,7.22e-6, & - & 1.34e-6, 9.74e-7, 3.38e-6, 0.00, 1.41e-4, & - & 1.41e-5, 9.74e-7, 1.41e-4, 4.66e-5,0.0, & - & 0.00, 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: dwsat_table(max_soiltyp) - - data (dwsat_table(i), i=1,slcats) / 2.65e-5, 5.14e-6, 8.05e-6, & - & 2.39e-5, 1.66e-5, 1.43e-5, 1.01e-5, 2.35e-5, 1.13e-5, 1.87e-5, & - & 9.64e-6, 1.12e-5, 1.43e-5, 0.00, 1.36e-4, 5.14e-6, & - & 1.12e-5, 1.36e-4, 2.65e-5, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: smcwlt_table(max_soiltyp) - - data (smcwlt_table(i), i=1,slcats) /0.010, 0.028, 0.047, 0.084, 0.061,& - & 0.066, 0.069, 0.120, 0.103, 0.100, 0.126, 0.138, & - & 0.066, 0.000, 0.006, 0.028, 0.030, 0.006, & - & 0.010, 0.000, 0.000, 0.000, 0.000, 0.000, & - & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 / - real :: quartz_table(max_soiltyp) - - data (quartz_table(i), i=1,slcats) /0.92, 0.82, 0.60, 0.25, 0.10, & - & 0.40, 0.60, 0.10, 0.35, 0.52, 0.10, & - & 0.25, 0.05, 0.60, 0.07, 0.25, 0.60, & - & 0.52, 0.92, 0.00, 0.00, 0.00, 0.00,0.00, & - & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - + real :: bvic_table(max_soiltyp) !vic model infiltration parameter (-) for opt_run=6 + real :: axaj_table(max_soiltyp) !Xinanjiang: Tension water distribution inflection parameter [-] for opt_run=7 + real :: bxaj_table(max_soiltyp) !Xinanjiang: Tension water distribution shape parameter [-] for opt_run=7 + real :: xxaj_table(max_soiltyp) !Xinanjiang: Free water distribution shape parameter [-] for opt_run=7 + real :: bdvic_table(max_soiltyp) !VIC model infiltration parameter (-) + real :: gdvic_table(max_soiltyp) !mean capilary drive (m) + real :: bbvic_table(max_soiltyp) !heterogeniety parameter for DVIC infiltration [-] ! genparm.tbl parameters - real :: slope_table(9) !< slope factor for soil drainage - data (slope_table(i), i=1,9) /0.1, 0.6, 1.0, 0.35, 0.55, 0.8, & - & 0.63, 0.0, 0.0 / + real :: slope_table(num_slope) !< slope factor for soil drainage - real :: csoil_table = 2.00e+6 !< soil heat capacity [j m-3 k-1] - real :: refdk_table = 2.0e-6 !< parameter in the surface runoff parameterization - real :: refkdt_table = 3.0 !< parameter in the surface runoff parameterization - real :: frzk_table =0.15 !< frozen ground parameter - real :: zbot_table = -8.0 !< depth [m] of lower boundary soil temperature - real :: czil_table = 0.1 !< parameter used in the calculation of the roughness length for heat + real :: csoil_table !< soil heat capacity [j m-3 k-1] + real :: refdk_table !< parameter in the surface runoff parameterization + real :: refkdt_table !< parameter in the surface runoff parameterization + real :: frzk_table !< frozen ground parameter + real :: zbot_table !< depth [m] of lower boundary soil temperature + real :: czil_table !< parameter used in the calculation of the roughness length for heat ! mptable.tbl radiation parameters -! &_______________________________________________________________________& real :: albsat_table(msc,mband) !< saturated soil albedos: 1=vis, 2=nir -! data(albsat_table(i,1),i=1,8)/0.15,0.11,0.10,0.09,0.08,0.07,0.06,0.05/ -! data(albsat_table(i,2),i=1,8)/0.30,0.22,0.20,0.18,0.16,0.14,0.12,0.10/ - - data(albsat_table(i,1),i=1,20) /0.25,0.23,0.21,0.20,0.19,0.18,0.17,0.16,& - & 0.15,0.14,0.13,0.12,0.11,0.10,0.09,0.08,0.07,0.06,0.05,0.04 / - - data(albsat_table(i,2),i=1,20) /0.50,0.46,0.42,0.40,0.38,0.36,0.34,0.32,& - & 0.30,0.28,0.26,0.24,0.22,0.20,0.18,0.16,0.14,0.12,0.10,0.08 / - real :: albdry_table(msc,mband) !< dry soil albedos: 1=vis, 2=nir -! data(albdry_table(i,1),i=1,8)/0.27,0.22,0.20,0.18,0.16,0.14,0.12,0.10/ -! data(albdry_table(i,2),i=1,8)/0.54,0.44,0.40,0.36,0.32,0.28,0.24,0.20/ - - data(albdry_table(i,1),i=1,20) /0.36,0.34,0.32,0.31,0.30,0.29,0.28,0.27,& - & 0.26,0.25,0.24,0.23,0.22,0.20,0.18,0.16,0.14,0.12,0.10,0.08/ - - data(albdry_table(i,2),i=1,20) /0.61,0.57,0.53,0.51,0.49,0.48,0.45,0.43,& - & 0.41,0.39,0.37,0.35,0.33,0.31,0.29,0.27,0.25,0.23,0.21,0.16/ - real :: albice_table(mband) !< albedo land ice: 1=vis, 2=nir - data (albice_table(i),i=1,mband) /0.80, 0.55/ - real :: alblak_table(mband) !< albedo frozen lakes: 1=vis, 2=nir - data (alblak_table(i),i=1,mband) /0.60, 0.40/ - real :: omegas_table(mband) !< two-stream parameter omega for snow - data (omegas_table(i),i=1,mband) /0.8, 0.4/ - - real :: betads_table = 0.5 !< two-stream parameter betad for snow - real :: betais_table = 0.5 !< two-stream parameter betad for snow - - real :: eg_table(2) !< emissivity - data eg_table /0.97, 0.98 / - - real :: betads, betais - data betads, betais /0.5, 0.5/ - + real :: betads_table !< two-stream parameter betad for snow + real :: betais_table !< two-stream parameter betad for snow + real :: eg_table(2) !< emissivity ! mptable.tbl global parameters - real :: co2_table = 395.e-06 !< co2 partial pressure - real :: o2_table = 0.209 !< o2 partial pressure - real :: timean_table = 10.5 !< gridcell mean topgraphic index (global mean) - real :: fsatmx_table = 0.38 !< maximum surface saturated fraction (global mean) - - real :: z0sno_table = 0.002 !< snow surface roughness length (m) (0.002) - real :: ssi_table = 0.03 !< liquid water holding capacity for snowpack (m3/m3) (0.03) - real :: snow_ret_fac_table = 5.e-5 !< snowpack water release timescale factor (1/s) - real :: swemx_table = 1.00 !< new snow mass to fully cover old snow (mm) - - real :: tau0_table = 1.e6 !< tau0 from yang97 eqn. 10a - real :: grain_growth_table = 5000. !< growth from vapor diffusion yang97 eqn. 10b - real :: extra_growth_table = 10. !< extra growth near freezing yang97 eqn. 10c - real :: dirt_soot_table = 0.3 !< dirt and soot term yang97 eqn. 10d - real :: bats_cosz_table = 2.0 !< zenith angle snow albedo adjustment; b in yang97 eqn. 15 - real :: bats_vis_new_table = 0.95 !< new snow visible albedo - real :: bats_nir_new_table = 0.65 !< new snow nir albedo - real :: bats_vis_age_table = 0.2 !< age factor for diffuse visible snow albedo yang97 eqn. 17 - real :: bats_nir_age_table = 0.5 !< age factor for diffuse nir snow albedo yang97 eqn. 18 - real :: bats_vis_dir_table = 0.4 !< cosz factor for direct visible snow albedo yang97 eqn. 15 - real :: bats_nir_dir_table = 0.4 !< cosz factor for direct nir snow albedo yang97 eqn. 16 - real :: rsurf_snow_table = 50.0 !< surface resistance for snow(s/m) - real :: rsurf_exp_table = 5.0 !< exponent in the shape parameter for soil resistance option 1 - real :: snow_emis_table = 0.95 !< surface emissivity - - -! Noah mp crops -! mptable.tbl crop parameters -! ! NCROP = 5 -! 1: Corn -! 2: Soybean -! 3: Sorghum -! 4: Rice -! 5: Winter wheat + real :: co2_table !< co2 partial pressure + real :: o2_table !< o2 partial pressure + real :: timean_table !< gridcell mean topgraphic index (global mean) + real :: fsatmx_table !< maximum surface saturated fraction (global mean) + real :: z0sno_table !< snow surface roughness length (m) (0.002) + real :: ssi_table !< liquid water holding capacity for snowpack (m3/m3) (0.03) + real :: snow_ret_fac_table !< snowpack water release timescale factor (1/s) + real :: snow_emis_table !< surface emissivity + real :: swemx_table !< new snow mass to fully cover old snow (mm) + real :: tau0_table !< tau0 from yang97 eqn. 10a + real :: grain_growth_table !< growth from vapor diffusion yang97 eqn. 10b + real :: extra_growth_table !< extra growth near freezing yang97 eqn. 10c + real :: dirt_soot_table !< dirt and soot term yang97 eqn. 10d + real :: bats_cosz_table !< zenith angle snow albedo adjustment; b in yang97 eqn. 15 + real :: bats_vis_new_table !< new snow visible albedo + real :: bats_nir_new_table !< new snow nir albedo + real :: bats_vis_age_table !< age factor for diffuse visible snow albedo yang97 eqn. 17 + real :: bats_nir_age_table !< age factor for diffuse nir snow albedo yang97 eqn. 18 + real :: bats_vis_dir_table !< cosz factor for direct visible snow albedo yang97 eqn. 15 + real :: bats_nir_dir_table !< cosz factor for direct nir snow albedo yang97 eqn. 16 + real :: rsurf_snow_table !< surface resistance for snow(s/m) + real :: rsurf_exp_table !< exponent in the shape parameter for soil resistance option 1 + +! mptable.tbl irrigation parameters + + real :: irr_frac_table ! irrigation Fraction + integer :: irr_har_table ! number of days before harvest date to stop irrigation + real :: irr_lai_table ! Minimum lai to trigger irrigation + real :: irr_mad_table ! management allowable deficit (0-1) + real :: filoss_table ! fraction of flood irrigation loss (0-1) + real :: sprir_rate_table ! mm/h, sprinkler irrigation rate + real :: micir_rate_table ! mm/h, micro irrigation rate + real :: firtfac_table ! flood application rate factor + real :: ir_rain_table ! maximum precipitation to stop irrigation trigger +! mptable.tbl crop parameters -! &_______________________________________________________________________& + integer :: default_crop_table ! Default crop index integer :: pltday_table(ncrop) !< planting date - data (pltday_table(i), i=1,5) /130,111,111,111,111/ - integer :: hsday_table(ncrop) !< harvest date - data (hsday_table(i),i=1,5) /280,300,300,300,300/ - real :: plantpop_table(ncrop) !< plant density [per ha] - used? - data (plantpop_table(i),i=1,5) /78.0,78.0,78.0,78.0,78.0/ - real :: irri_table(ncrop) !< irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) - data (irri_table(i),i=1,5) /0.0,0.0,0.0,0.0,0.0/ real :: gddtbase_table(ncrop) !< base temperature for gdd accumulation [c] - data (gddtbase_table(i),i=1,5) /10.0,10.0,10.0,10.0,10.0/ - real :: gddtcut_table(ncrop) !< upper temperature for gdd accumulation [c] - data (gddtcut_table(i),i=1,5) /30.0,30.0,30.0,30.0,30.0/ - real :: gdds1_table(ncrop) !< gdd from seeding to emergence - data (gdds1_table(i),i=1,5) /60.0,50.0,50.0,50.0,50.0/ - real :: gdds2_table(ncrop) !< gdd from seeding to initial vegetative - data (gdds2_table(i),i=1,5) /675.0,718.0,718.0,718.0,718.0/ - real :: gdds3_table(ncrop) !< gdd from seeding to post vegetative - data (gdds3_table(i),i=1,5) /1183.0,933.0,933.0,933.0,933.0/ - real :: gdds4_table(ncrop) !< gdd from seeding to intial reproductive - data (gdds4_table(i),i=1,5) /1253.0,1103.0,1103.0,1103.0,1103.0/ - real :: gdds5_table(ncrop) !< gdd from seeding to pysical maturity - data (gdds5_table(i),i=1,5) /1605.0,1555.0,1555.0,1555.0,1555.0/ - integer :: c3c4_table(ncrop) !< photosynthetic pathway: 1. = c3 2. = c4 - data (c3c4_table(i),i=1,5) /2.0,1.0,2.0,2.0,2.0/ + real :: c3psni_table(ncrop) !photosynthetic pathway: 0. = c4, 1. = c3 ! Zhe Zhang 2020-07-03 + real :: kc25i_table(ncrop) !co2 michaelis-menten constant at 25c (pa) + real :: akci_table(ncrop) !q10 for kc25 + real :: ko25i_table(ncrop) !o2 michaelis-menten constant at 25c (pa) + real :: akoi_table(ncrop) !q10 for ko25 + real :: vcmx25i_table(ncrop) !maximum rate of carboxylation at 25c (umol co2/m**2/s) + real :: avcmxi_table(ncrop) !q10 for vcmx25 + real :: bpi_table(ncrop) !minimum leaf conductance (umol/m**2/s) + real :: mpi_table(ncrop) !slope of conductance-to-photosynthesis relationship + real :: qe25i_table(ncrop) !quantum efficiency at 25c (umol co2 / umol photon) + real :: folnmxi_table(ncrop) !foliage nitrogen concentration when + integer :: c3c4_table(ncrop) !< photosynthetic pathway: 1. = c3 2. = c4 real :: aref_table(ncrop) !< reference maximum co2 assimulation rate - data (aref_table(i),i=1,5) /7.0,7.0,7.0,7.0,7.0/ - real :: psnrf_table(ncrop) !< co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) - data (psnrf_table(i),i=1,5) /0.85,0.85,0.85,0.85,0.85/ - real :: i2par_table(ncrop) !< fraction of incoming solar radiation to photosynthetically active radiation - data (i2par_table(i),i=1,5) / 0.5,0.5,0.5,0.5,0.5/ - real :: tassim0_table(ncrop) !< minimum temperature for co2 assimulation [c] - data (tassim0_table(i),i=1,5) /8.0,8.0,8.0,8.0,8.0/ - real :: tassim1_table(ncrop) !< co2 assimulation linearly increasing until temperature reaches t1 [c] - data (tassim1_table(i),i=1,5) /18.0,18.0,18.0,18.0,18.0/ - real :: tassim2_table(ncrop) !< co2 assmilation rate remain at aref until temperature reaches t2 [c] - data (tassim2_table(i),i=1,5) /30.0,30.0,30.0,30.0,30.0/ - real :: k_table(ncrop) !< light extinction coefficient - data ( k_table(i),i=1,5) /0.55,0.55,0.55,0.55,0.55/ - real :: epsi_table(ncrop) !< initial light use efficiency - data (epsi_table(i),i=1,5) /12.5,12.5,12.5,12.5,12.5/ real :: q10mr_table(ncrop) !< q10 for maintainance respiration - data (q10mr_table(i),i=1,5) /2.0,2.0,2.0,2.0,2.0/ - real :: foln_mx_table(ncrop) !< foliage nitrogen concentration when f(n)=1 (%) - data (foln_mx_table(i),i=1,5) /1.5,1.5,1.5,1.5,1.5/ - real :: lefreez_table(ncrop) !< characteristic t for leaf freezing [k] - data (lefreez_table(i),i=1,5) /268,268,268,268,268/ - real :: dile_fc_table(ncrop,nstage) !< coeficient for temperature leaf stress death [1/s] - data (dile_fc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (dile_fc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (dile_fc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (dile_fc_table(i,4),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (dile_fc_table(i,5),i=1,5) /0.5,0.5,0.5,0.5,0.5/ - data (dile_fc_table(i,6),i=1,5) /0.5,0.5,0.5,0.5,0.5/ - data (dile_fc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (dile_fc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: dile_fw_table(ncrop,nstage) !< coeficient for water leaf stress death [1/s] - data (dile_fw_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (dile_fw_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (dile_fw_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (dile_fw_table(i,4),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (dile_fw_table(i,5),i=1,5) /0.2,0.2,0.2,0.2,0.2/ - data (dile_fw_table(i,6),i=1,5) /0.2,0.2,0.2,0.2,0.2/ - data (dile_fw_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (dile_fw_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: fra_gr_table(ncrop) !< fraction of growth respiration - data (fra_gr_table(i),i=1,5) /0.2,0.2,0.2,0.2,0.2/ real :: lf_ovrc_table(ncrop,nstage) !< fraction of leaf turnover [1/s] - data (lf_ovrc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (lf_ovrc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (lf_ovrc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (lf_ovrc_table(i,4),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (lf_ovrc_table(i,5),i=1,5) /0.2,0.48,0.48,0.48,0.48/ - data (lf_ovrc_table(i,6),i=1,5) /0.3,0.48,0.48,0.48,0.48/ - data (lf_ovrc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (lf_ovrc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: st_ovrc_table(ncrop,nstage) !< fraction of stem turnover [1/s] - data (st_ovrc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (st_ovrc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (st_ovrc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (st_ovrc_table(i,4),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (st_ovrc_table(i,5),i=1,5) /0.12,0.12,0.12,0.12,0.12/ - data (st_ovrc_table(i,6),i=1,5) /0.06,0.06,0.06,0.06,0.06/ - data (st_ovrc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (st_ovrc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: rt_ovrc_table(ncrop,nstage) !< fraction of root tunrover [1/s] - data (rt_ovrc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (rt_ovrc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (rt_ovrc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (rt_ovrc_table(i,4),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (rt_ovrc_table(i,5),i=1,5) /0.12,0.12,0.12,0.12,0.12/ - data (rt_ovrc_table(i,6),i=1,5) /0.06,0.06,0.06,0.06,0.06/ - data (rt_ovrc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (rt_ovrc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: lfmr25_table(ncrop) !< leaf maintenance respiration at 25c [umol co2/m**2 /s] - data (lfmr25_table(i),i=1,5) /1.0,1.0,1.0,1.0,1.0/ - real :: stmr25_table(ncrop) !< stem maintenance respiration at 25c [umol co2/kg bio/s] - data (stmr25_table(i),i=1,5) /0.05,0.1,0.1,0.1,0.1/ - real :: rtmr25_table(ncrop) !< root maintenance respiration at 25c [umol co2/kg bio/s] - data (rtmr25_table(i),i=1,5) /0.05,0.0,0.0,0.0,0.0/ - real :: grainmr25_table(ncrop) !< grain maintenance respiration at 25c [umol co2/kg bio/s] - data (grainmr25_table(i),i=1,5) /0.0,0.1,0.1,0.1,0.1/ real :: lfpt_table(ncrop,nstage) !< fraction of carbohydrate flux to leaf - data (lfpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (lfpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (lfpt_table(i,3),i=1,5) /0.4,0.4,0.4,0.4,0.4/ - data (lfpt_table(i,4),i=1,5) /0.2,0.2,0.2,0.2,0.2/ - data (lfpt_table(i,5),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (lfpt_table(i,6),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (lfpt_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (lfpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - - real :: stpt_table(ncrop,nstage) !< fraction of carbohydrate flux to stem - data (stpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (stpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (stpt_table(i,3),i=1,5) /0.2,0.2,0.2,0.2,0.2/ - data (stpt_table(i,4),i=1,5) /0.5,0.5,0.5,0.5,0.5/ - data (stpt_table(i,5),i=1,5) /0.0,0.15,0.15,0.15,0.15/ - data (stpt_table(i,6),i=1,5) /0.0,0.05,0.05,0.05,0.05/ - data (stpt_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (stpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - - real :: rtpt_table(ncrop,nstage) !< fraction of carbohydrate flux to root - data (rtpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (rtpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (rtpt_table(i,3),i=1,5) /0.34,0.4,0.4,0.4,0.4/ - data (rtpt_table(i,4),i=1,5) /0.3,0.3,0.3,0.3,0.3/ - data (rtpt_table(i,5),i=1,5) /0.05,0.05,0.05,0.05,0.05/ - data (rtpt_table(i,6),i=1,5) /0.0,0.05,0.05,0.05,0.05/ - data (rtpt_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (rtpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: grainpt_table(ncrop,nstage) !< fraction of carbohydrate flux to grain - data (grainpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (grainpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (grainpt_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (grainpt_table(i,4),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (grainpt_table(i,5),i=1,5) /0.95,0.8,0.8,0.8,0.8/ - data (grainpt_table(i,6),i=1,5) /1.0,0.9,0.9,0.9,0.9/ - data (grainpt_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - data (grainpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - + real :: lfct_table(ncrop,nstage) ! fraction of carbohydrate translocation from leaf to grain ! Zhe Zhang 2020-07-13 + real :: stct_table(ncrop,nstage) ! stem to grain + real :: rtct_table(ncrop,nstage) ! root to grain real :: bio2lai_table(ncrop) !< leaf are per living leaf biomass [m^2/kg] - data (bio2lai_table(i),i=1,5) /0.035,0.015,0.015,0.015,0.015/ + +! tile drainage parameters + real :: tdsmc_fac_table(max_soiltyp) + real :: td_dc_table(max_soiltyp) + integer :: td_depth_table(max_soiltyp) + integer :: drain_layer_opt_table + real :: td_dcoef_table(max_soiltyp) + real :: td_d_table(max_soiltyp) + real :: td_adepth_table(max_soiltyp) + real :: td_radi_table(max_soiltyp) + real :: td_spac_table(max_soiltyp) + real :: td_ddrain_table(max_soiltyp) + real :: klat_fac_table(max_soiltyp) ! mptable.tbl optional parameters @@ -1005,55 +257,1040 @@ module noahmp_tables ! Saxton and Rawls 2006 Pedo-transfer function coefficients !------------------------------------------------------------------------------ - real :: sr2006_theta_1500t_a = -0.024 !< sand coefficient - real :: sr2006_theta_1500t_b = 0.487 !< clay coefficient - real :: sr2006_theta_1500t_c = 0.006 !< orgm coefficient - real :: sr2006_theta_1500t_d = 0.005 !< sand*orgm coefficient - real :: sr2006_theta_1500t_e = -0.013 !< clay*orgm coefficient - real :: sr2006_theta_1500t_f = 0.068 !< sand*clay coefficient - real :: sr2006_theta_1500t_g = 0.031 !< constant adjustment - - real :: sr2006_theta_1500_a = 0.14 !< theta_1500t coefficient - real :: sr2006_theta_1500_b = -0.02 !< constant adjustment - - real :: sr2006_theta_33t_a = -0.251 !< sand coefficient - real :: sr2006_theta_33t_b = 0.195 !< clay coefficient - real :: sr2006_theta_33t_c = 0.011 !< orgm coefficient - real :: sr2006_theta_33t_d = 0.006 !< sand*orgm coefficient - real :: sr2006_theta_33t_e = -0.027 !< clay*orgm coefficient - real :: sr2006_theta_33t_f = 0.452 !< sand*clay coefficient - real :: sr2006_theta_33t_g = 0.299 !< constant adjustment - - real :: sr2006_theta_33_a = 1.283 !< theta_33t*theta_33t coefficient - real :: sr2006_theta_33_b = -0.374 !< theta_33t coefficient - real :: sr2006_theta_33_c = -0.015 !< constant adjustment - - real :: sr2006_theta_s33t_a = 0.278 !< sand coefficient - real :: sr2006_theta_s33t_b = 0.034 !< clay coefficient - real :: sr2006_theta_s33t_c = 0.022 !< orgm coefficient - real :: sr2006_theta_s33t_d = -0.018 !< sand*orgm coefficient - real :: sr2006_theta_s33t_e = -0.027 !< clay*orgm coefficient - real :: sr2006_theta_s33t_f = -0.584 !< sand*clay coefficient - real :: sr2006_theta_s33t_g = 0.078 !< constant adjustment - - real :: sr2006_theta_s33_a = 0.636 !< theta_s33t coefficient - real :: sr2006_theta_s33_b = -0.107 !< constant adjustment - - real :: sr2006_psi_et_a = -21.67 !< sand coefficient - real :: sr2006_psi_et_b = -27.93 !< clay coefficient - real :: sr2006_psi_et_c = -81.97 !< theta_s33 coefficient - real :: sr2006_psi_et_d = 71.12 !< sand*theta_s33 coefficient - real :: sr2006_psi_et_e = 8.29 !< clay*theta_s33 coefficient - real :: sr2006_psi_et_f = 14.05 !< sand*clay coefficient - real :: sr2006_psi_et_g = 27.16 !< constant adjustment - - real :: sr2006_psi_e_a = 0.02 !< psi_et*psi_et coefficient - real :: sr2006_psi_e_b = -0.113 !< psi_et coefficient - real :: sr2006_psi_e_c = -0.7 !< constant adjustment - - real :: sr2006_smcmax_a = -0.097 !< sand adjustment - real :: sr2006_smcmax_b = 0.043 !< constant adjustment + real :: sr2006_theta_1500t_a !< sand coefficient + real :: sr2006_theta_1500t_b !< clay coefficient + real :: sr2006_theta_1500t_c !< orgm coefficient + real :: sr2006_theta_1500t_d !< sand*orgm coefficient + real :: sr2006_theta_1500t_e !< clay*orgm coefficient + real :: sr2006_theta_1500t_f !< sand*clay coefficient + real :: sr2006_theta_1500t_g !< constant adjustment + + real :: sr2006_theta_1500_a !< theta_1500t coefficient + real :: sr2006_theta_1500_b !< constant adjustment + + real :: sr2006_theta_33t_a !< sand coefficient + real :: sr2006_theta_33t_b !< clay coefficient + real :: sr2006_theta_33t_c !< orgm coefficient + real :: sr2006_theta_33t_d !< sand*orgm coefficient + real :: sr2006_theta_33t_e !< clay*orgm coefficient + real :: sr2006_theta_33t_f !< sand*clay coefficient + real :: sr2006_theta_33t_g !< constant adjustment + + real :: sr2006_theta_33_a !< theta_33t*theta_33t coefficient + real :: sr2006_theta_33_b !< theta_33t coefficient + real :: sr2006_theta_33_c !< constant adjustment + + real :: sr2006_theta_s33t_a !< sand coefficient + real :: sr2006_theta_s33t_b !< clay coefficient + real :: sr2006_theta_s33t_c !< orgm coefficient + real :: sr2006_theta_s33t_d !< sand*orgm coefficient + real :: sr2006_theta_s33t_e !< clay*orgm coefficient + real :: sr2006_theta_s33t_f !< sand*clay coefficient + real :: sr2006_theta_s33t_g !< constant adjustment + + real :: sr2006_theta_s33_a !< theta_s33t coefficient + real :: sr2006_theta_s33_b !< constant adjustment + + real :: sr2006_psi_et_a !< sand coefficient + real :: sr2006_psi_et_b !< clay coefficient + real :: sr2006_psi_et_c !< theta_s33 coefficient + real :: sr2006_psi_et_d !< sand*theta_s33 coefficient + real :: sr2006_psi_et_e !< clay*theta_s33 coefficient + real :: sr2006_psi_et_f !< sand*clay coefficient + real :: sr2006_psi_et_g !< constant adjustment + + real :: sr2006_psi_e_a !< psi_et*psi_et coefficient + real :: sr2006_psi_e_b !< psi_et coefficient + real :: sr2006_psi_e_c !< constant adjustment + + real :: sr2006_smcmax_a !< sand adjustment + real :: sr2006_smcmax_b !< constant adjustment + +contains + + subroutine read_mp_table_parameters(dataset_identifier) + implicit none + + + ! vegetation parameters + character(len=256) :: dataset_identifier + character(len=256) :: veg_dataset_description + logical :: file_named + integer :: ierr, ik, im + integer :: nveg, isurban, iswater, isbarren, isice, iscrop, eblforest, natural + integer :: lcz_1, lcz_2, lcz_3, lcz_4, lcz_5, lcz_6, lcz_7, lcz_8, lcz_9, lcz_10, lcz_11 + real, dimension(mvt) :: sai_jan, sai_feb, sai_mar, sai_apr, sai_may, sai_jun, sai_jul, sai_aug, & + sai_sep, sai_oct, sai_nov, sai_dec, lai_jan, lai_feb, lai_mar, lai_apr, & + lai_may, lai_jun, lai_jul, lai_aug, lai_sep, lai_oct, lai_nov, lai_dec, & + rhol_vis, rhol_nir, rhos_vis, rhos_nir, taul_vis, taul_nir, taus_vis, taus_nir,& + ch2op, dleaf, z0mvt, hvt, hvb, den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & + akc, ko25, ako, avcmx, aqe, ltovrc, dilefc, dilefw, rmf25, sla, fragr, tmin, & + vcmx25, tdlef, bp, mp, qe25, rms25, rmr25, arm, folnmx, wdpool, wrrat, mrp, & + nroot, rgl, rs, hs, topt, rsmax, rtovrc, rswoodc, bf, wstrc, laimin, & + xsamin, eps1, eps2, eps3, eps4, eps5 + namelist / noahmp_usgs_veg_categories / veg_dataset_description, nveg + namelist / noahmp_usgs_parameters / isurban, iswater, isbarren, isice, iscrop, eblforest, natural, & + lcz_1, lcz_2, lcz_3, lcz_4, lcz_5, lcz_6, lcz_7, lcz_8, lcz_9, lcz_10, lcz_11, & + ch2op, dleaf, z0mvt, hvt, hvb, den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & + akc, ko25, ako, avcmx, aqe, ltovrc, dilefc, dilefw, rmf25, sla, fragr, tmin, & + vcmx25, tdlef, bp, mp, qe25, rms25, rmr25, arm, folnmx, wdpool, wrrat, mrp, & + nroot, rgl, rs, hs, topt, rsmax, rtovrc, rswoodc, bf, wstrc, laimin, & + xsamin, sai_jan, sai_feb, sai_mar, sai_apr, sai_may, & + sai_jun, sai_jul, sai_aug, sai_sep, sai_oct, sai_nov, sai_dec, lai_jan, & + lai_feb, lai_mar, lai_apr, lai_may, lai_jun, lai_jul, lai_aug, lai_sep, & + lai_oct, lai_nov, lai_dec, rhol_vis, rhol_nir, rhos_vis, rhos_nir, taul_vis, & + taul_nir, taus_vis, taus_nir, eps1, eps2, eps3, eps4, eps5 + namelist / noahmp_modis_veg_categories / veg_dataset_description, nveg + namelist / noahmp_modis_parameters / isurban, iswater, isbarren, isice, iscrop, eblforest, natural, & + lcz_1, lcz_2, lcz_3, lcz_4, lcz_5, lcz_6, lcz_7, lcz_8, lcz_9, lcz_10, lcz_11, & + ch2op, dleaf, z0mvt, hvt, hvb, den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & + akc, ko25, ako, avcmx, aqe, ltovrc, dilefc, dilefw, rmf25, sla, fragr, tmin, & + vcmx25, tdlef, bp, mp, qe25, rms25, rmr25, arm, folnmx, wdpool, wrrat, mrp, & + nroot, rgl, rs, hs, topt, rsmax, rtovrc, rswoodc, bf, wstrc, laimin, & + xsamin, sai_jan, sai_feb, sai_mar, sai_apr, sai_may, & + sai_jun, sai_jul, sai_aug, sai_sep, sai_oct, sai_nov, sai_dec, lai_jan, & + lai_feb, lai_mar, lai_apr, lai_may, lai_jun, lai_jul, lai_aug, lai_sep, & + lai_oct, lai_nov, lai_dec, rhol_vis, rhol_nir, rhos_vis, rhos_nir, taul_vis, & + taul_nir, taus_vis, taus_nir, eps1, eps2, eps3, eps4, eps5 + ! soil parameters + character(len=256) :: message + character(len=10) :: sltype + integer :: slcats + real, dimension(max_soiltyp) :: bb, drysmc, maxsmc, refsmc, satpsi, satdk, satdw, wltsmc, qtz, & + bvic, axaj, bxaj, xxaj, bdvic, bbvic, gdvic, hc + namelist / noahmp_stas_soil_categories / sltype, slcats + namelist / noahmp_soil_stas_parameters / bb, drysmc, maxsmc, refsmc, satpsi, satdk, satdw, wltsmc, qtz, & + bvic, axaj, bxaj, xxaj, bdvic, bbvic, gdvic + namelist / noahmp_soil_stas_ruc_parameters / bb, drysmc, hc, maxsmc, refsmc, satpsi, satdk, satdw, wltsmc, qtz, & + bvic, axaj, bxaj, xxaj, bdvic, bbvic, gdvic + + ! general parameters + real :: csoil_data, refdk_data, refkdt_data, frzk_data, zbot_data, czil_data + real, dimension(num_slope) :: slope_data + namelist / noahmp_general_parameters / slope_data, csoil_data, refdk_data, refkdt_data, frzk_data, zbot_data, & + czil_data + + ! radiation parameters + real :: betads, betais, eice + real, dimension(mband) :: albice, alblak, omegas + real, dimension(2) :: eg + real, dimension(msc) :: albsat_vis, albsat_nir, albdry_vis, albdry_nir + namelist / noahmp_rad_parameters / albsat_vis, albsat_nir, albdry_vis, albdry_nir, albice, alblak, omegas, & + betads, betais, eg, eice + + ! global parameters + real :: co2, o2, timean, fsatmx, z0sno, ssi, snow_ret_fac ,snow_emis, swemx, tau0, & + grain_growth, extra_growth, dirt_soot, bats_cosz, bats_vis_new, & + bats_nir_new, bats_vis_age, bats_nir_age, bats_vis_dir, bats_nir_dir, & + rsurf_snow, rsurf_exp, c2_snowcompact, c3_snowcompact, c4_snowcompact, & + c5_snowcompact, dm_snowcompact, eta0_snowcompact, snliqmaxfrac, swemaxgla, & + wslmax, rous, cmic, snowden_max, class_alb_ref, class_sno_age, class_alb_new,& + psiwlt, z0soil, z0lake + namelist / noahmp_global_parameters / co2, o2, timean, fsatmx, z0sno, ssi, snow_ret_fac ,snow_emis, swemx, tau0, & + grain_growth, extra_growth, dirt_soot, bats_cosz, bats_vis_new, & + bats_nir_new, bats_vis_age, bats_nir_age, bats_vis_dir, bats_nir_dir, & + rsurf_snow, rsurf_exp, c2_snowcompact, c3_snowcompact, c4_snowcompact, & + c5_snowcompact, dm_snowcompact, eta0_snowcompact, snliqmaxfrac, swemaxgla, & + wslmax, rous, cmic, snowden_max, class_alb_ref, class_sno_age, class_alb_new,& + psiwlt, z0soil, z0lake + + ! irrigation parameters + integer :: irr_har + real :: irr_frac, irr_lai, irr_mad, filoss, sprir_rate, micir_rate, firtfac, ir_rain + namelist / noahmp_irrigation_parameters / irr_frac, irr_har, irr_lai, irr_mad, filoss, sprir_rate, micir_rate, firtfac,& + ir_rain + + ! crop parameters + integer :: default_crop + integer , dimension(ncrop) :: pltday, hsday + real, dimension(ncrop) :: plantpop, irri, gddtbase, gddtcut, gdds1, gdds2, gdds3, gdds4, gdds5, c3psni,& + kc25i, akci, ko25i, akoi, avcmxi, vcmx25i, bpi, mpi, folnmxi, qe25i, aref, & + psnrf, i2par, tassim0, tassim1, tassim2, k, epsi, q10mr, lefreez, & + dile_fc_s1, dile_fc_s2, dile_fc_s3, dile_fc_s4, dile_fc_s5, dile_fc_s6, & + dile_fc_s7, dile_fc_s8, dile_fw_s1, dile_fw_s2, dile_fw_s3, dile_fw_s4, & + dile_fw_s5, dile_fw_s6, dile_fw_s7, dile_fw_s8, fra_gr, lf_ovrc_s1, & + lf_ovrc_s2, lf_ovrc_s3, lf_ovrc_s4, lf_ovrc_s5, lf_ovrc_s6, lf_ovrc_s7, & + lf_ovrc_s8, st_ovrc_s1, st_ovrc_s2, st_ovrc_s3, st_ovrc_s4, st_ovrc_s5, & + st_ovrc_s6, st_ovrc_s7, st_ovrc_s8, rt_ovrc_s1, rt_ovrc_s2, rt_ovrc_s3, & + rt_ovrc_s4, rt_ovrc_s5, rt_ovrc_s6, rt_ovrc_s7, rt_ovrc_s8, lfmr25, stmr25, & + rtmr25, grainmr25, lfpt_s1, lfpt_s2, lfpt_s3, lfpt_s4, lfpt_s5, lfpt_s6, & + lfpt_s7, lfpt_s8, stpt_s1, stpt_s2, stpt_s3, stpt_s4, stpt_s5, stpt_s6, & + stpt_s7, stpt_s8, rtpt_s1, rtpt_s2, rtpt_s3, rtpt_s4, rtpt_s5, rtpt_s6, & + rtpt_s7, rtpt_s8, grainpt_s1, grainpt_s2, grainpt_s3, grainpt_s4, grainpt_s5,& + grainpt_s6, grainpt_s7, grainpt_s8, lfct_s1, lfct_s2, lfct_s3, lfct_s4, & + lfct_s5, lfct_s6, lfct_s7, lfct_s8, stct_s1, stct_s2, stct_s3, stct_s4, & + stct_s5, stct_s6, stct_s7, stct_s8, rtct_s1, rtct_s2, rtct_s3, rtct_s4, & + rtct_s5, rtct_s6, rtct_s7, rtct_s8, bio2lai + namelist / noahmp_crop_parameters / default_crop, pltday, hsday, plantpop, irri, gddtbase, gddtcut, gdds1, gdds2,& + gdds3, gdds4, gdds5, c3psni, kc25i, akci, ko25i, akoi, avcmxi, vcmx25i, bpi, & + mpi, folnmxi, qe25i, aref, psnrf, i2par, tassim0, tassim1, tassim2, k, & + epsi,q10mr, lefreez, dile_fc_s1, dile_fc_s2, dile_fc_s3, dile_fc_s4, & + dile_fc_s5, dile_fc_s6, dile_fc_s7, dile_fc_s8, dile_fw_s1, dile_fw_s2, & + dile_fw_s3, dile_fw_s4, dile_fw_s5, dile_fw_s6, dile_fw_s7, dile_fw_s8, & + fra_gr, lf_ovrc_s1, lf_ovrc_s2, lf_ovrc_s3, lf_ovrc_s4, lf_ovrc_s5, & + lf_ovrc_s6, lf_ovrc_s7, lf_ovrc_s8, st_ovrc_s1, st_ovrc_s2, st_ovrc_s3, & + st_ovrc_s4, st_ovrc_s5, st_ovrc_s6, st_ovrc_s7, st_ovrc_s8, rt_ovrc_s1, & + rt_ovrc_s2, rt_ovrc_s3, rt_ovrc_s4, rt_ovrc_s5, rt_ovrc_s6, rt_ovrc_s7, & + rt_ovrc_s8, lfmr25, stmr25, rtmr25, grainmr25, lfpt_s1, lfpt_s2, lfpt_s3, & + lfpt_s4, lfpt_s5, lfpt_s6, lfpt_s7, lfpt_s8, stpt_s1, stpt_s2, stpt_s3, & + stpt_s4, stpt_s5, stpt_s6, stpt_s7, stpt_s8, rtpt_s1, rtpt_s2, rtpt_s3, & + rtpt_s4, rtpt_s5, rtpt_s6, rtpt_s7, rtpt_s8, grainpt_s1, grainpt_s2, & + grainpt_s3, grainpt_s4, grainpt_s5, grainpt_s6, grainpt_s7, grainpt_s8, & + lfct_s1, lfct_s2, lfct_s3, lfct_s4, lfct_s5, lfct_s6, lfct_s7, lfct_s8, & + stct_s1, stct_s2, stct_s3, stct_s4, stct_s5, stct_s6, stct_s7, stct_s8, & + rtct_s1, rtct_s2, rtct_s3, rtct_s4, rtct_s5, rtct_s6, rtct_s7, rtct_s8, & + bio2lai + + ! tile drainage parameters + integer :: nsoiltype, drain_layer_opt + integer , dimension(max_soiltyp) :: td_depth + real, dimension(max_soiltyp) :: tdsmc_fac, td_dc, td_dcoef, td_d, td_adepth, td_radi, td_spac, & + td_ddrain, klat_fac + namelist / noahmp_tiledrain_parameters / nsoiltype, drain_layer_opt, tdsmc_fac, td_depth, td_dc, td_dcoef, td_d,& + td_adepth, td_radi, td_spac, td_ddrain, klat_fac + + ! optional parameters + real :: sr2006_theta_1500t_a, sr2006_theta_1500t_b, sr2006_theta_1500t_c, & + sr2006_theta_1500t_d, sr2006_theta_1500t_e, sr2006_theta_1500t_f, & + sr2006_theta_1500t_g, sr2006_theta_1500_a , sr2006_theta_1500_b, & + sr2006_theta_33t_a, sr2006_theta_33t_b, sr2006_theta_33t_c, & + sr2006_theta_33t_d, sr2006_theta_33t_e, sr2006_theta_33t_f, & + sr2006_theta_33t_g, sr2006_theta_33_a, sr2006_theta_33_b, & + sr2006_theta_33_c, sr2006_theta_s33t_a, sr2006_theta_s33t_b, & + sr2006_theta_s33t_c, sr2006_theta_s33t_d, sr2006_theta_s33t_e, & + sr2006_theta_s33t_f, sr2006_theta_s33t_g, sr2006_theta_s33_a, & + sr2006_theta_s33_b, sr2006_psi_et_a, sr2006_psi_et_b, sr2006_psi_et_c, & + sr2006_psi_et_d, sr2006_psi_et_e, sr2006_psi_et_f, sr2006_psi_et_g, & + sr2006_psi_e_a, sr2006_psi_e_b, sr2006_psi_e_c, sr2006_smcmax_a, & + sr2006_smcmax_b + namelist / noahmp_optional_parameters / sr2006_theta_1500t_a, sr2006_theta_1500t_b, sr2006_theta_1500t_c, & + sr2006_theta_1500t_d, sr2006_theta_1500t_e, sr2006_theta_1500t_f, & + sr2006_theta_1500t_g, sr2006_theta_1500_a, sr2006_theta_1500_b, & + sr2006_theta_33t_a, sr2006_theta_33t_b, sr2006_theta_33t_c, & + sr2006_theta_33t_d, sr2006_theta_33t_e, sr2006_theta_33t_f, & + sr2006_theta_33t_g, sr2006_theta_33_a, sr2006_theta_33_b, & + sr2006_theta_33_c, sr2006_theta_s33t_a, sr2006_theta_s33t_b, & + sr2006_theta_s33t_c, sr2006_theta_s33t_d, sr2006_theta_s33t_e, & + sr2006_theta_s33t_f, sr2006_theta_s33t_g, sr2006_theta_s33_a, & + sr2006_theta_s33_b, sr2006_psi_et_a, sr2006_psi_et_b, sr2006_psi_et_c, & + sr2006_psi_et_d, sr2006_psi_et_e, sr2006_psi_et_f, sr2006_psi_et_g, & + sr2006_psi_e_a, sr2006_psi_e_b, sr2006_psi_e_c, sr2006_smcmax_a, & + sr2006_smcmax_b + + ! initialize our variables to bad values, so that if the namelist read fails, we come to a screeching halt as soon as we try to use anything. + ! vegetation parameters + isurban_table = -99999 + iswater_table = -99999 + isbarren_table = -99999 + isice_table = -99999 + iscrop_table = -99999 + eblforest_table = -99999 + natural_table = -99999 + lcz_1_table = -99999 + lcz_2_table = -99999 + lcz_3_table = -99999 + lcz_4_table = -99999 + lcz_5_table = -99999 + lcz_6_table = -99999 + lcz_7_table = -99999 + lcz_8_table = -99999 + lcz_9_table = -99999 + lcz_10_table = -99999 + lcz_11_table = -99999 + ch2op_table = -1.0e36 + dleaf_table = -1.0e36 + z0mvt_table = -1.0e36 + hvt_table = -1.0e36 + hvb_table = -1.0e36 + den_table = -1.0e36 + rc_table = -1.0e36 + mfsno_table = -1.0e36 + scffac_table = -1.0e36 + rhol_table = -1.0e36 + rhos_table = -1.0e36 + taul_table = -1.0e36 + taus_table = -1.0e36 + xl_table = -1.0e36 + cwpvt_table = -1.0e36 + c3psn_table = -1.0e36 + kc25_table = -1.0e36 + akc_table = -1.0e36 + ko25_table = -1.0e36 + ako_table = -1.0e36 + avcmx_table = -1.0e36 + aqe_table = -1.0e36 + ltovrc_table = -1.0e36 + dilefc_table = -1.0e36 + dilefw_table = -1.0e36 + rmf25_table = -1.0e36 + sla_table = -1.0e36 + fragr_table = -1.0e36 + tmin_table = -1.0e36 + vcmx25_table = -1.0e36 + tdlef_table = -1.0e36 + bp_table = -1.0e36 + mp_table = -1.0e36 + qe25_table = -1.0e36 + rms25_table = -1.0e36 + rmr25_table = -1.0e36 + arm_table = -1.0e36 + folnmx_table = -1.0e36 + wdpool_table = -1.0e36 + wrrat_table = -1.0e36 + mrp_table = -1.0e36 + saim_table = -1.0e36 + laim_table = -1.0e36 + nroot_table = -1.0e36 + rgl_table = -1.0e36 + rs_table = -1.0e36 + hs_table = -1.0e36 + topt_table = -1.0e36 + rsmax_table = -1.0e36 + ! not used in the current ufs version +! rtovrc_table = -1.0e36 +! rswoodc_table = -1.0e36 +! bf_table = -1.0e36 +! wstrc_table = -1.0e36 +! laimin_table = -1.0e36 +! xsamin_table = -1.0e36 + + ! soil parameters + + bexp_table = -1.0e36 + smcdry_table = -1.0e36 + f1_table = -1.0e36 + smcmax_table = -1.0e36 + smcref_table = -1.0e36 + psisat_table = -1.0e36 + dksat_table = -1.0e36 + dwsat_table = -1.0e36 + smcwlt_table = -1.0e36 + quartz_table = -1.0e36 + bvic_table = -1.0e36 + axaj_table = -1.0e36 + bxaj_table = -1.0e36 + xxaj_table = -1.0e36 + bdvic_table = -1.0e36 + gdvic_table = -1.0e36 + bbvic_table = -1.0e36 + + ! general parameters + slope_table = -1.0e36 + csoil_table = -1.0e36 + refdk_table = -1.0e36 + refkdt_table = -1.0e36 + frzk_table = -1.0e36 + zbot_table = -1.0e36 + czil_table = -1.0e36 + + ! radiation parameters + albsat_table = -1.0e36 + albdry_table = -1.0e36 + albice_table = -1.0e36 + alblak_table = -1.0e36 + omegas_table = -1.0e36 + betads_table = -1.0e36 + betais_table = -1.0e36 + eg_table = -1.0e36 +! eice_table = -1.0e36 + + ! global parameters + co2_table = -1.0e36 + o2_table = -1.0e36 + timean_table = -1.0e36 + fsatmx_table = -1.0e36 + z0sno_table = -1.0e36 + ssi_table = -1.0e36 +snow_ret_fac_table = -1.0e36 + snow_emis_table = -1.0e36 + swemx_table = -1.0e36 + tau0_table = -1.0e36 +grain_growth_table = -1.0e36 +extra_growth_table = -1.0e36 + dirt_soot_table = -1.0e36 + bats_cosz_table = -1.0e36 +bats_vis_new_table = -1.0e36 +bats_nir_new_table = -1.0e36 +bats_vis_age_table = -1.0e36 +bats_nir_age_table = -1.0e36 +bats_vis_dir_table = -1.0e36 +bats_nir_dir_table = -1.0e36 +rsurf_snow_table = -1.0e36 + rsurf_exp_table = -1.0e36 + +! c2_snowcompact_table = -1.0e36 +! c3_snowcompact_table = -1.0e36 +! c4_snowcompact_table = -1.0e36 +! c5_snowcompact_table = -1.0e36 +! dm_snowcompact_table = -1.0e36 +! eta0_snowcompact_table = -1.0e36 +! snliqmaxfrac_table = -1.0e36 +! swemaxgla_table = -1.0e36 +! wslmax_table = -1.0e36 +! rous_table = -1.0e36 +! cmic_table = -1.0e36 +! snowden_max_table = -1.0e36 +! class_alb_ref_table = -1.0e36 +! class_sno_age_table = -1.0e36 +! class_alb_new_table = -1.0e36 +! psiwlt_table = -1.0e36 +! z0soil_table = -1.0e36 +! z0lake_table = -1.0e36 + + ! irrigation parameters + irr_har_table = -99999 ! number of days before harvest date to stop irrigation + irr_frac_table = -1.0e36 ! irrigation fraction + irr_lai_table = -1.0e36 ! minimum lai to trigger irrigation + irr_mad_table = -1.0e36 ! management allowable deficit (0-1) + filoss_table = -1.0e36 ! fraction of flood irrigation loss (0-1) + sprir_rate_table = -1.0e36 ! mm/h, sprinkler irrigation rate + micir_rate_table = -1.0e36 ! mm/h, micro irrigation rate + firtfac_table = -1.0e36 ! flood application rate factor + ir_rain_table = -1.0e36 ! maximum precipitation to stop irrigation trigger + + ! crop parameters + default_crop_table = -99999 + pltday_table = -99999 + hsday_table = -99999 + plantpop_table = -1.0e36 + irri_table = -1.0e36 + gddtbase_table = -1.0e36 + gddtcut_table = -1.0e36 + gdds1_table = -1.0e36 + gdds2_table = -1.0e36 + gdds3_table = -1.0e36 + gdds4_table = -1.0e36 + gdds5_table = -1.0e36 + c3psni_table = -1.0e36 ! parameter from psn copied from stomata ! zhe zhang 2020-07-13 + kc25i_table = -1.0e36 + akci_table = -1.0e36 + ko25i_table = -1.0e36 + akoi_table = -1.0e36 + avcmxi_table = -1.0e36 + vcmx25i_table = -1.0e36 + bpi_table = -1.0e36 + mpi_table = -1.0e36 + folnmxi_table = -1.0e36 + qe25i_table = -1.0e36 ! ends here +!??? c3c4_table = -99999 + aref_table = -1.0e36 + psnrf_table = -1.0e36 + i2par_table = -1.0e36 + tassim0_table = -1.0e36 + tassim1_table = -1.0e36 + tassim2_table = -1.0e36 + k_table = -1.0e36 + epsi_table = -1.0e36 + q10mr_table = -1.0e36 + foln_mx_table = -1.0e36 + lefreez_table = -1.0e36 + dile_fc_table = -1.0e36 + dile_fw_table = -1.0e36 + fra_gr_table = -1.0e36 + lf_ovrc_table = -1.0e36 + st_ovrc_table = -1.0e36 + rt_ovrc_table = -1.0e36 + lfmr25_table = -1.0e36 + stmr25_table = -1.0e36 + rtmr25_table = -1.0e36 + grainmr25_table = -1.0e36 + lfpt_table = -1.0e36 + stpt_table = -1.0e36 + rtpt_table = -1.0e36 + grainpt_table = -1.0e36 + lfct_table = -1.0e36 ! convert start + stct_table = -1.0e36 + rtct_table = -1.0e36 ! convert end + bio2lai_table = -1.0e36 + + ! tile drainage parameters + + drain_layer_opt_table = -99999 + td_depth_table = -99999 + tdsmc_fac_table = -1.0e36 + td_dc_table = -1.0e36 + td_dcoef_table = -1.0e36 + td_d_table = -1.0e36 + td_adepth_table = -1.0e36 + td_radi_table = -1.0e36 + td_spac_table = -1.0e36 + td_ddrain_table = -1.0e36 + klat_fac_table = -1.0e36 + + ! optional parameters +! sr2006_theta_1500t_a_table = -1.0e36 +! sr2006_theta_1500t_b_table = -1.0e36 +! sr2006_theta_1500t_c_table = -1.0e36 +! sr2006_theta_1500t_d_table = -1.0e36 +! sr2006_theta_1500t_e_table = -1.0e36 +! sr2006_theta_1500t_f_table = -1.0e36 +! sr2006_theta_1500t_g_table = -1.0e36 +! sr2006_theta_1500_a_table = -1.0e36 +! sr2006_theta_1500_b_table = -1.0e36 +! sr2006_theta_33t_a_table = -1.0e36 +! sr2006_theta_33t_b_table = -1.0e36 +! sr2006_theta_33t_c_table = -1.0e36 +! sr2006_theta_33t_d_table = -1.0e36 +! sr2006_theta_33t_e_table = -1.0e36 +! sr2006_theta_33t_f_table = -1.0e36 +! sr2006_theta_33t_g_table = -1.0e36 +! sr2006_theta_33_a_table = -1.0e36 +! sr2006_theta_33_b_table = -1.0e36 +! sr2006_theta_33_c_table = -1.0e36 +! sr2006_theta_s33t_a_table = -1.0e36 +! sr2006_theta_s33t_b_table = -1.0e36 +! sr2006_theta_s33t_c_table = -1.0e36 +! sr2006_theta_s33t_d_table = -1.0e36 +! sr2006_theta_s33t_e_table = -1.0e36 +! sr2006_theta_s33t_f_table = -1.0e36 +! sr2006_theta_s33t_g_table = -1.0e36 +! sr2006_theta_s33_a_table = -1.0e36 +! sr2006_theta_s33_b_table = -1.0e36 +! sr2006_psi_et_a_table = -1.0e36 +! sr2006_psi_et_b_table = -1.0e36 +! sr2006_psi_et_c_table = -1.0e36 +! sr2006_psi_et_d_table = -1.0e36 +! sr2006_psi_et_e_table = -1.0e36 +! sr2006_psi_et_f_table = -1.0e36 +! sr2006_psi_et_g_table = -1.0e36 +! sr2006_psi_e_a_table = -1.0e36 +! sr2006_psi_e_b_table = -1.0e36 +! sr2006_psi_e_c_table = -1.0e36 +! sr2006_smcmax_a_table = -1.0e36 +! sr2006_smcmax_b_table = -1.0e36 + + !--------------------------------------------------------------- + ! transfer values from table to input variables + !--------------------------------------------------------------- + + !---------------- noahmptable.tbl vegetation parameters + + dataset_identifier = "modified_igbp_modis_noah" + + inquire( file='noahmptable.tbl', exist=file_named ) + if ( file_named ) then + open(15, file="noahmptable.tbl", status='old', form='formatted', action='read', iostat=ierr) + else + open(15, status='old', form='formatted', action='read', iostat=ierr) + end if + if ( ierr /= 0 ) then + write(*,'("warning: cannot find file noahmptable.tbl")') + endif + + if ( trim(dataset_identifier) == "usgs" ) then + read(15, noahmp_usgs_veg_categories) + read(15, noahmp_usgs_parameters) + elseif ( trim(dataset_identifier) == "modified_igbp_modis_noah" ) then + read(15,noahmp_modis_veg_categories) + read(15,noahmp_modis_parameters) + else + write(*,'("warning: unrecognized dataset_identifier in subroutine readnoahmptable")') + write(*,'("warning: dataset_identifier = ''", a, "''")') trim(dataset_identifier) + endif + close(15) + + + ! assign values + isurban_table = isurban + iswater_table = iswater + isbarren_table = isbarren + isice_table = isice + iscrop_table = iscrop + eblforest_table = eblforest + natural_table = natural + lcz_1_table = lcz_1 + lcz_2_table = lcz_2 + lcz_3_table = lcz_3 + lcz_4_table = lcz_4 + lcz_5_table = lcz_5 + lcz_6_table = lcz_6 + lcz_7_table = lcz_7 + lcz_8_table = lcz_8 + lcz_9_table = lcz_9 + lcz_10_table = lcz_10 + lcz_11_table = lcz_11 + ch2op_table (1:nveg) = ch2op (1:nveg) + dleaf_table (1:nveg) = dleaf (1:nveg) + z0mvt_table (1:nveg) = z0mvt (1:nveg) + hvt_table (1:nveg) = hvt (1:nveg) + hvb_table (1:nveg) = hvb (1:nveg) + den_table (1:nveg) = den (1:nveg) + rc_table (1:nveg) = rc (1:nveg) + mfsno_table (1:nveg) = mfsno (1:nveg) + scffac_table (1:nveg) = scffac (1:nveg) + xl_table (1:nveg) = xl (1:nveg) + cwpvt_table (1:nveg) = cwpvt (1:nveg) + c3psn_table (1:nveg) = c3psn (1:nveg) + kc25_table (1:nveg) = kc25 (1:nveg) + akc_table (1:nveg) = akc (1:nveg) + ko25_table (1:nveg) = ko25 (1:nveg) + ako_table (1:nveg) = ako (1:nveg) + avcmx_table (1:nveg) = avcmx (1:nveg) + aqe_table (1:nveg) = aqe (1:nveg) + ltovrc_table (1:nveg) = ltovrc (1:nveg) + dilefc_table (1:nveg) = dilefc (1:nveg) + dilefw_table (1:nveg) = dilefw (1:nveg) + rmf25_table (1:nveg) = rmf25 (1:nveg) + sla_table (1:nveg) = sla (1:nveg) + fragr_table (1:nveg) = fragr (1:nveg) + tmin_table (1:nveg) = tmin (1:nveg) + vcmx25_table (1:nveg) = vcmx25 (1:nveg) + tdlef_table (1:nveg) = tdlef (1:nveg) + bp_table (1:nveg) = bp (1:nveg) + mp_table (1:nveg) = mp (1:nveg) + qe25_table (1:nveg) = qe25 (1:nveg) + rms25_table (1:nveg) = rms25 (1:nveg) + rmr25_table (1:nveg) = rmr25 (1:nveg) + arm_table (1:nveg) = arm (1:nveg) + folnmx_table (1:nveg) = folnmx (1:nveg) + wdpool_table (1:nveg) = wdpool (1:nveg) + wrrat_table (1:nveg) = wrrat (1:nveg) + mrp_table (1:nveg) = mrp (1:nveg) + nroot_table (1:nveg) = nroot (1:nveg) + rgl_table (1:nveg) = rgl (1:nveg) + rs_table (1:nveg) = rs (1:nveg) + hs_table (1:nveg) = hs (1:nveg) + topt_table (1:nveg) = topt (1:nveg) + rsmax_table (1:nveg) = rsmax (1:nveg) +! rtovrc_table (1:nveg) = rtovrc (1:nveg) +! rswoodc_table(1:nveg) = rswoodc(1:nveg) +! bf_table (1:nveg) = bf (1:nveg) +! wstrc_table (1:nveg) = wstrc (1:nveg) +! laimin_table (1:nveg) = laimin (1:nveg) +! xsamin_table (1:nveg) = xsamin (1:nveg) + + saim_table(1:nveg, 1) = sai_jan(1:nveg) + saim_table(1:nveg, 2) = sai_feb(1:nveg) + saim_table(1:nveg, 3) = sai_mar(1:nveg) + saim_table(1:nveg, 4) = sai_apr(1:nveg) + saim_table(1:nveg, 5) = sai_may(1:nveg) + saim_table(1:nveg, 6) = sai_jun(1:nveg) + saim_table(1:nveg, 7) = sai_jul(1:nveg) + saim_table(1:nveg, 8) = sai_aug(1:nveg) + saim_table(1:nveg, 9) = sai_sep(1:nveg) + saim_table(1:nveg,10) = sai_oct(1:nveg) + saim_table(1:nveg,11) = sai_nov(1:nveg) + saim_table(1:nveg,12) = sai_dec(1:nveg) + laim_table(1:nveg, 1) = lai_jan(1:nveg) + laim_table(1:nveg, 2) = lai_feb(1:nveg) + laim_table(1:nveg, 3) = lai_mar(1:nveg) + laim_table(1:nveg, 4) = lai_apr(1:nveg) + laim_table(1:nveg, 5) = lai_may(1:nveg) + laim_table(1:nveg, 6) = lai_jun(1:nveg) + laim_table(1:nveg, 7) = lai_jul(1:nveg) + laim_table(1:nveg, 8) = lai_aug(1:nveg) + laim_table(1:nveg, 9) = lai_sep(1:nveg) + laim_table(1:nveg,10) = lai_oct(1:nveg) + laim_table(1:nveg,11) = lai_nov(1:nveg) + laim_table(1:nveg,12) = lai_dec(1:nveg) + rhol_table(1:nveg,1) = rhol_vis(1:nveg) !leaf reflectance: 1=vis, 2=nir + rhol_table(1:nveg,2) = rhol_nir(1:nveg) !leaf reflectance: 1=vis, 2=nir + rhos_table(1:nveg,1) = rhos_vis(1:nveg) !stem reflectance: 1=vis, 2=nir + rhos_table(1:nveg,2) = rhos_nir(1:nveg) !stem reflectance: 1=vis, 2=nir + taul_table(1:nveg,1) = taul_vis(1:nveg) !leaf transmittance: 1=vis, 2=nir + taul_table(1:nveg,2) = taul_nir(1:nveg) !leaf transmittance: 1=vis, 2=nir + taus_table(1:nveg,1) = taus_vis(1:nveg) !stem transmittance: 1=vis, 2=nir + taus_table(1:nveg,2) = taus_nir(1:nveg) !stem transmittance: 1=vis, 2=nir + + !---------------- noahmptable.tbl soil parameters + inquire( file='noahmptable.tbl', exist=file_named ) + if ( file_named ) then + open(15, file="noahmptable.tbl", status='old', form='formatted', action='read', iostat=ierr) + else + open(15, status='old', form='formatted', action='read', iostat=ierr) + end if + if ( ierr /= 0 ) then + write(*,'("warning: cannot find file noahmptable.tbl")') + endif + read(15, noahmp_stas_soil_categories) + if ( trim(sltype) == "stas" ) then + read(15, noahmp_soil_stas_parameters) + elseif ( trim(sltype) == "stas_ruc" ) then + read(15, noahmp_soil_stas_ruc_parameters) + else + write(*,'("warning: unrecognized soiltype in subroutine readnoahmptable")') + write(*,'("warning: dataset_identifier = ''", a, "''")') trim(sltype) + endif + close(15) + + ! assign values +! slcats_table = slcats + bexp_table (1:slcats) = bb (1:slcats) + smcdry_table(1:slcats) = drysmc(1:slcats) + smcmax_table(1:slcats) = maxsmc(1:slcats) + smcref_table(1:slcats) = refsmc(1:slcats) + psisat_table(1:slcats) = satpsi(1:slcats) + dksat_table (1:slcats) = satdk (1:slcats) + dwsat_table (1:slcats) = satdw (1:slcats) + smcwlt_table(1:slcats) = wltsmc(1:slcats) + quartz_table(1:slcats) = qtz (1:slcats) + bvic_table (1:slcats) = bvic (1:slcats) + axaj_table (1:slcats) = axaj (1:slcats) + bxaj_table (1:slcats) = bxaj (1:slcats) + xxaj_table (1:slcats) = xxaj (1:slcats) + bdvic_table (1:slcats) = bdvic (1:slcats) + gdvic_table (1:slcats) = gdvic (1:slcats) + bbvic_table (1:slcats) = bbvic (1:slcats) + + !---------------- noahmptable.tbl general parameters + inquire( file='noahmptable.tbl', exist=file_named ) + if ( file_named ) then + open(15, file="noahmptable.tbl", status='old', form='formatted', action='read', iostat=ierr) + else + open(15, status='old', form='formatted', action='read', iostat=ierr) + end if + if ( ierr /= 0 ) then + write(*,'("warning: cannot find file noahmptable.tbl")') + endif + read(15, noahmp_general_parameters) + close(15) + + ! assign values + slope_table(1:num_slope) = slope_data(1:num_slope) + csoil_table = csoil_data + refdk_table = refdk_data + refkdt_table = refkdt_data + frzk_table = frzk_data + zbot_table = zbot_data + czil_table = czil_data + + !---------------- noahmptable.tbl radiation parameters + inquire( file='noahmptable.tbl', exist=file_named ) + if ( file_named ) then + open(15, file="noahmptable.tbl", status='old', form='formatted', action='read', iostat=ierr) + else + open(15, status='old', form='formatted', action='read', iostat=ierr) + end if + if (ierr /= 0) then + write(*,'("warning: cannot find file noahmptable.tbl")') + endif + read(15,noahmp_rad_parameters) + close(15) + + ! assign values + albsat_table(:,1) = albsat_vis ! saturated soil albedos: 1=vis, 2=nir + albsat_table(:,2) = albsat_nir ! saturated soil albedos: 1=vis, 2=nir + albdry_table(:,1) = albdry_vis ! dry soil albedos: 1=vis, 2=nir + albdry_table(:,2) = albdry_nir ! dry soil albedos: 1=vis, 2=nir + albice_table = albice + alblak_table = alblak + omegas_table = omegas + betads_table = betads + betais_table = betais + eg_table = eg +! eice_table = eice + + !---------------- noahmptable.tbl global parameters + inquire( file='noahmptable.tbl', exist=file_named ) + if ( file_named ) then + open(15, file="noahmptable.tbl", status='old', form='formatted', action='read', iostat=ierr) + else + open(15, status='old', form='formatted', action='read', iostat=ierr) + end if + if (ierr /= 0) then + write(*,'("warning: cannot find file noahmptable.tbl")') + endif + read(15,noahmp_global_parameters) + close(15) + + ! assign values + co2_table = co2 + o2_table = o2 + timean_table = timean + fsatmx_table = fsatmx + z0sno_table = z0sno + ssi_table = ssi + snow_ret_fac_table = snow_ret_fac + snow_emis_table = snow_emis + swemx_table = swemx + tau0_table = tau0 + grain_growth_table = grain_growth + extra_growth_table = extra_growth + dirt_soot_table = dirt_soot + bats_cosz_table = bats_cosz + bats_vis_new_table = bats_vis_new + bats_nir_new_table = bats_nir_new + bats_vis_age_table = bats_vis_age + bats_nir_age_table = bats_nir_age + bats_vis_dir_table = bats_vis_dir + bats_nir_dir_table = bats_nir_dir + rsurf_snow_table = rsurf_snow + rsurf_exp_table = rsurf_exp +! c2_snowcompact_table = c2_snowcompact +! c3_snowcompact_table = c3_snowcompact +! c4_snowcompact_table = c4_snowcompact +! c5_snowcompact_table = c5_snowcompact +! dm_snowcompact_table = dm_snowcompact +! eta0_snowcompact_table = eta0_snowcompact +! snliqmaxfrac_table = snliqmaxfrac +! swemaxgla_table = swemaxgla +! wslmax_table = wslmax +! rous_table = rous +! cmic_table = cmic +! snowden_max_table = snowden_max +! class_alb_ref_table = class_alb_ref +! class_sno_age_table = class_sno_age +! class_alb_new_table = class_alb_new +! psiwlt_table = psiwlt +! z0soil_table = z0soil +! z0lake_table = z0lake + + !---------------- noahmptable.tbl irrigation parameters + inquire( file='noahmptable.tbl', exist=file_named ) + if ( file_named ) then + open(15, file="noahmptable.tbl", status='old', form='formatted', action='read', iostat=ierr) + else + open(15, status='old', form='formatted', action='read', iostat=ierr) + end if + if (ierr /= 0) then + write(*,'("warning: cannot find file noahmptable.tbl")') + endif + read(15,noahmp_irrigation_parameters) + close(15) + + ! assign values + irr_frac_table = irr_frac + irr_har_table = irr_har + irr_lai_table = irr_lai + irr_mad_table = irr_mad + filoss_table = filoss + sprir_rate_table = sprir_rate + micir_rate_table = micir_rate + firtfac_table = firtfac + ir_rain_table = ir_rain + + !---------------- noahmptable.tbl crop parameters + inquire( file='noahmptable.tbl', exist=file_named ) + if ( file_named ) then + open(15, file="noahmptable.tbl", status='old', form='formatted', action='read', iostat=ierr) + else + open(15, status='old', form='formatted', action='read', iostat=ierr) + end if + if (ierr /= 0) then + write(*,'("warning: cannot find file noahmptable.tbl")') + endif + read(15,noahmp_crop_parameters) + close(15) + + ! assign values + default_crop_table = default_crop + pltday_table = pltday + hsday_table = hsday + plantpop_table = plantpop + irri_table = irri + gddtbase_table = gddtbase + gddtcut_table = gddtcut + gdds1_table = gdds1 + gdds2_table = gdds2 + gdds3_table = gdds3 + gdds4_table = gdds4 + gdds5_table = gdds5 + c3psni_table (1:5) = c3psni (1:5) + kc25i_table (1:5) = kc25i (1:5) + akci_table (1:5) = akci (1:5) + ko25i_table (1:5) = ko25i (1:5) + akoi_table (1:5) = akoi (1:5) + avcmxi_table (1:5) = avcmxi (1:5) + vcmx25i_table(1:5) = vcmx25i(1:5) + bpi_table (1:5) = bpi (1:5) + mpi_table (1:5) = mpi (1:5) + folnmxi_table(1:5) = folnmxi(1:5) + qe25i_table (1:5) = qe25i (1:5) + aref_table = aref + psnrf_table = psnrf + i2par_table = i2par + tassim0_table = tassim0 + tassim1_table = tassim1 + tassim2_table = tassim2 + k_table = k + epsi_table = epsi + q10mr_table = q10mr + lefreez_table = lefreez + fra_gr_table = fra_gr + lfmr25_table = lfmr25 + stmr25_table = stmr25 + rtmr25_table = rtmr25 + grainmr25_table = grainmr25 + bio2lai_table = bio2lai + dile_fc_table(:,1) = dile_fc_s1 + dile_fc_table(:,2) = dile_fc_s2 + dile_fc_table(:,3) = dile_fc_s3 + dile_fc_table(:,4) = dile_fc_s4 + dile_fc_table(:,5) = dile_fc_s5 + dile_fc_table(:,6) = dile_fc_s6 + dile_fc_table(:,7) = dile_fc_s7 + dile_fc_table(:,8) = dile_fc_s8 + dile_fw_table(:,1) = dile_fw_s1 + dile_fw_table(:,2) = dile_fw_s2 + dile_fw_table(:,3) = dile_fw_s3 + dile_fw_table(:,4) = dile_fw_s4 + dile_fw_table(:,5) = dile_fw_s5 + dile_fw_table(:,6) = dile_fw_s6 + dile_fw_table(:,7) = dile_fw_s7 + dile_fw_table(:,8) = dile_fw_s8 + lf_ovrc_table(:,1) = lf_ovrc_s1 + lf_ovrc_table(:,2) = lf_ovrc_s2 + lf_ovrc_table(:,3) = lf_ovrc_s3 + lf_ovrc_table(:,4) = lf_ovrc_s4 + lf_ovrc_table(:,5) = lf_ovrc_s5 + lf_ovrc_table(:,6) = lf_ovrc_s6 + lf_ovrc_table(:,7) = lf_ovrc_s7 + lf_ovrc_table(:,8) = lf_ovrc_s8 + st_ovrc_table(:,1) = st_ovrc_s1 + st_ovrc_table(:,2) = st_ovrc_s2 + st_ovrc_table(:,3) = st_ovrc_s3 + st_ovrc_table(:,4) = st_ovrc_s4 + st_ovrc_table(:,5) = st_ovrc_s5 + st_ovrc_table(:,6) = st_ovrc_s6 + st_ovrc_table(:,7) = st_ovrc_s7 + st_ovrc_table(:,8) = st_ovrc_s8 + rt_ovrc_table(:,1) = rt_ovrc_s1 + rt_ovrc_table(:,2) = rt_ovrc_s2 + rt_ovrc_table(:,3) = rt_ovrc_s3 + rt_ovrc_table(:,4) = rt_ovrc_s4 + rt_ovrc_table(:,5) = rt_ovrc_s5 + rt_ovrc_table(:,6) = rt_ovrc_s6 + rt_ovrc_table(:,7) = rt_ovrc_s7 + rt_ovrc_table(:,8) = rt_ovrc_s8 + lfpt_table (:,1) = lfpt_s1 + lfpt_table (:,2) = lfpt_s2 + lfpt_table (:,3) = lfpt_s3 + lfpt_table (:,4) = lfpt_s4 + lfpt_table (:,5) = lfpt_s5 + lfpt_table (:,6) = lfpt_s6 + lfpt_table (:,7) = lfpt_s7 + lfpt_table (:,8) = lfpt_s8 + stpt_table (:,1) = stpt_s1 + stpt_table (:,2) = stpt_s2 + stpt_table (:,3) = stpt_s3 + stpt_table (:,4) = stpt_s4 + stpt_table (:,5) = stpt_s5 + stpt_table (:,6) = stpt_s6 + stpt_table (:,7) = stpt_s7 + stpt_table (:,8) = stpt_s8 + rtpt_table (:,1) = rtpt_s1 + rtpt_table (:,2) = rtpt_s2 + rtpt_table (:,3) = rtpt_s3 + rtpt_table (:,4) = rtpt_s4 + rtpt_table (:,5) = rtpt_s5 + rtpt_table (:,6) = rtpt_s6 + rtpt_table (:,7) = rtpt_s7 + rtpt_table (:,8) = rtpt_s8 + grainpt_table(:,1) = grainpt_s1 + grainpt_table(:,2) = grainpt_s2 + grainpt_table(:,3) = grainpt_s3 + grainpt_table(:,4) = grainpt_s4 + grainpt_table(:,5) = grainpt_s5 + grainpt_table(:,6) = grainpt_s6 + grainpt_table(:,7) = grainpt_s7 + grainpt_table(:,8) = grainpt_s8 + lfct_table (:,1) = lfct_s1 + lfct_table (:,2) = lfct_s2 + lfct_table (:,3) = lfct_s3 + lfct_table (:,4) = lfct_s4 + lfct_table (:,5) = lfct_s5 + lfct_table (:,6) = lfct_s6 + lfct_table (:,7) = lfct_s7 + lfct_table (:,8) = lfct_s8 + stct_table (:,1) = stct_s1 + stct_table (:,2) = stct_s2 + stct_table (:,3) = stct_s3 + stct_table (:,4) = stct_s4 + stct_table (:,5) = stct_s5 + stct_table (:,6) = stct_s6 + stct_table (:,7) = stct_s7 + stct_table (:,8) = stct_s8 + rtct_table (:,1) = rtct_s1 + rtct_table (:,2) = rtct_s2 + rtct_table (:,3) = rtct_s3 + rtct_table (:,4) = rtct_s4 + rtct_table (:,5) = rtct_s5 + rtct_table (:,6) = rtct_s6 + rtct_table (:,7) = rtct_s7 + rtct_table (:,8) = rtct_s8 + + !---------------- noahmptable.tbl tile drainage parameters + inquire( file='noahmptable.tbl', exist=file_named ) + if ( file_named ) then + open(15, file="noahmptable.tbl", status='old', form='formatted', action='read', iostat=ierr) + else + open(15, status='old', form='formatted', action='read', iostat=ierr) + end if + if (ierr /= 0) then + write(*,'("warning: cannot find file noahmptable.tbl")') + endif + read(15,noahmp_tiledrain_parameters) + close(15) + + ! assign values + drain_layer_opt_table = drain_layer_opt + tdsmc_fac_table(1:nsoiltype) = tdsmc_fac(1:nsoiltype) + td_depth_table (1:nsoiltype) = td_depth (1:nsoiltype) + td_dc_table (1:nsoiltype) = td_dc (1:nsoiltype) + td_dcoef_table (1:nsoiltype) = td_dcoef (1:nsoiltype) + td_d_table (1:nsoiltype) = td_d (1:nsoiltype) + td_adepth_table(1:nsoiltype) = td_adepth(1:nsoiltype) + td_radi_table (1:nsoiltype) = td_radi (1:nsoiltype) + td_spac_table (1:nsoiltype) = td_spac (1:nsoiltype) + td_ddrain_table(1:nsoiltype) = td_ddrain(1:nsoiltype) + klat_fac_table (1:nsoiltype) = klat_fac (1:nsoiltype) + + !---------------- noahmptable.tbl optional parameters + inquire( file='noahmptable.tbl', exist=file_named ) + if ( file_named ) then + open(15, file="noahmptable.tbl", status='old', form='formatted', action='read', iostat=ierr) + else + open(15, status='old', form='formatted', action='read', iostat=ierr) + end if + if (ierr /= 0) then + write(*,'("warning: cannot find file noahmptable.tbl")') + endif + read(15,noahmp_optional_parameters) + close(15) + + ! assign values +! sr2006_theta_1500t_a_table = sr2006_theta_1500t_a +! sr2006_theta_1500t_b_table = sr2006_theta_1500t_b +! sr2006_theta_1500t_c_table = sr2006_theta_1500t_c +! sr2006_theta_1500t_d_table = sr2006_theta_1500t_d +! sr2006_theta_1500t_e_table = sr2006_theta_1500t_e +! sr2006_theta_1500t_f_table = sr2006_theta_1500t_f +! sr2006_theta_1500t_g_table = sr2006_theta_1500t_g +! sr2006_theta_1500_a_table = sr2006_theta_1500_a +! sr2006_theta_1500_b_table = sr2006_theta_1500_b +! sr2006_theta_33t_a_table = sr2006_theta_33t_a +! sr2006_theta_33t_b_table = sr2006_theta_33t_b +! sr2006_theta_33t_c_table = sr2006_theta_33t_c +! sr2006_theta_33t_d_table = sr2006_theta_33t_d +! sr2006_theta_33t_e_table = sr2006_theta_33t_e +! sr2006_theta_33t_f_table = sr2006_theta_33t_f +! sr2006_theta_33t_g_table = sr2006_theta_33t_g +! sr2006_theta_33_a_table = sr2006_theta_33_a +! sr2006_theta_33_b_table = sr2006_theta_33_b +! sr2006_theta_33_c_table = sr2006_theta_33_c +! sr2006_theta_s33t_a_table = sr2006_theta_s33t_a +! sr2006_theta_s33t_b_table = sr2006_theta_s33t_b +! sr2006_theta_s33t_c_table = sr2006_theta_s33t_c +! sr2006_theta_s33t_d_table = sr2006_theta_s33t_d +! sr2006_theta_s33t_e_table = sr2006_theta_s33t_e +! sr2006_theta_s33t_f_table = sr2006_theta_s33t_f +! sr2006_theta_s33t_g_table = sr2006_theta_s33t_g +! sr2006_theta_s33_a_table = sr2006_theta_s33_a +! sr2006_theta_s33_b_table = sr2006_theta_s33_b +! sr2006_psi_et_a_table = sr2006_psi_et_a +! sr2006_psi_et_b_table = sr2006_psi_et_b +! sr2006_psi_et_c_table = sr2006_psi_et_c +! sr2006_psi_et_d_table = sr2006_psi_et_d +! sr2006_psi_et_e_table = sr2006_psi_et_e +! sr2006_psi_et_f_table = sr2006_psi_et_f +! sr2006_psi_et_g_table = sr2006_psi_et_g +! sr2006_psi_e_a_table = sr2006_psi_e_a +! sr2006_psi_e_b_table = sr2006_psi_e_b +! sr2006_psi_e_c_table = sr2006_psi_e_c +! sr2006_smcmax_a_table = sr2006_smcmax_a +! sr2006_smcmax_b_table = sr2006_smcmax_b + + end subroutine read_mp_table_parameters - end module noahmp_tables diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index dfdbd1bc6..865849e8f 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -169,10 +169,11 @@ subroutine noahmpdrv_run & use sfc_diff, only : stability ! use module_sf_noahmplsm use module_sf_noahmp_glacier - use noahmp_tables, only : isice_table, co2_table, o2_table, & - isurban_table, smcref_table, smcdry_table, & - smcmax_table, co2_table, o2_table, & - saim_table, laim_table +! use noahmp_tables, only : isice_table, co2_table, o2_table, & +! isurban_table, smcref_table, smcdry_table, & +! smcmax_table, co2_table, o2_table, & +! saim_table, laim_table + use noahmp_tables implicit none @@ -563,6 +564,7 @@ subroutine noahmpdrv_run & integer :: soil_category(nsoil) integer :: slope_category integer :: soil_color_category + character(len=256) :: dataset_identifier real (kind=kind_phys) :: spec_humidity_sat ! saturation specific humidity real (kind=kind_phys) :: vapor_pressure_sat ! saturation vapor pressure @@ -620,6 +622,8 @@ subroutine noahmpdrv_run & ! --- noah-mp input variables (except snow_ice_frac_old done later) ! + dataset_identifier = "modified_igbp_modis_noah" + i_location = i j_location = -9999 latitude = xlatin(i) @@ -757,6 +761,8 @@ subroutine noahmpdrv_run & soil_color_category = soilcol(i) ! soil_color_category = 4 + call read_mp_table_parameters(dataset_identifier) + call transfer_mp_parameters(vegetation_category, soil_category, & slope_category, soil_color_category, crop_type,parameters) diff --git a/physics/noahmptable.tbl b/physics/noahmptable.tbl new file mode 100644 index 000000000..e9952c754 --- /dev/null +++ b/physics/noahmptable.tbl @@ -0,0 +1,774 @@ +&noahmp_usgs_veg_categories + veg_dataset_description = "usgs" + nveg = 27 +/ +&noahmp_usgs_parameters + ! nveg = 27 + ! 1: urban and built-up land + ! 2: dryland cropland and pasture + ! 3: irrigated cropland and pasture + ! 4: mixed dryland/irrigated cropland and pasture + ! 5: cropland/grassland mosaic + ! 6: cropland/woodland mosaic + ! 7: grassland + ! 8: shrubland + ! 9: mixed shrubland/grassland + ! 10: savanna + ! 11: deciduous broadleaf forest + ! 12: deciduous needleleaf forest + ! 13: evergreen broadleaf forest + ! 14: evergreen needleleaf forest + ! 15: mixed forest + ! 16: water bodies + ! 17: herbaceous wetland + ! 18: wooded wetland + ! 19: barren or sparsely vegetated + ! 20: herbaceous tundra + ! 21: wooded tundra + ! 22: mixed tundra + ! 23: bare ground tundra + ! 24: snow or ice + ! 25: playa + ! 26: lava + ! 27: white sand + + isurban = 1 + iswater = 16 + isbarren = 19 + isice = 24 + iscrop = 2 + eblforest = 13 + natural = 5 + lcz_1 = 31 + lcz_2 = 32 + lcz_3 = 33 + lcz_4 = 34 + lcz_5 = 35 + lcz_6 = 36 + lcz_7 = 37 + lcz_8 = 38 + lcz_9 = 39 + lcz_10 = 40 + lcz_11 = 41 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ch2op = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + dleaf = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + z0mvt = 1.00, 0.15, 0.15, 0.15, 0.14, 0.50, 0.12, 0.06, 0.09, 0.50, 0.80, 0.85, 1.10, 1.09, 0.80, 0.00, 0.12, 0.50, 0.00, 0.10, 0.30, 0.20, 0.03, 0.00, 0.01, 0.00, 0.00, + hvt = 15.0, 2.00, 2.00, 2.00, 1.50, 8.00, 1.00, 1.10, 1.10, 10.0, 16.0, 18.0, 20.0, 20.0, 16.0, 0.00, 0.50, 10.0, 0.00, 0.50, 4.00, 2.00, 0.50, 0.00, 0.10, 0.00, 0.00, + hvb = 1.00, 0.10, 0.10, 0.10, 0.10, 0.15, 0.05, 0.10, 0.10, 0.10, 11.5, 7.00, 8.00, 8.50, 10.0, 0.00, 0.05, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + den = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, + rc = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, +!mfsno = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, +! c. he 12/17/2020: optimized mfsno values dependent on land type based on evaluation with snotel swe and modis scf, surface albedo + mfsno = 4.00, 3.00, 3.00, 3.00, 4.00, 4.00, 2.00, 2.00, 2.00, 2.00, 1.00, 1.00, 1.00, 1.00, 1.00, 3.00, 3.00, 3.00, 3.00, 3.50, 3.50, 3.50, 3.50, 2.50, 3.50, 3.50, 3.50, +! c. he 12/17/2020: optimized snow cover factor (m) in scf formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with snotel swe and modis scf, surface albedo + scffac= 0.042, 0.014, 0.014, 0.014, 0.026, 0.026, 0.020, 0.018, 0.016, 0.020, 0.008, 0.008, 0.008, 0.008, 0.008, 0.030, 0.020, 0.020, 0.016, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, + + ! row 1: vis + ! row 2: near ir + rhol_vis=0.00, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.07, 0.10, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.00, 0.11, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + rhol_nir=0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.35, 0.45, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.00, 0.58, 0.45, 0.00, 0.45, 0.45, 0.45, 0.45, 0.00, 0.45, 0.00, 0.00, + + ! row 1: vis + ! row 2: near ir + rhos_vis=0.00, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.00, 0.36, 0.16, 0.00, 0.16, 0.16, 0.16, 0.16, 0.00, 0.16, 0.00, 0.00, + rhos_nir=0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.00, 0.58, 0.39, 0.00, 0.39, 0.39, 0.39, 0.39, 0.00, 0.39, 0.00, 0.00, + + ! row 1: vis + ! row 2: near ir + taul_vis=0.00, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.00, 0.07, 0.05, 0.00, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.00, 0.00, + taul_nir=0.00, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.10, 0.10, 0.25, 0.25, 0.10, 0.25, 0.10, 0.25, 0.00, 0.25, 0.25, 0.00, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, + + ! row 1: vis + ! row 2: near ir + taus_vis=0.00, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.220, 0.001, 0.000, 0.220, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + taus_nir=0.00, 0.380, 0.380, 0.380, 0.380, 0.380, 0.380, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.380, 0.001, 0.000, 0.380, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + + xl = 0.000, -0.30, -0.30, -0.30, -0.30, -0.30, -0.30, 0.010, 0.250, 0.010, 0.250, 0.010, 0.010, 0.010, 0.250, 0.000, -0.30, 0.250, 0.000, -0.30, 0.250, 0.250, 0.250, 0.000, 0.250, 0.000, 0.000, + ! make cwpvt vegetation dependent according to j. goudriaan, crop micrometeorology: a simulation study (simulation monographs), 1977). c. he, 12/17/2020 + cwpvt = 0.18, 1.67, 1.67, 1.67, 1.67, 0.5, 5.0, 1.0, 2.0, 1.0, 0.67, 0.18, 0.67, 0.18, 0.29, 0.18, 1.67, 0.67, 0.18, 1.67, 0.67, 1.00, 0.18, 0.18, 0.18, 0.18, 0.18, + c3psn = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + kc25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + akc = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + ko25 = 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, + ako = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + avcmx = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + aqe = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + ltovrc= 0.0, 1.2, 1.2, 1.2, 1.2, 1.30, 0.50, 0.65, 0.70, 0.65, 0.55, 0.2, 0.55, 0.5, 0.5, 0.0, 1.4, 1.4, 0.0, 1.2, 1.3, 1.4, 1.0, 0.0, 1.0, 0.0, 0.0, + dilefc= 0.00, 0.50, 0.50, 0.50, 0.35, 0.20, 0.20, 0.20, 0.50, 0.50, 0.60, 1.80, 0.50, 1.20, 0.80, 0.00, 0.40, 0.40, 0.00, 0.40, 0.30, 0.40, 0.30, 0.00, 0.30, 0.00, 0.00, + dilefw= 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.20, 0.50, 0.20, 0.20, 4.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.20, 0.20, 0.00, 0.20, 0.00, 0.00, + rmf25 = 0.00, 1.00, 1.40, 1.45, 1.45, 1.45, 1.80, 0.26, 0.26, 0.80, 3.00, 4.00, 0.65, 3.00, 3.00, 0.00, 3.20, 3.20, 0.00, 3.20, 3.00, 3.00, 3.00, 0.00, 3.00, 0.00, 0.00, + sla = 60, 80, 80, 80, 80, 80, 60, 60, 60, 50, 80, 80, 80, 80, 80, 0, 80, 80, 0, 80, 80, 80, 80, 0, 80, 0, 0, + fragr = 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + tmin = 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 268, 273, 265, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + vcmx25= 0.00, 80.0, 80.0, 80.0, 60.0, 70.0, 40.0, 40.0, 40.0, 40.0, 60.0, 60.0, 60.0, 50.0, 55.0, 0.00, 50.0, 50.0, 0.00, 50.0, 50.0, 50.0, 50.0, 0.00, 50.0, 0.00, 0.00, + tdlef = 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 268, 278, 278, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + bp = 1.e15, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 1.e15, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 1.e15, 2.e3, 1.e15, 1.e15, + mp = 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + qe25 = 0., 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.00, + rms25 = 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.32, 0.10, 0.64, 0.30, 0.90, 0.80, 0.00, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, + rmr25 = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.20, 0.00, 0.00, 0.01, 0.01, 0.05, 0.05, 0.36, 0.03, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, + arm = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + folnmx= 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 0.00, + wdpool= 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, + wrrat = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 30.0, 30.0, 30.0, 30.0, 30.0, 0.00, 0.00, 30.0, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, + mrp = 0.00, 0.23, 0.23, 0.23, 0.23, 0.23, 0.17, 0.19, 0.19, 0.40, 0.40, 0.37, 0.23, 0.37, 0.30, 0.00, 0.17, 0.40, 0.00, 0.17, 0.23, 0.20, 0.00, 0.00, 0.20, 0.00, 0.00, + nroot = 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 0, 2, 2, 1, 3, 3, 3, 2, 1, 1, 0, 0, + rgl = 999.0, 100.0, 100.0, 100.0, 100.0, 65.0, 100.0, 100.0, 100.0, 65.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 100.0, 30.0, 999.0, 100.0, 100.0, 100.0, 100.0, 999.0, 100.0, 999.0, 999.0, + rs = 200.0, 40.0, 40.0, 40.0, 40.0, 70.0, 40.0, 300.0, 170.0, 70.0, 100.0, 150.0, 150.0, 125.0, 125.0, 100.0, 40.0, 100.0, 999.0, 150.0, 150.0, 150.0, 200.0, 999.0, 40.0, 999.0, 999.0, + hs = 999.0, 36.25, 36.25, 36.25, 36.25, 44.14, 36.35, 42.00, 39.18, 54.53, 54.53, 47.35, 41.69, 47.35, 51.93, 51.75, 60.00, 51.93, 999.0, 42.00, 42.00, 42.00, 42.00, 999.0, 36.25, 999.0, 999.0, + topt = 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, + rsmax = 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., + rtovrc = 2.e-8,2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, + rswoodc= 3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10, + bf = 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, + wstrc = 100.0,100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, + laimin = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, + xsamin = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, + +! monthly values, one row for each month: + sai_jan = 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.2, 0.2, 0.3, 0.4, 0.3, 0.5, 0.4, 0.4, 0.0, 0.2, 0.3, 0.0, 0.1, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_feb = 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.2, 0.2, 0.3, 0.4, 0.3, 0.5, 0.4, 0.4, 0.0, 0.2, 0.3, 0.0, 0.1, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_mar = 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.2, 0.2, 0.3, 0.4, 0.3, 0.5, 0.4, 0.4, 0.0, 0.2, 0.3, 0.0, 0.1, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_apr = 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.2, 0.2, 0.3, 0.4, 0.4, 0.5, 0.3, 0.4, 0.0, 0.2, 0.3, 0.0, 0.1, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_may = 0.0, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3, 0.2, 0.2, 0.3, 0.4, 0.4, 0.5, 0.4, 0.4, 0.0, 0.3, 0.3, 0.0, 0.1, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_jun = 0.0, 0.3, 0.3, 0.3, 0.4, 0.4, 0.4, 0.2, 0.3, 0.4, 0.4, 0.7, 0.5, 0.5, 0.4, 0.0, 0.4, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_jul = 0.0, 0.4, 0.4, 0.4, 0.6, 0.6, 0.8, 0.4, 0.6, 0.8, 0.9, 1.3, 0.5, 0.5, 0.7, 0.0, 0.6, 0.6, 0.0, 0.4, 0.4, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_aug = 0.0, 0.5, 0.5, 0.5, 0.9, 0.9, 1.3, 0.6, 0.9, 1.2, 1.2, 1.2, 0.5, 0.6, 0.8, 0.0, 0.9, 0.9, 0.0, 0.6, 0.6, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_sep = 0.0, 0.4, 0.4, 0.4, 0.7, 1.0, 1.1, 0.8, 1.0, 1.3, 1.6, 1.0, 0.5, 0.6, 1.0, 0.0, 0.7, 1.0, 0.0, 0.7, 0.8, 0.7, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_oct = 0.0, 0.3, 0.3, 0.3, 0.3, 0.8, 0.4, 0.7, 0.6, 0.7, 1.4, 0.8, 0.5, 0.7, 1.0, 0.0, 0.3, 0.8, 0.0, 0.5, 0.7, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_nov = 0.0, 0.3, 0.3, 0.3, 0.3, 0.4, 0.4, 0.3, 0.3, 0.4, 0.6, 0.6, 0.5, 0.6, 0.5, 0.0, 0.3, 0.4, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_dec = 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.4, 0.2, 0.3, 0.4, 0.4, 0.5, 0.5, 0.5, 0.4, 0.0, 0.3, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + + lai_jan = 0.0, 0.0, 0.0, 0.0, 0.2, 0.0, 0.4, 0.0, 0.2, 0.3, 0.0, 0.0, 4.5, 4.0, 2.0, 0.0, 0.2, 0.2, 0.0, 0.2, 1.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_feb = 0.0, 0.0, 0.0, 0.0, 0.3, 0.0, 0.5, 0.0, 0.3, 0.3, 0.0, 0.0, 4.5, 4.0, 2.0, 0.0, 0.3, 0.3, 0.0, 0.3, 1.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_mar = 0.0, 0.0, 0.0, 0.0, 0.3, 0.2, 0.6, 0.2, 0.4, 0.5, 0.3, 0.0, 4.5, 4.0, 2.2, 0.0, 0.3, 0.3, 0.0, 0.3, 1.1, 0.7, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_apr = 0.0, 0.0, 0.0, 0.0, 0.4, 0.6, 0.7, 0.6, 0.7, 0.8, 1.2, 0.6, 4.5, 4.0, 2.6, 0.0, 0.4, 0.6, 0.0, 0.4, 1.3, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_may = 0.0, 1.0, 1.0, 1.0, 1.1, 2.0, 1.2, 1.5, 1.4, 1.8, 3.0, 1.2, 4.5, 4.0, 3.5, 0.0, 1.1, 2.0, 0.0, 0.6, 1.7, 1.2, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_jun = 0.0, 2.0, 2.0, 2.0, 2.5, 3.3, 3.0, 2.3, 2.6, 3.6, 4.7, 2.0, 4.5, 4.0, 4.3, 0.0, 2.5, 3.3, 0.0, 1.5, 2.1, 1.8, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_jul = 0.0, 3.0, 3.0, 3.0, 3.2, 3.7, 3.5, 2.3, 2.9, 3.8, 4.5, 2.6, 4.5, 4.0, 4.3, 0.0, 3.2, 3.7, 0.0, 1.7, 2.1, 1.8, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_aug = 0.0, 3.0, 3.0, 3.0, 2.2, 3.2, 1.5, 1.7, 1.6, 2.1, 3.4, 1.7, 4.5, 4.0, 3.7, 0.0, 2.2, 3.2, 0.0, 0.8, 1.8, 1.3, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_sep = 0.0, 1.5, 1.5, 1.5, 1.1, 1.3, 0.7, 0.6, 0.7, 0.9, 1.2, 1.0, 4.5, 4.0, 2.6, 0.0, 1.1, 1.3, 0.0, 0.4, 1.3, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_oct = 0.0, 0.0, 0.0, 0.0, 0.3, 0.2, 0.6, 0.2, 0.4, 0.5, 0.3, 0.5, 4.5, 4.0, 2.2, 0.0, 0.3, 0.3, 0.0, 0.3, 1.1, 0.7, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_nov = 0.0, 0.0, 0.0, 0.0, 0.3, 0.0, 0.5, 0.0, 0.3, 0.3, 0.0, 0.2, 4.5, 4.0, 2.0, 0.0, 0.3, 0.3, 0.0, 0.2, 1.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_dec = 0.0, 0.0, 0.0, 0.0, 0.2, 0.0, 0.4, 0.0, 0.2, 0.3, 0.0, 0.0, 4.5, 4.0, 2.0, 0.0, 0.2, 0.2, 0.0, 0.2, 1.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, + +! five types, one row for each type (bvoc currently not active). + eps1 = 41.87, 0.00, 0.00, 2.52, 0.04, 17.11, 0.02, 21.62, 0.11, 22.80, 46.86, 0.00, 0.00, 0.46, 30.98, 2.31, 1.63, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + eps2 = 0.98, 0.00, 0.00, 0.16, 0.09, 0.28, 0.05, 0.92, 0.22, 0.59, 0.38, 0.00, 0.00, 3.34, 0.96, 1.47, 1.07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + eps3 = 1.82, 0.00, 0.00, 0.23, 0.05, 0.81, 0.03, 1.73, 1.26, 1.37, 1.84, 0.00, 0.00, 1.85, 1.84, 1.70, 1.21, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + eps4 = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + eps5 = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ + +&noahmp_modis_veg_categories + veg_dataset_description = "modified igbp modis noah" + nveg = 20 +/ + +&noahmp_modis_parameters +! 1 'evergreen needleleaf forest' -> usgs 14 +! 2, 'evergreen broadleaf forest' -> usgs 13 +! 3, 'deciduous needleleaf forest' -> usgs 12 +! 4, 'deciduous broadleaf forest' -> usgs 11 +! 5, 'mixed forests' -> usgs 15 +! 6, 'closed shrublands' -> usgs 8 "shrubland" +! 7, 'open shrublands' -> usgs 9 "shrubland/grassland" +! 8, 'woody savannas' -> usgs 8 "shrubland" +! 9, 'savannas' -> usgs 10 +! 10, 'grasslands' -> usgs 7 +! 11 'permanent wetlands' -> avg of usgs 17 and 18 (herb. wooded wetland) +! 12, 'croplands' -> usgs 2 "dryland cropland" +! 13, 'urban and built-up' -> usgs 1 +! 14 'cropland/natural vegetation mosaic' -> usgs 5 "cropland/grassland" +! 15, 'snow and ice' -> usgs 24 +! 16, 'barren or sparsely vegetated' -> usgs 19 +! 17, 'water' -> usgs 16 +! 18, 'wooded tundra' -> usgs 21 +! 19, 'mixed tundra' -> usgs 22 +! 20, 'barren tundra' -> usgs 23 + + isurban = 13 + iswater = 17 + isbarren = 16 + isice = 15 + iscrop = 12 + eblforest = 2 + natural = 14 + lcz_1 = 31 + lcz_2 = 32 + lcz_3 = 33 + lcz_4 = 34 + lcz_5 = 35 + lcz_6 = 36 + lcz_7 = 37 + lcz_8 = 38 + lcz_9 = 39 + lcz_10 = 40 + lcz_11 = 41 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ch2op = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + dleaf = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + z0mvt = 1.09, 1.10, 0.85, 0.80, 0.80, 0.20, 0.06, 0.60, 0.50, 0.12, 0.30, 0.15, 1.00, 0.14, 0.00, 0.00, 0.00, 0.30, 0.20, 0.03, + hvt = 20.0, 20.0, 18.0, 16.0, 16.0, 1.10, 1.10, 13.0, 10.0, 1.00, 5.00, 2.00, 15.0, 1.50, 0.00, 0.00, 0.00, 4.00, 2.00, 0.50, + hvb = 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, 0.10, 0.10, 0.10, 0.05, 0.10, 0.10, 1.00, 0.10, 0.00, 0.00, 0.00, 0.30, 0.20, 0.10, + den = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, + rc = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, +!mfsno = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, +! c. he 12/17/2020: optimized mfsno values dependent on land type based on evaluation with snotel swe and modis scf, surface albedo + mfsno = 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, 2.00, 2.00, 2.00, 2.00, 3.00, 3.00, 4.00, 4.00, 2.50, 3.00, 3.00, 3.50, 3.50, 3.50, +! c. he 12/17/2020: optimized snow cover factor (m) in scf formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with snotel swe and modis scf, surface albedo + scffac = 0.008, 0.008, 0.008, 0.008, 0.008, 0.016, 0.016, 0.020, 0.020, 0.020, 0.020, 0.014, 0.042, 0.026, 0.030, 0.016, 0.030, 0.030, 0.030, 0.030, + + ! row 1: vis + ! row 2: near ir + rhol_vis=0.07, 0.10, 0.07, 0.10, 0.10, 0.07, 0.07, 0.07, 0.10, 0.11, 0.105, 0.11, 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + rhol_nir=0.35, 0.45, 0.35, 0.45, 0.45, 0.35, 0.35, 0.35, 0.45, 0.58, 0.515, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.45, 0.45, 0.45, + + ! row 1: vis + ! row 2: near ir + rhos_vis=0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.36, 0.26, 0.36, 0.00, 0.36, 0.00, 0.00, 0.00, 0.16, 0.16, 0.16, + rhos_nir=0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.58, 0.485, 0.58, 0.00, 0.58, 0.00, 0.00, 0.00, 0.39, 0.39, 0.39, + + ! row 1: vis + ! row 2: near ir + taul_vis=0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.07, 0.06, 0.07, 0.00, 0.07, 0.00, 0.00, 0.00, 0.05, 0.05, 0.05, + taul_nir=0.10, 0.25, 0.10, 0.25, 0.25, 0.10, 0.10, 0.10, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, 0.00, 0.25, 0.25, 0.25, + + ! row 1: vis + ! row 2: near ir + taus_vis=0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.220, 0.1105, 0.220, 0.000, 0.220, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + taus_nir=0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.380, 0.1905, 0.380, 0.000, 0.380, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + + xl = 0.010, 0.010, 0.010, 0.250, 0.250, 0.010, 0.010, 0.010, 0.010, -0.30, -0.025, -0.30, 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, 0.250, 0.250, +! make cwpvt vegetation dependent according to j. goudriaan, crop micrometeorology: a simulation study (simulation monographs), 1977). c. he, 12/17/2020 + cwpvt = 0.18, 0.67, 0.18, 0.67, 0.29, 1.0, 2.0, 1.3, 1.0, 5.0, 1.17, 1.67, 1.67, 1.67, 0.18, 0.18, 0.18, 0.67, 1.0, 0.18, + c3psn = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + kc25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + akc = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + ko25 = 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, + ako = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + avcmx = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + aqe = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + ltovrc= 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, 0.65, 0.65, 0.65, 0.50, 1.4, 1.6, 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, 1.4, 1.0, + dilefc= 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, 0.20, 0.20, 0.50, 0.20, 0.4, 0.50, 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, 0.40, 0.30, + dilefw= 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, 0.20, 0.20, + rmf25 = 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, + sla = 80, 80, 80, 80, 80, 60, 60, 60, 50, 60, 80, 80, 60, 80, 0, 0, 0, 80, 80, 80, + fragr = 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, 0.10, 0.10, + tmin = 265, 273, 268, 273, 268, 273, 273, 273, 273, 273, 268, 273, 0, 273, 0, 0, 0, 268, 268, 268, + vcmx25= 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, 50.0, 50.0, + tdlef = 278, 278, 268, 278, 268, 278, 278, 278, 278, 278, 268, 278, 278, 278, 0, 0, 0, 268, 268, 268, + bp = 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 1.e15, 2.e3, 1.e15, 2.e3, 1.e15, 2.e3, 2.e3, 2.e3, + mp = 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + qe25 = 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, 0.06, 0.06, + rms25 = 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.00, + rmr25 = 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 0.00, + arm = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + folnmx= 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, 1.5, 1.5, + wdpool= 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, + wrrat = 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, + mrp = 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, 0.19, 0.19, 0.40, 0.17, 0.285, 0.23, 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, 0.20, 0.00, + nroot = 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 3, 1, 3, 1, 1, 0, 3, 3, 2, + rgl = 30.0, 30.0, 30.0, 30.0, 30.0, 100.0, 100.0, 100.0, 65.0, 100.0, 65.0, 100.0, 999.0, 100.0, 999.0, 999.0, 30.0, 100.0, 100.0, 100.0, + rs = 125.0, 150.0, 150.0, 100.0, 125.0, 300.0, 170.0, 300.0, 70.0, 40.0, 70.0, 40.0, 200.0, 40.0, 999.0, 999.0, 100.0, 150.0, 150.0, 200.0, + hs = 47.35, 41.69, 47.35, 54.53, 51.93, 42.00, 39.18, 42.00, 54.53, 36.35, 55.97, 36.25, 999.0, 36.25, 999.0, 999.0, 51.75, 42.00, 42.00, 42.00, + topt = 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, + rsmax = 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., + rtovrc = 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, + rswoodc= 3.e-10,3.e-10,3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, + bf = 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, + wstrc = 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, + laimin = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, + xsamin = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, + +! monthly values, one row for each month: + sai_jan = 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.1, 0.0, + sai_feb = 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.1, 0.0, + sai_mar = 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.1, 0.0, + sai_apr = 0.3, 0.5, 0.4, 0.4, 0.4, 0.3, 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.1, 0.0, + sai_may = 0.4, 0.5, 0.4, 0.4, 0.4, 0.3, 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.1, 0.0, + sai_jun = 0.5, 0.5, 0.7, 0.4, 0.4, 0.3, 0.2, 0.4, 0.4, 0.4, 0.4, 0.3, 0.0, 0.4, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + sai_jul = 0.5, 0.5, 1.3, 0.9, 0.7, 0.6, 0.4, 0.7, 0.8, 0.8, 0.6, 0.4, 0.0, 0.6, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, + sai_aug = 0.6, 0.5, 1.2, 1.2, 0.8, 0.9, 0.6, 1.2, 1.2, 1.3, 0.9, 0.5, 0.0, 0.9, 0.0, 0.0, 0.0, 0.6, 0.6, 0.0, + sai_sep = 0.6, 0.5, 1.0, 1.6, 1.0, 1.2, 0.8, 1.4, 1.3, 1.1, 0.9, 0.4, 0.0, 0.7, 0.0, 0.0, 0.0, 0.8, 0.7, 0.0, + sai_oct = 0.7, 0.5, 0.8, 1.4, 1.0, 0.9, 0.7, 1.1, 0.7, 0.4, 0.6, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.7, 0.5, 0.0, + sai_nov = 0.6, 0.5, 0.6, 0.6, 0.5, 0.4, 0.3, 0.5, 0.4, 0.4, 0.4, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + sai_dec = 0.5, 0.5, 0.5, 0.4, 0.4, 0.3, 0.2, 0.4, 0.4, 0.4, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + + lai_jan = 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, 0.0, 0.2, 0.3, 0.4, 0.2, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 1.0, 0.6, 0.0, + lai_feb = 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, 0.0, 0.2, 0.3, 0.5, 0.3, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 1.0, 0.6, 0.0, + lai_mar = 4.0, 4.5, 0.0, 0.3, 2.2, 0.3, 0.2, 0.4, 0.5, 0.6, 0.3, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 1.1, 0.7, 0.0, + lai_apr = 4.0, 4.5, 0.6, 1.2, 2.6, 0.9, 0.6, 1.0, 0.8, 0.7, 0.5, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 1.3, 0.8, 0.0, + lai_may = 4.0, 4.5, 1.2, 3.0, 3.5, 2.2, 1.5, 2.4, 1.8, 1.2, 1.5, 1.0, 0.0, 1.1, 0.0, 0.0, 0.0, 1.7, 1.2, 0.0, + lai_jun = 4.0, 4.5, 2.0, 4.7, 4.3, 3.5, 2.3, 4.1, 3.6, 3.0, 2.9, 2.0, 0.0, 2.5, 0.0, 0.0, 0.0, 2.1, 1.8, 0.0, + lai_jul = 4.0, 4.5, 2.6, 4.5, 4.3, 3.5, 2.3, 4.1, 3.8, 3.5, 3.5, 3.0, 0.0, 3.2, 0.0, 0.0, 0.0, 2.1, 1.8, 0.0, + lai_aug = 4.0, 4.5, 1.7, 3.4, 3.7, 2.5, 1.7, 2.7, 2.1, 1.5, 2.7, 3.0, 0.0, 2.2, 0.0, 0.0, 0.0, 1.8, 1.3, 0.0, + lai_sep = 4.0, 4.5, 1.0, 1.2, 2.6, 0.9, 0.6, 1.0, 0.9, 0.7, 1.2, 1.5, 0.0, 1.1, 0.0, 0.0, 0.0, 1.3, 0.8, 0.0, + lai_oct = 4.0, 4.5, 0.5, 0.3, 2.2, 0.3, 0.2, 0.4, 0.5, 0.6, 0.3, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 1.1, 0.7, 0.0, + lai_nov = 4.0, 4.5, 0.2, 0.0, 2.0, 0.0, 0.0, 0.2, 0.3, 0.5, 0.3, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 1.0, 0.6, 0.0, + lai_dec = 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, 0.0, 0.2, 0.3, 0.4, 0.2, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 1.0, 0.6, 0.0, + +! five types, one row for each type (bvoc currently not active). + eps1 = 0.46, 0.00, 0.00, 46.86, 30.98, 21.62, 0.11, 21.62, 22.80, 0.02, 0.815, 0.00, 41.87, 0.04, 0.0, 0.0, 2.31, 0.0, 0.0, 0.0, + eps2 = 3.34, 0.00, 0.00, 0.38, 0.96, 0.92, 0.22, 0.92, 0.59, 0.05, 0.535, 0.00, 0.98, 0.09, 0.0, 0.0, 1.47, 0.0, 0.0, 0.0, + eps3 = 1.85, 0.00, 0.00, 1.84, 1.84, 1.73, 1.26, 1.73, 1.37, 0.03, 0.605, 0.00, 1.82, 0.05, 0.0, 0.0, 1.70, 0.0, 0.0, 0.0, + eps4 = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + eps5 = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + +/ + +&noahmp_rad_parameters + !-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 soil color index for soil albedo + !-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + albsat_vis = 0.25, 0.23, 0.21, 0.20, 0.19, 0.18, 0.17, 0.16, 0.15, 0.14, 0.13, 0.12, 0.11, 0.10, 0.09, 0.08, 0.07, 0.06, 0.05, 0.04 ! saturated soil albedos + albsat_nir = 0.50, 0.46, 0.42, 0.40, 0.38, 0.36, 0.34, 0.32, 0.30, 0.28, 0.26, 0.24, 0.22, 0.20, 0.18, 0.16, 0.14, 0.12, 0.10, 0.08 ! saturated soil albedos + albdry_vis = 0.36, 0.34, 0.32, 0.31, 0.30, 0.29, 0.28, 0.27, 0.26, 0.25, 0.24, 0.23, 0.22, 0.20, 0.18, 0.16, 0.14, 0.12, 0.10, 0.08 ! dry soil albedos + albdry_nir = 0.61, 0.57, 0.53, 0.51, 0.49, 0.48, 0.45, 0.43, 0.41, 0.39, 0.37, 0.35, 0.33, 0.31, 0.29, 0.27, 0.25, 0.23, 0.21, 0.16 ! dry soil albedos + albice = 0.80, 0.55 ! albedo land ice: 1=vis, 2=nir + alblak = 0.60, 0.40 ! albedo frozen lakes: 1=vis, 2=nir + omegas = 0.8 , 0.4 ! two-stream parameter omega for snow + betads = 0.5 ! two-stream parameter betad for snow + betais = 0.5 ! two-stream parameter betai for snow + eg = 0.97, 0.98 ! emissivity soil surface 1-soil;2-lake + eice = 0.98 ! emissivity ice surface +/ + +&noahmp_global_parameters + +! atmospheric constituants + + co2 = 395.e-06 !co2 partial pressure + o2 = 0.209 !o2 partial pressure + +! runoff parameters used for simtop and simgm: + + timean = 10.5 !gridcell mean topgraphic index (global mean) + fsatmx = 0.38 !maximum surface saturated fraction (global mean) + +! adjustable parameters for snow processes + + z0sno = 0.002 !snow surface roughness length (m) (0.002) + ssi = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03) + snow_ret_fac = 5.e-5 !snowpack water release timescale factor (1/s) + snow_emis = 0.95 !snow emissivity (bring from hard-coded value of 1.0 to here) + swemx = 1.00 !new snow mass to fully cover old snow (mm) + !equivalent to 10mm depth (density = 100 kg/m3) + tau0 = 1.e6 !tau0 from yang97 eqn. 10a + grain_growth = 5000. !growth from vapor diffusion yang97 eqn. 10b + extra_growth = 10. !extra growth near freezing yang97 eqn. 10c + dirt_soot = 0.3 !dirt and soot term yang97 eqn. 10d + bats_cosz = 2.0 !zenith angle snow albedo adjustment; b in yang97 eqn. 15 + bats_vis_new = 0.95 !new snow visible albedo + bats_nir_new = 0.65 !new snow nir albedo + bats_vis_age = 0.2 !age factor for diffuse visible snow albedo yang97 eqn. 17 + bats_nir_age = 0.5 !age factor for diffuse nir snow albedo yang97 eqn. 18 + bats_vis_dir = 0.4 !cosz factor for direct visible snow albedo yang97 eqn. 15 + bats_nir_dir = 0.4 !cosz factor for direct nir snow albedo yang97 eqn. 16 + rsurf_snow = 50.0 !surface resistence for snow [s/m] + rsurf_exp = 5.0 !exponent in the shape parameter for soil resistance option 1 + c2_snowcompact = 21.e-3 !overburden snow compaction parameter (m3/kg) cenlin + c3_snowcompact = 2.5e-6 !snow desctructive metamorphism compaction parameter1 [1/s] cenlin + c4_snowcompact = 0.04 !snow desctructive metamorphism compaction parameter2 [1/k] cenlin + c5_snowcompact = 2.0 !snow desctructive metamorphism compaction parameter3 cenlin + dm_snowcompact = 100.0 !upper limit on destructive metamorphism compaction [kg/m3] cenlin + eta0_snowcompact = 0.8e+6 !snow viscosity coefficient [kg-s/m2], anderson1979: 0.52e6~1.38e6 cenlin + snliqmaxfrac = 0.4 !maximum liquid water fraction in snow cenlin + swemaxgla = 5000.0 ! maximum swe allowed at glaciers (mm) cenlin + wslmax = 5000.0 ! maximum lake water storage (mm) cenlin + rous = 0.20 ! specific yield [-] for niu et al. 2007 groundwater scheme (optrunoffsubsurface=1) + cmic = 0.20 ! microprore content (0.0-1.0), 0.0: close to free drainage + snowden_max = 120.0 ! maximum fresh snowfall density (kg/m3) + class_alb_ref = 0.55 ! reference snow albedo in class scheme + class_sno_age = 3600.0 ! snow aging e-folding time (s) in class albedo scheme + class_alb_new = 0.84 ! fresh snow albedo in class scheme + psiwlt = -150.0 !metric potential for wilting point (m) + z0soil = 0.002 ! bare-soil roughness length (m) (i.e., under the canopy) + z0lake = 0.01 ! lake surface roughness length (m) +/ + +&noahmp_irrigation_parameters +irr_frac = 0.10 ! irrigation fraction +irr_har = 20 ! number of days before harvest date to stop irrigation +irr_lai = 0.50 ! minimum lai to trigger irrigation +irr_mad = 0.60 ! management allowable deficit (0-1) +filoss = 0.10 ! fraction of flood irrigation loss (0-1) +sprir_rate = 6.40 ! mm/h, sprinkler irrigation rate +micir_rate = 1.38 ! mm/h, micro irrigation rate +firtfac = 1.00 ! flood application rate factor +ir_rain = 1.00 ! maximum precipitation [mm/hr] to stop irrigation trigger +/ + +&noahmp_crop_parameters + + ! ncrop = 5 + ! 1: corn + ! 2: soybean + ! 3: sorghum + ! 4: rice + ! 5: winter wheat + +default_crop = 0 ! the default crop type(1-5); if zero, use generic dynamic vegetation + +!---------------------------------------------------------- +! 1 2 3 4 5 +!---------------------------------------------------------- + +pltday = 111, 131, 111, 111, 111, ! planting date +hsday = 300, 280, 300, 300, 300, ! harvest date +plantpop = 78.0, 78.0, 78.0, 78.0, 78.0, ! plant density [per ha] - used? +gddtbase = 10.0, 10.0, 10.0, 10.0, 10.0, ! base temperature for gdd accumulation [c] +gddtcut = 30.0, 30.0, 30.0, 30.0, 30.0, ! upper temperature for gdd accumulation [c] +gdds1 = 50.0, 60.0, 50.0, 50.0, 50.0, ! gdd from seeding to emergence +gdds2 = 625.0, 675.0, 718.0, 718.0, 718.0, ! gdd from seeding to initial vegetative +gdds3 = 933.0, 1183.0, 933.0, 933.0, 933.0, ! gdd from seeding to post vegetative +gdds4 = 1103.0, 1253.0, 1103.0, 1103.0, 1103.0, ! gdd from seeding to intial reproductive +gdds5 = 1555.0, 1605.0, 1555.0, 1555.0, 1555.0, ! gdd from seeding to pysical maturity +c3psni = 0.0, 1.0, 1.0, 1.0, 1.0, ! transfer crop-specific photosynthetic parameters +kc25i = 30.0, 30.0, 30.0, 30.0, 30.0, ! zhe zhang +akci = 2.1, 2.1, 2.1, 2.1, 2.1, ! 2020-02-05 +ko25i = 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, ! +akoi = 1.2, 1.2, 1.2, 1.2, 1.2, ! +avcmxi = 2.4, 2.4, 2.4, 2.4, 2.4, ! +vcmx25i = 60.0, 80.0, 60.0, 60.0, 55.0, ! +bpi = 4.e4, 1.e4, 2.e3, 2.e3, 2.e3, ! +mpi = 4., 9., 6., 9., 9., ! +folnmxi = 1.5, 1.5, 1.5, 1.5, 1.5, ! foliage nitrogen concentration when f(n)=1 (%) +qe25i = 0.05, 0.06, 0.06, 0.06, 0.06, ! +aref = 7.0, 7.0, 7.0, 7.0, 7.0, ! reference maximum co2 assimilation rate +psnrf = 0.85, 0.85, 0.85, 0.85, 0.85, ! co2 assimilation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) +i2par = 0.5, 0.5, 0.5, 0.5, 0.5, ! fraction of incoming solar radiation to photosynthetically active radiation +tassim0 = 8.0, 8.0, 8.0, 8.0, 8.0, ! minimum temperature for co2 assimilation [c] +tassim1 = 18.0, 18.0, 18.0, 18.0, 18.0, ! co2 assimilation linearly increasing until temperature reaches t1 [c] +tassim2 = 30.0, 30.0, 30.0, 30.0, 30.0, ! co2 assmilation rate remain at aref until temperature reaches t2 [c] +k = 0.55, 0.55, 0.55, 0.55, 0.55, ! light extinction coefficient +epsi = 12.5, 12.5, 12.5, 12.5, 12.5, ! initial light use efficiency + +q10mr = 2.0, 2.0, 2.0, 2.0, 2.0, ! q10 for maintainance respiration +lefreez = 268, 268, 268, 268, 268, ! characteristic t for leaf freezing [k] + +dile_fc_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! coeficient for temperature leaf stress death [1/s] +dile_fc_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +dile_fc_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fc_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fc_s5 = 0.5, 0.5, 0.5, 0.5, 0.5, +dile_fc_s6 = 0.5, 0.5, 0.5, 0.5, 0.5, +dile_fc_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fc_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +dile_fw_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! coeficient for water leaf stress death [1/s] +dile_fw_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +dile_fw_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fw_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fw_s5 = 0.2, 0.2, 0.2, 0.2, 0.2, +dile_fw_s6 = 0.2, 0.2, 0.2, 0.2, 0.2, +dile_fw_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fw_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +fra_gr = 0.2, 0.2, 0.2, 0.2, 0.2, ! fraction of growth respiration + +lf_ovrc_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of leaf turnover [1/s] +lf_ovrc_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +lf_ovrc_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +lf_ovrc_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +lf_ovrc_s5 = 0.2, 0.2, 0.48, 0.48, 0.48, +lf_ovrc_s6 = 0.3, 0.3, 0.48, 0.48, 0.48, +lf_ovrc_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +lf_ovrc_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +st_ovrc_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of stem turnover [1/s] +st_ovrc_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +st_ovrc_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +st_ovrc_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +st_ovrc_s5 = 0.2, 0.12, 0.12, 0.12, 0.12, +st_ovrc_s6 = 0.3, 0.06, 0.06, 0.06, 0.06, +st_ovrc_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +st_ovrc_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +rt_ovrc_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of root tunrover [1/s] +rt_ovrc_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +rt_ovrc_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +rt_ovrc_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +rt_ovrc_s5 = 0.12, 0.12, 0.12, 0.12, 0.12, +rt_ovrc_s6 = 0.06, 0.06, 0.06, 0.06, 0.06, +rt_ovrc_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +rt_ovrc_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +lfmr25 = 0.8, 1.0, 1.0, 1.0, 1.0, ! leaf maintenance respiration at 25c [umol co2/m**2 /s] +stmr25 = 0.05, 0.05, 0.1, 0.1, 0.1, ! stem maintenance respiration at 25c [umol co2/kg bio/s] +rtmr25 = 0.05, 0.05, 0.0, 0.0, 0.0, ! root maintenance respiration at 25c [umol co2/kg bio/s] +grainmr25 = 0.0, 0.0, 0.1, 0.1, 0.1, ! grain maintenance respiration at 25c [umol co2/kg bio/s] + +lfpt_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of carbohydrate flux to leaf +lfpt_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +lfpt_s3 = 0.36, 0.4, 0.4, 0.4, 0.4, +lfpt_s4 = 0.1, 0.2, 0.2, 0.2, 0.2, +lfpt_s5 = 0.0, 0.0, 0.0, 0.0, 0.0, +lfpt_s6 = 0.0, 0.0, 0.0, 0.0, 0.0, +lfpt_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +lfpt_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +stpt_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of carbohydrate flux to stem +stpt_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +stpt_s3 = 0.24, 0.2, 0.2, 0.2, 0.2, +stpt_s4 = 0.6, 0.5, 0.5, 0.5, 0.5, +stpt_s5 = 0.0, 0.0, 0.15, 0.15, 0.15, +stpt_s6 = 0.0, 0.0, 0.05, 0.05, 0.05, +stpt_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +stpt_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +rtpt_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of carbohydrate flux to root +rtpt_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +rtpt_s3 = 0.4, 0.4, 0.4, 0.4, 0.4, +rtpt_s4 = 0.3, 0.3, 0.3, 0.3, 0.3, +rtpt_s5 = 0.05, 0.05, 0.05, 0.05, 0.05, +rtpt_s6 = 0.0, 0.0, 0.05, 0.05, 0.05, +rtpt_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +rtpt_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +grainpt_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of carbohydrate flux to grain +grainpt_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +grainpt_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +grainpt_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +grainpt_s5 = 0.95, 0.95, 0.8, 0.8, 0.8, +grainpt_s6 = 1.0, 1.0, 0.9, 0.9, 0.9, +grainpt_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +grainpt_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +lfct_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! carbohydrate translocation +lfct_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, +lfct_s3 = 0.0, 0.0, 0.4, 0.4, 0.4, +lfct_s4 = 0.0, 0.0, 0.3, 0.3, 0.3, +lfct_s5 = 0.0, 0.0, 0.05, 0.05, 0.05, +lfct_s6 = 0.0, 0.0, 0.05, 0.05, 0.05, +lfct_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +lfct_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +stct_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! carbohydrate translocation +stct_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, +stct_s3 = 0.0, 0.0, 0.4, 0.4, 0.4, +stct_s4 = 0.0, 0.0, 0.3, 0.3, 0.3, +stct_s5 = 0.0, 0.0, 0.05, 0.05, 0.05, +stct_s6 = 0.0, 0.0, 0.05, 0.05, 0.05, +stct_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +stct_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +rtct_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! carbohydrate translocation +rtct_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, +rtct_s3 = 0.0, 0.0, 0.4, 0.4, 0.4, +rtct_s4 = 0.0, 0.0, 0.3, 0.3, 0.3, +rtct_s5 = 0.0, 0.0, 0.05, 0.05, 0.05, +rtct_s6 = 0.0, 0.0, 0.05, 0.05, 0.05, +rtct_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +rtct_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +bio2lai = 0.015, 0.030, 0.015, 0.015, 0.015, ! leaf are per living leaf biomass [m^2/kg] + +/ + +&noahmp_tiledrain_parameters +!-----------------------------------! +! for simple drainage model ! +!-----------------------------------! +nsoiltype = 19 ! num_soil_types +drain_layer_opt = 4 + ! 0 - from one specified layer by td_depth, + ! 1 - from layers 1 & 2, + ! 2 - from layer layers 1, 2, and 3 + ! 3 - from layer 2 and 3 + ! 4 - from layer layers 3, 4 + ! 5 - from all the four layers +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! +! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ! +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! +tdsmc_fac = 0.90, 0.90, 0.90, 0.90, 0.90, 1.25, 0.90, 1.0, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90 ! corresponds to number of soil types soilparam.tbl +td_depth = 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ! depth of drain tube from the soil surface +td_dc = 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20. ! drainage coefficient (mm d^-1) +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! +! +!-------------------------------------! +! for hooghoudt tile drain model ! +!-------------------------------------! +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- +td_dcoef = 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07 ! m d^-1, drainage coefficent +td_d = 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00 ! m, depth to impe layer from drain water level (d) +td_adepth = 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00 ! m, actual depth of imp layer from land surface +td_radi = 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07 ! m, effective radius of drains (ro) +td_spac = 60.0, 55.0, 45.0, 20.0, 25.0, 30.0, 40.0, 16.0, 18.0, 50.0, 15.0, 10.0, 35.0, 10.0, 60.0, 60.0, 10.0, 60.0, 60.0 ! m, distance between two drain tubes or tiles (l) +td_ddrain = 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20 ! m, depth of drain +klat_fac = 1.30, 1.80, 2.10, 2.60, 2.90, 2.50, 2.30, 3.00, 2.70, 2.00, 3.10, 3.30, 2.50, 1.00, 1.00, 1.80, 4.00, 1.00, 1.30 ! multiplication factor to lateral hyd.cond +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +/ + +&noahmp_optional_parameters + + !------------------------------------------------------------------------------ + ! saxton and rawls 2006 pedo-transfer function coefficients + !------------------------------------------------------------------------------ + + sr2006_theta_1500t_a = -0.024 ! sand coefficient + sr2006_theta_1500t_b = 0.487 ! clay coefficient + sr2006_theta_1500t_c = 0.006 ! orgm coefficient + sr2006_theta_1500t_d = 0.005 ! sand*orgm coefficient + sr2006_theta_1500t_e = -0.013 ! clay*orgm coefficient + sr2006_theta_1500t_f = 0.068 ! sand*clay coefficient + sr2006_theta_1500t_g = 0.031 ! constant adjustment + + sr2006_theta_1500_a = 0.14 ! theta_1500t coefficient + sr2006_theta_1500_b = -0.02 ! constant adjustment + + sr2006_theta_33t_a = -0.251 ! sand coefficient + sr2006_theta_33t_b = 0.195 ! clay coefficient + sr2006_theta_33t_c = 0.011 ! orgm coefficient + sr2006_theta_33t_d = 0.006 ! sand*orgm coefficient + sr2006_theta_33t_e = -0.027 ! clay*orgm coefficient + sr2006_theta_33t_f = 0.452 ! sand*clay coefficient + sr2006_theta_33t_g = 0.299 ! constant adjustment + + sr2006_theta_33_a = 1.283 ! theta_33t*theta_33t coefficient + sr2006_theta_33_b = -0.374 ! theta_33t coefficient + sr2006_theta_33_c = -0.015 ! constant adjustment + + sr2006_theta_s33t_a = 0.278 ! sand coefficient + sr2006_theta_s33t_b = 0.034 ! clay coefficient + sr2006_theta_s33t_c = 0.022 ! orgm coefficient + sr2006_theta_s33t_d = -0.018 ! sand*orgm coefficient + sr2006_theta_s33t_e = -0.027 ! clay*orgm coefficient + sr2006_theta_s33t_f = -0.584 ! sand*clay coefficient + sr2006_theta_s33t_g = 0.078 ! constant adjustment + + sr2006_theta_s33_a = 0.636 ! theta_s33t coefficient + sr2006_theta_s33_b = -0.107 ! constant adjustment + + sr2006_psi_et_a = -21.67 ! sand coefficient + sr2006_psi_et_b = -27.93 ! clay coefficient + sr2006_psi_et_c = -81.97 ! theta_s33 coefficient + sr2006_psi_et_d = 71.12 ! sand*theta_s33 coefficient + sr2006_psi_et_e = 8.29 ! clay*theta_s33 coefficient + sr2006_psi_et_f = 14.05 ! sand*clay coefficient + sr2006_psi_et_g = 27.16 ! constant adjustment + + sr2006_psi_e_a = 0.02 ! psi_et*psi_et coefficient + sr2006_psi_e_b = -0.113 ! psi_et coefficient + sr2006_psi_e_c = -0.7 ! constant adjustment + + sr2006_smcmax_a = -0.097 ! sand adjustment + sr2006_smcmax_b = 0.043 ! constant adjustment + +/ + +&noahmp_general_parameters + !------------------------------------------------- + ! this part is originally from genparm.tbl + !------------------------------------------------- +slope_data = 0.1, 0.6, 1.0, 0.35, 0.55, 0.8, 0.63, 0.0, 0.0 ! slope factor for soil drainage (9 different slope types) +csoil_data = 2.00e+6 ! soil heat capacity [j m-3 k-1] +refdk_data = 2.0e-6 ! parameter in the surface runoff parameterization +refkdt_data = 3.0 ! parameter in the surface runoff parameterization +frzk_data = 0.15 ! frozen ground parameter +zbot_data = -8.0 ! depth [m] of lower boundary soil temperature +czil_data = 0.1 ! parameter used in the calculation of the roughness length for heat + +/ + +&noahmp_stas_soil_categories + sltype = "stas" ! "stas" or "stas_ruc" + slcats = 19 !num_soil_types +/ + +&noahmp_soil_stas_parameters +! 19 total soil types considered by noahmp +! 1: sand +! 2: loamy sand +! 3: sandy loam +! 4: silt loam +! 5: silt +! 6: loam +! 7: sandy clay loam +! 8: silty clay loam +! 9: clay loam +! 10: sandy clay +! 11: silty clay +! 12: clay +! 13: organic material +! 14: water +! 15: bedrock +! 16: other(land-ice) +! 17: playa +! 18: lava +! 19: white sand +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! +! soil type: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ! +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! + bb = 2.790, 4.260, 4.740, 5.330, 3.860, 5.250, 6.770, 8.720, 8.170, 10.730, 10.390, 11.550, 5.250, 0.000, 2.790, 4.260, 11.550, 2.790, 2.790 + drysmc = 0.010, 0.028, 0.047, 0.084, 0.061, 0.066, 0.069, 0.120, 0.103, 0.100, 0.126, 0.138, 0.066, 0.000, 0.006, 0.028, 0.030, 0.006, 0.010 + maxsmc = 0.339, 0.421, 0.434, 0.476, 0.484, 0.439, 0.404, 0.464, 0.465, 0.406, 0.468, 0.468, 0.439, 1.000, 0.200, 0.421, 0.468, 0.200, 0.339 + refsmc = 0.192, 0.283, 0.312, 0.360, 0.347, 0.329, 0.315, 0.387, 0.382, 0.338, 0.404, 0.412, 0.329, 0.000, 0.170, 0.283, 0.454, 0.170, 0.192 + satpsi = 0.069, 0.036, 0.141, 0.759, 0.955, 0.355, 0.135, 0.617, 0.263, 0.098, 0.324, 0.468, 0.355, 0.000, 0.069, 0.036, 0.468, 0.069, 0.069 + satdk = 4.66e-05, 1.41e-05, 5.23e-06, 2.81e-06, 2.18e-06, 3.38e-06, 4.45e-06, 2.03e-06, 2.45e-06, 7.22e-06, 1.34e-06, 9.74e-07, 3.38e-06, 0.00e+00, 1.41e-04, 1.41e-05, 9.74e-07, 1.41e-04, 4.66e-05 + satdw = 2.65e-05, 5.14e-06, 8.05e-06, 2.39e-05, 1.66e-05, 1.43e-05, 1.01e-05, 2.35e-05, 1.13e-05, 1.87e-05, 9.64e-06, 1.12e-05, 1.43e-05, 0.00e+00, 1.36e-04, 5.14e-06, 1.12e-05, 1.36e-04, 2.65e-05 + wltsmc = 0.010, 0.028, 0.047, 0.084, 0.061, 0.066, 0.069, 0.120, 0.103, 0.100, 0.126, 0.138, 0.066, 0.000, 0.006, 0.028, 0.030, 0.006, 0.010 + qtz = 0.920, 0.820, 0.600, 0.250, 0.100, 0.400, 0.600, 0.100, 0.350, 0.520, 0.100, 0.250, 0.050, 0.600, 0.070, 0.250, 0.600, 0.520, 0.920 + bvic = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + axaj = 0.009, 0.010, 0.009, 0.010, 0.012, 0.013, 0.014, 0.015, 0.016, 0.015, 0.016, 0.017, 0.012, 0.001, 0.017, 0.017, 0.017, 0.015, 0.009 + bxaj = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + xxaj = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + bdvic = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + bbvic = 1.000, 1.010, 1.020, 1.025, 1.000, 1.000, 1.032, 1.035, 1.040, 1.042, 1.045, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000 + gdvic = 0.050, 0.070, 0.130, 0.200, 0.170, 0.110, 0.260, 0.350, 0.260, 0.300, 0.380, 0.410, 0.500, 0.001, 0.010, 0.001, 0.001, 0.050, 0.020 + +/ + +&noahmp_soil_stas_ruc_parameters +! 19 total soil types considered by noahmp +! 1: sand +! 2: loamy sand +! 3: sandy loam +! 4: silt loam +! 5: silt +! 6: loam +! 7: sandy clay loam +! 8: silty clay loam +! 9: clay loam +! 10: sandy clay +! 11: silty clay +! 12: clay +! 13: organic material +! 14: water +! 15: bedrock +! 16: other(land-ice) +! 17: playa +! 18: lava +! 19: white sand +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! +! soil type: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ! +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! + bb = 4.050, 4.380, 4.900, 5.300, 5.300, 5.390, 7.120, 7.750, 5.390, 10.400, 10.400, 11.400, 5.390, 0.000, 4.050, 4.900, 11.400, 4.050, 4.050 + drysmc = 0.002, 0.035, 0.041, 0.034, 0.034, 0.050, 0.068, 0.060, 0.050, 0.070, 0.070, 0.068, 0.027, 0.000, 0.004, 0.065, 0.030, 0.006, 0.010 + hc = 1.470, 1.410, 1.340, 1.270, 1.270, 1.210, 1.180, 1.320, 1.210, 1.180, 1.150, 1.090, 1.210, 4.180, 2.030, 2.100, 1.410, 1.410, 1.470 + maxsmc = 0.395, 0.410, 0.435, 0.485, 0.485, 0.451, 0.420, 0.477, 0.451, 0.426, 0.492, 0.482, 0.451, 1.000, 0.200, 0.435, 0.468, 0.200, 0.339 + refsmc = 0.174, 0.179, 0.249, 0.369, 0.369, 0.314, 0.299, 0.357, 0.314, 0.316, 0.409, 0.400, 0.314, 1.000, 0.100, 0.249, 0.454, 0.170, 0.236 + satpsi = 0.121, 0.090, 0.218, 0.786, 0.786, 0.478, 0.299, 0.356, 0.478, 0.153, 0.490, 0.405, 0.478, 0.000, 0.121, 0.218, 0.468, 0.069, 0.069 + satdk = 1.76e-04, 1.56e-04, 3.47e-05, 7.20e-06, 7.20e-06, 6.95e-06, 6.30e-06, 1.70e-06, 6.95e-06, 2.17e-06, 1.03e-06, 1.28e-06, 6.95e-06, 0.00e+00, 1.41e-04, 3.47e-05, 9.74e-07, 1.41e-04, 1.76e-04 + satdw = 6.08e-07, 5.14e-06, 8.05e-06, 2.39e-05, 2.39e-05, 1.43e-05, 9.90e-06, 2.37e-05, 1.43e-05, 1.87e-05, 9.64e-06, 1.12e-05, 1.43e-05, 0.00e+00, 1.36e-04, 5.14e-06, 1.12e-05, 1.36e-04, 6.08e-07 + wltsmc = 0.033, 0.055, 0.095, 0.143, 0.143, 0.137, 0.148, 0.170, 0.137, 0.158, 0.190, 0.198, 0.117, 0.000, 0.006, 0.114, 0.030, 0.006, 0.060 + qtz = 0.920, 0.820, 0.600, 0.250, 0.100, 0.400, 0.600, 0.100, 0.400, 0.520, 0.100, 0.250, 0.050, 0.000, 0.600, 0.050, 0.600, 0.520, 0.920 + bvic = 0.050, 0.080, 0.090, 0.100, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + axaj = 0.009, 0.010, 0.009, 0.010, 0.012, 0.013, 0.014, 0.015, 0.016, 0.015, 0.016, 0.017, 0.012, 0.001, 0.017, 0.017, 0.017, 0.015, 0.009 + bxaj = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + xxaj = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + bdvic = 0.050, 0.080, 0.090, 0.100, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + bbvic = 1.000, 1.010, 1.020, 1.025, 1.000, 1.000, 1.032, 1.035, 1.040, 1.042, 1.045, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000 + gdvic = 0.050, 0.070, 0.130, 0.200, 0.170, 0.110, 0.260, 0.350, 0.260, 0.300, 0.380, 0.410, 0.500, 0.001, 0.010, 0.001, 0.001, 0.050, 0.020 + +/ + From ae748c93ebf0807a50af29225da87f95b8493620 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Fri, 30 Dec 2022 12:38:13 -0500 Subject: [PATCH 04/48] fixed inout in meta files --- physics/GFS_phys_time_vary.fv3.meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/GFS_phys_time_vary.fv3.meta b/physics/GFS_phys_time_vary.fv3.meta index 202ef9853..a1fdd5c49 100644 --- a/physics/GFS_phys_time_vary.fv3.meta +++ b/physics/GFS_phys_time_vary.fv3.meta @@ -1718,7 +1718,7 @@ units = index dimensions = (horizontal_dimension) type = integer - intent = in + intent = inout [shdmin] standard_name = min_vegetation_area_fraction long_name = min fractional coverage of green vegetation From a33db441e58e2530cfd61ba60df1ec67308aac2b Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Fri, 31 Mar 2023 13:52:55 -0400 Subject: [PATCH 05/48] the raw soil color data --- physics/sfcsub.F | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/sfcsub.F b/physics/sfcsub.F index 4a247a1a7..3ac7df7c5 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -660,7 +660,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & data fnalbc2/'global_albedo4.1x1.grb'/ data fntsfc/'global_sstclim.2x2.grb'/ data fnsotc/'global_soiltype.1x1.grb'/ - data fnsocc/'C96.soil_color.tileX.nc'/ + data fnsocc/'soil_color.clm.0.05.nc'/ data fnvegc/'global_vegfrac.1x1.grb'/ data fnvetc/'global_vegtype.1x1.grb'/ data fnglac/'global_glacier.2x2.grb'/ From cbf3802e3d7c2218c6d7d15b5762576a4a218a9b Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Mon, 3 Apr 2023 14:04:03 -0400 Subject: [PATCH 06/48] add iopt_diag for 2m t/q diagnostic option --- physics/module_sf_noahmplsm.F90 | 91 ++++++++++++++++++++++++++++++--- physics/noahmpdrv.F90 | 11 ++-- physics/noahmpdrv.meta | 7 +++ physics/sfc_diag_post.F90 | 6 ++- physics/sfc_diag_post.meta | 7 +++ 5 files changed, 107 insertions(+), 15 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 7807ee475..08632fea7 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -167,6 +167,10 @@ module module_sf_noahmplsm ! 2 -> czil ! 3 -> ec style ! 4 -> kb inversed + integer :: opt_diag !< options for surface 2m/q diagnostic approach + ! 1 -> external GFS sfc_diag + ! **2 -> original NoahMP 2-title + ! 3 -> NoahMP 2-title + internal GFS sfc_diag !------------------------------------------------------------------------------------------! ! physical constants: ! !------------------------------------------------------------------------------------------! @@ -416,7 +420,7 @@ subroutine noahmp_sflx (parameters, & pblhx , iz0tlnd , itime ,psi_opt ,& prcpconv, prcpnonc, prcpshcv, prcpsnow, prcpgrpl, prcphail, & ! in : forcing tbot , co2air , o2air , foln , ficeold , zlvl , & ! in : forcing - ep_1 , ep_2 , cp , & ! in : constants + ep_1 , ep_2 , epsm1 , cp , & ! in : constants albold , sneqvo , & ! in/out : stc , sh2o , smc , tah , eah , fwet , & ! in/out : canliq , canice , tv , tg , qsfc, qsnow, qrain, & ! in/out : @@ -464,6 +468,7 @@ subroutine noahmp_sflx (parameters, & integer , intent(in) :: jloc !< grid index real (kind=kind_phys) , intent(in) :: ep_1 !< real (kind=kind_phys) , intent(in) :: ep_2 !< + real (kind=kind_phys) , intent(in) :: epsm1 !< real (kind=kind_phys) , intent(in) :: cp !< real (kind=kind_phys) , intent(in) :: dt !< time step [sec] real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) @@ -818,7 +823,7 @@ subroutine noahmp_sflx (parameters, & fveg ,shdfac, pahv ,pahg ,pahb , & !in qsnow ,dzsnso ,lat ,canliq ,canice ,iloc, jloc , & !in thsfc_loc, prslkix,prsik1x,prslk1x,garea1, & !in - pblhx ,iz0tlnd, itime ,psi_opt, ep_1, ep_2, cp, & + pblhx ,iz0tlnd, itime ,psi_opt, ep_1, ep_2, epsm1,cp, & z0wrf ,z0hwrf , & !out imelt ,snicev ,snliqv ,epore ,t2m ,fsno , & !out sav ,sag ,qmelt ,fsa ,fsr ,taux , & !out @@ -1658,7 +1663,7 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in fveg ,shdfac, pahv ,pahg ,pahb , & !in qsnow ,dzsnso ,lat ,canliq ,canice ,iloc , jloc, & !in thsfc_loc, prslkix,prsik1x,prslk1x,garea1, & !in - pblhx , iz0tlnd, itime,psi_opt,ep_1, ep_2, cp, & + pblhx , iz0tlnd, itime,psi_opt,ep_1, ep_2, epsm1, cp, & z0wrf ,z0hwrf , & !out imelt ,snicev ,snliqv ,epore ,t2m ,fsno , & !out sav ,sag ,qmelt ,fsa ,fsr ,taux , & !out @@ -1742,6 +1747,7 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in real (kind=kind_phys) , intent(in) :: pblhx !< pbl height real (kind=kind_phys) , intent(in) :: ep_1 !< real (kind=kind_phys) , intent(in) :: ep_2 !< + real (kind=kind_phys) , intent(in) :: epsm1 !< real (kind=kind_phys) , intent(in) :: cp !< integer , intent(in) :: iz0tlnd !< integer , intent(in) :: itime !< @@ -2205,7 +2211,7 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in foln ,co2air ,o2air ,btran ,sfcprs , & !in rhsur ,iloc ,jloc ,q2 ,pahv ,pahg , & !in thsfc_loc, prslkix,prsik1x,prslk1x, garea1, & !in - pblhx ,iz0tlnd ,itime ,psi_opt ,ep_1, ep_2, cp, & + pblhx ,iz0tlnd ,itime ,psi_opt ,ep_1, ep_2, epsm1, cp, & eah ,tah ,tv ,tgv ,cmv, ustarx , & !inout #ifdef CCPP chv ,dx ,dz8w ,errmsg ,errflg , & !inout @@ -2242,7 +2248,7 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in emg ,stc ,df ,rsurf ,latheag , & !in gammag ,rhsur ,iloc ,jloc ,q2 ,pahb , & !in thsfc_loc, prslkix,prsik1x,prslk1x,vegtyp,fveg,shdfac,garea1, & !in - pblhx ,iz0tlnd ,itime ,psi_opt ,ep_1, ep_2, cp, & + pblhx ,iz0tlnd ,itime ,psi_opt ,ep_1, ep_2, epsm1, cp, & #ifdef CCPP tgb ,cmb ,chb, ustarx,errmsg ,errflg , & !inout #else @@ -3653,7 +3659,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & foln ,co2air ,o2air ,btran ,sfcprs , & !in rhsur ,iloc ,jloc ,q2 ,pahv ,pahg , & !in thsfc_loc, prslkix,prsik1x,prslk1x, garea1, & !in - pblhx ,iz0tlnd ,itime ,psi_opt ,ep_1, ep_2, cp, & + pblhx ,iz0tlnd ,itime ,psi_opt ,ep_1, ep_2, epsm1, cp, & eah ,tah ,tv ,tg ,cm,ustarx,& !inout #ifdef CCPP ch ,dx ,dz8w ,errmsg ,errflg , & !inout @@ -3675,6 +3681,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & ! -sav + irc[tv] + shc[tv] + evc[tv] + tr[tv] + canhs[tv] = 0 ! -sag + irg[tg] + shg[tg] + evg[tg] + gh[tg] = 0 ! -------------------------------------------------------------------------------------------------- + use funcphys, only : fpvs implicit none ! -------------------------------------------------------------------------------------------------- ! input @@ -3704,6 +3711,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & real (kind=kind_phys) , intent(in) :: pblhx !< pbl height real (kind=kind_phys) , intent(in) :: ep_1 !< real (kind=kind_phys) , intent(in) :: ep_2 !< + real (kind=kind_phys) , intent(in) :: epsm1 !< real (kind=kind_phys) , intent(in) :: cp !< integer , intent(in) :: iz0tlnd !< integer , intent(in) :: itime !< @@ -3915,6 +3923,9 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & real (kind=kind_phys) :: t, tdc !kelvin to degree celsius with limit -50 to +50 + real(kind=kind_phys) :: fhi, qss, wrk + real(kind=kind_phys), parameter :: qmin=1.0e-8 + character(len=80) :: message tdc(t) = min( 50., max(-50.,(t-tfrz)) ) @@ -4321,6 +4332,34 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & q2v = qsfc - ((evc+tr)/fveg+evg)/(latheav*rhoair) * 1./cq2v endif +! use sfc_diag to calculate t2mv and q2v for opt_sfc=1&3 + if(opt_diag ==3) then + if(opt_stc == 1 .or. opt_stc == 3) then + + fhi = fh2/fh + wrk = 1.0 - fhi + if(thsfc_loc) then ! Use local potential temperature + t2mv = tv*wrk + sfctmp*prslkix*fhi - (grav+grav)/cp + else ! Use potential temperature referenced to 1000 hPa + t2mv = tv*wrk + sfctmp*fhi - (grav+grav)/cp + endif + + if(evg >= 0.) then ! for evaporation>0, use inferred qsurf to deduce q2v + q2v = qsfc*wrk + max(qmin,qair)*fhi + else ! for dew formation, use saturated q at tskin + qss = fpvs(tv) + qss = ep_2 * qss / (psfc + epsm1 * qss) + q2v= qss*wrk + max(qmin,qair)*fhi + endif + qss = fpvs(t2mv) + qss = ep_2 * qss / (psfc + epsm1 * qss) + q2v = min(q2v,qss) + else + errmsg = 'Problem :opt_diag=3 is only applied for opt_sfc=1&3' + errflg = 1 + return + endif + endif ! update ch for output ch = cah chleaf = cvh @@ -4340,7 +4379,7 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & emg ,stc ,df ,rsurf ,lathea , & !in gamma ,rhsur ,iloc ,jloc ,q2 ,pahb , & !in thsfc_loc, prslkix,prsik1x,prslk1x,vegtyp,fveg,shdfac,garea1, & !in - pblhx , iz0tlnd , itime ,psi_opt,ep_1,ep_2,cp ,& + pblhx , iz0tlnd , itime ,psi_opt,ep_1,ep_2,epsm1,cp ,& #ifdef CCPP tgb ,cm ,ch,ustarx,errmsg ,errflg , & !inout #else @@ -4359,6 +4398,7 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & ! bare soil: ! -sab + irb[tg] + shb[tg] + evb[tg] + ghb[tg] = 0 ! ---------------------------------------------------------------------- + use funcphys, only : fpvs implicit none ! ---------------------------------------------------------------------- ! input @@ -4396,6 +4436,7 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & real (kind=kind_phys), intent(in) :: pblhx !< pbl height (m) real (kind=kind_phys), intent(in) :: ep_1 !< real (kind=kind_phys), intent(in) :: ep_2 !< + real (kind=kind_phys), intent(in) :: epsm1 !< real (kind=kind_phys), intent(in) :: cp !< integer, intent(in) :: iz0tlnd !< integer, intent(in) :: itime !< @@ -4544,6 +4585,10 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & real (kind=kind_phys) :: temptrs real (kind=kind_phys) :: t, tdc !kelvin to degree celsius with limit -50 to +50 + + real(kind=kind_phys) :: fhi, qss, wrk + real(kind=kind_phys), parameter :: qmin=1.0e-8 + tdc(t) = min( 50., max(-50.,(t-tfrz)) ) ! ----------------------------------------------------------------- @@ -4794,6 +4839,34 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & end if endif ! 4 +! use sfc_diag to calculate t2mv and q2v for opt_sfc=1&3 + if(opt_diag ==3) then + if(opt_stc == 1 .or. opt_stc == 3) then + + fhi = fh2/fh + wrk = 1.0 - fhi + if(thsfc_loc) then ! Use local potential temperature + t2mb = tgb*wrk + sfctmp*prslkix*fhi - (grav+grav)/cp + else ! Use potential temperature referenced to 1000 hPa + t2mb = tgb*wrk + sfctmp*fhi - (grav+grav)/cp + endif + + if(evb >= 0.) then ! for evaporation>0, use inferred qsurf to deduce q2v + q2b = qsfc*wrk + max(qmin,qair)*fhi + else ! for dew formation, use saturated q at tskin + qss = fpvs(tgb) + qss = ep_2 * qss / (psfc + epsm1 * qss) + q2b= qss*wrk + max(qmin,qair)*fhi + endif + qss = fpvs(t2mb) + qss = ep_2 * qss / (psfc + epsm1 * qss) + q2b = min(q2b,qss) + else + errmsg = 'Problem :opt_diag=3 is only applied for opt_sfc=1&3' + errflg = 1 + return + endif + endif if (parameters%urban_flag) q2b = qsfc ! update ch @@ -10025,7 +10098,7 @@ end subroutine psn_crop !! subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc ,iopt_frz , & iopt_inf ,iopt_rad ,iopt_alb ,iopt_snf ,iopt_tbot, iopt_stc, & - iopt_rsf , iopt_soil, iopt_pedo, iopt_crop ,iopt_trs ) + iopt_rsf , iopt_soil, iopt_pedo, iopt_crop ,iopt_trs, iopt_diag ) implicit none @@ -10048,6 +10121,7 @@ subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc integer, intent(in) :: iopt_pedo !< pedo-transfer function (1->saxton and rawls) integer, intent(in) :: iopt_crop !< crop model option (0->none; 1->liu et al.) integer, intent(in) :: iopt_trs !< thermal roughness scheme option (1->z0h=z0; 2->rb reversed) + integer, intent(in) :: iopt_diag !< surface 2m t/q diagnostic approach ! ------------------------------------------------------------------------------------------------- @@ -10069,6 +10143,7 @@ subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc opt_pedo = iopt_pedo opt_crop = iopt_crop opt_trs = iopt_trs + opt_diag = iopt_diag end subroutine noahmp_options diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index 17927027e..7b42f6197 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -126,11 +126,11 @@ subroutine noahmpdrv_run & ! --- inputs: ( im, km, lsnowl, itime, ps, u1, v1, t1, q1, soiltyp,soilcol,& vegtype, sigmaf, dlwflx, dswsfc, snet, delt, tg3, cm, ch, & - prsl1, prslk1, prslki, prsik1, zf,pblh, dry, wind, slopetyp, & + prsl1, prslk1, prslki, prsik1, zf,pblh, dry, wind, slopetyp,& shdmin, shdmax, snoalb, sfalb, flag_iter,con_g, & idveg, iopt_crs, iopt_btr, iopt_run, iopt_sfc, iopt_frz, & - iopt_inf, iopt_rad, iopt_alb, iopt_snf, iopt_tbot, & - iopt_stc, iopt_trs,xlatin, xcoszin, iyrlen, julian, garea, & + iopt_inf, iopt_rad, iopt_alb, iopt_snf, iopt_tbot,iopt_stc,& + iopt_trs,iopt_diag,xlatin, xcoszin, iyrlen, julian, garea, & rainn_mp, rainc_mp, snow_mp, graupel_mp, ice_mp, rhonewsn1,& con_hvap, con_cp, con_jcal, rhoh2o, con_eps, con_epsm1, & con_fvirt, con_rd, con_hfus, thsfc_loc, & @@ -247,6 +247,7 @@ subroutine noahmpdrv_run & integer , intent(in) :: iopt_tbot ! option for lower boundary condition of soil temperature integer , intent(in) :: iopt_stc ! option for snow/soil temperature time scheme (only layer 1) integer , intent(in) :: iopt_trs ! option for thermal roughness scheme + integer , intent(in) :: iopt_diag ! option for surface diagnose approach real(kind=kind_phys), dimension(:) , intent(in) :: xlatin ! latitude real(kind=kind_phys), dimension(:) , intent(in) :: xcoszin ! cosine of zenith angle integer , intent(in) :: iyrlen ! year length [days] @@ -763,7 +764,7 @@ subroutine noahmpdrv_run & call noahmp_options(idveg ,iopt_crs, iopt_btr , iopt_run, iopt_sfc, & iopt_frz, iopt_inf , iopt_rad, iopt_alb, & iopt_snf, iopt_tbot, iopt_stc, iopt_rsf, & - iopt_soil,iopt_pedo, iopt_crop,iopt_trs ) + iopt_soil,iopt_pedo, iopt_crop,iopt_trs,iopt_diag) if ( vegetation_category == isice_table ) then @@ -877,7 +878,7 @@ subroutine noahmpdrv_run & precip_graupel ,precip_hail ,temperature_soil_bot , & co2_air ,o2_air ,foliage_nitrogen , & snow_ice_frac_old ,forcing_height , & - con_fvirt ,con_eps ,con_cp , & + con_fvirt ,con_eps, con_epsm1 ,con_cp , & snow_albedo_old ,snow_water_equiv_old , & temperature_snow_soil ,soil_liquid_vol ,soil_moisture_vol , & temperature_canopy_air,vapor_pres_canopy_air ,canopy_wet_fraction , & diff --git a/physics/noahmpdrv.meta b/physics/noahmpdrv.meta index 7722e3db3..820da5740 100644 --- a/physics/noahmpdrv.meta +++ b/physics/noahmpdrv.meta @@ -460,6 +460,13 @@ dimensions = () type = integer intent = in +[iopt_diag] + standard_name = control_for_land_surface_scheme_surface_diagnose_approach + long_name = choice for surface diagnose approach option (see noahmp module for definition) + units = index + dimensions = () + type = integer + intent = in [xlatin] standard_name = latitude long_name = latitude diff --git a/physics/sfc_diag_post.F90 b/physics/sfc_diag_post.F90 index 139f30137..c1a43f170 100644 --- a/physics/sfc_diag_post.F90 +++ b/physics/sfc_diag_post.F90 @@ -13,7 +13,7 @@ module sfc_diag_post !! \htmlinclude sfc_diag_post_run.html !! #endif - subroutine sfc_diag_post_run (im, lsm, lsm_noahmp, dry, lssav, dtf, con_eps, con_epsm1, pgr,& + subroutine sfc_diag_post_run (im, lsm, lsm_noahmp, opt_diag, dry, lssav, dtf, con_eps, con_epsm1, pgr,& t2mmp,q2mp, t2m, q2m, u10m, v10m, tmpmin, tmpmax, spfhmin, spfhmax, & wind10mmax, u10mmax, v10mmax, dpt2m, errmsg, errflg) @@ -21,7 +21,7 @@ subroutine sfc_diag_post_run (im, lsm, lsm_noahmp, dry, lssav, dtf, con_eps, con implicit none - integer, intent(in) :: im, lsm, lsm_noahmp + integer, intent(in) :: im, lsm, lsm_noahmp,opt_diag logical, intent(in) :: lssav real(kind=kind_phys), intent(in) :: dtf, con_eps, con_epsm1 logical , dimension(:), intent(in) :: dry @@ -41,12 +41,14 @@ subroutine sfc_diag_post_run (im, lsm, lsm_noahmp, dry, lssav, dtf, con_eps, con errflg = 0 if (lsm == lsm_noahmp) then + if (opt_diag == 2 .or. opt_diag == 3)then do i=1,im if(dry(i)) then t2m(i) = t2mmp(i) q2m(i) = q2mp(i) endif enddo + endif endif if (lssav) then diff --git a/physics/sfc_diag_post.meta b/physics/sfc_diag_post.meta index 56534d71b..c50d3c4dc 100644 --- a/physics/sfc_diag_post.meta +++ b/physics/sfc_diag_post.meta @@ -28,6 +28,13 @@ dimensions = () type = integer intent = in +[opt_diag] + standard_name = control_for_land_surface_scheme_surface_diagnose_approach + long_name = choice for surface diagnose approach option (see noahmp module for definition) + units = index + dimensions = () + type = integer + intent = in [dry] standard_name = flag_nonzero_land_surface_fraction long_name = flag indicating presence of some land surface area fraction From 1d9cdbe935e07dc5a9f844c7cfd65c95ad3d3ff3 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Wed, 12 Apr 2023 08:25:15 -0400 Subject: [PATCH 07/48] move noahmp table reading to noahmpdrv_ini --- physics/noahmp_tables.f90 | 2 +- physics/noahmpdrv.F90 | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index f43ea8608..0e44b3cfc 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -308,7 +308,7 @@ module noahmp_tables contains - subroutine read_mp_table_parameters(dataset_identifier) + subroutine read_mp_table_parameters implicit none diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index 7b42f6197..c2743e15a 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -37,6 +37,7 @@ subroutine noahmpdrv_init(lsm, lsm_noahmp, me, isot, ivegsrc, & use machine, only: kind_phys use set_soilveg_mod, only: set_soilveg use namelist_soilveg + use noahmp_tables implicit none integer, intent(in) :: lsm @@ -88,6 +89,8 @@ subroutine noahmpdrv_init(lsm, lsm_noahmp, me, isot, ivegsrc, & !--- initialize soil vegetation call set_soilveg(me, isot, ivegsrc, nlunit, errmsg, errflg) + !--- read in noahmp table + call read_mp_table_parameters ! initialize psih and psim @@ -162,10 +165,6 @@ subroutine noahmpdrv_run & use sfc_diff, only : stability ! use module_sf_noahmplsm use module_sf_noahmp_glacier -! use noahmp_tables, only : isice_table, co2_table, o2_table, & -! isurban_table, smcref_table, smcdry_table, & -! smcmax_table, co2_table, o2_table, & -! saim_table, laim_table use noahmp_tables implicit none @@ -756,7 +755,6 @@ subroutine noahmpdrv_run & soil_color_category = soilcol(i) ! soil_color_category = 4 - call read_mp_table_parameters(dataset_identifier) call transfer_mp_parameters(vegetation_category, soil_category, & slope_category, soil_color_category, crop_type,parameters) From 3d226e748f73258d70b2799d714aa05e15b810b3 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Wed, 12 Apr 2023 08:41:20 -0400 Subject: [PATCH 08/48] keep the current NoahMP table values --- physics/noahmptable.tbl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/physics/noahmptable.tbl b/physics/noahmptable.tbl index e9952c754..02e59b37a 100644 --- a/physics/noahmptable.tbl +++ b/physics/noahmptable.tbl @@ -224,8 +224,8 @@ ! c. he 12/17/2020: optimized mfsno values dependent on land type based on evaluation with snotel swe and modis scf, surface albedo mfsno = 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, 2.00, 2.00, 2.00, 2.00, 3.00, 3.00, 4.00, 4.00, 2.50, 3.00, 3.00, 3.50, 3.50, 3.50, ! c. he 12/17/2020: optimized snow cover factor (m) in scf formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with snotel swe and modis scf, surface albedo - scffac = 0.008, 0.008, 0.008, 0.008, 0.008, 0.016, 0.016, 0.020, 0.020, 0.020, 0.020, 0.014, 0.042, 0.026, 0.030, 0.016, 0.030, 0.030, 0.030, 0.030, - +! scffac = 0.008, 0.008, 0.008, 0.008, 0.008, 0.016, 0.016, 0.020, 0.020, 0.020, 0.020, 0.014, 0.042, 0.026, 0.030, 0.016, 0.030, 0.030, 0.030, 0.030, + scffac = 0.005, 0.005, 0.005, 0.005, 0.005, 0.008, 0.008, 0.010, 0.010, 0.010, 0.010, 0.007, 0.021, 0.013, 0.015, 0.008, 0.015, 0.015, 0.015, 0.015, ! row 1: vis ! row 2: near ir rhol_vis=0.07, 0.10, 0.07, 0.10, 0.10, 0.07, 0.07, 0.07, 0.10, 0.11, 0.105, 0.11, 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, @@ -248,7 +248,8 @@ xl = 0.010, 0.010, 0.010, 0.250, 0.250, 0.010, 0.010, 0.010, 0.010, -0.30, -0.025, -0.30, 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, 0.250, 0.250, ! make cwpvt vegetation dependent according to j. goudriaan, crop micrometeorology: a simulation study (simulation monographs), 1977). c. he, 12/17/2020 - cwpvt = 0.18, 0.67, 0.18, 0.67, 0.29, 1.0, 2.0, 1.3, 1.0, 5.0, 1.17, 1.67, 1.67, 1.67, 0.18, 0.18, 0.18, 0.67, 1.0, 0.18, +! cwpvt = 0.18, 0.67, 0.18, 0.67, 0.29, 1.0, 2.0, 1.3, 1.0, 5.0, 1.17, 1.67, 1.67, 1.67, 0.18, 0.18, 0.18, 0.67, 1.0, 0.18, + cwpvt = 0.09, 0.335, 0.09, 0.335, 0.145, 0.5, 1.0, 0.65, 0.5, 2.5, 0.585, 0.835, 0.835, 0.835, 0.09, 0.09, 0.09, 0.335, 0.5, 0.09, c3psn = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, kc25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, akc = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, From bec07e2029c716ad072f1403da5c330b05a37097 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Thu, 13 Apr 2023 09:14:52 -0400 Subject: [PATCH 09/48] fixed a typo --- physics/module_sf_noahmplsm.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 08632fea7..5d20a9e18 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -4334,7 +4334,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & ! use sfc_diag to calculate t2mv and q2v for opt_sfc=1&3 if(opt_diag ==3) then - if(opt_stc == 1 .or. opt_stc == 3) then + if(opt_sfc == 1 .or. opt_sfc == 3) then fhi = fh2/fh wrk = 1.0 - fhi @@ -4841,7 +4841,7 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & ! use sfc_diag to calculate t2mv and q2v for opt_sfc=1&3 if(opt_diag ==3) then - if(opt_stc == 1 .or. opt_stc == 3) then + if(opt_sfc == 1 .or. opt_sfc == 3) then fhi = fh2/fh wrk = 1.0 - fhi From 87cb6b56f061bff476c446c1dc323028999493ed Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Thu, 13 Apr 2023 12:49:16 -0400 Subject: [PATCH 10/48] add canopy heat and optional to noahmpdrv --- physics/module_sf_noahmplsm.F90 | 4 +- physics/noahmpdrv.F90 | 127 +++++++++++++++++++++++++++++++- 2 files changed, 125 insertions(+), 6 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 5d20a9e18..65b3d77b3 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -442,7 +442,7 @@ subroutine noahmp_sflx (parameters, & shg , shc , shb , evg , evb , ghv , & ! out : ghb , irg , irc , irb , tr , evc , & ! out : chleaf , chuc , chv2 , chb2 , fpice , pahv , & - pahg , pahb , pah , esnow , laisun , laisha , rb & + pahg , pahb , pah , esnow , canhs , laisun , laisha , rb & #ifdef CCPP ,errmsg, errflg) #else @@ -724,7 +724,7 @@ subroutine noahmp_sflx (parameters, & logical :: dveg_active !< flag to run dynamic vegetation logical :: crop_active !< flag to run crop model ! add canopy heat storage (C.He added based on GY Niu's communication) - real (kind=kind_phys) :: canhs ! canopy heat storage change w/m2 + real (kind=kind_phys) , intent(out) :: canhs ! canopy heat storage change w/m2 ! intent (out) variables need to be assigned a value. these normally get assigned values ! only if dveg == 2. diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index c2743e15a..85d3363b4 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -157,7 +157,45 @@ subroutine noahmpdrv_run & sncovr1, qsurf, gflux, drain, evap, hflx, ep, runoff, & cmm, chh, evbs, evcw, sbsno, pah, ecan, etran, edir, snowc,& stm, snohf,smcwlt2, smcref2, wet1, t2mmp, q2mp,zvfun, & - ztmax, errmsg, errflg) + ztmax, errmsg, errflg, & + canopy_heat_storage_ccpp, & + rainfall_ccpp, & + sw_absorbed_total_ccpp, & + sw_reflected_total_ccpp, & + lw_absorbed_total_ccpp, & + temperature_bare_grd_ccpp, & + temperature_veg_grd_ccpp, & + temperature_veg_2m_ccpp, & + temperature_bare_2m_ccpp, & + spec_humidity_veg_2m_ccpp, & + spec_humidity_bare_2m_ccpp, & + sw_absorbed_veg_ccpp, & + sw_absorbed_ground_ccpp, & + snowmelt_out_ccpp, & + snowmelt_shallow_ccpp, & + albedo_direct_snow_ccpp, & + albedo_diffuse_snow_ccpp, & + ch_vegetated_ccpp, & + ch_bare_ground_ccpp, & + sensible_heat_grd_veg_ccpp, & + sensible_heat_leaf_ccpp, & + sensible_heat_grd_bar_ccpp, & + latent_heat_grd_veg_ccpp, & + latent_heat_grd_bare_ccpp, & + ground_heat_veg_ccpp, & + ground_heat_bare_ccpp, & + lw_absorbed_grd_veg_ccpp, & + lw_absorbed_leaf_ccpp, & + lw_absorbed_grd_bare_ccpp, & + latent_heat_trans_ccpp, & + latent_heat_leaf_ccpp, & + ch_leaf_ccpp, & + ch_below_canopy_ccpp, & + ch_vegetated_2m_ccpp, & + ch_bare_ground_2m_ccpp, & + precip_adv_heat_veg_ccpp, & + precip_adv_heat_grd_v_ccpp, & + precip_adv_heat_grd_b_ccpp ) use machine , only : kind_phys use funcphys, only : fpvs @@ -360,6 +398,45 @@ subroutine noahmpdrv_run & character(len=*) , intent(out) :: errmsg integer , intent(out) :: errflg + real(kind=kind_phys), dimension(:) , intent(out), optional :: canopy_heat_storage_ccpp ! within-canopy heat [W/m2] + real(kind=kind_phys), dimension(:) , intent(out), optional :: rainfall_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: sw_absorbed_total_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: sw_reflected_total_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: lw_absorbed_total_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: temperature_bare_grd_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: temperature_veg_grd_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: temperature_veg_2m_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: temperature_bare_2m_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: spec_humidity_veg_2m_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: spec_humidity_bare_2m_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: sw_absorbed_veg_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: sw_absorbed_ground_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: snowmelt_out_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: snowmelt_shallow_ccpp + real(kind=kind_phys), dimension(:,:), intent(out), optional :: albedo_direct_snow_ccpp + real(kind=kind_phys), dimension(:,:), intent(out), optional :: albedo_diffuse_snow_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: ch_vegetated_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: ch_bare_ground_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: sensible_heat_grd_veg_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: sensible_heat_leaf_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: sensible_heat_grd_bar_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: latent_heat_grd_veg_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: latent_heat_grd_bare_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: ground_heat_veg_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: ground_heat_bare_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: lw_absorbed_grd_veg_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: lw_absorbed_leaf_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: lw_absorbed_grd_bare_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: latent_heat_trans_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: latent_heat_leaf_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: ch_leaf_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: ch_below_canopy_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: ch_vegetated_2m_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: ch_bare_ground_2m_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: precip_adv_heat_veg_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: precip_adv_heat_grd_v_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: precip_adv_heat_grd_b_ccpp + ! ! --- some new options, hard code for now ! @@ -535,6 +612,8 @@ subroutine noahmpdrv_run & real (kind=kind_phys) :: lai_shaded ! out | shaded leaf area index [m2/m2] real (kind=kind_phys) :: leaf_air_resistance ! out | leaf boundary layer resistance [s/m] + real (kind=kind_phys) :: canopy_heat_storage ! out | within-canopy heat [W/m2] + real (kind=kind_phys) :: ustarx ! inout |surface friction velocity real (kind=kind_phys) :: prslkix ! in exner function real (kind=kind_phys) :: prsik1x ! in exner function @@ -852,6 +931,7 @@ subroutine noahmpdrv_run & vegetation_fraction = vegetation_frac ch_vegetated = 0.0 ch_bare_ground = ch_noahmp + canopy_heat_storage = 0.0 else ! not glacier @@ -916,12 +996,12 @@ subroutine noahmpdrv_run & latent_heat_leaf ,ch_leaf ,ch_below_canopy , & ch_vegetated_2m ,ch_bare_ground_2m ,precip_frozen_frac , & precip_adv_heat_veg ,precip_adv_heat_grd_v ,precip_adv_heat_grd_b , & - precip_adv_heat_total ,snow_sublimation ,lai_sunlit , & + precip_adv_heat_total ,snow_sublimation ,canopy_heat_storage , & #ifdef CCPP - lai_shaded ,leaf_air_resistance , & + lai_sunlit ,lai_shaded ,leaf_air_resistance , & errmsg ,errflg ) #else - lai_shaded ,leaf_air_resistance ) + lai_sunlit ,lai_shaded ,leaf_air_resistance ) #endif #ifdef CCPP @@ -1011,6 +1091,45 @@ subroutine noahmpdrv_run & zsnsoxy (i,:) = interface_depth + if(present(canopy_heat_storage_ccpp )) canopy_heat_storage_ccpp (i) = canopy_heat_storage + if(present(rainfall_ccpp )) rainfall_ccpp (i) = rainfall + if(present(sw_absorbed_total_ccpp )) sw_absorbed_total_ccpp (i) = sw_absorbed_total + if(present(sw_reflected_total_ccpp )) sw_reflected_total_ccpp (i) = sw_reflected_total + if(present(lw_absorbed_total_ccpp )) lw_absorbed_total_ccpp (i) = lw_absorbed_total + if(present(temperature_bare_grd_ccpp )) temperature_bare_grd_ccpp (i) = temperature_bare_grd + if(present(temperature_veg_grd_ccpp )) temperature_veg_grd_ccpp (i) = temperature_veg_grd + if(present(temperature_veg_2m_ccpp )) temperature_veg_2m_ccpp (i) = temperature_veg_2m + if(present(temperature_bare_2m_ccpp )) temperature_bare_2m_ccpp (i) = temperature_bare_2m + if(present(spec_humidity_veg_2m_ccpp )) spec_humidity_veg_2m_ccpp (i) = spec_humidity_veg_2m + if(present(spec_humidity_bare_2m_ccpp)) spec_humidity_bare_2m_ccpp(i) = spec_humidity_bare_2m + if(present(sw_absorbed_veg_ccpp )) sw_absorbed_veg_ccpp (i) = sw_absorbed_veg + if(present(sw_absorbed_ground_ccpp )) sw_absorbed_ground_ccpp (i) = sw_absorbed_ground + if(present(snowmelt_out_ccpp )) snowmelt_out_ccpp (i) = snowmelt_out + if(present(snowmelt_shallow_ccpp )) snowmelt_shallow_ccpp (i) = snowmelt_shallow + if(present(albedo_direct_snow_ccpp )) albedo_direct_snow_ccpp (i,:) = albedo_direct_snow + if(present(albedo_diffuse_snow_ccpp )) albedo_diffuse_snow_ccpp (i,:) = albedo_diffuse_snow + if(present(ch_vegetated_ccpp )) ch_vegetated_ccpp (i) = ch_vegetated + if(present(ch_bare_ground_ccpp )) ch_bare_ground_ccpp (i) = ch_bare_ground + if(present(sensible_heat_grd_veg_ccpp)) sensible_heat_grd_veg_ccpp(i) = sensible_heat_grd_veg + if(present(sensible_heat_leaf_ccpp )) sensible_heat_leaf_ccpp (i) = sensible_heat_leaf + if(present(sensible_heat_grd_bar_ccpp)) sensible_heat_grd_bar_ccpp(i) = sensible_heat_grd_bar + if(present(latent_heat_grd_veg_ccpp )) latent_heat_grd_veg_ccpp (i) = latent_heat_grd_veg + if(present(latent_heat_grd_bare_ccpp )) latent_heat_grd_bare_ccpp (i) = latent_heat_grd_bare + if(present(ground_heat_veg_ccpp )) ground_heat_veg_ccpp (i) = ground_heat_veg + if(present(ground_heat_bare_ccpp )) ground_heat_bare_ccpp (i) = ground_heat_bare + if(present(lw_absorbed_grd_veg_ccpp )) lw_absorbed_grd_veg_ccpp (i) = lw_absorbed_grd_veg + if(present(lw_absorbed_leaf_ccpp )) lw_absorbed_leaf_ccpp (i) = lw_absorbed_leaf + if(present(lw_absorbed_grd_bare_ccpp )) lw_absorbed_grd_bare_ccpp (i) = lw_absorbed_grd_bare + if(present(latent_heat_trans_ccpp )) latent_heat_trans_ccpp (i) = latent_heat_trans + if(present(latent_heat_leaf_ccpp )) latent_heat_leaf_ccpp (i) = latent_heat_leaf + if(present(ch_leaf_ccpp )) ch_leaf_ccpp (i) = ch_leaf + if(present(ch_below_canopy_ccpp )) ch_below_canopy_ccpp (i) = ch_below_canopy + if(present(ch_vegetated_2m_ccpp )) ch_vegetated_2m_ccpp (i) = ch_vegetated_2m + if(present(ch_bare_ground_2m_ccpp )) ch_bare_ground_2m_ccpp (i) = ch_bare_ground_2m + if(present(precip_adv_heat_veg_ccpp )) precip_adv_heat_veg_ccpp (i) = precip_adv_heat_veg + if(present(precip_adv_heat_grd_v_ccpp)) precip_adv_heat_grd_v_ccpp(i) = precip_adv_heat_grd_v + if(present(precip_adv_heat_grd_b_ccpp)) precip_adv_heat_grd_b_ccpp(i) = precip_adv_heat_grd_b + wslakexy (i) = lake_water ! not active fwetxy (i) = canopy_wet_fraction taussxy (i) = snow_age From d98defadb2d13d64204188a6ebba2049a99de87c Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 17 Apr 2023 17:26:53 -0400 Subject: [PATCH 11/48] modify a few terms in vegetation diag3 --- physics/module_sf_noahmplsm.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 65b3d77b3..e28b5447e 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -4339,15 +4339,15 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & fhi = fh2/fh wrk = 1.0 - fhi if(thsfc_loc) then ! Use local potential temperature - t2mv = tv*wrk + sfctmp*prslkix*fhi - (grav+grav)/cp + t2mv = tah*wrk + sfctmp*prslkix*fhi - (grav+grav)/cp else ! Use potential temperature referenced to 1000 hPa - t2mv = tv*wrk + sfctmp*fhi - (grav+grav)/cp + t2mv = tah*wrk + sfctmp*fhi - (grav+grav)/cp endif - if(evg >= 0.) then ! for evaporation>0, use inferred qsurf to deduce q2v + if((evc+tr)/fveg+evg >= 0.) then ! for evaporation>0, use inferred qsurf to deduce q2v q2v = qsfc*wrk + max(qmin,qair)*fhi else ! for dew formation, use saturated q at tskin - qss = fpvs(tv) + qss = fpvs(tah) qss = ep_2 * qss / (psfc + epsm1 * qss) q2v= qss*wrk + max(qmin,qair)*fhi endif From a4058658d59533af8ed2065ab0c67d536379be65 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Tue, 18 Apr 2023 13:46:21 -0400 Subject: [PATCH 12/48] add veg and bare qsfc to output --- physics/module_sf_noahmplsm.F90 | 9 +++++++-- physics/noahmpdrv.F90 | 16 +++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index e28b5447e..db653c548 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -442,7 +442,8 @@ subroutine noahmp_sflx (parameters, & shg , shc , shb , evg , evb , ghv , & ! out : ghb , irg , irc , irb , tr , evc , & ! out : chleaf , chuc , chv2 , chb2 , fpice , pahv , & - pahg , pahb , pah , esnow , canhs , laisun , laisha , rb & + pahg , pahb , pah , esnow , canhs , laisun , & + laisha , rb , qsfcveg , qsfcbare & #ifdef CCPP ,errmsg, errflg) #else @@ -587,6 +588,8 @@ subroutine noahmp_sflx (parameters, & real (kind=kind_phys) , intent(out) :: rb !< leaf boundary layer resistance (s/m) real (kind=kind_phys) , intent(out) :: laisun !< sunlit leaf area index (m2/m2) real (kind=kind_phys) , intent(out) :: laisha !< shaded leaf area index (m2/m2) + real (kind=kind_phys) , intent(out) :: qsfcveg !< effective spec humid over vegetation + real (kind=kind_phys) , intent(out) :: qsfcbare !< effective spec humid over bare soil !jref:start; output real (kind=kind_phys) , intent(out) :: t2mv !< 2-m air temperature over vegetated part [k] @@ -847,7 +850,9 @@ subroutine noahmp_sflx (parameters, & emissi ,pah ,canhs, & shg,shc,shb,evg,evb,ghv,ghb,irg,irc,irb,tr,evc,chleaf,chuc,chv2,chb2 ) !out - qsfc = q1 ! + qsfcveg = eah*0.622/(sfcprs - 0.378*eah) + qsfcbare = qsfc + qsfc = q1 !jref:end #ifdef CCPP if (errflg /= 0) return diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index 85d3363b4..88e75637b 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -195,7 +195,10 @@ subroutine noahmpdrv_run & ch_bare_ground_2m_ccpp, & precip_adv_heat_veg_ccpp, & precip_adv_heat_grd_v_ccpp, & - precip_adv_heat_grd_b_ccpp ) + precip_adv_heat_grd_b_ccpp, & + spec_humid_sfc_veg_ccpp, & + spec_humid_sfc_bare_ccpp & + ) use machine , only : kind_phys use funcphys, only : fpvs @@ -436,6 +439,8 @@ subroutine noahmpdrv_run & real(kind=kind_phys), dimension(:) , intent(out), optional :: precip_adv_heat_veg_ccpp real(kind=kind_phys), dimension(:) , intent(out), optional :: precip_adv_heat_grd_v_ccpp real(kind=kind_phys), dimension(:) , intent(out), optional :: precip_adv_heat_grd_b_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: spec_humid_sfc_veg_ccpp + real(kind=kind_phys), dimension(:) , intent(out), optional :: spec_humid_sfc_bare_ccpp ! ! --- some new options, hard code for now @@ -613,6 +618,8 @@ subroutine noahmpdrv_run & real (kind=kind_phys) :: leaf_air_resistance ! out | leaf boundary layer resistance [s/m] real (kind=kind_phys) :: canopy_heat_storage ! out | within-canopy heat [W/m2] + real (kind=kind_phys) :: spec_humid_sfc_veg ! out | surface specific humidty over vegetation [kg/kg] + real (kind=kind_phys) :: spec_humid_sfc_bare ! out | surface specific humidty over bare soil [kg/kg] real (kind=kind_phys) :: ustarx ! inout |surface friction velocity real (kind=kind_phys) :: prslkix ! in exner function @@ -997,11 +1004,12 @@ subroutine noahmpdrv_run & ch_vegetated_2m ,ch_bare_ground_2m ,precip_frozen_frac , & precip_adv_heat_veg ,precip_adv_heat_grd_v ,precip_adv_heat_grd_b , & precip_adv_heat_total ,snow_sublimation ,canopy_heat_storage , & + lai_sunlit ,lai_shaded ,leaf_air_resistance , & #ifdef CCPP - lai_sunlit ,lai_shaded ,leaf_air_resistance , & + spec_humid_sfc_veg ,spec_humid_sfc_bare , & errmsg ,errflg ) #else - lai_sunlit ,lai_shaded ,leaf_air_resistance ) + spec_humid_sfc_veg ,spec_humid_sfc_bare ) #endif #ifdef CCPP @@ -1129,6 +1137,8 @@ subroutine noahmpdrv_run & if(present(precip_adv_heat_veg_ccpp )) precip_adv_heat_veg_ccpp (i) = precip_adv_heat_veg if(present(precip_adv_heat_grd_v_ccpp)) precip_adv_heat_grd_v_ccpp(i) = precip_adv_heat_grd_v if(present(precip_adv_heat_grd_b_ccpp)) precip_adv_heat_grd_b_ccpp(i) = precip_adv_heat_grd_b + if(present(spec_humid_sfc_veg_ccpp )) spec_humid_sfc_veg_ccpp (i) = spec_humid_sfc_veg + if(present(spec_humid_sfc_bare_ccpp )) spec_humid_sfc_bare_ccpp (i) = spec_humid_sfc_bare wslakexy (i) = lake_water ! not active fwetxy (i) = canopy_wet_fraction From 8f2078ccbd85a47d81d1157e03db6c320bfbf7ac Mon Sep 17 00:00:00 2001 From: Zhichang Guo Date: Wed, 19 Apr 2023 18:57:48 +0000 Subject: [PATCH 13/48] include wet leaf contribution factor --- physics/module_sf_noahmplsm.F90 | 30 ++++++++++++++++++++---------- physics/rte-rrtmgp | 2 +- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index db653c548..4fe616a13 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -3928,6 +3928,10 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & real (kind=kind_phys) :: t, tdc !kelvin to degree celsius with limit -50 to +50 +! local variables + real(kind=kind_phys) :: cvw ! 0. .and. fwet > 0.) then + if (tv > tfrz) then + wlcf = min(fwet,canliq*latheav/dt/evpot) + else + wlcf = min(fwet,canice*latheav/dt/evpot) + endif + else + wlcf= fwet + endif + cvw = wlcf*cvw ctw = (1.-fwet)*(laisune/(rb+rssun) + laishae/(rb+rssha)) cgw = 1./(rawg+rsurf) - cond = caw + cew + ctw + cgw + cond = caw + cvw + ctw + cgw aea = (eair*caw + estg*cgw) / cond - bea = (cew+ctw)/cond - cev = (1.-bea)*cew*rhoair*cpair/gammav ! barlage: change to vegetation v3.6 + bea = (cvw+ctw)/cond + cev = (1.-bea)*cvw*rhoair*cpair/gammav ! barlage: change to vegetation v3.6 ctr = (1.-bea)*ctw*rhoair*cpair/gammav ! evaluate surface fluxes with current temperature and solve for dts @@ -4195,13 +4210,8 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & irc = fveg*(air + cir*tv**4) shc = fveg*rhoair*cpair*cvh * ( tv-tah) - evc = fveg*rhoair*cpair*cew * (estv-eah) / gammav ! barlage: change to v in v3.6 + evc = fveg*rhoair*cpair*cvw * (estv-eah) / gammav ! barlage: change to v in v3.6 tr = fveg*rhoair*cpair*ctw * (estv-eah) / gammav - if (tv > tfrz) then - evc = min(canliq*latheav/dt,evc) ! barlage: add if block for canice in v3.6 - else - evc = min(canice*latheav/dt,evc) - end if ! canopy heat capacity hcv = 0.02*vaie*cwat + canliq*cwat/denh2o + canice*cice/denice !j/m2/k diff --git a/physics/rte-rrtmgp b/physics/rte-rrtmgp index 0dc54f5ec..7f01618c9 160000 --- a/physics/rte-rrtmgp +++ b/physics/rte-rrtmgp @@ -1 +1 @@ -Subproject commit 0dc54f5ecaeb1e1e342efd1e02d0bcd41737bde2 +Subproject commit 7f01618c92409658bddd3afa9acb004c608f6a0d From 5edc13128252db440dea9f31c797499bc302e85a Mon Sep 17 00:00:00 2001 From: Zhichang Guo Date: Wed, 19 Apr 2023 19:33:42 +0000 Subject: [PATCH 14/48] include wet leaf contribution factor --- physics/module_sf_noahmplsm.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 4fe616a13..a460e8426 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -4194,7 +4194,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & else wlcf= fwet endif - cvw = wlcf*cvw + cvw = wlcf*cew ctw = (1.-fwet)*(laisune/(rb+rssun) + laishae/(rb+rssha)) cgw = 1./(rawg+rsurf) cond = caw + cvw + ctw + cgw From c1ce88b1ecef8879cf225be82f121b1c7d6275f1 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Thu, 20 Apr 2023 11:40:44 -0400 Subject: [PATCH 15/48] remove cvw and wlcf --- physics/module_sf_noahmplsm.F90 | 21 ++++++++------------- physics/rte-rrtmgp | 2 +- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index a460e8426..0473b43f9 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -3928,10 +3928,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & real (kind=kind_phys) :: t, tdc !kelvin to degree celsius with limit -50 to +50 -! local variables - real(kind=kind_phys) :: cvw ! 0. .and. fwet > 0.) then if (tv > tfrz) then - wlcf = min(fwet,canliq*latheav/dt/evpot) + cew = min(fwet,canliq*latheav/dt/evpot) * vaie/rb else - wlcf = min(fwet,canice*latheav/dt/evpot) + cew = min(fwet,canice*latheav/dt/evpot) * vaie/rb endif else - wlcf= fwet + cew= fwet * vaie/rb endif - cvw = wlcf*cew ctw = (1.-fwet)*(laisune/(rb+rssun) + laishae/(rb+rssha)) cgw = 1./(rawg+rsurf) - cond = caw + cvw + ctw + cgw + cond = caw + cew + ctw + cgw aea = (eair*caw + estg*cgw) / cond - bea = (cvw+ctw)/cond - cev = (1.-bea)*cvw*rhoair*cpair/gammav ! barlage: change to vegetation v3.6 + bea = (cew+ctw)/cond + cev = (1.-bea)*cew*rhoair*cpair/gammav ! barlage: change to vegetation v3.6 ctr = (1.-bea)*ctw*rhoair*cpair/gammav ! evaluate surface fluxes with current temperature and solve for dts @@ -4210,7 +4205,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & irc = fveg*(air + cir*tv**4) shc = fveg*rhoair*cpair*cvh * ( tv-tah) - evc = fveg*rhoair*cpair*cvw * (estv-eah) / gammav ! barlage: change to v in v3.6 + evc = fveg*rhoair*cpair*cew * (estv-eah) / gammav ! barlage: change to v in v3.6 tr = fveg*rhoair*cpair*ctw * (estv-eah) / gammav ! canopy heat capacity diff --git a/physics/rte-rrtmgp b/physics/rte-rrtmgp index 7f01618c9..0dc54f5ec 160000 --- a/physics/rte-rrtmgp +++ b/physics/rte-rrtmgp @@ -1 +1 @@ -Subproject commit 7f01618c92409658bddd3afa9acb004c608f6a0d +Subproject commit 0dc54f5ecaeb1e1e342efd1e02d0bcd41737bde2 From 6b9c79a09583c9115cbfdeacd364fa6c6536ae3b Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Thu, 20 Apr 2023 11:48:52 -0400 Subject: [PATCH 16/48] add back second check --- physics/module_sf_noahmplsm.F90 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 0473b43f9..ef6f99c44 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -4207,6 +4207,11 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & shc = fveg*rhoair*cpair*cvh * ( tv-tah) evc = fveg*rhoair*cpair*cew * (estv-eah) / gammav ! barlage: change to v in v3.6 tr = fveg*rhoair*cpair*ctw * (estv-eah) / gammav + if (tv > tfrz) then + evc = min(canliq*latheav/dt,evc) ! barlage: add if block for canice in v3.6 + else + evc = min(canice*latheav/dt,evc) + end if ! canopy heat capacity hcv = 0.02*vaie*cwat + canliq*cwat/denh2o + canice*cice/denice !j/m2/k From 054413acda906cf88772ab84d0512508d0af439d Mon Sep 17 00:00:00 2001 From: barlage Date: Fri, 28 Apr 2023 10:30:45 -0600 Subject: [PATCH 17/48] document thermalz0 scheme --- physics/module_sf_noahmplsm.F90 | 273 ++++++++++++++++++-------------- 1 file changed, 158 insertions(+), 115 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index ef6f99c44..ae143587f 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -5487,143 +5487,186 @@ end subroutine sfcdif3 !>\ingroup NoahMP_LSM ! compute thermal roughness length based on option opt_trs. - subroutine thermalz0(parameters,fveg,z0m,z0mg,zlvl,zpd,ezpd,ustarx, & !in - vegtyp,vaie,ur,csigmaf0,csigmaf1,aone,cdmnv,cdmng,icom, & !in - z0mt,z0ht) !out + + subroutine thermalz0(parameters, fveg, z0m, z0mg, zlvl, zpd, ezpd, & !in + ustarx, vegtyp, vaie, ur, c_sigma_f0, c_sigma_f1, a1, & !in + cdmn_v, cdmn_g, surface_flag, & !in + z0m_out, z0h_out ) !out + ! compute thermal roughness length based on option opt_trs. ! ------------------------------------------------------------------------------------------------- implicit none ! ------------------------------------------------------------------------------------------------- ! inputs - type (noahmp_parameters), intent(in) :: parameters !< - integer , intent(in ) :: vegtyp !< vegetation type - integer , intent(in ) :: icom !< 0=bared 1=vege 2=composition - real (kind=kind_phys), intent(in ) :: fveg !< green vegetation fraction [0.0-1.0] - real (kind=kind_phys), intent(in ) :: z0m !< z0 momentum (m) - real (kind=kind_phys), intent(in ) :: z0mg !< z0 momentum, ground (m) - real (kind=kind_phys), intent(in ) :: zlvl !< reference height [m] - real (kind=kind_phys), intent(in ) :: zpd !< zero plane displacement (m) - real (kind=kind_phys), intent(in ) :: ezpd !< zero plane displacement (m) - real (kind=kind_phys), intent(in ) :: ustarx !< friction velocity (m/s) - real (kind=kind_phys), intent(in ) :: vaie !< reference height [m] - real (kind=kind_phys), intent(in ) :: ur !< wind speed [m/s] - real (kind=kind_phys), intent(inout) :: csigmaf0 !< - real (kind=kind_phys), intent(inout) :: csigmaf1 !< - real (kind=kind_phys), intent(in ) :: aone !< - real (kind=kind_phys), intent(in ) :: cdmnv !< - real (kind=kind_phys), intent(in ) :: cdmng !< - real (kind=kind_phys), intent(out ) :: z0mt !< composited z0 momentum (m) - real (kind=kind_phys), intent(out ) :: z0ht !< composited z0 momentum (m) + type (noahmp_parameters),intent(in ) :: parameters ! parameters data structure + integer , intent(in ) :: vegtyp ! vegetation type + integer , intent(in ) :: surface_flag ! 0=bare 1=vegetation 2=composite + real (kind=kind_phys), intent(in ) :: fveg ! vegetation fraction [0.0-1.0] + real (kind=kind_phys), intent(in ) :: z0m ! z0 momentum [m] + real (kind=kind_phys), intent(in ) :: z0mg ! z0 momentum, ground [m] + real (kind=kind_phys), intent(in ) :: zlvl ! reference height [m] + real (kind=kind_phys), intent(in ) :: zpd ! zero plane displacement [m] + real (kind=kind_phys), intent(in ) :: ezpd ! grid zero plane displacement [m] + real (kind=kind_phys), intent(in ) :: ustarx ! friction velocity [m/s] + real (kind=kind_phys), intent(in ) :: vaie ! exposed LAI + SAI [m2/m2] + real (kind=kind_phys), intent(in ) :: ur ! wind speed [m/s] + real (kind=kind_phys), intent(in ) :: a1 ! Blumel 99 eqn 43 + real (kind=kind_phys), intent(in ) :: cdmn_v ! neutral momentum drag coefficient for vegetation + real (kind=kind_phys), intent(in ) :: cdmn_g ! neutral momentum drag coefficient for bare ground + real (kind=kind_phys), intent(inout) :: c_sigma_f0 ! C factor for no vegetation Blumel99 eqn 35 + real (kind=kind_phys), intent(inout) :: c_sigma_f1 ! C factor for full vegetation Blumel99 eqn 39 + real (kind=kind_phys), intent(out ) :: z0m_out ! output z0 momentum [m] + real (kind=kind_phys), intent(out ) :: z0h_out ! output z0 heat [m] ! local - real (kind=kind_phys) :: czil1 ! canopy based czil - real (kind=kind_phys) :: coeffa - real (kind=kind_phys) :: coeffb - real (kind=kind_phys) :: csigmafveg - real (kind=kind_phys) :: gsigma - real (kind=kind_phys) :: sigmaa - real (kind=kind_phys) :: cdmn - real (kind=kind_phys) :: kbsigmafveg - real (kind=kind_phys) :: reyn - real (kind=kind_phys) :: kbsigmaf0 - real (kind=kind_phys) :: kbsigmaf1 + real (kind=kind_phys) :: czil ! Zilitinkevich factor + real (kind=kind_phys) :: coeff_a ! slope of Blumel99 eqn 40 Blumel99 eqn 41 + real (kind=kind_phys) :: coeff_b ! intercept of Blumel99 eqn 40 Blumel99 eqn 42 + real (kind=kind_phys) :: c_sigma_fveg ! estimated C factor Blumel99 eqn 40 + real (kind=kind_phys) :: g_sigma ! weighting function Blumel99 eqn 22 + real (kind=kind_phys) :: sigma_a ! momentum partition factor Blumel99 eqn 8 + real (kind=kind_phys) :: cdmn ! grid neutral momentum drag coefficient Blumel99 eqn 21 + real (kind=kind_phys) :: reyn ! roughness Reynolds number Blumel99 eqn 36c + real (kind=kind_phys) :: kb_sigma_f0 ! bare ground kb^-1 Blumel99 eqn 36ab + real (kind=kind_phys) :: kb_sigma_f1 ! vegetated kb^-1 Blumel99 eqn 38 + real (kind=kind_phys) :: kb_sigma_fveg! grid estimated kb^-1 Blumel99 eqn 34 + + integer, parameter :: bare_flag = 0, vegetated_flag = 1, composite_flag = 2 + integer, parameter :: z0heqz0m = 1, & + chen09 = 2, & + tessel = 3, & + blumel99 = 4 + real (kind=kind_phys), parameter :: blumel_gamma = 0.5, & + blumel_zeta = 1.0, & + viscosity = 1.5e-5 ! ------------------------------------------------------------------------------------------------- - czil1 = 0.5 - coeffa = 0.0 - coeffb = 0.0 - csigmafveg= 0.0 - gsigma = 0.0 - cdmn = 0.0 - reyn = 0.0 - sigmaa = 0.0 - kbsigmafveg = 0.0 - kbsigmaf0 = 0.0 - kbsigmaf1 = 0.0 - if( icom == 2 )then - if (opt_trs == 1) then - z0mt = fveg * z0m + (1.0 - fveg) * z0mg - z0ht = z0mt - elseif (opt_trs == 2) then - z0mt = fveg * z0m + (1.0 - fveg) * z0mg - czil1=10.0 ** (- 0.4 * parameters%hvt) - z0ht = fveg * z0m*exp(-czil1*0.4*258.2*sqrt(ustarx*z0m)) & - +(1.0 - fveg) * z0mg*exp(-czil1*0.4*258.2*sqrt(ustarx*z0mg)) - elseif (opt_trs == 3) then - z0mt = fveg * z0m + (1.0 - fveg) * z0mg - if (vegtyp.le.5) then - z0ht = fveg * z0m + (1.0 - fveg) * z0mg*0.1 + czil = 0.5 + coeff_a = 0.0 + coeff_b = 0.0 + c_sigma_fveg = 0.0 + g_sigma = 0.0 + cdmn = 0.0 + reyn = 0.0 + sigma_a = 0.0 + kb_sigma_fveg = 0.0 + kb_sigma_f0 = 0.0 + kb_sigma_f1 = 0.0 + + surface_flag_select : select case(surface_flag) + + case (composite_flag) ! calculate grid based z0m and z0h + + if (opt_trs == z0heqz0m) then + + z0m_out = fveg * z0m + (1.0 - fveg) * z0mg ! probably should be log + z0h_out = z0m_out + + elseif (opt_trs == chen09) then + + z0m_out = fveg * z0m + (1.0 - fveg) * z0mg ! probably should be log + czil = 10.0 ** (- 0.4 * parameters%hvt) + z0h_out = fveg * z0m * exp(-czil*0.4*258.2*sqrt(ustarx*z0m )) & + + (1.0 - fveg) * z0mg * exp(-czil*0.4*258.2*sqrt(ustarx*z0mg)) + + elseif (opt_trs == tessel) then + + z0m_out = fveg * z0m + (1.0 - fveg) * z0mg ! probably should be log + if (vegtyp <= 5) then + z0h_out = fveg * z0m + (1.0 - fveg) * z0mg * 0.1 else - z0ht = fveg * z0m*0.01 + (1.0 - fveg) * z0mg*0.1 + z0h_out = fveg * z0m * 0.01 + (1.0 - fveg) * z0mg * 0.1 endif - elseif (opt_trs == 4) then - coeffa = (csigmaf0 - csigmaf1)/(1.0 - exp(-1.0*aone)) - coeffb = csigmaf0 - coeffa - csigmafveg = coeffa * exp(-1.0*aone*fveg) + coeffb - gsigma = fveg**0.5 + fveg*(1.0-fveg)*1.0 -! -! 0.5 ~ 1.0 for the 0.5 place; 0 ~ 1.0 for the 1.0 place, adjustable empirical + elseif (opt_trs == blumel99) then + + coeff_a = (c_sigma_f0 - c_sigma_f1)/(1.0 - exp(-1.0*a1)) ! Blumel99 eqn 41 + coeff_b = c_sigma_f0 - coeff_a ! Blumel99 eqn 42 + c_sigma_fveg = coeff_a * exp(-1.0*a1*fveg) + coeff_b ! Blumel99 eqn 40 + +! blumel_gamma = 0.5 ~ 1.0 and blumel_zeta = 0 ~ 1.0, adjustable empirical ! canopy roughness geometry parameter; currently fveg = 0.78 has the largest ! momentum flux; can test the fveg-based average by setting 0.5 to 1.0 and 1.0 -! to 0.0 ! see Blumel; JAM,1998 -! +! to 0.0 ! see Blumel; JAM,1999 - cdmn = gsigma*cdmnv + (1.0-gsigma)*cdmng - z0mt = (zlvl - ezpd)*exp(-0.4/sqrt(cdmn)) + g_sigma = fveg**blumel_gamma + fveg*(1.0-fveg)*blumel_zeta ! Blumel99 eqn 22 + cdmn = g_sigma*cdmn_v + (1.0-g_sigma)*cdmn_g ! Blumel99 eqn 21 + z0m_out = (zlvl - ezpd)*exp(-0.4/sqrt(cdmn)) ! Blumel99 eqn 24 + kb_sigma_fveg = c_sigma_fveg/log((zlvl-ezpd)/z0m_out) - & + log((zlvl-ezpd)/z0m_out) ! Blumel99 eqn 34 + z0h_out = z0m_out/exp(kb_sigma_fveg) - kbsigmafveg = csigmafveg/log((zlvl-ezpd)/z0mt) - log((zlvl-ezpd)/z0mt) - z0ht = z0mt/exp(kbsigmafveg) - endif - - elseif( icom == 0 )then - - z0mt = z0mg - if (opt_trs == 1) then - z0ht = z0mt - elseif (opt_trs == 2) then - czil1=10.0 ** (- 0.4 * parameters%hvt) - z0ht =z0mt*exp(-czil1*0.4*258.2*sqrt(ustarx*z0mt)) - elseif (opt_trs == 3) then - if (vegtyp.le.5) then - z0ht = z0mt - else - z0ht = z0mt*0.01 endif - elseif (opt_trs == 4) then - reyn = ustarx*z0mt/(1.5e-05) - if (reyn .gt. 2.0) then - kbsigmaf0 = 2.46*reyn**0.25 - log(7.4) - else - kbsigmaf0 = - log(0.397) + + case (bare_flag) ! calculate z0m and z0h over bare tile + + z0m_out = z0mg + + if (opt_trs == z0heqz0m) then + + z0h_out = z0m_out + + elseif (opt_trs == chen09) then + + czil = 10.0 ** (- 0.4 * parameters%hvt) + z0h_out = z0m_out * exp(-czil*0.4*258.2*sqrt(ustarx*z0m_out)) + + elseif (opt_trs == tessel) then + + if (vegtyp <= 5) then + z0h_out = z0m_out + else + z0h_out = z0m_out * 0.01 + endif + + elseif (opt_trs == blumel99) then + + reyn = ustarx*z0m_out/viscosity ! Blumel99 eqn 36c + if (reyn > 2.0) then + kb_sigma_f0 = 2.46*reyn**0.25 - log(7.4) ! Blumel99 eqn 36a + else + kb_sigma_f0 = - log(0.397) ! Blumel99 eqn 36b + endif + + z0h_out = max(z0m_out/exp(kb_sigma_f0),1.0e-6) + c_sigma_f0 = log((zlvl-zpd)/z0m_out) * & + (log((zlvl-zpd)/z0m_out) + kb_sigma_f0) ! Blumel99 eqn 35 + endif - z0ht = max(z0mt/exp(kbsigmaf0),1.0e-6) - csigmaf0 = log((zlvl-zpd)/z0mt)*(log((zlvl-zpd)/z0mt) + kbsigmaf0) - endif + case (vegetated_flag) ! calculate z0m and z0h over vegetated tile - elseif( icom == 1 )then - - z0mt = z0m - if (opt_trs == 1) then - z0ht = z0mt - elseif (opt_trs == 2) then - czil1= 10.0 ** (- 0.4 * parameters%hvt) - z0ht = z0mt*exp(-czil1*0.4*258.2*sqrt(ustarx*z0mt)) - elseif (opt_trs == 3) then - if (vegtyp.le.5) then - z0ht = z0mt - else - z0ht = z0mt*0.01 - endif - elseif (opt_trs == 4) then - sigmaa = 1.0 - (0.5/(0.5+vaie))*exp(-vaie**2/8.0) - kbsigmaf1 = 16.4*(sigmaa*vaie**3)**(-0.25)*sqrt(parameters%dleaf*ur/log((zlvl-zpd)/z0mt)) - z0ht = z0mt/exp(kbsigmaf1) - csigmaf1 = log((zlvl-zpd)/z0mt)*(log((zlvl-zpd)/z0mt)+kbsigmaf1) ! for output for interpolation + z0m_out = z0m + + if (opt_trs == z0heqz0m) then + + z0h_out = z0m_out + + elseif (opt_trs == chen09) then + + czil = 10.0 ** (- 0.4 * parameters%hvt) + z0h_out = z0m_out * exp(-czil*0.4*258.2*sqrt(ustarx*z0m_out)) + + elseif (opt_trs == tessel) then + + if (vegtyp <= 5) then + z0h_out = z0m_out + else + z0h_out = z0m_out*0.01 endif - endif + + elseif (opt_trs == blumel99) then + + sigma_a = 1.0 - (0.5/(0.5+vaie)) * exp(-vaie**2/8.0) ! Blumel99 eqn 8 + kb_sigma_f1 = 16.4 * (sigma_a*vaie**3)**(-0.25) * & ! Blumel99 eqn 38 + sqrt(parameters%dleaf*ur/log((zlvl-zpd)/z0m_out)) + z0h_out = z0m_out/exp(kb_sigma_f1) + c_sigma_f1 = log((zlvl-zpd)/z0m_out)*(log((zlvl-zpd)/z0m_out)+kb_sigma_f1) ! Blumel99 eqn 39 + + endif + + end select surface_flag_select end subroutine thermalz0 From c39a6a50cb8791d0678a7e6bd3aa111f2ec75c32 Mon Sep 17 00:00:00 2001 From: barlage Date: Mon, 1 May 2023 09:09:04 -0600 Subject: [PATCH 18/48] add z0m option to account for phenology --- physics/module_sf_noahmplsm.F90 | 57 +++++++++++++++++++++++++++------ physics/noahmpdrv.F90 | 4 ++- 2 files changed, 50 insertions(+), 11 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index ae143587f..afea081f3 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -163,14 +163,19 @@ module module_sf_noahmplsm ! 1 -> liu, et al. 2016 integer :: opt_trs !< options for thermal roughness scheme - ! **1 -> z0h=z0 - ! 2 -> czil - ! 3 -> ec style - ! 4 -> kb inversed + ! **1 -> z0h=z0m + ! 2 -> czil = f(canopy height) from Chen09 + ! 3 -> ec style from TESSEL + ! 4 -> kb inverse from Blumel99 integer :: opt_diag !< options for surface 2m/q diagnostic approach ! 1 -> external GFS sfc_diag ! **2 -> original NoahMP 2-title ! 3 -> NoahMP 2-title + internal GFS sfc_diag + + integer :: opt_z0m !< options for momentum roughness length + ! **1 -> use z0m from MPTABLE + ! 2 -> z0m = f(canopy height, LAI/SAI) + !------------------------------------------------------------------------------------------! ! physical constants: ! !------------------------------------------------------------------------------------------! @@ -1974,6 +1979,10 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in real (kind=kind_phys) :: ezpd real (kind=kind_phys) :: aone + real (kind=kind_phys) :: canopy_density_factor + real (kind=kind_phys) :: vai_limited + real (kind=kind_phys) :: z0m_hvt_ratio(20) + !jref:end real (kind=kind_phys), parameter :: mpe = 1.e-6 @@ -2012,6 +2021,11 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in csigmaf1 = 0.0 csigmaf0 = 0.0 aone = 0.0 + + canopy_density_factor = 1.0 + vai_limited = 2.0 + z0m_hvt_ratio = (/ 0.545,0.055,0.047,0.050,0.050,0.182,0.545,0.046,0.050,0.120, & + 0.060,0.075,0.067,0.093,0.000,0.000,0.000,0.075,0.100,0.060 /) ! @@ -2054,12 +2068,32 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in zpdg = snowh if(veg) then - z0m = parameters%z0mvt - zpd = 0.65 * parameters%hvt - if(snowh.gt.zpd) zpd = snowh + + if(opt_z0m == 1) then + + z0m = parameters%z0mvt + zpd = 0.65 * parameters%hvt + + elseif(opt_z0m == 2) then + + z0m = z0m_hvt_ratio(vegtyp) * parameters%hvt + zpd = 0.65 * parameters%hvt + if(vegtyp /= 13) then + vai_limited = min(vai, 2.0) + canopy_density_factor = (1.0 - exp(-vai_limited)) / (1.0 - exp(-2.0)) + z0m = exp(canopy_density_factor * log(z0m) + (1.0 - canopy_density_factor) * log(z0mg)) + zpd = canopy_density_factor * zpd + end if + + end if + + if(snowh.gt.zpd) zpd = snowh + else + z0m = z0mg zpd = zpdg + end if ! special case for urban @@ -10154,9 +10188,10 @@ end subroutine psn_crop !>\ingroup NoahMP_LSM !! - subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc ,iopt_frz , & - iopt_inf ,iopt_rad ,iopt_alb ,iopt_snf ,iopt_tbot, iopt_stc, & - iopt_rsf , iopt_soil, iopt_pedo, iopt_crop ,iopt_trs, iopt_diag ) + subroutine noahmp_options(idveg , iopt_crs , iopt_btr , iopt_run , iopt_sfc , iopt_frz , & + iopt_inf, iopt_rad , iopt_alb , iopt_snf , iopt_tbot, iopt_stc , & + iopt_rsf, iopt_soil, iopt_pedo, iopt_crop, iopt_trs , iopt_diag, & + iopt_z0m ) implicit none @@ -10180,6 +10215,7 @@ subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc integer, intent(in) :: iopt_crop !< crop model option (0->none; 1->liu et al.) integer, intent(in) :: iopt_trs !< thermal roughness scheme option (1->z0h=z0; 2->rb reversed) integer, intent(in) :: iopt_diag !< surface 2m t/q diagnostic approach + integer, intent(in) :: iopt_z0m !< momentum roughness length option ! ------------------------------------------------------------------------------------------------- @@ -10202,6 +10238,7 @@ subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc opt_crop = iopt_crop opt_trs = iopt_trs opt_diag = iopt_diag + opt_z0m = iopt_z0m end subroutine noahmp_options diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index 88e75637b..c1200e829 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -451,6 +451,7 @@ subroutine noahmpdrv_run & integer :: iopt_pedo = 1 ! option for pedotransfer function integer :: iopt_crop = 0 ! option for crop model integer :: iopt_gla = 2 ! option for glacier treatment + integer :: iopt_z0m = 2 ! option for z0m treatment ! ! --- local inputs to noah-mp and glacier subroutines; listed in order in noah-mp call @@ -848,7 +849,8 @@ subroutine noahmpdrv_run & call noahmp_options(idveg ,iopt_crs, iopt_btr , iopt_run, iopt_sfc, & iopt_frz, iopt_inf , iopt_rad, iopt_alb, & iopt_snf, iopt_tbot, iopt_stc, iopt_rsf, & - iopt_soil,iopt_pedo, iopt_crop,iopt_trs,iopt_diag) + iopt_soil,iopt_pedo, iopt_crop,iopt_trs, & + iopt_diag,iopt_z0m) if ( vegetation_category == isice_table ) then From 3ca1cb482ff14b5d85ecb9c931ad21907380e192 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 11:46:36 -0400 Subject: [PATCH 19/48] revert z0m option to original for testing --- physics/noahmpdrv.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index c1200e829..fb1859cc9 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -451,7 +451,7 @@ subroutine noahmpdrv_run & integer :: iopt_pedo = 1 ! option for pedotransfer function integer :: iopt_crop = 0 ! option for crop model integer :: iopt_gla = 2 ! option for glacier treatment - integer :: iopt_z0m = 2 ! option for z0m treatment + integer :: iopt_z0m = 1 ! option for z0m treatment ! ! --- local inputs to noah-mp and glacier subroutines; listed in order in noah-mp call From c92f164bad27bd6678675981ff569bf563334456 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 16:37:35 -0400 Subject: [PATCH 20/48] add gfs stability inside noahmp; remove dependence on sfc_diff --- physics/module_sf_noahmplsm.F90 | 226 +++++++++++++++++++++++++++++++- physics/noahmpdrv.F90 | 5 +- 2 files changed, 226 insertions(+), 5 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index afea081f3..33150852a 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -8,7 +8,6 @@ module module_sf_noahmplsm use module_wrf_utl #endif use machine , only : kind_phys -use sfc_diff, only : stability implicit none @@ -5511,11 +5510,234 @@ subroutine sfcdif3(parameters,iloc ,jloc ,iter ,sfctmp ,qair ,ur tvs = tgb/prsik1x * virtfac endif - call stability (zlvlb, zvfun1, gdx, tv1, thv1, ur, z0m, z0h, tvs, grav, thsfc_loc, & + call gfs_stability (zlvlb, zvfun1, gdx, tv1, thv1, ur, z0m, z0h, tvs, grav, thsfc_loc, & rb1, fm,fh,fm10,fh2,cm,ch,stress1,fv) end subroutine sfcdif3 +!== begin gfs_stability ================================================================================== + +subroutine gfs_stability & +! --- inputs: + ( z1, zvfun, gdx, tv1, thv1, wind, z0max, ztmax, tvs, grav, & + thsfc_loc, & +! --- outputs: + rb, fm, fh, fm10, fh2, cm, ch, stress, ustar) + +! Documentation below refers to UTN and STN which are: +! UTN (Unstable Tech Note) : NCEP Office Note 356 +! STN (Stable Tech Note) : NCEP Office Note 321 + +integer, parameter :: kp = kind_phys +real (kind=kind_phys), parameter :: ca=0.4_kind_phys ! ca - von karman constant + +real(kind=kind_phys), intent(in) :: z1 ! height model level +real(kind=kind_phys), intent(in) :: zvfun ! vegetation adjustment factor +real(kind=kind_phys), intent(in) :: gdx ! grid spatial dimension +real(kind=kind_phys), intent(in) :: tv1 ! virtual temperature at model level +real(kind=kind_phys), intent(in) :: thv1 ! virtual potential temperature at model level +real(kind=kind_phys), intent(in) :: wind ! wind speed at model level +real(kind=kind_phys), intent(in) :: z0max ! momentum roughness length +real(kind=kind_phys), intent(in) :: ztmax ! thermal roughness length +real(kind=kind_phys), intent(in) :: tvs ! surface virtual temperature +real(kind=kind_phys), intent(in) :: grav ! local gravity +logical, intent(in) :: thsfc_loc ! use local theta reference flag + +real(kind=kind_phys), intent(out) :: rb ! bulk richardson number [-] +real(kind=kind_phys), intent(out) :: fm ! phi momentum function (UTN 1.1) [-] +real(kind=kind_phys), intent(out) :: fh ! phi heat function (UTN 1.2) [-] +real(kind=kind_phys), intent(out) :: fm10 ! 10-meter phi momentum function [-] +real(kind=kind_phys), intent(out) :: fh2 ! 2-meter phi heat function [-] +real(kind=kind_phys), intent(out) :: cm ! momentum exchange coeficient [-] +real(kind=kind_phys), intent(out) :: ch ! heat exchange coeficient [-] +real(kind=kind_phys), intent(out) :: stress ! surface stress [m2/s2] +real(kind=kind_phys), intent(out) :: ustar ! friction velocity [m/s] + +! --- locals: +real(kind=kind_phys), parameter :: a0 = -3.975 ! UTN 2.37 +real(kind=kind_phys), parameter :: a1 = 12.32 ! UTN 2.37 +real(kind=kind_phys), parameter :: b1 = -7.755 ! UTN 2.37 +real(kind=kind_phys), parameter :: b2 = 6.041 ! UTN 2.37 +real(kind=kind_phys), parameter :: a0p = -7.941 ! UTN 2.38 +real(kind=kind_phys), parameter :: a1p = 24.75 ! UTN 2.38 +real(kind=kind_phys), parameter :: b1p = -8.705 ! UTN 2.38 +real(kind=kind_phys), parameter :: b2p = 7.899 ! UTN 2.38 + +real(kind=kind_phys), parameter :: alpha = 5.0 ! alpha in e.g., STN 1.10 +real(kind=kind_phys), parameter :: alpha4 = 4.0 * alpha ! term in aa +real(kind=kind_phys), parameter :: xkrefsqr = 0.3 ! baseline maximum z/L +real(kind=kind_phys), parameter :: xkmin = 0.05 ! min multiplier for grid size and vegetation +real(kind=kind_phys), parameter :: xkgdx = 3000.0 ! critical grid scale for diffusivity[m^0.5] +real(kind=kind_phys), parameter :: zolmin = -10.0 ! minimum z/L +real(kind=kind_phys), parameter :: zero = 0.0 +real(kind=kind_phys), parameter :: one = 1.0 + +real(kind=kind_phys) :: aa +real(kind=kind_phys) :: aa0 +real(kind=kind_phys) :: bb +real(kind=kind_phys) :: bb0 +real(kind=kind_phys) :: dtv +real(kind=kind_phys) :: adtv +real(kind=kind_phys) :: hl1 +real(kind=kind_phys) :: hl12 +real(kind=kind_phys) :: pm +real(kind=kind_phys) :: ph +real(kind=kind_phys) :: pm10 +real(kind=kind_phys) :: ph2 +real(kind=kind_phys) :: z1i +real(kind=kind_phys) :: fms +real(kind=kind_phys) :: fhs +real(kind=kind_phys) :: hl0 +real(kind=kind_phys) :: hl0inf +real(kind=kind_phys) :: hlinf +real(kind=kind_phys) :: hl110 +real(kind=kind_phys) :: hlt +real(kind=kind_phys) :: hltinf +real(kind=kind_phys) :: olinf +real(kind=kind_phys) :: tem1 +real(kind=kind_phys) :: tem2 +real(kind=kind_phys) :: zolmax + +real(kind=kind_phys) xkzo + +z1i = one / z1 ! inverse of model height + +! +! set background diffusivities with one for gdx >= xkgdx and +! as a function of horizontal grid size for gdx < xkgdx +! (i.e., gdx/xkgdx for gdx < xkgdx) +! + +if(gdx >= xkgdx) then + xkzo = one +else + xkzo = gdx / xkgdx +endif + +tem1 = tv1 - tvs +if(tem1 > zero) then ! for stable case, adjust for vegetation cover + tem2 = xkzo * zvfun + xkzo = min(max(tem2, xkmin), xkzo) +endif + +zolmax = xkrefsqr / sqrt(xkzo) ! maximum z/L + +! compute stability indices (rb and hlinf) + + dtv = thv1 - tvs + adtv = max(abs(dtv),0.001_kp) + dtv = sign(1.0_kp,dtv) * adtv + + if(thsfc_loc) then ! Use local potential temperature + rb = max(-5000.0_kp, (grav+grav) * dtv * z1 & + / ((thv1 + tvs) * wind * wind)) + else ! Use potential temperature referenced to 1000 hPa + rb = max(-5000.0_kp, grav * dtv * z1 & + / (tv1 * wind * wind)) + endif + + tem1 = one / z0max ! 1/z0m + tem2 = one / ztmax ! 1/z0t + fm = log((z0max+z1) * tem1) ! neutral phi_m + fh = log((ztmax+z1) * tem2) ! neutral phi_h + fm10 = log((z0max+10.0_kp) * tem1) ! neutral phi_m at 10 meters + fh2 = log((ztmax+2.0_kp) * tem2) ! neutral phi_h at 2 meters + hlinf = rb * fm * fm / fh ! z/L STN 2.7 + hlinf = min(max(hlinf,zolmin),zolmax) ! z/L, xi in STN/UTN +! +! stable case +! + if (dtv >= zero) then + hl1 = hlinf ! z/L, xi in STN + if(hlinf > 0.25_kp) then ! z/L > 0.25, do two iterations + tem1 = hlinf * z1i ! 1/L + hl0inf = z0max * tem1 ! z0m/z1, zi_0 in STN + hltinf = ztmax * tem1 ! z0t/z1, zi_0 in STN + aa = sqrt(one + alpha4 * hlinf) ! sqrt term of STN 2.16 with z + aa0 = sqrt(one + alpha4 * hl0inf) ! sqrt term of STN 2.16 with z0m + bb = aa ! sqrt term of STN 2.16 with z + bb0 = sqrt(one + alpha4 * hltinf) ! sqrt term of STN 2.16 with z0t + pm = aa0 - aa + log( (aa + one)/(aa0 + one) ) ! psi_m STN 3.11 + ph = bb0 - bb + log( (bb + one)/(bb0 + one) ) ! psi_h STN 3.11 + fms = fm - pm ! phi_m STN 3.10 + fhs = fh - ph ! phi_h STN 3.10 + hl1 = fms * fms * rb / fhs ! z/L iteration STN 3.8 + hl1 = min(hl1, zolmax) ! z/L iteration + endif +! +! second iteration +! + tem1 = hl1 * z1i ! 1/L + hl0 = z0max * tem1 ! z0m/z1 + hlt = ztmax * tem1 ! z0t/z1 + aa = sqrt(one + alpha4 * hl1) ! sqrt term of STN 2.16 with z + aa0 = sqrt(one + alpha4 * hl0) ! sqrt term of STN 2.16 with z0m + bb = aa ! sqrt term of STN 2.16 with z + bb0 = sqrt(one + alpha4 * hlt) ! sqrt term of STN 2.16 with z0t + pm = aa0 - aa + log( (one+aa)/(one+aa0) ) ! psi_m STN 3.11 + ph = bb0 - bb + log( (one+bb)/(one+bb0) ) ! psi_h STN 3.11 + hl110 = hl1 * 10.0_kp * z1i ! 10/L + aa = sqrt(one + alpha4 * hl110) ! sqrt term of STN 2.16 with z=10m + pm10 = aa0 - aa + log( (one+aa)/(one+aa0) ) ! psi_m STN 3.11 with z=10m + hl12 = (hl1+hl1) * z1i ! 2/L +! aa = sqrt(one + alpha4 * hl12) + bb = sqrt(one + alpha4 * hl12) ! sqrt term of STN 2.16 with z=2m + ph2 = bb0 - bb + log( (one+bb)/(one+bb0) ) ! psi_m STN 3.11 with z=2m +! +! unstable case - check for unphysical obukhov length +! see steps in UTN Sec. D +! + else ! dtv < 0 case + + olinf = z1 / hlinf ! z/L, xi in UTN + tem1 = 50.0_kp * z0max ! 50 * z0m, z/L limit for calc methods, see UTN Sec. E + if(abs(olinf) <= tem1) then ! + hlinf = -z1 / tem1 ! + hlinf = max(hlinf, zolmin) + endif +! +! get pm and ph +! + if (hlinf >= -0.5_kp) then + hl1 = hlinf + pm = (a0 + a1*hl1) * hl1 / (one+ (b1+b2*hl1) *hl1) ! psi_m UTN 2.37 + ph = (a0p + a1p*hl1) * hl1 / (one+ (b1p+b2p*hl1)*hl1) ! psi_h UTN 2.38 + hl110 = hl1 * 10.0_kp * z1i ! 10/L + pm10 = (a0 + a1*hl110) * hl110/(one+(b1+b2*hl110)*hl110) ! psi_m UTN 2.37 with z=10m + hl12 = (hl1+hl1) * z1i ! 2/L + ph2 = (a0p + a1p*hl12) * hl12/(one+(b1p+b2p*hl12)*hl12) ! psi_h UTN 2.38 with z=2m + else ! z/L < -0.5 + hl1 = -hlinf ! -z/L + tem1 = one / sqrt(hl1) ! sqrt(-z/L) + pm = log(hl1) + 2.0_kp * sqrt(tem1) - 0.8776_kp ! UTN 2.64, first three terms + ph = log(hl1) + 0.5_kp * tem1 + 1.386_kp ! UTN 2.65, first three terms + hl110 = hl1 * 10.0_kp * z1i ! 10/L + pm10 = log(hl110) + 2.0_kp/sqrt(sqrt(hl110)) - 0.8776_kp ! psi_m UTN 2.64 with z=10m + hl12 = (hl1+hl1) * z1i ! 2/L + ph2 = log(hl12) + 0.5_kp / sqrt(hl12) + 1.386_kp ! psi_h UTN 2.65 with z=2m + endif + + endif ! end of if (dtv >= 0 ) then loop +! +! finish the exchange coefficient computation to provide fm and fh +! + fm = fm - pm ! phi_m + fh = fh - ph ! phi_h + fm10 = fm10 - pm10 ! phi_m at 10m + fh2 = fh2 - ph2 ! phi_h at 2m + cm = ca * ca / (fm * fm) ! momentum exchange coef = k^2/phi_m^2 + ch = ca * ca / (fm * fh) ! heat exchange coef = k^2/phi_m/phi_h + tem1 = 0.00001_kp/z1 ! minimum exhange coef (?) + cm = max(cm, tem1) + ch = max(ch, tem1) + stress = cm * wind * wind ! surface stress = Cm*U*U + ustar = sqrt(stress) ! friction velocity + + return +!................................. + end subroutine gfs_stability +!--------------------------------- + !== begin thermalz0 !================================================================================== diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index fb1859cc9..d232b759f 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -203,8 +203,7 @@ subroutine noahmpdrv_run & use machine , only : kind_phys use funcphys, only : fpvs - use sfc_diff, only : stability -! use module_sf_noahmplsm + use module_sf_noahmplsm, only : gfs_stability use module_sf_noahmp_glacier use noahmp_tables @@ -1189,7 +1188,7 @@ subroutine noahmpdrv_run & ! if ( .not. do_mynnsfclay) then !GFS sfcdiff if ( iopt_sfc .ne. 4 ) then !GFS sfcdiff - call stability & + call gfs_stability & (zf(i), zvfun(i), gdx, virtual_temperature, vptemp,wind(i), z0_total, z0h_total, & tvs1, con_g, thsfc_loc, & rb1(i), fm1(i), fh1(i), fm101(i), fh21(i), cm(i), ch(i), stress1(i), ustar1(i)) From 5c438fd3622b42a5f621f89497d8bc054264a402 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 17:22:11 -0400 Subject: [PATCH 21/48] add z0m to hvt ratio to mptable --- physics/module_sf_noahmplsm.F90 | 6 ++---- physics/noahmp_tables.f90 | 12 +++++++++--- physics/noahmpdrv.F90 | 3 ++- physics/noahmptable.tbl | 2 ++ 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 33150852a..b6e751e31 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -219,6 +219,7 @@ module module_sf_noahmplsm real (kind=kind_phys) :: z0mvt !< momentum roughness length (m) real (kind=kind_phys) :: hvt !< top of canopy (m) real (kind=kind_phys) :: hvb !< bottom of canopy (m) + real (kind=kind_phys) :: z0mhvt !< ratio of z0m to hvt real (kind=kind_phys) :: den !< tree density (no. of trunks per m2) real (kind=kind_phys) :: rc !< tree crown radius (m) real (kind=kind_phys) :: mfsno !< snowmelt m parameter () @@ -1980,7 +1981,6 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in real (kind=kind_phys) :: canopy_density_factor real (kind=kind_phys) :: vai_limited - real (kind=kind_phys) :: z0m_hvt_ratio(20) !jref:end @@ -2023,8 +2023,6 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in canopy_density_factor = 1.0 vai_limited = 2.0 - z0m_hvt_ratio = (/ 0.545,0.055,0.047,0.050,0.050,0.182,0.545,0.046,0.050,0.120, & - 0.060,0.075,0.067,0.093,0.000,0.000,0.000,0.075,0.100,0.060 /) ! @@ -2075,7 +2073,7 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in elseif(opt_z0m == 2) then - z0m = z0m_hvt_ratio(vegtyp) * parameters%hvt + z0m = parameters%z0mhvt * parameters%hvt zpd = 0.65 * parameters%hvt if(vegtyp /= 13) then vai_limited = min(vai, 2.0) diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index 0e44b3cfc..cc7856af6 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -44,6 +44,7 @@ module noahmp_tables real :: z0mvt_table(mvt) !< momentum roughness length (m) real :: hvt_table(mvt) !< top of canopy (m) real :: hvb_table(mvt) !< bottom of canopy (m) + real :: z0mhvt_table(mvt) !< ratio of z0m to hvt real :: den_table(mvt) !< tree density (no. of trunks per m2) real :: rc_table(mvt) !< tree crown radius (m) real :: mfsno_table(mvt) !< snowmelt curve parameter () @@ -323,7 +324,8 @@ subroutine read_mp_table_parameters sai_sep, sai_oct, sai_nov, sai_dec, lai_jan, lai_feb, lai_mar, lai_apr, & lai_may, lai_jun, lai_jul, lai_aug, lai_sep, lai_oct, lai_nov, lai_dec, & rhol_vis, rhol_nir, rhos_vis, rhos_nir, taul_vis, taul_nir, taus_vis, taus_nir,& - ch2op, dleaf, z0mvt, hvt, hvb, den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & + ch2op, dleaf, z0mvt, hvt, hvb, z0mhvt, & + den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & akc, ko25, ako, avcmx, aqe, ltovrc, dilefc, dilefw, rmf25, sla, fragr, tmin, & vcmx25, tdlef, bp, mp, qe25, rms25, rmr25, arm, folnmx, wdpool, wrrat, mrp, & nroot, rgl, rs, hs, topt, rsmax, rtovrc, rswoodc, bf, wstrc, laimin, & @@ -331,7 +333,8 @@ subroutine read_mp_table_parameters namelist / noahmp_usgs_veg_categories / veg_dataset_description, nveg namelist / noahmp_usgs_parameters / isurban, iswater, isbarren, isice, iscrop, eblforest, natural, & lcz_1, lcz_2, lcz_3, lcz_4, lcz_5, lcz_6, lcz_7, lcz_8, lcz_9, lcz_10, lcz_11, & - ch2op, dleaf, z0mvt, hvt, hvb, den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & + ch2op, dleaf, z0mvt, hvt, hvb, z0mhvt, & + den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & akc, ko25, ako, avcmx, aqe, ltovrc, dilefc, dilefw, rmf25, sla, fragr, tmin, & vcmx25, tdlef, bp, mp, qe25, rms25, rmr25, arm, folnmx, wdpool, wrrat, mrp, & nroot, rgl, rs, hs, topt, rsmax, rtovrc, rswoodc, bf, wstrc, laimin, & @@ -343,7 +346,8 @@ subroutine read_mp_table_parameters namelist / noahmp_modis_veg_categories / veg_dataset_description, nveg namelist / noahmp_modis_parameters / isurban, iswater, isbarren, isice, iscrop, eblforest, natural, & lcz_1, lcz_2, lcz_3, lcz_4, lcz_5, lcz_6, lcz_7, lcz_8, lcz_9, lcz_10, lcz_11, & - ch2op, dleaf, z0mvt, hvt, hvb, den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & + ch2op, dleaf, z0mvt, hvt, hvb, z0mhvt, & + den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & akc, ko25, ako, avcmx, aqe, ltovrc, dilefc, dilefw, rmf25, sla, fragr, tmin, & vcmx25, tdlef, bp, mp, qe25, rms25, rmr25, arm, folnmx, wdpool, wrrat, mrp, & nroot, rgl, rs, hs, topt, rsmax, rtovrc, rswoodc, bf, wstrc, laimin, & @@ -502,6 +506,7 @@ subroutine read_mp_table_parameters z0mvt_table = -1.0e36 hvt_table = -1.0e36 hvb_table = -1.0e36 + z0mhvt_table = -1.0e36 den_table = -1.0e36 rc_table = -1.0e36 mfsno_table = -1.0e36 @@ -814,6 +819,7 @@ subroutine read_mp_table_parameters z0mvt_table (1:nveg) = z0mvt (1:nveg) hvt_table (1:nveg) = hvt (1:nveg) hvb_table (1:nveg) = hvb (1:nveg) + z0mhvt_table (1:nveg) = z0mhvt (1:nveg) den_table (1:nveg) = den (1:nveg) rc_table (1:nveg) = rc (1:nveg) mfsno_table (1:nveg) = mfsno (1:nveg) diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index d232b759f..aad0d1ca5 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -450,7 +450,7 @@ subroutine noahmpdrv_run & integer :: iopt_pedo = 1 ! option for pedotransfer function integer :: iopt_crop = 0 ! option for crop model integer :: iopt_gla = 2 ! option for glacier treatment - integer :: iopt_z0m = 1 ! option for z0m treatment + integer :: iopt_z0m = 2 ! option for z0m treatment ! ! --- local inputs to noah-mp and glacier subroutines; listed in order in noah-mp call @@ -1335,6 +1335,7 @@ subroutine transfer_mp_parameters (vegtype,soiltype,slopetype, & parameters%z0mvt = z0mvt_table(vegtype) !momentum roughness length (m) parameters%hvt = hvt_table(vegtype) !top of canopy (m) parameters%hvb = hvb_table(vegtype) !bottom of canopy (m) + parameters%z0mhvt = z0mhvt_table(vegtype) !momentum roughness length (m) parameters%den = den_table(vegtype) !tree density (no. of trunks per m2) parameters%rc = rc_table(vegtype) !tree crown radius (m) parameters%mfsno = mfsno_table(vegtype) !snowmelt m parameter () diff --git a/physics/noahmptable.tbl b/physics/noahmptable.tbl index 02e59b37a..add1737be 100644 --- a/physics/noahmptable.tbl +++ b/physics/noahmptable.tbl @@ -59,6 +59,7 @@ z0mvt = 1.00, 0.15, 0.15, 0.15, 0.14, 0.50, 0.12, 0.06, 0.09, 0.50, 0.80, 0.85, 1.10, 1.09, 0.80, 0.00, 0.12, 0.50, 0.00, 0.10, 0.30, 0.20, 0.03, 0.00, 0.01, 0.00, 0.00, hvt = 15.0, 2.00, 2.00, 2.00, 1.50, 8.00, 1.00, 1.10, 1.10, 10.0, 16.0, 18.0, 20.0, 20.0, 16.0, 0.00, 0.50, 10.0, 0.00, 0.50, 4.00, 2.00, 0.50, 0.00, 0.10, 0.00, 0.00, hvb = 1.00, 0.10, 0.10, 0.10, 0.10, 0.15, 0.05, 0.10, 0.10, 0.10, 11.5, 7.00, 8.00, 8.50, 10.0, 0.00, 0.05, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + z0mhvt= 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.00, 0.00, den = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, rc = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, !mfsno = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, @@ -218,6 +219,7 @@ z0mvt = 1.09, 1.10, 0.85, 0.80, 0.80, 0.20, 0.06, 0.60, 0.50, 0.12, 0.30, 0.15, 1.00, 0.14, 0.00, 0.00, 0.00, 0.30, 0.20, 0.03, hvt = 20.0, 20.0, 18.0, 16.0, 16.0, 1.10, 1.10, 13.0, 10.0, 1.00, 5.00, 2.00, 15.0, 1.50, 0.00, 0.00, 0.00, 4.00, 2.00, 0.50, hvb = 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, 0.10, 0.10, 0.10, 0.05, 0.10, 0.10, 1.00, 0.10, 0.00, 0.00, 0.00, 0.30, 0.20, 0.10, + z0mhvt= 0.0545, 0.055, 0.047, 0.050, 0.050, 0.182, 0.0545, 0.046, 0.050, 0.120, 0.060, 0.075, 0.067, 0.093, 0.000, 0.000, 0.000, 0.075, 0.100, 0.060, den = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, rc = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, !mfsno = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, From 54b406ef06b3be00e5002187b507d1c19072d132 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 17:38:15 -0400 Subject: [PATCH 22/48] use blumel99 approach for bare soil for chen09 trs option --- physics/module_sf_noahmplsm.F90 | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index b6e751e31..51e7fe3f9 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -5846,10 +5846,10 @@ subroutine thermalz0(parameters, fveg, z0m, z0mg, zlvl, g_sigma = fveg**blumel_gamma + fveg*(1.0-fveg)*blumel_zeta ! Blumel99 eqn 22 cdmn = g_sigma*cdmn_v + (1.0-g_sigma)*cdmn_g ! Blumel99 eqn 21 - z0m_out = (zlvl - ezpd)*exp(-0.4/sqrt(cdmn)) ! Blumel99 eqn 24 + z0m_out = (zlvl - ezpd)*exp(-0.4/sqrt(cdmn)) ! Blumel99 eqn 24 kb_sigma_fveg = c_sigma_fveg/log((zlvl-ezpd)/z0m_out) - & log((zlvl-ezpd)/z0m_out) ! Blumel99 eqn 34 - z0h_out = z0m_out/exp(kb_sigma_fveg) + z0h_out = z0m_out/exp(kb_sigma_fveg) endif @@ -5861,11 +5861,6 @@ subroutine thermalz0(parameters, fveg, z0m, z0mg, zlvl, z0h_out = z0m_out - elseif (opt_trs == chen09) then - - czil = 10.0 ** (- 0.4 * parameters%hvt) - z0h_out = z0m_out * exp(-czil*0.4*258.2*sqrt(ustarx*z0m_out)) - elseif (opt_trs == tessel) then if (vegtyp <= 5) then @@ -5874,13 +5869,13 @@ subroutine thermalz0(parameters, fveg, z0m, z0mg, zlvl, z0h_out = z0m_out * 0.01 endif - elseif (opt_trs == blumel99) then + elseif (opt_trs == blumel99 .or. opt_trs == chen09) then reyn = ustarx*z0m_out/viscosity ! Blumel99 eqn 36c if (reyn > 2.0) then - kb_sigma_f0 = 2.46*reyn**0.25 - log(7.4) ! Blumel99 eqn 36a + kb_sigma_f0 = 2.46*reyn**0.25 - log(7.4) ! Blumel99 eqn 36a else - kb_sigma_f0 = - log(0.397) ! Blumel99 eqn 36b + kb_sigma_f0 = - log(0.397) ! Blumel99 eqn 36b endif z0h_out = max(z0m_out/exp(kb_sigma_f0),1.0e-6) @@ -5912,8 +5907,8 @@ subroutine thermalz0(parameters, fveg, z0m, z0mg, zlvl, elseif (opt_trs == blumel99) then - sigma_a = 1.0 - (0.5/(0.5+vaie)) * exp(-vaie**2/8.0) ! Blumel99 eqn 8 - kb_sigma_f1 = 16.4 * (sigma_a*vaie**3)**(-0.25) * & ! Blumel99 eqn 38 + sigma_a = 1.0 - (0.5/(0.5+vaie)) * exp(-vaie**2/8.0) ! Blumel99 eqn 8 + kb_sigma_f1 = 16.4 * (sigma_a*vaie**3)**(-0.25) * & ! Blumel99 eqn 38 sqrt(parameters%dleaf*ur/log((zlvl-zpd)/z0m_out)) z0h_out = z0m_out/exp(kb_sigma_f1) c_sigma_f1 = log((zlvl-zpd)/z0m_out)*(log((zlvl-zpd)/z0m_out)+kb_sigma_f1) ! Blumel99 eqn 39 From 591791cb1515b4c9087bacbbba9a1f0b6319a770 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 17:43:52 -0400 Subject: [PATCH 23/48] use log averaging for z0m --- physics/module_sf_noahmplsm.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 51e7fe3f9..28e6460a2 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -5814,19 +5814,19 @@ subroutine thermalz0(parameters, fveg, z0m, z0mg, zlvl, if (opt_trs == z0heqz0m) then - z0m_out = fveg * z0m + (1.0 - fveg) * z0mg ! probably should be log + z0m_out = exp(fveg * log(z0m) + (1.0 - fveg) * log(z0mg)) z0h_out = z0m_out elseif (opt_trs == chen09) then - z0m_out = fveg * z0m + (1.0 - fveg) * z0mg ! probably should be log + z0m_out = exp(fveg * log(z0m) + (1.0 - fveg) * log(z0mg)) czil = 10.0 ** (- 0.4 * parameters%hvt) z0h_out = fveg * z0m * exp(-czil*0.4*258.2*sqrt(ustarx*z0m )) & + (1.0 - fveg) * z0mg * exp(-czil*0.4*258.2*sqrt(ustarx*z0mg)) elseif (opt_trs == tessel) then - z0m_out = fveg * z0m + (1.0 - fveg) * z0mg ! probably should be log + z0m_out = exp(fveg * log(z0m) + (1.0 - fveg) * log(z0mg)) if (vegtyp <= 5) then z0h_out = fveg * z0m + (1.0 - fveg) * z0mg * 0.1 else From e0460595b81b80c2c5a5c6a25df62cdb54500827 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 17:49:32 -0400 Subject: [PATCH 24/48] modify compositing for trs = chen09 and tessel --- physics/module_sf_noahmplsm.F90 | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 28e6460a2..090e120dd 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -5820,17 +5820,25 @@ subroutine thermalz0(parameters, fveg, z0m, z0mg, zlvl, elseif (opt_trs == chen09) then z0m_out = exp(fveg * log(z0m) + (1.0 - fveg) * log(z0mg)) - czil = 10.0 ** (- 0.4 * parameters%hvt) - z0h_out = fveg * z0m * exp(-czil*0.4*258.2*sqrt(ustarx*z0m )) & - + (1.0 - fveg) * z0mg * exp(-czil*0.4*258.2*sqrt(ustarx*z0mg)) + czil = 10.0 ** (- 0.4 * parameters%hvt) + + reyn = ustarx*z0m_out/viscosity ! Blumel99 eqn 36c + if (reyn > 2.0) then + kb_sigma_f0 = 2.46*reyn**0.25 - log(7.4) ! Blumel99 eqn 36a + else + kb_sigma_f0 = - log(0.397) ! Blumel99 eqn 36b + endif + + z0h_out = exp( fveg * log(z0m * exp(-czil*0.4*258.2*sqrt(ustarx*z0m))) + & + (1.0 - fveg) * log(max(z0m/exp(kb_sigma_f0),1.0e-6)) ) elseif (opt_trs == tessel) then z0m_out = exp(fveg * log(z0m) + (1.0 - fveg) * log(z0mg)) if (vegtyp <= 5) then - z0h_out = fveg * z0m + (1.0 - fveg) * z0mg * 0.1 + z0h_out = fveg * log(z0m) + (1.0 - fveg) * log(z0mg * 0.1) else - z0h_out = fveg * z0m * 0.01 + (1.0 - fveg) * z0mg * 0.1 + z0h_out = fveg * log(z0m * 0.01) + (1.0 - fveg) * log(z0mg * 0.1) endif elseif (opt_trs == blumel99) then From 8ccdf650e0035ac367cce0443e5c2e6f4a09eaa1 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 17:51:55 -0400 Subject: [PATCH 25/48] add limits to rb --- physics/module_sf_noahmplsm.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 090e120dd..48d5024cf 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -5028,8 +5028,7 @@ subroutine ragrb(parameters,iter ,vai ,rhoair ,hg ,tah , & !in tmprb = cwpc*50. / (1. - exp(-cwpc/2.)) rb = tmprb * sqrt(parameters%dleaf/uc) - rb = max(rb,20.0) -! rb = 200 + rb = min(max(rb, 5.0),50.0) ! limit rb to 5-50, typically rb<50 end subroutine ragrb From 60fb0e81846a54d5acb3e6fce6ba74f9ae34fb85 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 17:57:28 -0400 Subject: [PATCH 26/48] lower glacier snow limit to 100mm --- physics/module_sf_noahmp_glacier.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/module_sf_noahmp_glacier.F90 b/physics/module_sf_noahmp_glacier.F90 index bd6b016f1..7b7512fa4 100644 --- a/physics/module_sf_noahmp_glacier.F90 +++ b/physics/module_sf_noahmp_glacier.F90 @@ -2646,9 +2646,9 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in !to obtain equilibrium state of snow in glacier region - if(sneqv > 2000.) then ! 2000 mm -> maximum water depth + if(sneqv > 100.) then ! 100 mm -> maximum water depth bdsnow = snice(0) / dzsnso(0) - snoflow = (sneqv - 2000.) + snoflow = (sneqv - 100.) snice(0) = snice(0) - snoflow dzsnso(0) = dzsnso(0) - snoflow/bdsnow snoflow = snoflow / dt From 63aed7ca255f8b420ce50523c73a79c51294dd21 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 17:59:44 -0400 Subject: [PATCH 27/48] bug fix for mixing ratio calculation in canres --- physics/module_sf_noahmplsm.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 48d5024cf..38f7313e6 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -6179,7 +6179,7 @@ subroutine canres (parameters,par ,sfctmp,rcsoil ,eah ,sfcprs , & !in ! compute q2 and q2sat q2 = 0.622 * eah / (sfcprs - 0.378 * eah) !specific humidity [kg/kg] - q2 = q2 / (1.0 + q2) !mixing ratio [kg/kg] + q2 = q2 / (1.0 - q2) !mixing ratio [kg/kg] call calhum(parameters,sfctmp, sfcprs, q2sat, dqsdt2) From 12d8ab54d5aa33f22bab21cbf0186891acc2ab2b Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 18:06:16 -0400 Subject: [PATCH 28/48] fix bug in infil for infiltration limit --- physics/module_sf_noahmplsm.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 38f7313e6..22e177912 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -8635,7 +8635,7 @@ subroutine infil (parameters,nsoil ,dt ,zsoil ,sh2o ,sice , & !in call wdfcnd2 (parameters,wdf,wcnd,sh2o(1),sicemax,1) infmax = max (infmax,wcnd) - infmax = min (infmax,px) + infmax = min (infmax,px/dt) runsrf= max(0., qinsur - infmax) pddum = qinsur - runsrf From 9525a1650b804e09b95a8f1059ea881dc80a0b20 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 18:15:40 -0400 Subject: [PATCH 29/48] add canopy heat to mptable for tuning --- physics/module_sf_noahmplsm.F90 | 3 ++- physics/noahmp_tables.f90 | 9 ++++++--- physics/noahmpdrv.F90 | 1 + physics/noahmptable.tbl | 3 +++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 22e177912..336ae5a26 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -224,6 +224,7 @@ module module_sf_noahmplsm real (kind=kind_phys) :: rc !< tree crown radius (m) real (kind=kind_phys) :: mfsno !< snowmelt m parameter () real (kind=kind_phys) :: scffac !< snow cover factor (m) + real (kind=kind_phys) :: cbiom !< canopy biomass heat capacity parameter (m) real (kind=kind_phys) :: saim(12) !< monthly stem area index, one-sided real (kind=kind_phys) :: laim(12) !< monthly leaf area index, one-sided real (kind=kind_phys) :: sla !< single-side leaf area per kg [m2/kg] @@ -4245,7 +4246,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & end if ! canopy heat capacity - hcv = 0.02*vaie*cwat + canliq*cwat/denh2o + canice*cice/denice !j/m2/k + hcv = parameters%cbiom*vaie*cwat + canliq*cwat/denh2o + canice*cice/denice !j/m2/k b = sav-irc-shc-evc-tr+pahv !additional w/m2 ! a = fveg*(4.*cir*tv**3 + csh + (cev+ctr)*destv) !volumetric heat capacity diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index cc7856af6..de207d0cc 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -49,6 +49,7 @@ module noahmp_tables real :: rc_table(mvt) !< tree crown radius (m) real :: mfsno_table(mvt) !< snowmelt curve parameter () real :: scffac_table(mvt) !< snow cover factor (m) + real :: cbiom_table(mvt) !< canopy biomass heat capacity parameter (m) real :: saim_table(mvt,12) !< monthly stem area index, one-sided real :: laim_table(mvt,12) !< monthly leaf area index, one-sided real :: sla_table(mvt) !< single-side leaf area per kg [m2/kg] @@ -325,7 +326,7 @@ subroutine read_mp_table_parameters lai_may, lai_jun, lai_jul, lai_aug, lai_sep, lai_oct, lai_nov, lai_dec, & rhol_vis, rhol_nir, rhos_vis, rhos_nir, taul_vis, taul_nir, taus_vis, taus_nir,& ch2op, dleaf, z0mvt, hvt, hvb, z0mhvt, & - den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & + den, rc, mfsno, scffac, cbiom, xl, cwpvt, c3psn, kc25, & akc, ko25, ako, avcmx, aqe, ltovrc, dilefc, dilefw, rmf25, sla, fragr, tmin, & vcmx25, tdlef, bp, mp, qe25, rms25, rmr25, arm, folnmx, wdpool, wrrat, mrp, & nroot, rgl, rs, hs, topt, rsmax, rtovrc, rswoodc, bf, wstrc, laimin, & @@ -334,7 +335,7 @@ subroutine read_mp_table_parameters namelist / noahmp_usgs_parameters / isurban, iswater, isbarren, isice, iscrop, eblforest, natural, & lcz_1, lcz_2, lcz_3, lcz_4, lcz_5, lcz_6, lcz_7, lcz_8, lcz_9, lcz_10, lcz_11, & ch2op, dleaf, z0mvt, hvt, hvb, z0mhvt, & - den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & + den, rc, mfsno, scffac, cbiom, xl, cwpvt, c3psn, kc25, & akc, ko25, ako, avcmx, aqe, ltovrc, dilefc, dilefw, rmf25, sla, fragr, tmin, & vcmx25, tdlef, bp, mp, qe25, rms25, rmr25, arm, folnmx, wdpool, wrrat, mrp, & nroot, rgl, rs, hs, topt, rsmax, rtovrc, rswoodc, bf, wstrc, laimin, & @@ -347,7 +348,7 @@ subroutine read_mp_table_parameters namelist / noahmp_modis_parameters / isurban, iswater, isbarren, isice, iscrop, eblforest, natural, & lcz_1, lcz_2, lcz_3, lcz_4, lcz_5, lcz_6, lcz_7, lcz_8, lcz_9, lcz_10, lcz_11, & ch2op, dleaf, z0mvt, hvt, hvb, z0mhvt, & - den, rc, mfsno, scffac, xl, cwpvt, c3psn, kc25, & + den, rc, mfsno, scffac, cbiom, xl, cwpvt, c3psn, kc25, & akc, ko25, ako, avcmx, aqe, ltovrc, dilefc, dilefw, rmf25, sla, fragr, tmin, & vcmx25, tdlef, bp, mp, qe25, rms25, rmr25, arm, folnmx, wdpool, wrrat, mrp, & nroot, rgl, rs, hs, topt, rsmax, rtovrc, rswoodc, bf, wstrc, laimin, & @@ -511,6 +512,7 @@ subroutine read_mp_table_parameters rc_table = -1.0e36 mfsno_table = -1.0e36 scffac_table = -1.0e36 + cbiom_table = -1.0e36 rhol_table = -1.0e36 rhos_table = -1.0e36 taul_table = -1.0e36 @@ -824,6 +826,7 @@ subroutine read_mp_table_parameters rc_table (1:nveg) = rc (1:nveg) mfsno_table (1:nveg) = mfsno (1:nveg) scffac_table (1:nveg) = scffac (1:nveg) + cbiom_table (1:nveg) = cbiom (1:nveg) xl_table (1:nveg) = xl (1:nveg) cwpvt_table (1:nveg) = cwpvt (1:nveg) c3psn_table (1:nveg) = c3psn (1:nveg) diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index aad0d1ca5..6831d17a2 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -1340,6 +1340,7 @@ subroutine transfer_mp_parameters (vegtype,soiltype,slopetype, & parameters%rc = rc_table(vegtype) !tree crown radius (m) parameters%mfsno = mfsno_table(vegtype) !snowmelt m parameter () parameters%scffac = scffac_table(vegtype) !snow cover factor + parameters%cbiom = cbiom_table(vegtype) !canopy biomass heat capacity parameter (m) parameters%saim = saim_table(vegtype,:) !monthly stem area index, one-sided parameters%laim = laim_table(vegtype,:) !monthly leaf area index, one-sided parameters%sla = sla_table(vegtype) !single-side leaf area per kg [m2/kg] diff --git a/physics/noahmptable.tbl b/physics/noahmptable.tbl index add1737be..3ffd5b532 100644 --- a/physics/noahmptable.tbl +++ b/physics/noahmptable.tbl @@ -67,6 +67,7 @@ mfsno = 4.00, 3.00, 3.00, 3.00, 4.00, 4.00, 2.00, 2.00, 2.00, 2.00, 1.00, 1.00, 1.00, 1.00, 1.00, 3.00, 3.00, 3.00, 3.00, 3.50, 3.50, 3.50, 3.50, 2.50, 3.50, 3.50, 3.50, ! c. he 12/17/2020: optimized snow cover factor (m) in scf formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with snotel swe and modis scf, surface albedo scffac= 0.042, 0.014, 0.014, 0.014, 0.026, 0.026, 0.020, 0.018, 0.016, 0.020, 0.008, 0.008, 0.008, 0.008, 0.008, 0.030, 0.020, 0.020, 0.016, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, + cbiom = 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, ! row 1: vis ! row 2: near ir @@ -228,6 +229,8 @@ ! c. he 12/17/2020: optimized snow cover factor (m) in scf formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with snotel swe and modis scf, surface albedo ! scffac = 0.008, 0.008, 0.008, 0.008, 0.008, 0.016, 0.016, 0.020, 0.020, 0.020, 0.020, 0.014, 0.042, 0.026, 0.030, 0.016, 0.030, 0.030, 0.030, 0.030, scffac = 0.005, 0.005, 0.005, 0.005, 0.005, 0.008, 0.008, 0.010, 0.010, 0.010, 0.010, 0.007, 0.021, 0.013, 0.015, 0.008, 0.015, 0.015, 0.015, 0.015, + cbiom = 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, + ! row 1: vis ! row 2: near ir rhol_vis=0.07, 0.10, 0.07, 0.10, 0.10, 0.07, 0.07, 0.07, 0.10, 0.11, 0.105, 0.11, 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, From 6ab1b969002d265d0a82acd5f2fb261a390d3633 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 18:19:41 -0400 Subject: [PATCH 30/48] add two changes missed in previous update --- physics/module_sf_noahmplsm.F90 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 336ae5a26..67e24091e 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -9103,7 +9103,8 @@ subroutine groundwater(parameters,nsnow ,nsoil ,dt ,sice ,zsoil , & !in fff = parameters%bexp(iwt) / 3.0 ! calibratable, c.he changed based on gy niu's update rsbmx = hk(iwt) * 1.0e3 * exp(3.0) ! mm/s, calibratable, c.he changed based on gy niu's update - qdis = (1.0-fcrmax)*rsbmx*exp(-parameters%timean)*exp(-fff*(zwt-2.0)) +! qdis = (1.0-fcrmax)*rsbmx*exp(-parameters%timean)*exp(-fff*(zwt-2.0)) + qdis = (1.0-fcrmax)*rsbmx*exp(-parameters%timean)*exp(-fff*zwt) ! c.he changed based on gy niu's update ! matric potential at the layer above the water table @@ -9114,7 +9115,9 @@ subroutine groundwater(parameters,nsnow ,nsoil ,dt ,sice ,zsoil , & !in ! recharge rate qin to groundwater - ka = hk(iwt) +! ka = hk(iwt) +! harmonic average, c.he changed based on gy niu's update + ka = 2.0*(hk(iwt)*parameters%dksat(iwt)*1.0e3) / (hk(iwt)+parameters%dksat(iwt)*1.0e3) wh_zwt = - zwt * 1.e3 !(mm) wh = smpfz - znode(iwt)*1.e3 !(mm) From 36e389231736c27a322c52cb0f9b81c606210e74 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 18:25:07 -0400 Subject: [PATCH 31/48] fix inout on ustar in sfcdif 1 and 2 --- physics/module_sf_noahmp_glacier.F90 | 2 +- physics/module_sf_noahmplsm.F90 | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/physics/module_sf_noahmp_glacier.F90 b/physics/module_sf_noahmp_glacier.F90 index 7b7512fa4..492c4a50d 100644 --- a/physics/module_sf_noahmp_glacier.F90 +++ b/physics/module_sf_noahmp_glacier.F90 @@ -1583,7 +1583,7 @@ subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in #endif ! outputs - real (kind=kind_phys), intent(out) :: fv !< friction velocity (m/s) + real (kind=kind_phys), intent(inout) :: fv !< friction velocity (m/s) real (kind=kind_phys), intent(out) :: cm !< drag coefficient for momentum real (kind=kind_phys), intent(out) :: ch !< drag coefficient for heat real (kind=kind_phys), intent(out) :: ch2 !< drag coefficient for heat diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 67e24091e..6c199531d 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -5084,7 +5084,7 @@ subroutine sfcdif1(parameters,iter ,sfctmp ,rhoair ,h ,qair , & !in real (kind=kind_phys), intent(out) :: cm !< drag coefficient for momentum real (kind=kind_phys), intent(out) :: ch !< drag coefficient for heat - real (kind=kind_phys), intent(out) :: fv !< friction velocity (m/s) + real (kind=kind_phys), intent(inout) :: fv !< friction velocity (m/s) real (kind=kind_phys), intent(out) :: ch2 !< drag coefficient for heat ! locals @@ -5239,7 +5239,7 @@ subroutine sfcdif2(parameters,iter ,z0 ,thz0 ,thlm ,sfcspd , & !in real (kind=kind_phys), intent(inout) :: akhs real (kind=kind_phys), intent(inout) :: rlmo real (kind=kind_phys), intent(inout) :: wstar2 - real (kind=kind_phys), intent(out) :: ustar + real (kind=kind_phys), intent(inout) :: ustar real (kind=kind_phys) zz, pslmu, pslms, pslhu, pslhs real (kind=kind_phys) xx, pspmu, yy, pspms, psphu, psphs From 2fc95fef3e35dcd114c323c214fedc014845d54d Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Mon, 1 May 2023 18:29:46 -0400 Subject: [PATCH 32/48] remove zvfun and gdx effect from sfcdif3 --- physics/module_sf_noahmplsm.F90 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 6c199531d..1888a26e8 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -5501,6 +5501,9 @@ subroutine sfcdif3(parameters,iloc ,jloc ,iter ,sfctmp ,qair ,ur tem2 = max(fveg, 0.1_kind_phys) zvfun1 = sqrt(tem1 * tem2) gdx = sqrt(garea1) + + gdx = 3000.0 ! this will remove gdx effect + zvfun1 = 1.0 ! this will remove zvfun effect if(thsfc_loc) then ! Use local potential temperature tvs = tgb * virtfac From 668e15a5ce9b9730e11846a023012b3b58bb757d Mon Sep 17 00:00:00 2001 From: Dan Kokron Date: Fri, 26 May 2023 13:52:12 +0000 Subject: [PATCH 33/48] Increase optimization for ugwp_driver_v0.F --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 950bd048e..c109093a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,6 +166,12 @@ if(${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels/mo_gas_optics_k APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PHYSICS} -O1") endif() +# Increase optimization for ugwp_driver_v0.F +if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/ugwp_driver_v0.F + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PHYSICS} -fp-model=fast -fprotect-parens -fimf-precision=high") +endif() + #------------------------------------------------------------------------------ add_library(ccpp_physics STATIC ${SCHEMES} ${SCHEMES_OPENMP_OFF} ${SCHEMES_DYNAMICS} ${CAPS}) From b4e5499590d46a9c80b764755cb4792317f41cbb Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Wed, 31 May 2023 16:22:05 -0500 Subject: [PATCH 34/48] Add new namelist parameters to documentation for NSSL microphysics; minor naming tweak for these parameters in the code. --- physics/docs/pdftxt/suite_input.nml.txt | 3 +++ physics/module_mp_nssl_2mom.F90 | 2 +- physics/mp_nssl.F90 | 8 ++++---- physics/mp_nssl.meta | 4 ++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index f37383f24..093e38797 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -394,11 +394,14 @@ show some variables in the namelist that must match the SDF. cnvcld see \a GFS_typedefs.F90 flag for convective cloud .false. lgfdlmprad gfs_rrtmg_pre flag for GFDL mp scheme and radiation consistency .false. nssl_cccn mp_nssl CCN concentration (m^-3) 0.6e9 +nssl_alphar mp_nssl rain shape parameter 0.0 nssl_alphah mp_nssl graupel shape parameter 0.0 nssl_alphahl mp_nssl hail shape parameter 1.0 nssl_hail_on mp_nssl NSSL flag to activate the hail category .false. nssl_ccn_on mp_nssl NSSL flag to activate the CCN category .true. nssl_invertccn mp_nssl NSSL flag to treat CCN as activated or unactivated .true. +nssl_ehw0 mp_nssl NSSL graupel-droplet collection efficiency 0.9 +nssl_ehlw0 mp_nssl NSSL hail-droplet collection efficiency 0.9 \b Parameters \b related \b to \b gravity \b drag \b scheme \b options knob_ugwp_version cires_ugwp parameter selects a version of the UGWP implementation in FV3GFS-127L \n
    diff --git a/physics/module_mp_nssl_2mom.F90 b/physics/module_mp_nssl_2mom.F90 index d190e94b4..409bf4019 100644 --- a/physics/module_mp_nssl_2mom.F90 +++ b/physics/module_mp_nssl_2mom.F90 @@ -1228,7 +1228,7 @@ SUBROUTINE nssl_2mom_init( & rho_qh = nssl_params(8) rho_qhl = nssl_params(9) rho_qs = nssl_params(10) - alphar = nssl_params(14) + alphar = nssl_params(15) ! ipelec = Nint(nssl_params(11)) ! isaund = Nint(nssl_params(12)) diff --git a/physics/mp_nssl.F90 b/physics/mp_nssl.F90 index 4e0e323ce..59ca877fa 100644 --- a/physics/mp_nssl.F90 +++ b/physics/mp_nssl.F90 @@ -31,7 +31,7 @@ subroutine mp_nssl_init(ncol, nlev, errflg, errmsg, threads, restart, & con_t0c, con_cliq, con_csol, con_eps, & imp_physics, imp_physics_nssl, & nssl_cccn, nssl_alphah, nssl_alphahl, & - nssl_alphar, nssl_ehw0_in, nssl_ehlw0_in, & + nssl_alphar, nssl_ehw0, nssl_ehlw0, & nssl_ccn_on, nssl_hail_on, nssl_invertccn ) @@ -53,7 +53,7 @@ subroutine mp_nssl_init(ncol, nlev, errflg, errmsg, threads, restart, & integer, intent(in) :: imp_physics integer, intent(in) :: imp_physics_nssl real(kind_phys), intent(in) :: nssl_cccn, nssl_alphah, nssl_alphahl - real(kind_phys), intent(in) :: nssl_alphar, nssl_ehw0_in, nssl_ehlw0_in + real(kind_phys), intent(in) :: nssl_alphar, nssl_ehw0, nssl_ehlw0 logical, intent(in) :: nssl_ccn_on, nssl_hail_on, nssl_invertccn ! Local variables: dimensions used in nssl_init @@ -117,7 +117,7 @@ subroutine mp_nssl_init(ncol, nlev, errflg, errmsg, threads, restart, & nssl_params(11) = 0 ! nssl_ipelec_tmp nssl_params(12) = 11 ! nssl_isaund nssl_params(13) = 0 ! 1= turn on cccna; 0 = turn off - nssl_params(14) = nssl_alphar + nssl_params(15) = nssl_alphar nssl_qccn = nssl_cccn/1.225 ! if (mpirank==mpiroot) then @@ -132,7 +132,7 @@ subroutine mp_nssl_init(ncol, nlev, errflg, errmsg, threads, restart, & ! write(0,*) 'call nssl_2mom_init' CALL nssl_2mom_init(ims,ime, jms,jme, kms,kme,nssl_params,ipctmp=5,mixphase=0, & - ihvol=ihailv,nssl_ehw0=nssl_ehw0_in,nssl_ehlw0=nssl_ehlw0_in,errmsg=errmsg,errflg=errflg,myrank=mpirank,mpiroot=mpiroot) + ihvol=ihailv,nssl_ehw0=nssl_ehw0,nssl_ehlw0=nssl_ehlw0,errmsg=errmsg,errflg=errflg,myrank=mpirank,mpiroot=mpiroot) ! For restart runs, the init is done here if (restart) then diff --git a/physics/mp_nssl.meta b/physics/mp_nssl.meta index c7e398f0a..6bbf92c73 100644 --- a/physics/mp_nssl.meta +++ b/physics/mp_nssl.meta @@ -173,7 +173,7 @@ type = real kind = kind_phys intent = in -[nssl_ehw0_in] +[nssl_ehw0] standard_name = nssl_graupel_collection_efficiency long_name = graupel droplet collection efficiency in NSSL microphysics scheme units = none @@ -181,7 +181,7 @@ type = real kind = kind_phys intent = in -[nssl_ehlw0_in] +[nssl_ehlw0] standard_name = nssl_hail_collection_efficiency long_name = hail droplet collection efficiency in NSSL microphysics scheme units = none From ec589d1467fe1b34a846f09f5b5cb596998a3603 Mon Sep 17 00:00:00 2001 From: Michael Barlage Date: Fri, 2 Jun 2023 14:32:29 +0000 Subject: [PATCH 35/48] multiply canopy heat by fveg to conform to solution assumption --- physics/module_sf_noahmplsm.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 1888a26e8..7813130b6 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -4246,7 +4246,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & end if ! canopy heat capacity - hcv = parameters%cbiom*vaie*cwat + canliq*cwat/denh2o + canice*cice/denice !j/m2/k + hcv = fveg*(parameters%cbiom*vaie*cwat + canliq*cwat/denh2o + canice*cice/denice) !j/m2/k b = sav-irc-shc-evc-tr+pahv !additional w/m2 ! a = fveg*(4.*cir*tv**3 + csh + (cev+ctr)*destv) !volumetric heat capacity From 53c8b9c73328877087dcb0bf66047e364a05dcb5 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Fri, 2 Jun 2023 10:08:46 -0500 Subject: [PATCH 36/48] Clarify that 'shape parameter' is 'PSD shape parameter' --- physics/docs/pdftxt/suite_input.nml.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index 093e38797..be3785b74 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -394,9 +394,9 @@ show some variables in the namelist that must match the SDF. cnvcld see \a GFS_typedefs.F90 flag for convective cloud .false. lgfdlmprad gfs_rrtmg_pre flag for GFDL mp scheme and radiation consistency .false. nssl_cccn mp_nssl CCN concentration (m^-3) 0.6e9 -nssl_alphar mp_nssl rain shape parameter 0.0 -nssl_alphah mp_nssl graupel shape parameter 0.0 -nssl_alphahl mp_nssl hail shape parameter 1.0 +nssl_alphar mp_nssl rain PSD shape parameter 0.0 +nssl_alphah mp_nssl graupel PSD shape parameter 0.0 +nssl_alphahl mp_nssl hail PSD shape parameter 1.0 nssl_hail_on mp_nssl NSSL flag to activate the hail category .false. nssl_ccn_on mp_nssl NSSL flag to activate the CCN category .true. nssl_invertccn mp_nssl NSSL flag to treat CCN as activated or unactivated .true. From 5e7c2837c66c0ea3863bff8cf733c5a3fb52c0d4 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Mon, 5 Jun 2023 11:11:31 -0400 Subject: [PATCH 37/48] update .github/workflows/ci_fv3_ccpp_prebuild.yml --- .github/workflows/ci_fv3_ccpp_prebuild.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci_fv3_ccpp_prebuild.yml b/.github/workflows/ci_fv3_ccpp_prebuild.yml index b23c9977e..b042db2a6 100644 --- a/.github/workflows/ci_fv3_ccpp_prebuild.yml +++ b/.github/workflows/ci_fv3_ccpp_prebuild.yml @@ -24,7 +24,7 @@ jobs: run: echo "GIT_REMOTE_HASH=`git rev-parse HEAD`" >> $GITHUB_ENV - name: Checkout latest fv3atm - run: git clone https://github.com/NCAR/fv3atm.git + run: git clone https://github.com/NOAA-EMC/fv3atm.git - name: Initialize submodules run: | @@ -53,4 +53,4 @@ jobs: run: | cd /home/runner/work/ccpp-physics/ccpp-physics/fv3atm/ccpp/ mkdir -p /home/runner/work/ccpp-physics/ccpp-physics/fv3atm/bin/ccpp/physics/physics/ - ./framework/scripts/ccpp_prebuild.py --config config/ccpp_prebuild_config.py \ No newline at end of file + ./framework/scripts/ccpp_prebuild.py --config config/ccpp_prebuild_config.py From 363c82cf4a4759387909dafec6a14d0fff622e1c Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Mon, 5 Jun 2023 14:59:05 -0400 Subject: [PATCH 38/48] addressing comments from reviewers --- .github/workflows/ci_fv3_ccpp_prebuild.yml | 2 +- physics/GFS_phys_time_vary.fv3.F90 | 1 - physics/module_sf_noahmp_glacier.F90 | 5 +- physics/module_sf_noahmplsm.F90 | 35 +- physics/noahmp_tables.f90 | 537 +++++++++++---------- physics/noahmpdrv.F90 | 2 +- physics/sfcsub.F | 2 +- 7 files changed, 306 insertions(+), 278 deletions(-) diff --git a/.github/workflows/ci_fv3_ccpp_prebuild.yml b/.github/workflows/ci_fv3_ccpp_prebuild.yml index b042db2a6..a5c2f8092 100644 --- a/.github/workflows/ci_fv3_ccpp_prebuild.yml +++ b/.github/workflows/ci_fv3_ccpp_prebuild.yml @@ -53,4 +53,4 @@ jobs: run: | cd /home/runner/work/ccpp-physics/ccpp-physics/fv3atm/ccpp/ mkdir -p /home/runner/work/ccpp-physics/ccpp-physics/fv3atm/bin/ccpp/physics/physics/ - ./framework/scripts/ccpp_prebuild.py --config config/ccpp_prebuild_config.py + ./framework/scripts/ccpp_prebuild.py --config config/ccpp_prebuild_config.py \ No newline at end of file diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index 641f399df..67fec5ca1 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -164,7 +164,6 @@ subroutine GFS_phys_time_vary_init ( real(kind_phys), intent(inout) :: tsnoxy (:,lsnow_lsm_lbound:) real(kind_phys), intent(inout) :: smoiseq(:,:) real(kind_phys), intent(inout) :: zsnsoxy(:,lsnow_lsm_lbound:) - real(kind_phys), intent(inout) :: slc(:,:) real(kind_phys), intent(inout) :: smc(:,:) real(kind_phys), intent(inout) :: stc(:,:) diff --git a/physics/module_sf_noahmp_glacier.F90 b/physics/module_sf_noahmp_glacier.F90 index 492c4a50d..7822ead30 100644 --- a/physics/module_sf_noahmp_glacier.F90 +++ b/physics/module_sf_noahmp_glacier.F90 @@ -2603,6 +2603,7 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in ! local integer :: iz real (kind=kind_phys) :: bdsnow !< bulk density of snow (kg/m3) + real (kind=kind_phys),parameter :: mwd = 100. !< maximum water depth (mm) ! ---------------------------------------------------------------------- snoflow = 0.0 ponding1 = 0.0 @@ -2646,9 +2647,9 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in !to obtain equilibrium state of snow in glacier region - if(sneqv > 100.) then ! 100 mm -> maximum water depth + if(sneqv > mwd) then ! 100 mm -> maximum water depth bdsnow = snice(0) / dzsnso(0) - snoflow = (sneqv - 100.) + snoflow = (sneqv - mwd) snice(0) = snice(0) - snoflow dzsnso(0) = dzsnso(0) - snoflow/bdsnow snoflow = snoflow / dt diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 7813130b6..ff49a41cd 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -5529,7 +5529,6 @@ subroutine gfs_stability & ! UTN (Unstable Tech Note) : NCEP Office Note 356 ! STN (Stable Tech Note) : NCEP Office Note 321 -integer, parameter :: kp = kind_phys real (kind=kind_phys), parameter :: ca=0.4_kind_phys ! ca - von karman constant real(kind=kind_phys), intent(in) :: z1 ! height model level @@ -5626,14 +5625,14 @@ subroutine gfs_stability & ! compute stability indices (rb and hlinf) dtv = thv1 - tvs - adtv = max(abs(dtv),0.001_kp) - dtv = sign(1.0_kp,dtv) * adtv + adtv = max(abs(dtv),0.001_kind_phys) + dtv = sign(1.0_kind_phys,dtv) * adtv if(thsfc_loc) then ! Use local potential temperature - rb = max(-5000.0_kp, (grav+grav) * dtv * z1 & + rb = max(-5000.0_kind_phys, (grav+grav) * dtv * z1 & / ((thv1 + tvs) * wind * wind)) else ! Use potential temperature referenced to 1000 hPa - rb = max(-5000.0_kp, grav * dtv * z1 & + rb = max(-5000.0_kind_phys, grav * dtv * z1 & / (tv1 * wind * wind)) endif @@ -5641,8 +5640,8 @@ subroutine gfs_stability & tem2 = one / ztmax ! 1/z0t fm = log((z0max+z1) * tem1) ! neutral phi_m fh = log((ztmax+z1) * tem2) ! neutral phi_h - fm10 = log((z0max+10.0_kp) * tem1) ! neutral phi_m at 10 meters - fh2 = log((ztmax+2.0_kp) * tem2) ! neutral phi_h at 2 meters + fm10 = log((z0max+10.0_kind_phys) * tem1) ! neutral phi_m at 10 meters + fh2 = log((ztmax+2.0_kind_phys) * tem2) ! neutral phi_h at 2 meters hlinf = rb * fm * fm / fh ! z/L STN 2.7 hlinf = min(max(hlinf,zolmin),zolmax) ! z/L, xi in STN/UTN ! @@ -5650,7 +5649,7 @@ subroutine gfs_stability & ! if (dtv >= zero) then hl1 = hlinf ! z/L, xi in STN - if(hlinf > 0.25_kp) then ! z/L > 0.25, do two iterations + if(hlinf > 0.25_kind_phys) then ! z/L > 0.25, do two iterations tem1 = hlinf * z1i ! 1/L hl0inf = z0max * tem1 ! z0m/z1, zi_0 in STN hltinf = ztmax * tem1 ! z0t/z1, zi_0 in STN @@ -5677,7 +5676,7 @@ subroutine gfs_stability & bb0 = sqrt(one + alpha4 * hlt) ! sqrt term of STN 2.16 with z0t pm = aa0 - aa + log( (one+aa)/(one+aa0) ) ! psi_m STN 3.11 ph = bb0 - bb + log( (one+bb)/(one+bb0) ) ! psi_h STN 3.11 - hl110 = hl1 * 10.0_kp * z1i ! 10/L + hl110 = hl1 * 10.0_kind_phys * z1i ! 10/L aa = sqrt(one + alpha4 * hl110) ! sqrt term of STN 2.16 with z=10m pm10 = aa0 - aa + log( (one+aa)/(one+aa0) ) ! psi_m STN 3.11 with z=10m hl12 = (hl1+hl1) * z1i ! 2/L @@ -5691,7 +5690,7 @@ subroutine gfs_stability & else ! dtv < 0 case olinf = z1 / hlinf ! z/L, xi in UTN - tem1 = 50.0_kp * z0max ! 50 * z0m, z/L limit for calc methods, see UTN Sec. E + tem1 = 50.0_kind_phys * z0max ! 50 * z0m, z/L limit for calc methods, see UTN Sec. E if(abs(olinf) <= tem1) then ! hlinf = -z1 / tem1 ! hlinf = max(hlinf, zolmin) @@ -5699,23 +5698,23 @@ subroutine gfs_stability & ! ! get pm and ph ! - if (hlinf >= -0.5_kp) then + if (hlinf >= -0.5_kind_phys) then hl1 = hlinf pm = (a0 + a1*hl1) * hl1 / (one+ (b1+b2*hl1) *hl1) ! psi_m UTN 2.37 ph = (a0p + a1p*hl1) * hl1 / (one+ (b1p+b2p*hl1)*hl1) ! psi_h UTN 2.38 - hl110 = hl1 * 10.0_kp * z1i ! 10/L + hl110 = hl1 * 10.0_kind_phys * z1i ! 10/L pm10 = (a0 + a1*hl110) * hl110/(one+(b1+b2*hl110)*hl110) ! psi_m UTN 2.37 with z=10m hl12 = (hl1+hl1) * z1i ! 2/L ph2 = (a0p + a1p*hl12) * hl12/(one+(b1p+b2p*hl12)*hl12) ! psi_h UTN 2.38 with z=2m else ! z/L < -0.5 hl1 = -hlinf ! -z/L tem1 = one / sqrt(hl1) ! sqrt(-z/L) - pm = log(hl1) + 2.0_kp * sqrt(tem1) - 0.8776_kp ! UTN 2.64, first three terms - ph = log(hl1) + 0.5_kp * tem1 + 1.386_kp ! UTN 2.65, first three terms - hl110 = hl1 * 10.0_kp * z1i ! 10/L - pm10 = log(hl110) + 2.0_kp/sqrt(sqrt(hl110)) - 0.8776_kp ! psi_m UTN 2.64 with z=10m + pm = log(hl1) + 2.0_kind_phys * sqrt(tem1) - 0.8776_kind_phys ! UTN 2.64, first three terms + ph = log(hl1) + 0.5_kind_phys * tem1 + 1.386_kind_phys ! UTN 2.65, first three terms + hl110 = hl1 * 10.0_kind_phys * z1i ! 10/L + pm10 = log(hl110) + 2.0_kind_phys/sqrt(sqrt(hl110)) - 0.8776_kind_phys ! psi_m UTN 2.64 with z=10m hl12 = (hl1+hl1) * z1i ! 2/L - ph2 = log(hl12) + 0.5_kp / sqrt(hl12) + 1.386_kp ! psi_h UTN 2.65 with z=2m + ph2 = log(hl12) + 0.5_kind_phys / sqrt(hl12) + 1.386_kind_phys ! psi_h UTN 2.65 with z=2m endif endif ! end of if (dtv >= 0 ) then loop @@ -5728,7 +5727,7 @@ subroutine gfs_stability & fh2 = fh2 - ph2 ! phi_h at 2m cm = ca * ca / (fm * fm) ! momentum exchange coef = k^2/phi_m^2 ch = ca * ca / (fm * fh) ! heat exchange coef = k^2/phi_m/phi_h - tem1 = 0.00001_kp/z1 ! minimum exhange coef (?) + tem1 = 0.00001_kind_phys/z1 ! minimum exhange coef (?) cm = max(cm, tem1) ch = max(ch, tem1) stress = cm * wind * wind ! surface stress = Cm*U*U diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index de207d0cc..3b06d7f53 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -8,7 +8,7 @@ !! only the data in the noah_mp_modis_parameters section of MPTABLE.TBL and the STAS section of !! SOILPARM.TBL are included in this module. module noahmp_tables - +use machine , only : kind_phys implicit none integer, private, parameter :: mvt = 30 ! use 30 instead of 27 @@ -39,219 +39,219 @@ module noahmp_tables integer :: lcz_9_table integer :: lcz_10_table integer :: lcz_11_table - real :: ch2op_table(mvt) !< maximum intercepted h2o per unit lai+sai (mm) - real :: dleaf_table(mvt) !< characteristic leaf dimension (m) - real :: z0mvt_table(mvt) !< momentum roughness length (m) - real :: hvt_table(mvt) !< top of canopy (m) - real :: hvb_table(mvt) !< bottom of canopy (m) - real :: z0mhvt_table(mvt) !< ratio of z0m to hvt - real :: den_table(mvt) !< tree density (no. of trunks per m2) - real :: rc_table(mvt) !< tree crown radius (m) - real :: mfsno_table(mvt) !< snowmelt curve parameter () - real :: scffac_table(mvt) !< snow cover factor (m) - real :: cbiom_table(mvt) !< canopy biomass heat capacity parameter (m) - real :: saim_table(mvt,12) !< monthly stem area index, one-sided - real :: laim_table(mvt,12) !< monthly leaf area index, one-sided - real :: sla_table(mvt) !< single-side leaf area per kg [m2/kg] - real :: dilefc_table(mvt) !< coeficient for leaf stress death [1/s] - real :: dilefw_table(mvt) !< coeficient for leaf stress death [1/s] - real :: fragr_table(mvt) !< fraction of growth respiration !original was 0.3 - real :: ltovrc_table(mvt) !< leaf turnover [1/s] - - real :: c3psn_table(mvt) !< photosynthetic pathway: 0. = c4, 1. = c3 - real :: kc25_table(mvt) !< co2 michaelis-menten constant at 25c (pa) - real :: akc_table(mvt) !< q10 for kc25 - real :: ko25_table(mvt) !< o2 michaelis-menten constant at 25c (pa) - real :: ako_table(mvt) !< q10 for ko25 - real :: vcmx25_table(mvt) !< maximum rate of carboxylation at 25c (umol co2/m**2/s) - real :: avcmx_table(mvt) !< q10 for vcmx25 - real :: bp_table(mvt) !< minimum leaf conductance (umol/m**2/s) - real :: mp_table(mvt) !< slope of conductance-to-photosynthesis relationship - real :: qe25_table(mvt) !< quantum efficiency at 25c (umol co2 / umo photon) - real :: aqe_table(mvt) !< q10 for qe25 - real :: rmf25_table(mvt) !< leaf maintenance respiration at 25c (umol co2/m**2/s) - real :: rms25_table(mvt) !< stem maintenance respiration at 25c (umol co2/kg bio/s) - real :: rmr25_table(mvt) !< root maintenance respiration at 25c (umol co2/kg bio/s) - real :: arm_table(mvt) !< q10 for maintenance respiration - real :: folnmx_table(mvt) !< foliage nitrogen concentration when f(n)=1 (%) - real :: tmin_table(mvt) !< minimum temperature for photosynthesis (k) - - real :: xl_table(mvt) !< leaf/stem orientation index - real :: rhol_table(mvt,mband) !< leaf reflectance: 1=vis, 2=nir - real :: rhos_table(mvt,mband) !< stem reflectance: 1=vis, 2=nir - real :: taul_table(mvt,mband) !< leaf transmittance: 1=vis, 2=nir - real :: taus_table(mvt,mband) !< stem transmittance: 1=vis, 2=nir - - real :: mrp_table(mvt) !< microbial respiration parameter (umol co2 /kg c/ s) - real :: cwpvt_table(mvt) !< empirical canopy wind parameter - - real :: wrrat_table(mvt) !< wood to non-wood ratio - real :: wdpool_table(mvt) !< wood pool (switch 1 or 0) depending on woody or not [-] - real :: tdlef_table(mvt) !< characteristic t for leaf freezing [k] - - real :: nroot_table(mvt) !< number of soil layers with root present - real :: rgl_table(mvt) !< parameter used in radiation stress function - real :: rs_table(mvt) !< minimum stomatal resistance [s m-1] - real :: hs_table(mvt) !< parameter used in vapor pressure deficit function - real :: topt_table(mvt) !< optimum transpiration air temperature [k] - real :: rsmax_table(mvt) !< maximal stomatal resistance [s m-1] + real (kind=kind_phys) :: ch2op_table(mvt) !< maximum intercepted h2o per unit lai+sai (mm) + real (kind=kind_phys) :: dleaf_table(mvt) !< characteristic leaf dimension (m) + real (kind=kind_phys) :: z0mvt_table(mvt) !< momentum roughness length (m) + real (kind=kind_phys) :: hvt_table(mvt) !< top of canopy (m) + real (kind=kind_phys) :: hvb_table(mvt) !< bottom of canopy (m) + real (kind=kind_phys) :: z0mhvt_table(mvt) !< ratio of z0m to hvt + real (kind=kind_phys) :: den_table(mvt) !< tree density (no. of trunks per m2) + real (kind=kind_phys) :: rc_table(mvt) !< tree crown radius (m) + real (kind=kind_phys) :: mfsno_table(mvt) !< snowmelt curve parameter () + real (kind=kind_phys) :: scffac_table(mvt) !< snow cover factor (m) + real (kind=kind_phys) :: cbiom_table(mvt) !< canopy biomass heat capacity parameter (m) + real (kind=kind_phys) :: saim_table(mvt,12) !< monthly stem area index, one-sided + real (kind=kind_phys) :: laim_table(mvt,12) !< monthly leaf area index, one-sided + real (kind=kind_phys) :: sla_table(mvt) !< single-side leaf area per kg [m2/kg] + real (kind=kind_phys) :: dilefc_table(mvt) !< coeficient for leaf stress death [1/s] + real (kind=kind_phys) :: dilefw_table(mvt) !< coeficient for leaf stress death [1/s] + real (kind=kind_phys) :: fragr_table(mvt) !< fraction of growth respiration !original was 0.3 + real (kind=kind_phys) :: ltovrc_table(mvt) !< leaf turnover [1/s] + + real (kind=kind_phys) :: c3psn_table(mvt) !< photosynthetic pathway: 0. = c4, 1. = c3 + real (kind=kind_phys) :: kc25_table(mvt) !< co2 michaelis-menten constant at 25c (pa) + real (kind=kind_phys) :: akc_table(mvt) !< q10 for kc25 + real (kind=kind_phys) :: ko25_table(mvt) !< o2 michaelis-menten constant at 25c (pa) + real (kind=kind_phys) :: ako_table(mvt) !< q10 for ko25 + real (kind=kind_phys) :: vcmx25_table(mvt) !< maximum rate of carboxylation at 25c (umol co2/m**2/s) + real (kind=kind_phys) :: avcmx_table(mvt) !< q10 for vcmx25 + real (kind=kind_phys) :: bp_table(mvt) !< minimum leaf conductance (umol/m**2/s) + real (kind=kind_phys) :: mp_table(mvt) !< slope of conductance-to-photosynthesis relationship + real (kind=kind_phys) :: qe25_table(mvt) !< quantum efficiency at 25c (umol co2 / umo photon) + real (kind=kind_phys) :: aqe_table(mvt) !< q10 for qe25 + real (kind=kind_phys) :: rmf25_table(mvt) !< leaf maintenance respiration at 25c (umol co2/m**2/s) + real (kind=kind_phys) :: rms25_table(mvt) !< stem maintenance respiration at 25c (umol co2/kg bio/s) + real (kind=kind_phys) :: rmr25_table(mvt) !< root maintenance respiration at 25c (umol co2/kg bio/s) + real (kind=kind_phys) :: arm_table(mvt) !< q10 for maintenance respiration + real (kind=kind_phys) :: folnmx_table(mvt) !< foliage nitrogen concentration when f(n)=1 (%) + real (kind=kind_phys) :: tmin_table(mvt) !< minimum temperature for photosynthesis (k) + + real (kind=kind_phys) :: xl_table(mvt) !< leaf/stem orientation index + real (kind=kind_phys) :: rhol_table(mvt,mband) !< leaf reflectance: 1=vis, 2=nir + real (kind=kind_phys) :: rhos_table(mvt,mband) !< stem reflectance: 1=vis, 2=nir + real (kind=kind_phys) :: taul_table(mvt,mband) !< leaf transmittance: 1=vis, 2=nir + real (kind=kind_phys) :: taus_table(mvt,mband) !< stem transmittance: 1=vis, 2=nir + + real (kind=kind_phys) :: mrp_table(mvt) !< microbial respiration parameter (umol co2 /kg c/ s) + real (kind=kind_phys) :: cwpvt_table(mvt) !< empirical canopy wind parameter + + real (kind=kind_phys) :: wrrat_table(mvt) !< wood to non-wood ratio + real (kind=kind_phys) :: wdpool_table(mvt) !< wood pool (switch 1 or 0) depending on woody or not [-] + real (kind=kind_phys) :: tdlef_table(mvt) !< characteristic t for leaf freezing [k] + + real (kind=kind_phys) :: nroot_table(mvt) !< number of soil layers with root present + real (kind=kind_phys) :: rgl_table(mvt) !< parameter used in radiation stress function + real (kind=kind_phys) :: rs_table(mvt) !< minimum stomatal resistance [s m-1] + real (kind=kind_phys) :: hs_table(mvt) !< parameter used in vapor pressure deficit function + real (kind=kind_phys) :: topt_table(mvt) !< optimum transpiration air temperature [k] + real (kind=kind_phys) :: rsmax_table(mvt) !< maximal stomatal resistance [s m-1] ! soilparm.tbl parameters integer :: slcats - real :: bexp_table(max_soiltyp) - real :: smcdry_table(max_soiltyp) - real :: f1_table(max_soiltyp) - real :: smcmax_table(max_soiltyp) - real :: smcref_table(max_soiltyp) - real :: psisat_table(max_soiltyp) - real :: dksat_table(max_soiltyp) - real :: dwsat_table(max_soiltyp) - real :: smcwlt_table(max_soiltyp) - real :: quartz_table(max_soiltyp) - real :: bvic_table(max_soiltyp) !vic model infiltration parameter (-) for opt_run=6 - real :: axaj_table(max_soiltyp) !Xinanjiang: Tension water distribution inflection parameter [-] for opt_run=7 - real :: bxaj_table(max_soiltyp) !Xinanjiang: Tension water distribution shape parameter [-] for opt_run=7 - real :: xxaj_table(max_soiltyp) !Xinanjiang: Free water distribution shape parameter [-] for opt_run=7 - real :: bdvic_table(max_soiltyp) !VIC model infiltration parameter (-) - real :: gdvic_table(max_soiltyp) !mean capilary drive (m) - real :: bbvic_table(max_soiltyp) !heterogeniety parameter for DVIC infiltration [-] + real (kind=kind_phys) :: bexp_table(max_soiltyp) + real (kind=kind_phys) :: smcdry_table(max_soiltyp) + real (kind=kind_phys) :: f1_table(max_soiltyp) + real (kind=kind_phys) :: smcmax_table(max_soiltyp) + real (kind=kind_phys) :: smcref_table(max_soiltyp) + real (kind=kind_phys) :: psisat_table(max_soiltyp) + real (kind=kind_phys) :: dksat_table(max_soiltyp) + real (kind=kind_phys) :: dwsat_table(max_soiltyp) + real (kind=kind_phys) :: smcwlt_table(max_soiltyp) + real (kind=kind_phys) :: quartz_table(max_soiltyp) + real (kind=kind_phys) :: bvic_table(max_soiltyp) !vic model infiltration parameter (-) for opt_run=6 + real (kind=kind_phys) :: axaj_table(max_soiltyp) !Xinanjiang: Tension water distribution inflection parameter [-] for opt_run=7 + real (kind=kind_phys) :: bxaj_table(max_soiltyp) !Xinanjiang: Tension water distribution shape parameter [-] for opt_run=7 + real (kind=kind_phys) :: xxaj_table(max_soiltyp) !Xinanjiang: Free water distribution shape parameter [-] for opt_run=7 + real (kind=kind_phys) :: bdvic_table(max_soiltyp) !VIC model infiltration parameter (-) + real (kind=kind_phys) :: gdvic_table(max_soiltyp) !mean capilary drive (m) + real (kind=kind_phys) :: bbvic_table(max_soiltyp) !heterogeniety parameter for DVIC infiltration [-] ! genparm.tbl parameters - real :: slope_table(num_slope) !< slope factor for soil drainage + real (kind=kind_phys) :: slope_table(num_slope) !< slope factor for soil drainage - real :: csoil_table !< soil heat capacity [j m-3 k-1] - real :: refdk_table !< parameter in the surface runoff parameterization - real :: refkdt_table !< parameter in the surface runoff parameterization - real :: frzk_table !< frozen ground parameter - real :: zbot_table !< depth [m] of lower boundary soil temperature - real :: czil_table !< parameter used in the calculation of the roughness length for heat + real (kind=kind_phys) :: csoil_table !< soil heat capacity [j m-3 k-1] + real (kind=kind_phys) :: refdk_table !< parameter in the surface runoff parameterization + real (kind=kind_phys) :: refkdt_table !< parameter in the surface runoff parameterization + real (kind=kind_phys) :: frzk_table !< frozen ground parameter + real (kind=kind_phys) :: zbot_table !< depth [m] of lower boundary soil temperature + real (kind=kind_phys) :: czil_table !< parameter used in the calculation of the roughness length for heat ! mptable.tbl radiation parameters - real :: albsat_table(msc,mband) !< saturated soil albedos: 1=vis, 2=nir - real :: albdry_table(msc,mband) !< dry soil albedos: 1=vis, 2=nir - real :: albice_table(mband) !< albedo land ice: 1=vis, 2=nir - real :: alblak_table(mband) !< albedo frozen lakes: 1=vis, 2=nir - real :: omegas_table(mband) !< two-stream parameter omega for snow - real :: betads_table !< two-stream parameter betad for snow - real :: betais_table !< two-stream parameter betad for snow - real :: eg_table(2) !< emissivity + real (kind=kind_phys) :: albsat_table(msc,mband) !< saturated soil albedos: 1=vis, 2=nir + real (kind=kind_phys) :: albdry_table(msc,mband) !< dry soil albedos: 1=vis, 2=nir + real (kind=kind_phys) :: albice_table(mband) !< albedo land ice: 1=vis, 2=nir + real (kind=kind_phys) :: alblak_table(mband) !< albedo frozen lakes: 1=vis, 2=nir + real (kind=kind_phys) :: omegas_table(mband) !< two-stream parameter omega for snow + real (kind=kind_phys) :: betads_table !< two-stream parameter betad for snow + real (kind=kind_phys) :: betais_table !< two-stream parameter betad for snow + real (kind=kind_phys) :: eg_table(2) !< emissivity ! mptable.tbl global parameters - real :: co2_table !< co2 partial pressure - real :: o2_table !< o2 partial pressure - real :: timean_table !< gridcell mean topgraphic index (global mean) - real :: fsatmx_table !< maximum surface saturated fraction (global mean) - real :: z0sno_table !< snow surface roughness length (m) (0.002) - real :: ssi_table !< liquid water holding capacity for snowpack (m3/m3) (0.03) - real :: snow_ret_fac_table !< snowpack water release timescale factor (1/s) - real :: snow_emis_table !< surface emissivity - real :: swemx_table !< new snow mass to fully cover old snow (mm) - real :: tau0_table !< tau0 from yang97 eqn. 10a - real :: grain_growth_table !< growth from vapor diffusion yang97 eqn. 10b - real :: extra_growth_table !< extra growth near freezing yang97 eqn. 10c - real :: dirt_soot_table !< dirt and soot term yang97 eqn. 10d - real :: bats_cosz_table !< zenith angle snow albedo adjustment; b in yang97 eqn. 15 - real :: bats_vis_new_table !< new snow visible albedo - real :: bats_nir_new_table !< new snow nir albedo - real :: bats_vis_age_table !< age factor for diffuse visible snow albedo yang97 eqn. 17 - real :: bats_nir_age_table !< age factor for diffuse nir snow albedo yang97 eqn. 18 - real :: bats_vis_dir_table !< cosz factor for direct visible snow albedo yang97 eqn. 15 - real :: bats_nir_dir_table !< cosz factor for direct nir snow albedo yang97 eqn. 16 - real :: rsurf_snow_table !< surface resistance for snow(s/m) - real :: rsurf_exp_table !< exponent in the shape parameter for soil resistance option 1 + real (kind=kind_phys) :: co2_table !< co2 partial pressure + real (kind=kind_phys) :: o2_table !< o2 partial pressure + real (kind=kind_phys) :: timean_table !< gridcell mean topgraphic index (global mean) + real (kind=kind_phys) :: fsatmx_table !< maximum surface saturated fraction (global mean) + real (kind=kind_phys) :: z0sno_table !< snow surface roughness length (m) (0.002) + real (kind=kind_phys) :: ssi_table !< liquid water holding capacity for snowpack (m3/m3) (0.03) + real (kind=kind_phys) :: snow_ret_fac_table !< snowpack water release timescale factor (1/s) + real (kind=kind_phys) :: snow_emis_table !< surface emissivity + real (kind=kind_phys) :: swemx_table !< new snow mass to fully cover old snow (mm) + real (kind=kind_phys) :: tau0_table !< tau0 from yang97 eqn. 10a + real (kind=kind_phys) :: grain_growth_table !< growth from vapor diffusion yang97 eqn. 10b + real (kind=kind_phys) :: extra_growth_table !< extra growth near freezing yang97 eqn. 10c + real (kind=kind_phys) :: dirt_soot_table !< dirt and soot term yang97 eqn. 10d + real (kind=kind_phys) :: bats_cosz_table !< zenith angle snow albedo adjustment; b in yang97 eqn. 15 + real (kind=kind_phys) :: bats_vis_new_table !< new snow visible albedo + real (kind=kind_phys) :: bats_nir_new_table !< new snow nir albedo + real (kind=kind_phys) :: bats_vis_age_table !< age factor for diffuse visible snow albedo yang97 eqn. 17 + real (kind=kind_phys) :: bats_nir_age_table !< age factor for diffuse nir snow albedo yang97 eqn. 18 + real (kind=kind_phys) :: bats_vis_dir_table !< cosz factor for direct visible snow albedo yang97 eqn. 15 + real (kind=kind_phys) :: bats_nir_dir_table !< cosz factor for direct nir snow albedo yang97 eqn. 16 + real (kind=kind_phys) :: rsurf_snow_table !< surface resistance for snow(s/m) + real (kind=kind_phys) :: rsurf_exp_table !< exponent in the shape parameter for soil resistance option 1 ! mptable.tbl irrigation parameters - real :: irr_frac_table ! irrigation Fraction + real (kind=kind_phys) :: irr_frac_table ! irrigation Fraction integer :: irr_har_table ! number of days before harvest date to stop irrigation - real :: irr_lai_table ! Minimum lai to trigger irrigation - real :: irr_mad_table ! management allowable deficit (0-1) - real :: filoss_table ! fraction of flood irrigation loss (0-1) - real :: sprir_rate_table ! mm/h, sprinkler irrigation rate - real :: micir_rate_table ! mm/h, micro irrigation rate - real :: firtfac_table ! flood application rate factor - real :: ir_rain_table ! maximum precipitation to stop irrigation trigger + real (kind=kind_phys) :: irr_lai_table ! Minimum lai to trigger irrigation + real (kind=kind_phys) :: irr_mad_table ! management allowable deficit (0-1) + real (kind=kind_phys) :: filoss_table ! fraction of flood irrigation loss (0-1) + real (kind=kind_phys) :: sprir_rate_table ! mm/h, sprinkler irrigation rate + real (kind=kind_phys) :: micir_rate_table ! mm/h, micro irrigation rate + real (kind=kind_phys) :: firtfac_table ! flood application rate factor + real (kind=kind_phys) :: ir_rain_table ! maximum precipitation to stop irrigation trigger ! mptable.tbl crop parameters integer :: default_crop_table ! Default crop index integer :: pltday_table(ncrop) !< planting date integer :: hsday_table(ncrop) !< harvest date - real :: plantpop_table(ncrop) !< plant density [per ha] - used? - real :: irri_table(ncrop) !< irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) - - real :: gddtbase_table(ncrop) !< base temperature for gdd accumulation [c] - real :: gddtcut_table(ncrop) !< upper temperature for gdd accumulation [c] - real :: gdds1_table(ncrop) !< gdd from seeding to emergence - real :: gdds2_table(ncrop) !< gdd from seeding to initial vegetative - real :: gdds3_table(ncrop) !< gdd from seeding to post vegetative - real :: gdds4_table(ncrop) !< gdd from seeding to intial reproductive - real :: gdds5_table(ncrop) !< gdd from seeding to pysical maturity - - real :: c3psni_table(ncrop) !photosynthetic pathway: 0. = c4, 1. = c3 ! Zhe Zhang 2020-07-03 - real :: kc25i_table(ncrop) !co2 michaelis-menten constant at 25c (pa) - real :: akci_table(ncrop) !q10 for kc25 - real :: ko25i_table(ncrop) !o2 michaelis-menten constant at 25c (pa) - real :: akoi_table(ncrop) !q10 for ko25 - real :: vcmx25i_table(ncrop) !maximum rate of carboxylation at 25c (umol co2/m**2/s) - real :: avcmxi_table(ncrop) !q10 for vcmx25 - real :: bpi_table(ncrop) !minimum leaf conductance (umol/m**2/s) - real :: mpi_table(ncrop) !slope of conductance-to-photosynthesis relationship - real :: qe25i_table(ncrop) !quantum efficiency at 25c (umol co2 / umol photon) - real :: folnmxi_table(ncrop) !foliage nitrogen concentration when + real (kind=kind_phys) :: plantpop_table(ncrop) !< plant density [per ha] - used? + real (kind=kind_phys) :: irri_table(ncrop) !< irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) + + real (kind=kind_phys) :: gddtbase_table(ncrop) !< base temperature for gdd accumulation [c] + real (kind=kind_phys) :: gddtcut_table(ncrop) !< upper temperature for gdd accumulation [c] + real (kind=kind_phys) :: gdds1_table(ncrop) !< gdd from seeding to emergence + real (kind=kind_phys) :: gdds2_table(ncrop) !< gdd from seeding to initial vegetative + real (kind=kind_phys) :: gdds3_table(ncrop) !< gdd from seeding to post vegetative + real (kind=kind_phys) :: gdds4_table(ncrop) !< gdd from seeding to intial reproductive + real (kind=kind_phys) :: gdds5_table(ncrop) !< gdd from seeding to pysical maturity + + real (kind=kind_phys) :: c3psni_table(ncrop) !photosynthetic pathway: 0. = c4, 1. = c3 ! Zhe Zhang 2020-07-03 + real (kind=kind_phys) :: kc25i_table(ncrop) !co2 michaelis-menten constant at 25c (pa) + real (kind=kind_phys) :: akci_table(ncrop) !q10 for kc25 + real (kind=kind_phys) :: ko25i_table(ncrop) !o2 michaelis-menten constant at 25c (pa) + real (kind=kind_phys) :: akoi_table(ncrop) !q10 for ko25 + real (kind=kind_phys) :: vcmx25i_table(ncrop) !maximum rate of carboxylation at 25c (umol co2/m**2/s) + real (kind=kind_phys) :: avcmxi_table(ncrop) !q10 for vcmx25 + real (kind=kind_phys) :: bpi_table(ncrop) !minimum leaf conductance (umol/m**2/s) + real (kind=kind_phys) :: mpi_table(ncrop) !slope of conductance-to-photosynthesis relationship + real (kind=kind_phys) :: qe25i_table(ncrop) !quantum efficiency at 25c (umol co2 / umol photon) + real (kind=kind_phys) :: folnmxi_table(ncrop) !foliage nitrogen concentration when integer :: c3c4_table(ncrop) !< photosynthetic pathway: 1. = c3 2. = c4 - real :: aref_table(ncrop) !< reference maximum co2 assimulation rate - real :: psnrf_table(ncrop) !< co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) - real :: i2par_table(ncrop) !< fraction of incoming solar radiation to photosynthetically active radiation - real :: tassim0_table(ncrop) !< minimum temperature for co2 assimulation [c] - real :: tassim1_table(ncrop) !< co2 assimulation linearly increasing until temperature reaches t1 [c] - real :: tassim2_table(ncrop) !< co2 assmilation rate remain at aref until temperature reaches t2 [c] - real :: k_table(ncrop) !< light extinction coefficient - real :: epsi_table(ncrop) !< initial light use efficiency - - real :: q10mr_table(ncrop) !< q10 for maintainance respiration - real :: foln_mx_table(ncrop) !< foliage nitrogen concentration when f(n)=1 (%) - real :: lefreez_table(ncrop) !< characteristic t for leaf freezing [k] - - real :: dile_fc_table(ncrop,nstage) !< coeficient for temperature leaf stress death [1/s] - real :: dile_fw_table(ncrop,nstage) !< coeficient for water leaf stress death [1/s] - real :: fra_gr_table(ncrop) !< fraction of growth respiration - - real :: lf_ovrc_table(ncrop,nstage) !< fraction of leaf turnover [1/s] - real :: st_ovrc_table(ncrop,nstage) !< fraction of stem turnover [1/s] - real :: rt_ovrc_table(ncrop,nstage) !< fraction of root tunrover [1/s] - real :: lfmr25_table(ncrop) !< leaf maintenance respiration at 25c [umol co2/m**2 /s] - real :: stmr25_table(ncrop) !< stem maintenance respiration at 25c [umol co2/kg bio/s] - real :: rtmr25_table(ncrop) !< root maintenance respiration at 25c [umol co2/kg bio/s] - real :: grainmr25_table(ncrop) !< grain maintenance respiration at 25c [umol co2/kg bio/s] - - real :: lfpt_table(ncrop,nstage) !< fraction of carbohydrate flux to leaf - real :: stpt_table(ncrop,nstage) !< fraction of carbohydrate flux to stem - real :: rtpt_table(ncrop,nstage) !< fraction of carbohydrate flux to root - real :: grainpt_table(ncrop,nstage) !< fraction of carbohydrate flux to grain - real :: lfct_table(ncrop,nstage) ! fraction of carbohydrate translocation from leaf to grain ! Zhe Zhang 2020-07-13 - real :: stct_table(ncrop,nstage) ! stem to grain - real :: rtct_table(ncrop,nstage) ! root to grain - real :: bio2lai_table(ncrop) !< leaf are per living leaf biomass [m^2/kg] + real (kind=kind_phys) :: aref_table(ncrop) !< reference maximum co2 assimulation rate + real (kind=kind_phys) :: psnrf_table(ncrop) !< co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) + real (kind=kind_phys) :: i2par_table(ncrop) !< fraction of incoming solar radiation to photosynthetically active radiation + real (kind=kind_phys) :: tassim0_table(ncrop) !< minimum temperature for co2 assimulation [c] + real (kind=kind_phys) :: tassim1_table(ncrop) !< co2 assimulation linearly increasing until temperature reaches t1 [c] + real (kind=kind_phys) :: tassim2_table(ncrop) !< co2 assmilation rate remain at aref until temperature reaches t2 [c] + real (kind=kind_phys) :: k_table(ncrop) !< light extinction coefficient + real (kind=kind_phys) :: epsi_table(ncrop) !< initial light use efficiency + + real (kind=kind_phys) :: q10mr_table(ncrop) !< q10 for maintainance respiration + real (kind=kind_phys) :: foln_mx_table(ncrop) !< foliage nitrogen concentration when f(n)=1 (%) + real (kind=kind_phys) :: lefreez_table(ncrop) !< characteristic t for leaf freezing [k] + + real (kind=kind_phys) :: dile_fc_table(ncrop,nstage) !< coeficient for temperature leaf stress death [1/s] + real (kind=kind_phys) :: dile_fw_table(ncrop,nstage) !< coeficient for water leaf stress death [1/s] + real (kind=kind_phys) :: fra_gr_table(ncrop) !< fraction of growth respiration + + real (kind=kind_phys) :: lf_ovrc_table(ncrop,nstage) !< fraction of leaf turnover [1/s] + real (kind=kind_phys) :: st_ovrc_table(ncrop,nstage) !< fraction of stem turnover [1/s] + real (kind=kind_phys) :: rt_ovrc_table(ncrop,nstage) !< fraction of root tunrover [1/s] + real (kind=kind_phys) :: lfmr25_table(ncrop) !< leaf maintenance respiration at 25c [umol co2/m**2 /s] + real (kind=kind_phys) :: stmr25_table(ncrop) !< stem maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: rtmr25_table(ncrop) !< root maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: grainmr25_table(ncrop) !< grain maintenance respiration at 25c [umol co2/kg bio/s] + + real (kind=kind_phys) :: lfpt_table(ncrop,nstage) !< fraction of carbohydrate flux to leaf + real (kind=kind_phys) :: stpt_table(ncrop,nstage) !< fraction of carbohydrate flux to stem + real (kind=kind_phys) :: rtpt_table(ncrop,nstage) !< fraction of carbohydrate flux to root + real (kind=kind_phys) :: grainpt_table(ncrop,nstage) !< fraction of carbohydrate flux to grain + real (kind=kind_phys) :: lfct_table(ncrop,nstage) ! fraction of carbohydrate translocation from leaf to grain ! Zhe Zhang 2020-07-13 + real (kind=kind_phys) :: stct_table(ncrop,nstage) ! stem to grain + real (kind=kind_phys) :: rtct_table(ncrop,nstage) ! root to grain + real (kind=kind_phys) :: bio2lai_table(ncrop) !< leaf are per living leaf biomass [m^2/kg] ! tile drainage parameters - real :: tdsmc_fac_table(max_soiltyp) - real :: td_dc_table(max_soiltyp) + real (kind=kind_phys) :: tdsmc_fac_table(max_soiltyp) + real (kind=kind_phys) :: td_dc_table(max_soiltyp) integer :: td_depth_table(max_soiltyp) integer :: drain_layer_opt_table - real :: td_dcoef_table(max_soiltyp) - real :: td_d_table(max_soiltyp) - real :: td_adepth_table(max_soiltyp) - real :: td_radi_table(max_soiltyp) - real :: td_spac_table(max_soiltyp) - real :: td_ddrain_table(max_soiltyp) - real :: klat_fac_table(max_soiltyp) + real (kind=kind_phys) :: td_dcoef_table(max_soiltyp) + real (kind=kind_phys) :: td_d_table(max_soiltyp) + real (kind=kind_phys) :: td_adepth_table(max_soiltyp) + real (kind=kind_phys) :: td_radi_table(max_soiltyp) + real (kind=kind_phys) :: td_spac_table(max_soiltyp) + real (kind=kind_phys) :: td_ddrain_table(max_soiltyp) + real (kind=kind_phys) :: klat_fac_table(max_soiltyp) ! mptable.tbl optional parameters @@ -259,60 +259,62 @@ module noahmp_tables ! Saxton and Rawls 2006 Pedo-transfer function coefficients !------------------------------------------------------------------------------ - real :: sr2006_theta_1500t_a !< sand coefficient - real :: sr2006_theta_1500t_b !< clay coefficient - real :: sr2006_theta_1500t_c !< orgm coefficient - real :: sr2006_theta_1500t_d !< sand*orgm coefficient - real :: sr2006_theta_1500t_e !< clay*orgm coefficient - real :: sr2006_theta_1500t_f !< sand*clay coefficient - real :: sr2006_theta_1500t_g !< constant adjustment - - real :: sr2006_theta_1500_a !< theta_1500t coefficient - real :: sr2006_theta_1500_b !< constant adjustment - - real :: sr2006_theta_33t_a !< sand coefficient - real :: sr2006_theta_33t_b !< clay coefficient - real :: sr2006_theta_33t_c !< orgm coefficient - real :: sr2006_theta_33t_d !< sand*orgm coefficient - real :: sr2006_theta_33t_e !< clay*orgm coefficient - real :: sr2006_theta_33t_f !< sand*clay coefficient - real :: sr2006_theta_33t_g !< constant adjustment - - real :: sr2006_theta_33_a !< theta_33t*theta_33t coefficient - real :: sr2006_theta_33_b !< theta_33t coefficient - real :: sr2006_theta_33_c !< constant adjustment - - real :: sr2006_theta_s33t_a !< sand coefficient - real :: sr2006_theta_s33t_b !< clay coefficient - real :: sr2006_theta_s33t_c !< orgm coefficient - real :: sr2006_theta_s33t_d !< sand*orgm coefficient - real :: sr2006_theta_s33t_e !< clay*orgm coefficient - real :: sr2006_theta_s33t_f !< sand*clay coefficient - real :: sr2006_theta_s33t_g !< constant adjustment - - real :: sr2006_theta_s33_a !< theta_s33t coefficient - real :: sr2006_theta_s33_b !< constant adjustment - - real :: sr2006_psi_et_a !< sand coefficient - real :: sr2006_psi_et_b !< clay coefficient - real :: sr2006_psi_et_c !< theta_s33 coefficient - real :: sr2006_psi_et_d !< sand*theta_s33 coefficient - real :: sr2006_psi_et_e !< clay*theta_s33 coefficient - real :: sr2006_psi_et_f !< sand*clay coefficient - real :: sr2006_psi_et_g !< constant adjustment - - real :: sr2006_psi_e_a !< psi_et*psi_et coefficient - real :: sr2006_psi_e_b !< psi_et coefficient - real :: sr2006_psi_e_c !< constant adjustment - - real :: sr2006_smcmax_a !< sand adjustment - real :: sr2006_smcmax_b !< constant adjustment + real (kind=kind_phys) :: sr2006_theta_1500t_a !< sand coefficient + real (kind=kind_phys) :: sr2006_theta_1500t_b !< clay coefficient + real (kind=kind_phys) :: sr2006_theta_1500t_c !< orgm coefficient + real (kind=kind_phys) :: sr2006_theta_1500t_d !< sand*orgm coefficient + real (kind=kind_phys) :: sr2006_theta_1500t_e !< clay*orgm coefficient + real (kind=kind_phys) :: sr2006_theta_1500t_f !< sand*clay coefficient + real (kind=kind_phys) :: sr2006_theta_1500t_g !< constant adjustment + + real (kind=kind_phys) :: sr2006_theta_1500_a !< theta_1500t coefficient + real (kind=kind_phys) :: sr2006_theta_1500_b !< constant adjustment + + real (kind=kind_phys) :: sr2006_theta_33t_a !< sand coefficient + real (kind=kind_phys) :: sr2006_theta_33t_b !< clay coefficient + real (kind=kind_phys) :: sr2006_theta_33t_c !< orgm coefficient + real (kind=kind_phys) :: sr2006_theta_33t_d !< sand*orgm coefficient + real (kind=kind_phys) :: sr2006_theta_33t_e !< clay*orgm coefficient + real (kind=kind_phys) :: sr2006_theta_33t_f !< sand*clay coefficient + real (kind=kind_phys) :: sr2006_theta_33t_g !< constant adjustment + + real (kind=kind_phys) :: sr2006_theta_33_a !< theta_33t*theta_33t coefficient + real (kind=kind_phys) :: sr2006_theta_33_b !< theta_33t coefficient + real (kind=kind_phys) :: sr2006_theta_33_c !< constant adjustment + + real (kind=kind_phys) :: sr2006_theta_s33t_a !< sand coefficient + real (kind=kind_phys) :: sr2006_theta_s33t_b !< clay coefficient + real (kind=kind_phys) :: sr2006_theta_s33t_c !< orgm coefficient + real (kind=kind_phys) :: sr2006_theta_s33t_d !< sand*orgm coefficient + real (kind=kind_phys) :: sr2006_theta_s33t_e !< clay*orgm coefficient + real (kind=kind_phys) :: sr2006_theta_s33t_f !< sand*clay coefficient + real (kind=kind_phys) :: sr2006_theta_s33t_g !< constant adjustment + + real (kind=kind_phys) :: sr2006_theta_s33_a !< theta_s33t coefficient + real (kind=kind_phys) :: sr2006_theta_s33_b !< constant adjustment + + real (kind=kind_phys) :: sr2006_psi_et_a !< sand coefficient + real (kind=kind_phys) :: sr2006_psi_et_b !< clay coefficient + real (kind=kind_phys) :: sr2006_psi_et_c !< theta_s33 coefficient + real (kind=kind_phys) :: sr2006_psi_et_d !< sand*theta_s33 coefficient + real (kind=kind_phys) :: sr2006_psi_et_e !< clay*theta_s33 coefficient + real (kind=kind_phys) :: sr2006_psi_et_f !< sand*clay coefficient + real (kind=kind_phys) :: sr2006_psi_et_g !< constant adjustment + + real (kind=kind_phys) :: sr2006_psi_e_a !< psi_et*psi_et coefficient + real (kind=kind_phys) :: sr2006_psi_e_b !< psi_et coefficient + real (kind=kind_phys) :: sr2006_psi_e_c !< constant adjustment + + real (kind=kind_phys) :: sr2006_smcmax_a !< sand adjustment + real (kind=kind_phys) :: sr2006_smcmax_b !< constant adjustment contains - subroutine read_mp_table_parameters + subroutine read_mp_table_parameters(errmsg, errflg) implicit none + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg ! vegetation parameters character(len=256) :: dataset_identifier @@ -321,7 +323,7 @@ subroutine read_mp_table_parameters integer :: ierr, ik, im integer :: nveg, isurban, iswater, isbarren, isice, iscrop, eblforest, natural integer :: lcz_1, lcz_2, lcz_3, lcz_4, lcz_5, lcz_6, lcz_7, lcz_8, lcz_9, lcz_10, lcz_11 - real, dimension(mvt) :: sai_jan, sai_feb, sai_mar, sai_apr, sai_may, sai_jun, sai_jul, sai_aug, & + real (kind=kind_phys), dimension(mvt) :: sai_jan, sai_feb, sai_mar, sai_apr, sai_may, sai_jun, sai_jul, sai_aug, & sai_sep, sai_oct, sai_nov, sai_dec, lai_jan, lai_feb, lai_mar, lai_apr, & lai_may, lai_jun, lai_jul, lai_aug, lai_sep, lai_oct, lai_nov, lai_dec, & rhol_vis, rhol_nir, rhos_vis, rhos_nir, taul_vis, taul_nir, taus_vis, taus_nir,& @@ -361,7 +363,7 @@ subroutine read_mp_table_parameters character(len=256) :: message character(len=10) :: sltype integer :: slcats - real, dimension(max_soiltyp) :: bb, drysmc, maxsmc, refsmc, satpsi, satdk, satdw, wltsmc, qtz, & + real (kind=kind_phys), dimension(max_soiltyp) :: bb, drysmc, maxsmc, refsmc, satpsi, satdk, satdw, wltsmc, qtz, & bvic, axaj, bxaj, xxaj, bdvic, bbvic, gdvic, hc namelist / noahmp_stas_soil_categories / sltype, slcats namelist / noahmp_soil_stas_parameters / bb, drysmc, maxsmc, refsmc, satpsi, satdk, satdw, wltsmc, qtz, & @@ -370,21 +372,21 @@ subroutine read_mp_table_parameters bvic, axaj, bxaj, xxaj, bdvic, bbvic, gdvic ! general parameters - real :: csoil_data, refdk_data, refkdt_data, frzk_data, zbot_data, czil_data - real, dimension(num_slope) :: slope_data + real (kind=kind_phys) :: csoil_data, refdk_data, refkdt_data, frzk_data, zbot_data, czil_data + real (kind=kind_phys), dimension(num_slope) :: slope_data namelist / noahmp_general_parameters / slope_data, csoil_data, refdk_data, refkdt_data, frzk_data, zbot_data, & czil_data ! radiation parameters - real :: betads, betais, eice - real, dimension(mband) :: albice, alblak, omegas - real, dimension(2) :: eg - real, dimension(msc) :: albsat_vis, albsat_nir, albdry_vis, albdry_nir + real (kind=kind_phys) :: betads, betais, eice + real (kind=kind_phys), dimension(mband) :: albice, alblak, omegas + real (kind=kind_phys), dimension(2) :: eg + real (kind=kind_phys), dimension(msc) :: albsat_vis, albsat_nir, albdry_vis, albdry_nir namelist / noahmp_rad_parameters / albsat_vis, albsat_nir, albdry_vis, albdry_nir, albice, alblak, omegas, & betads, betais, eg, eice ! global parameters - real :: co2, o2, timean, fsatmx, z0sno, ssi, snow_ret_fac ,snow_emis, swemx, tau0, & + real (kind=kind_phys) :: co2, o2, timean, fsatmx, z0sno, ssi, snow_ret_fac ,snow_emis, swemx, tau0, & grain_growth, extra_growth, dirt_soot, bats_cosz, bats_vis_new, & bats_nir_new, bats_vis_age, bats_nir_age, bats_vis_dir, bats_nir_dir, & rsurf_snow, rsurf_exp, c2_snowcompact, c3_snowcompact, c4_snowcompact, & @@ -401,14 +403,14 @@ subroutine read_mp_table_parameters ! irrigation parameters integer :: irr_har - real :: irr_frac, irr_lai, irr_mad, filoss, sprir_rate, micir_rate, firtfac, ir_rain + real (kind=kind_phys) :: irr_frac, irr_lai, irr_mad, filoss, sprir_rate, micir_rate, firtfac, ir_rain namelist / noahmp_irrigation_parameters / irr_frac, irr_har, irr_lai, irr_mad, filoss, sprir_rate, micir_rate, firtfac,& ir_rain ! crop parameters integer :: default_crop integer , dimension(ncrop) :: pltday, hsday - real, dimension(ncrop) :: plantpop, irri, gddtbase, gddtcut, gdds1, gdds2, gdds3, gdds4, gdds5, c3psni,& + real (kind=kind_phys), dimension(ncrop) :: plantpop, irri, gddtbase, gddtcut, gdds1, gdds2, gdds3, gdds4, gdds5, c3psni,& kc25i, akci, ko25i, akoi, avcmxi, vcmx25i, bpi, mpi, folnmxi, qe25i, aref, & psnrf, i2par, tassim0, tassim1, tassim2, k, epsi, q10mr, lefreez, & dile_fc_s1, dile_fc_s2, dile_fc_s3, dile_fc_s4, dile_fc_s5, dile_fc_s6, & @@ -449,13 +451,13 @@ subroutine read_mp_table_parameters ! tile drainage parameters integer :: nsoiltype, drain_layer_opt integer , dimension(max_soiltyp) :: td_depth - real, dimension(max_soiltyp) :: tdsmc_fac, td_dc, td_dcoef, td_d, td_adepth, td_radi, td_spac, & + real (kind=kind_phys), dimension(max_soiltyp) :: tdsmc_fac, td_dc, td_dcoef, td_d, td_adepth, td_radi, td_spac, & td_ddrain, klat_fac namelist / noahmp_tiledrain_parameters / nsoiltype, drain_layer_opt, tdsmc_fac, td_depth, td_dc, td_dcoef, td_d,& td_adepth, td_radi, td_spac, td_ddrain, klat_fac ! optional parameters - real :: sr2006_theta_1500t_a, sr2006_theta_1500t_b, sr2006_theta_1500t_c, & + real (kind=kind_phys) :: sr2006_theta_1500t_a, sr2006_theta_1500t_b, sr2006_theta_1500t_c, & sr2006_theta_1500t_d, sr2006_theta_1500t_e, sr2006_theta_1500t_f, & sr2006_theta_1500t_g, sr2006_theta_1500_a , sr2006_theta_1500_b, & sr2006_theta_33t_a, sr2006_theta_33t_b, sr2006_theta_33t_c, & @@ -781,7 +783,10 @@ subroutine read_mp_table_parameters open(15, status='old', form='formatted', action='read', iostat=ierr) end if if ( ierr /= 0 ) then - write(*,'("warning: cannot find file noahmptable.tbl")') + errmsg = 'warning: cannot find file noahmptable.tb' + errflg = 1 + return +! write(*,'("warning: cannot find file noahmptable.tbl")') endif if ( trim(dataset_identifier) == "usgs" ) then @@ -909,7 +914,10 @@ subroutine read_mp_table_parameters open(15, status='old', form='formatted', action='read', iostat=ierr) end if if ( ierr /= 0 ) then - write(*,'("warning: cannot find file noahmptable.tbl")') + errmsg = 'warning: cannot find file noahmptable.tb' + errflg = 1 + return +! write(*,'("warning: cannot find file noahmptable.tbl")') endif read(15, noahmp_stas_soil_categories) if ( trim(sltype) == "stas" ) then @@ -949,7 +957,10 @@ subroutine read_mp_table_parameters open(15, status='old', form='formatted', action='read', iostat=ierr) end if if ( ierr /= 0 ) then - write(*,'("warning: cannot find file noahmptable.tbl")') + errmsg = 'warning: cannot find file noahmptable.tb' + errflg = 1 + return +! write(*,'("warning: cannot find file noahmptable.tbl")') endif read(15, noahmp_general_parameters) close(15) @@ -971,7 +982,10 @@ subroutine read_mp_table_parameters open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - write(*,'("warning: cannot find file noahmptable.tbl")') + errmsg = 'warning: cannot find file noahmptable.tb' + errflg = 1 + return +! write(*,'("warning: cannot find file noahmptable.tbl")') endif read(15,noahmp_rad_parameters) close(15) @@ -997,7 +1011,10 @@ subroutine read_mp_table_parameters open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - write(*,'("warning: cannot find file noahmptable.tbl")') + errmsg = 'warning: cannot find file noahmptable.tb' + errflg = 1 + return +! write(*,'("warning: cannot find file noahmptable.tbl")') endif read(15,noahmp_global_parameters) close(15) @@ -1052,7 +1069,10 @@ subroutine read_mp_table_parameters open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - write(*,'("warning: cannot find file noahmptable.tbl")') + errmsg = 'warning: cannot find file noahmptable.tb' + errflg = 1 + return +! write(*,'("warning: cannot find file noahmptable.tbl")') endif read(15,noahmp_irrigation_parameters) close(15) @@ -1076,7 +1096,10 @@ subroutine read_mp_table_parameters open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - write(*,'("warning: cannot find file noahmptable.tbl")') + errmsg = 'warning: cannot find file noahmptable.tb' + errflg = 1 + return +! write(*,'("warning: cannot find file noahmptable.tbl")') endif read(15,noahmp_crop_parameters) close(15) @@ -1226,7 +1249,10 @@ subroutine read_mp_table_parameters open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - write(*,'("warning: cannot find file noahmptable.tbl")') + errmsg = 'warning: cannot find file noahmptable.tb' + errflg = 1 + return +! write(*,'("warning: cannot find file noahmptable.tbl")') endif read(15,noahmp_tiledrain_parameters) close(15) @@ -1252,7 +1278,10 @@ subroutine read_mp_table_parameters open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - write(*,'("warning: cannot find file noahmptable.tbl")') + errmsg = 'warning: cannot find file noahmptable.tb' + errflg = 1 + return +! write(*,'("warning: cannot find file noahmptable.tbl")') endif read(15,noahmp_optional_parameters) close(15) diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index 6831d17a2..d4e84bd7d 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -90,7 +90,7 @@ subroutine noahmpdrv_init(lsm, lsm_noahmp, me, isot, ivegsrc, & call set_soilveg(me, isot, ivegsrc, nlunit, errmsg, errflg) !--- read in noahmp table - call read_mp_table_parameters + call read_mp_table_parameters(errmsg, errflg) ! initialize psih and psim diff --git a/physics/sfcsub.F b/physics/sfcsub.F index 3ac7df7c5..1ff8a41b2 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -660,7 +660,7 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & data fnalbc2/'global_albedo4.1x1.grb'/ data fntsfc/'global_sstclim.2x2.grb'/ data fnsotc/'global_soiltype.1x1.grb'/ - data fnsocc/'soil_color.clm.0.05.nc'/ + data fnsocc/''/ data fnvegc/'global_vegfrac.1x1.grb'/ data fnvetc/'global_vegtype.1x1.grb'/ data fnglac/'global_glacier.2x2.grb'/ From 5b50134d7e1a7847e69d61ec06506f52c1be967a Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Wed, 7 Jun 2023 13:02:53 -0400 Subject: [PATCH 39/48] remove soil color comment --- physics/GFS_phys_time_vary.fv3.F90 | 4 ++-- physics/gcycle.F90 | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index 67fec5ca1..72f873b12 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -743,7 +743,7 @@ subroutine GFS_phys_time_vary_timestep_init ( kice, ialb, isot, ivegsrc, input_nml_file, use_ufo, nst_anl, frac_grid, fhcyc, phour, & lakefrac, min_seaice, min_lakeice, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, & tsfc, tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, zorli, zorll, & - zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, stype,scolor, shdmin, shdmax, snowd, & !soil color + zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, stype,scolor, shdmin, shdmax, snowd, & cv, cvb, cvt, oro, oro_uf, xlat_d, xlon_d, slmsk, landfrac, & do_ugwp_v1, jindx1_tau, jindx2_tau, ddy_j1tau, ddy_j2tau, tau_amf, errmsg, errflg) @@ -790,7 +790,7 @@ subroutine GFS_phys_time_vary_timestep_init ( zorli(:), zorll(:), zorlo(:), weasd(:), snoalb(:), & canopy(:), vfrac(:), shdmin(:), shdmax(:), & snowd(:), cv(:), cvb(:), cvt(:), oro(:), oro_uf(:), slmsk(:) - integer, intent(inout) :: vtype(:), stype(:),scolor(:), slope(:) !soil color + integer, intent(inout) :: vtype(:), stype(:),scolor(:), slope(:) character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/gcycle.F90 b/physics/gcycle.F90 index 52ed97efb..f5eecbd18 100644 --- a/physics/gcycle.F90 +++ b/physics/gcycle.F90 @@ -75,7 +75,7 @@ subroutine gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, slmsk(:) integer, intent(inout) :: vtype(:), & stype(:), & - scolor(:), & !soil color + scolor(:), & slope(:) integer, intent(in) :: imap(:), jmap(:) From a99876bef304ea468351abf0731460dc7c61b6be Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Thu, 8 Jun 2023 23:40:40 -0400 Subject: [PATCH 40/48] to address issues on ep_2 epsm1 and fv --- physics/module_sf_noahmp_glacier.F90 | 47 ++++++++++++----------- physics/module_sf_noahmplsm.F90 | 56 +++++++++++++++------------- physics/noahmpdrv.F90 | 2 +- 3 files changed, 57 insertions(+), 48 deletions(-) diff --git a/physics/module_sf_noahmp_glacier.F90 b/physics/module_sf_noahmp_glacier.F90 index 7822ead30..6e34c43af 100644 --- a/physics/module_sf_noahmp_glacier.F90 +++ b/physics/module_sf_noahmp_glacier.F90 @@ -126,7 +126,7 @@ subroutine noahmp_glacier (& thsfc_loc ,prslkix ,prsik1x ,prslk1x , & psfc ,pblhx ,iz0tlnd ,itime , & sigmaf1 ,garea1 ,psi_opt , & ! in : - ep_1 ,ep_2 ,cp , & + ep_1 ,ep_2 ,epsm1 ,cp , & qsnow ,sneqvo ,albold ,cm ,ch ,isnow , & ! in/out : sneqv ,smc ,zsnso ,snowh ,snice ,snliq , & ! in/out : tg ,stc ,sh2o ,tauss ,qsfc , & ! in/out : @@ -177,6 +177,7 @@ subroutine noahmp_glacier (& real (kind=kind_phys) , intent(in) :: pblhx ! pbl height real (kind=kind_phys) , intent(in) :: ep_1 real (kind=kind_phys) , intent(in) :: ep_2 + real (kind=kind_phys) , intent(in) :: epsm1 real (kind=kind_phys) , intent(in) :: cp integer , intent(in) :: iz0tlnd ! integer , intent(in) :: itime !< timestep @@ -267,7 +268,7 @@ subroutine noahmp_glacier (& ! -------------------------------------------------------------------------------------------------- ! re-process atmospheric forcing - call atm_glacier (sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & + call atm_glacier (ep_2, epsm1,sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & qair ,eair ,rhoair ,solad ,solai ,swdown ) beg_wb = sneqv @@ -290,7 +291,7 @@ subroutine noahmp_glacier (& tbot ,zbot ,zsnso ,dzsnso ,sigmaf1 ,garea1 , & !in thsfc_loc ,prslkix ,prsik1x ,prslk1x , & !in psfc ,pblhx ,iz0tlnd ,itime ,psi_opt , & - ep_1, ep_2, cp, & + ep_1, ep_2, epsm1, cp, & tg ,stc ,snowh ,sneqv ,sneqvo ,sh2o , & !inout smc ,snice ,snliq ,albold ,cm ,ch , & !inout #ifdef CCPP @@ -363,7 +364,7 @@ end subroutine noahmp_glacier ! ================================================================================================== !>\ingroup NoahMP_LSM !! re-process atmospheric forcing - subroutine atm_glacier (sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & + subroutine atm_glacier (ep_2, epsm1, sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & qair ,eair ,rhoair ,solad ,solai , & swdown ) ! -------------------------------------------------------------------------------------------------- @@ -373,6 +374,8 @@ subroutine atm_glacier (sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & ! -------------------------------------------------------------------------------------------------- ! inputs + real (kind=kind_phys) , intent(in) :: ep_2 + real (kind=kind_phys) , intent(in) :: epsm1 real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) @@ -399,8 +402,8 @@ subroutine atm_glacier (sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & ! qair = q2 / (1.0+q2) ! mixing ratio to specific humidity [kg/kg] qair = q2 ! in wrf, driver converts to specific humidity - eair = qair*sfcprs / (0.622+0.378*qair) - rhoair = (sfcprs-0.378*eair) / (rair*sfctmp) + eair = qair*sfcprs / (ep_2-epsm1*qair) + rhoair = (sfcprs+epsm1*eair) / (rair*sfctmp) if(cosz <= 0.) then swdown = 0. @@ -424,7 +427,7 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair tbot ,zbot ,zsnso ,dzsnso ,sigmaf1 ,garea1 , & !in thsfc_loc ,prslkix ,prsik1x ,prslk1x , & !in psfc ,pblhx ,iz0tlnd ,itime ,psi_opt , & - ep_1, ep_2, cp, & + ep_1, ep_2, epsm1, cp, & tg ,stc ,snowh ,sneqv ,sneqvo ,sh2o , & !inout smc ,snice ,snliq ,albold ,cm ,ch , & !inout #ifdef CCPP @@ -478,6 +481,7 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair real (kind=kind_phys) , intent(in) :: psfc !< surface pressure real (kind=kind_phys) , intent(in) :: ep_1 real (kind=kind_phys) , intent(in) :: ep_2 + real (kind=kind_phys) , intent(in) :: epsm1 real (kind=kind_phys) , intent(in) :: cp integer , intent(in) :: iz0tlnd !< z0t option integer , intent(in) :: itime !< integration time @@ -584,7 +588,7 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair ! set psychrometric constant lathea = hsub - gamma = cpair*sfcprs/(0.622*lathea) + gamma = cpair*sfcprs/(ep_2*lathea) ! surface temperatures of the ground and energy fluxes @@ -594,7 +598,7 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair eair ,stc ,sag ,snowh ,lathea ,sh2o , & !in thsfc_loc ,prslkix ,prsik1x ,prslk1x , & psfc ,pblhx ,iz0tlnd ,itime ,uu ,vv , & - sigmaf1 ,garea1 ,psi_opt ,ep_1, ep_2, cp, & !in + sigmaf1 ,garea1 ,psi_opt ,ep_1, ep_2, epsm1, cp, & !in #ifdef CCPP cm ,ch ,tg ,qsfc ,errmsg ,errflg , & !inout #else @@ -1034,7 +1038,7 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso eair ,stc ,sag ,snowh ,lathea ,sh2o , & !in thsfc_loc ,prslkix ,prsik1x ,prslk1x , & psfc ,pblhx ,iz0tlnd ,itime ,uu ,vv , & - sigmaf1 ,garea1 ,psi_opt ,ep_1, ep_2, cp, & !in + sigmaf1 ,garea1 ,psi_opt ,ep_1, ep_2, epsm1, cp, & !in #ifdef CCPP cm ,ch ,tgb ,qsfc ,errmsg ,errflg , & !inout #else @@ -1092,6 +1096,7 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso real (kind=kind_phys) , intent(in) :: psfc !< real (kind=kind_phys) , intent(in) :: ep_1 real (kind=kind_phys) , intent(in) :: ep_2 + real (kind=kind_phys) , intent(in) :: epsm1 real (kind=kind_phys) , intent(in) :: cp integer , intent(in) :: iz0tlnd !< integer , intent(in) :: itime !< integration time @@ -1266,11 +1271,11 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso call sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in qair ,sfctmp ,h ,rhoair ,mpe ,ur , & !in #ifdef CCPP - & moz ,mozsgn ,fm ,fh ,fm2 ,fh2 ,errmsg, errflg, & !inout + & moz ,mozsgn ,fm ,fh ,fm2 ,fh2,fv, errmsg, errflg, & !inout #else - & moz ,mozsgn ,fm ,fh ,fm2 ,fh2 , & !inout + & moz ,mozsgn ,fm ,fh ,fm2 ,fh2,fv , & !inout #endif - & fv ,cm ,ch ,ch2) !out + & cm ,ch ,ch2) !out #ifdef CCPP if (errflg /= 0) return @@ -1364,7 +1369,7 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso else estg = esati end if - qsfc = 0.622*(estg*rhsur)/(sfcprs-0.378*(estg*rhsur)) + qsfc = ep_2*(estg*rhsur)/(sfcprs+epsm1*(estg*rhsur)) qfx = (qsfc-qair)*cev*gamma/cpair end do loop3 ! end stability iteration @@ -1437,7 +1442,7 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso else estg = esati end if - qsfc = 0.622*(estg*rhsur)/(sfcprs-0.378*(estg*rhsur)) + qsfc = ep_2*(estg*rhsur)/(sfcprs+epsm1*(estg*rhsur)) end do !sfc_diff3 iter end if !sfc_diff3 @@ -1453,7 +1458,7 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso t = tdc(tgb) ! mb: recalculate estg call esat(t, esatw, esati, dsatw, dsati) estg = esati - qsfc = 0.622*(estg*rhsur)/(sfcprs-0.378*(estg*rhsur)) + qsfc = ep_2*(estg*rhsur)/(sfcprs+epsm1*(estg*rhsur)) irb = cir * tgb**4 - emg*lwdn shb = csh * (tgb - sfctmp) evb = cev * (estg*rhsur - eair ) !estg reevaluate ? @@ -1545,12 +1550,12 @@ end subroutine esat subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in qair ,sfctmp ,h ,rhoair ,mpe ,ur , & !in #ifdef CCPP - & moz ,mozsgn ,fm ,fh ,fm2 ,fh2 , & !inout - & errmsg ,errflg , & !inout + & moz ,mozsgn ,fm ,fh ,fm2 ,fh2 , fv, & !inout + & errmsg ,errflg , & !inout #else - & moz ,mozsgn ,fm ,fh ,fm2 ,fh2 , & !inout + & moz ,mozsgn ,fm ,fh ,fm2 ,fh2 , fv, & !inout #endif - & fv ,cm ,ch ,ch2 ) !out + & cm ,ch ,ch2 ) !out ! ------------------------------------------------------------------------------------------------- ! computing surface drag coefficient cm for momentum and ch for heat ! ------------------------------------------------------------------------------------------------- @@ -1576,6 +1581,7 @@ subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in real (kind=kind_phys), intent(inout) :: fh !< sen heat stability correction, weighted by prior iters real (kind=kind_phys), intent(inout) :: fm2 !< sen heat stability correction, weighted by prior iters real (kind=kind_phys), intent(inout) :: fh2 !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fv !< friction velocity (m/s) #ifdef CCPP character(len=*), intent(inout) :: errmsg @@ -1583,7 +1589,6 @@ subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in #endif ! outputs - real (kind=kind_phys), intent(inout) :: fv !< friction velocity (m/s) real (kind=kind_phys), intent(out) :: cm !< drag coefficient for momentum real (kind=kind_phys), intent(out) :: ch !< drag coefficient for heat real (kind=kind_phys), intent(out) :: ch2 !< drag coefficient for heat diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index ff49a41cd..a685095aa 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -749,7 +749,7 @@ subroutine noahmp_sflx (parameters, & ! -------------------------------------------------------------------------------------------------- ! re-process atmospheric forcing - call atm (parameters,sfcprs ,sfctmp ,q2 , & + call atm (parameters,ep_2, epsm1, sfcprs ,sfctmp ,q2 , & prcpconv, prcpnonc,prcpshcv,prcpsnow,prcpgrpl,prcphail, & soldn ,cosz ,thair ,qair , & eair ,rhoair ,qprecc ,qprecl ,solad ,solai , & @@ -856,7 +856,7 @@ subroutine noahmp_sflx (parameters, & emissi ,pah ,canhs, & shg,shc,shb,evg,evb,ghv,ghb,irg,irc,irb,tr,evc,chleaf,chuc,chv2,chb2 ) !out - qsfcveg = eah*0.622/(sfcprs - 0.378*eah) + qsfcveg = eah*ep_2/(sfcprs + epsm1*eah) qsfcbare = qsfc qsfc = q1 !jref:end @@ -960,7 +960,7 @@ end subroutine noahmp_sflx !>\ingroup NoahMP_LSM !! re-precess atmospheric forcing. - subroutine atm (parameters,sfcprs ,sfctmp ,q2 , & + subroutine atm (parameters,ep_2,epsm1,sfcprs ,sfctmp ,q2 , & prcpconv,prcpnonc ,prcpshcv,prcpsnow,prcpgrpl,prcphail , & soldn ,cosz ,thair ,qair , & eair ,rhoair ,qprecc ,qprecl ,solad , solai , & @@ -973,6 +973,8 @@ subroutine atm (parameters,sfcprs ,sfctmp ,q2 , ! inputs type (noahmp_parameters), intent(in) :: parameters + real (kind=kind_phys) , intent(in) :: ep_2 !< + real (kind=kind_phys) , intent(in) :: epsm1 !< real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) @@ -1017,8 +1019,8 @@ subroutine atm (parameters,sfcprs ,sfctmp ,q2 , qair = q2 ! in wrf, driver converts to specific humidity - eair = qair*sfcprs / (0.622+0.378*qair) - rhoair = (sfcprs-0.378*eair) / (rair*sfctmp) + eair = qair*sfcprs / (ep_2-epsm1*qair) + rhoair = (sfcprs+epsm1*eair) / (rair*sfctmp) if(cosz <= 0.) then swdown = 0. @@ -2212,7 +2214,7 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in latheav = hsub frozen_canopy = .true. end if - gammav = cpair*sfcprs/(0.622*latheav) + gammav = cpair*sfcprs/(ep_2*latheav) if (tg .gt. tfrz) then latheag = hvap @@ -2221,14 +2223,14 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in latheag = hsub frozen_ground = .true. end if - gammag = cpair*sfcprs/(0.622*latheag) + gammag = cpair*sfcprs/(ep_2*latheag) ! if (sfctmp .gt. tfrz) then ! lathea = hvap ! else ! lathea = hsub ! end if -! gamma = cpair*sfcprs/(0.622*lathea) +! gamma = cpair*sfcprs/(ep_2*lathea) ! surface temperatures of the ground and canopy and energy fluxes @@ -2335,7 +2337,7 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in ts = fveg * tah + (1.0 - fveg) * tgb cm = fveg * cmv + (1.0 - fveg) * cmb ! better way to average? ch = fveg * chv + (1.0 - fveg) * chb - q1 = fveg * (eah*0.622/(sfcprs - 0.378*eah)) + (1.0 - fveg)*qsfc + q1 = fveg * (eah*ep_2/(sfcprs + epsm1*eah)) + (1.0 - fveg)*qsfc q2e = fveg * q2v + (1.0 - fveg) * q2b ! effectibe skin temperature @@ -4005,7 +4007,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & !jref - consistent surface specific humidity for sfcdif3 and sfcdif4 - qsfc = 0.622*eair/(psfc-0.378*eair) + qsfc = ep_2*eair/(psfc+epsm1*eair) ! canopy height hcan = parameters%hvt @@ -4092,11 +4094,11 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & zlvl ,zpd ,z0m ,z0h ,ur , & !in mpe ,iloc ,jloc , & !in #ifdef CCPP - moz ,mozsgn ,fm ,fh ,fm2 ,fh2 ,errmsg ,errflg ,& !inout + moz ,mozsgn ,fm ,fh ,fm2 ,fh2 ,fv, errmsg ,errflg ,& !inout #else - moz ,mozsgn ,fm ,fh ,fm2,fh2, & !inout + moz ,mozsgn ,fm ,fh ,fm2,fh2, fv, & !inout #endif - cm ,ch ,fv ,ch2 ) !out + cm ,ch ,ch2 ) !out #ifdef CCPP if (errflg /= 0) return #endif @@ -4191,10 +4193,10 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & end if if (opt_crs == 2) then ! jarvis - call canres (parameters,parsun,tv ,btran ,eah ,sfcprs, & !in + call canres (parameters,ep_2, epsm1,parsun,tv ,btran ,eah ,sfcprs, & !in rssun ,psnsun,iloc ,jloc ) !out - call canres (parameters,parsha,tv ,btran ,eah ,sfcprs, & !in + call canres (parameters,ep_2, epsm1,parsha,tv ,btran ,eah ,sfcprs, & !in rssha ,psnsha,iloc ,jloc ) !out end if end if @@ -4268,7 +4270,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & hg = rhoair*cpair*(tg - tah) /rahg ! consistent specific humidity from canopy air vapor pressure - qsfc = (0.622*eah)/(sfcprs-0.378*eah) + qsfc = (ep_2*eah)/(sfcprs+epsm1*eah) if ( opt_sfc == 4 ) then qfx = (qsfc-qair)*rhoair*caw @@ -4693,11 +4695,11 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & zlvl ,zpd ,z0m ,z0h ,ur , & !in mpe ,iloc ,jloc , & !in #ifdef CCPP - moz ,mozsgn ,fm ,fh ,fm2 ,fh2 ,errmsg ,errflg ,& !inout + moz ,mozsgn ,fm ,fh ,fm2 ,fh2 ,fv,errmsg ,errflg ,& !inout #else - moz ,mozsgn ,fm ,fh ,fm2 ,fh2 , & !inout + moz ,mozsgn ,fm ,fh ,fm2 ,fh2 ,fv, & !inout #endif - cm ,ch ,fv ,ch2 ) !out + cm ,ch ,ch2 ) !out #ifdef CCPP if (errflg /= 0) return #endif @@ -4814,7 +4816,7 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & else estg = esati end if - qsfc = 0.622*(estg*rhsur)/(psfc-0.378*(estg*rhsur)) + qsfc = ep_2*(estg*rhsur)/(psfc+epsm1*(estg*rhsur)) qfx = (qsfc-qair)*cev*gamma/cpair @@ -5041,11 +5043,11 @@ subroutine sfcdif1(parameters,iter ,sfctmp ,rhoair ,h ,qair , & !in & zlvl ,zpd ,z0m ,z0h ,ur , & !in & mpe ,iloc ,jloc , & !in #ifdef CCPP - & moz ,mozsgn ,fm ,fh ,fm2,fh2,errmsg,errflg, & !inout + & moz ,mozsgn ,fm ,fh ,fm2,fh2,fv,errmsg,errflg, & !inout #else - & moz ,mozsgn ,fm ,fh ,fm2,fh2, & !inout + & moz ,mozsgn ,fm ,fh ,fm2,fh2, fv, & !inout #endif - & cm ,ch ,fv ,ch2 ) !out + & cm ,ch ,ch2 ) !out ! ------------------------------------------------------------------------------------------------- ! computing surface drag coefficient cm for momentum and ch for heat ! ------------------------------------------------------------------------------------------------- @@ -5075,6 +5077,7 @@ subroutine sfcdif1(parameters,iter ,sfctmp ,rhoair ,h ,qair , & !in real (kind=kind_phys), intent(inout) :: fh !< sen heat stability correction, weighted by prior iters real (kind=kind_phys), intent(inout) :: fm2 !< sen heat stability correction, weighted by prior iters real (kind=kind_phys), intent(inout) :: fh2 !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fv !< friction velocity (m/s) #ifdef CCPP character(len=*), intent(inout) :: errmsg integer, intent(inout) :: errflg @@ -5084,7 +5087,6 @@ subroutine sfcdif1(parameters,iter ,sfctmp ,rhoair ,h ,qair , & !in real (kind=kind_phys), intent(out) :: cm !< drag coefficient for momentum real (kind=kind_phys), intent(out) :: ch !< drag coefficient for heat - real (kind=kind_phys), intent(inout) :: fv !< friction velocity (m/s) real (kind=kind_phys), intent(out) :: ch2 !< drag coefficient for heat ! locals @@ -6127,7 +6129,7 @@ end subroutine stomata !! air temperature, atmospheric water vapor pressure deficit at the lowest !! model level, and soil moisture (preferably unfrozen soil moisture rather !! than total). - subroutine canres (parameters,par ,sfctmp,rcsoil ,eah ,sfcprs , & !in + subroutine canres (parameters,ep_2,epsm1,par ,sfctmp,rcsoil ,eah ,sfcprs , & !in rc ,psn ,iloc ,jloc ) !out ! -------------------------------------------------------------------------------------------------- @@ -6149,6 +6151,8 @@ subroutine canres (parameters,par ,sfctmp,rcsoil ,eah ,sfcprs , & !in type (noahmp_parameters), intent(in) :: parameters !< integer, intent(in) :: iloc !< grid index integer, intent(in) :: jloc !< grid index + real (kind=kind_phys), intent(in) :: ep_2 !< + real (kind=kind_phys), intent(in) :: epsm1 !< real (kind=kind_phys), intent(in) :: par !< par absorbed per unit sunlit lai (w/m2) real (kind=kind_phys), intent(in) :: sfctmp !< canopy air temperature real (kind=kind_phys), intent(in) :: sfcprs !< surface pressure (pa) @@ -6181,7 +6185,7 @@ subroutine canres (parameters,par ,sfctmp,rcsoil ,eah ,sfcprs , & !in ! compute q2 and q2sat - q2 = 0.622 * eah / (sfcprs - 0.378 * eah) !specific humidity [kg/kg] + q2 = ep_2 * eah / (sfcprs + epsm1 * eah) !specific humidity [kg/kg] q2 = q2 / (1.0 - q2) !mixing ratio [kg/kg] call calhum(parameters,sfctmp, sfcprs, q2sat, dqsdt2) diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index d4e84bd7d..4500d51a8 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -874,7 +874,7 @@ subroutine noahmpdrv_run & thsfc_loc ,prslkix ,prsik1x ,prslk1x , & air_pressure_surface ,pblhx ,iz0tlnd ,itime , & vegetation_frac ,area_grid ,psi_opt , & - con_fvirt ,con_eps ,con_cp , & + con_fvirt ,con_eps ,con_epsm1 ,con_cp , & snowfall ,snow_water_equiv_old ,snow_albedo_old , & cm_noahmp ,ch_noahmp ,snow_levels ,snow_water_equiv , & soil_moisture_vol ,interface_depth ,snow_depth ,snow_level_ice , & From 7edf9921a065fd927574e4b27610803e11853f77 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Wed, 14 Jun 2023 15:40:51 -0400 Subject: [PATCH 41/48] update some data type --- physics/module_sf_noahmplsm.F90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index a685095aa..98ac09d6d 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -3604,7 +3604,7 @@ subroutine twostream (parameters,ib ,ic ,vegtyp ,cosz ,vai , & ! tmp1 = b*b - c*c h = sqrt(tmp1) / avmu sigma = tmp0*tmp0 - tmp1 - if ( abs (sigma) < 1.e-6 ) sigma = sign(1.e-6,sigma) + if ( abs (sigma) < 1.e-6 ) sigma = sign(1.e-6_kind_phys,sigma) p1 = b + avmu*h p2 = b - avmu*h p3 = b + tmp0 @@ -4687,7 +4687,7 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & ! z0h = z0m !* exp(-czil*0.4*258.2*sqrt(fv*z0m)) ! end if call thermalz0(parameters,fveg,z0m,z0m,zlvl,zpd,zpd,ustarx, & !in - vegtyp,0.,ur,csigmaf0,csigmaf1,temptrs,temptrs,temptrs,0, & !in + vegtyp,0._kind_phys,ur,csigmaf0,csigmaf1,temptrs,temptrs,temptrs,0, & !in z0mo,z0h) if(opt_sfc == 1) then @@ -10772,13 +10772,13 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & if ( present(iz0tlnd) ) then if ( iz0tlnd .le. 1 ) then call zilitinkevich_1995(znt,zt,zq,restar,& - ust,vkc,1.0,iz0tlnd,0,0.0) + ust,vkc,1.0_kind_phys,iz0tlnd,0,0.0) elseif ( iz0tlnd .eq. 2 ) then call yang_2008(znt,zt,zq,ust,molx,& qstar,restar,visc) elseif ( iz0tlnd .eq. 3 ) then !original mynn in wrf-arw used this form: - call garratt_1992(zt,zq,znt,restar,1.0) + call garratt_1992(zt,zq,znt,restar,1.0_kind_phys) endif ! the GFS option is removed along with gfs_z0_lnd @@ -10787,7 +10787,7 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & !default to zilitinkevich call zilitinkevich_1995(znt,zt,zq,restar,& - ust,vkc,1.0,0,0,0.0) + ust,vkc,1.0_kind_phys,0,0,0.0) endif endif @@ -11522,7 +11522,7 @@ real*8 function psim_unstable_full(zolf) x=(1.-16.*zolf)**.25 !psimk=2*alog(0.5*(1+x))+alog(0.5*(1+x*x))-2.*atan(x)+2.*atan(1.) - psimk=2.*alog(0.5*(1+x))+alog(0.5*(1+x*x))-2.*atan(x)+2.*atan1 + psimk=2.*dlog(0.5*(1+x))+dlog(0.5*(1+x*x))-2.*atan(x)+2.*atan1 ym=(1.-10.*zolf)**onethird !psimc=(3./2.)*log((ym**2.+ym+1.)/3.)-sqrt(3.)*atan((2.*ym+1)/sqrt(3.))+4.*atan(1.)/sqrt(3.) From d61e8bc2a846be30ecf33a3a9569a14b66f8f809 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Wed, 14 Jun 2023 20:12:09 +0000 Subject: [PATCH 42/48] bug fixes for 32-bit physics in RRFS --- physics/GFS_phys_time_vary.fv3.F90 | 5 +- physics/aerinterp.F90 | 151 +++++++++++++++++++++++------ 2 files changed, 123 insertions(+), 33 deletions(-) diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index af6e5b18e..2ee1cb918 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -913,7 +913,10 @@ subroutine GFS_phys_time_vary_timestep_init ( fhour, iflip, jindx1_aer, jindx2_aer, & ddy_aer, iindx1_aer, & iindx2_aer, ddx_aer, & - levs, prsl, aer_nm) + levs, prsl, aer_nm, errmsg, errflg) + if(errflg /= 0) then + return + endif endif !> - Call gcycle() to repopulate specific time-varying surface properties for AMIP/forecast runs diff --git a/physics/aerinterp.F90 b/physics/aerinterp.F90 index 8ad446f30..4e2dc9047 100644 --- a/physics/aerinterp.F90 +++ b/physics/aerinterp.F90 @@ -15,6 +15,26 @@ module aerinterp contains + logical function netcdf_check(status, errmsg, errflg, why) + use netcdf + implicit none + character(len=*), intent(inout) :: errmsg + integer, intent(out) :: errflg + integer, intent(in) :: status + character(len=*), intent(in) :: why + + netcdf_check = (status == NF90_NOERR) + + if(netcdf_check) then + errflg = 0 + errmsg = ' ' + else + errflg = 1 + errmsg = trim(why) // ': ' // trim(nf90_strerror(status)) + endif + + END function netcdf_check + SUBROUTINE read_aerdata (me, master, iflip, idate, errmsg, errflg) use machine, only: kind_phys, kind_io4, kind_io8 use aerclm_def @@ -26,12 +46,16 @@ SUBROUTINE read_aerdata (me, master, iflip, idate, errmsg, errflg) integer, intent(inout) :: errflg !--- locals - integer :: ncid, varid, ndims, dim1, dim2, dim3, hmx + integer :: ncid, varid, ndims, hmx integer :: i, j, k, n, ii, imon, klev character :: fname*50, mn*2, vname*10 logical :: file_exist + integer :: dimids(NF90_MAX_VAR_DIMS) + integer :: dimlen(NF90_MAX_VAR_DIMS) + + errflg = 0 + errmsg = ' ' - integer, allocatable :: invardims(:) ! !! =================================================================== if (me == master) then @@ -60,25 +84,37 @@ SUBROUTINE read_aerdata (me, master, iflip, idate, errmsg, errflg) !! fetch dim spec and lat/lon from m01 data set !! =================================================================== fname=trim("aeroclim.m"//'01'//".nc") - call nf_open(fname , nf90_NOWRITE, ncid) + ncid = -1 + if(.not.netcdf_check(nf90_open(fname , nf90_NOWRITE, ncid), & + errmsg, errflg, 'open '//trim(fname))) then + return + endif vname = trim(specname(1)) - call nf_inq_varid(ncid, vname, varid) - call nf_inq_varndims(ncid, varid, ndims) - - if(.not. allocated(invardims)) allocate(invardims(3)) - call nf_inq_vardimid(ncid,varid,invardims) - call nf_inq_dimlen(ncid, invardims(1), dim1) - call nf_inq_dimlen(ncid, invardims(2), dim2) - call nf_inq_dimlen(ncid, invardims(3), dim3) + varid = -1 + if(.not.netcdf_check(nf90_inq_varid(ncid, vname, varid), & + errmsg, errflg, 'find id of '//trim(vname)//' var')) then + return + endif + ndims = 0 + if(.not.netcdf_check(nf90_inquire_variable(ncid, varid, ndims=ndims, dimids=dimids), & + errmsg, errflg, 'inquire details about '//trim(vname)//' var')) then + return + endif + do i=1,ndims + if(.not.netcdf_check(nf90_inquire_dimension(ncid, dimids(i), len=dimlen(i)), & + errmsg, errflg, 'inquire details about dimension')) then + return + endif + enddo ! specify latsaer, lonsaer, hmx - lonsaer = dim1 - latsaer = dim2 - levsw = dim3 + lonsaer = dimlen(1) + latsaer = dimlen(2) + levsw = dimlen(3) if(me==master) then - print *, 'MERRA2 dim: ',dim1, dim2, dim3 + print *, 'MERRA2 dim: ',dimlen(1:ndims) endif ! allocate arrays @@ -89,11 +125,29 @@ SUBROUTINE read_aerdata (me, master, iflip, idate, errmsg, errflg) endif ! construct lat/lon array - call nf_inq_varid(ncid, 'lat', varid) - call nf_get_var(ncid, varid, aer_lat) - call nf_inq_varid(ncid, 'lon', varid) - call nf_get_var(ncid, varid, aer_lon) - call nf_close(ncid) + varid = -1 + if(.not.netcdf_check(nf90_inq_varid(ncid, 'lat', varid), & + errmsg, errflg, 'find id of lat var')) then + return + endif + aer_lat = 0 + if(.not.netcdf_check(nf90_get_var(ncid, varid, aer_lat, (/ 1, 1, 1 /), (/latsaer, 1, 1/)), & + errmsg, errflg, 'read lat var')) then + return + endif + varid = -1 + if(.not.netcdf_check(nf90_inq_varid(ncid, 'lon', varid), & + errmsg, errflg, 'find id of lon var')) then + return + endif + aer_lon = 0 + if(.not.netcdf_check(nf90_get_var(ncid, varid, aer_lon, (/ 1, 1, 1 /), (/lonsaer, 1, 1/)), & + errmsg, errflg, 'read lon var')) then + return + endif + if(.not.netcdf_check(nf90_close(ncid), errmsg, errflg, 'close '//trim(fname))) then + return + endif END SUBROUTINE read_aerdata ! !********************************************************************** @@ -157,8 +211,10 @@ SUBROUTINE read_aerdataf ( me, master, iflip, idate, FHOUR, errmsg, errflg) n1 = n2 - 1 if (n2 > 12) n2 = n2 -12 !! =================================================================== - call read_netfaer(n1, iflip, 1) - call read_netfaer(n2, iflip, 2) + call read_netfaer(n1, iflip, 1, errmsg, errflg) + if(errflg/=0) return + call read_netfaer(n2, iflip, 2, errmsg, errflg) + if(errflg/=0) return !! =================================================================== n1sv=n1 n2sv=n2 @@ -224,12 +280,14 @@ END SUBROUTINE setindxaer !********************************************************************** ! SUBROUTINE aerinterpol( me,master,nthrds,npts,IDATE,FHOUR,iflip, jindx1,jindx2, & - ddy,iindx1,iindx2,ddx,lev,prsl,aerout) + ddy,iindx1,iindx2,ddx,lev,prsl,aerout, errmsg,errflg) ! use machine, only: kind_phys, kind_io4, kind_io8 use aerclm_def implicit none + integer, intent(inout) :: errflg + character(*), intent(inout) :: errmsg integer, intent(in) :: iflip integer i1,i2, iday,j,j1,j2,l,npts,nc,n1,n2,lev,k,i,ii, klev real(kind=kind_phys) fhour,temj, tx1, tx2,temi, tem @@ -252,6 +310,8 @@ SUBROUTINE aerinterpol( me,master,nthrds,npts,IDATE,FHOUR,iflip, jindx1,jindx2, integer w3kindreal,w3kindint ! + errflg = 0 + errmsg = ' ' IDAT = 0 IDAT(1) = IDATE(4) IDAT(2) = IDATE(2) @@ -298,7 +358,7 @@ SUBROUTINE aerinterpol( me,master,nthrds,npts,IDATE,FHOUR,iflip, jindx1,jindx2, enddo !j-loop (lat) ENDDO ! ii-loop (ntracaerm) !! =================================================================== - call read_netfaer(n2, iflip, 2) + call read_netfaer(n2, iflip, 2, errmsg, errflg) n1sv=n1 n2sv=n2 end if @@ -390,11 +450,13 @@ SUBROUTINE aerinterpol( me,master,nthrds,npts,IDATE,FHOUR,iflip, jindx1,jindx2, RETURN END SUBROUTINE aerinterpol - subroutine read_netfaer(nf, iflip,nt) + subroutine read_netfaer(nf, iflip,nt, errmsg,errflg) use machine, only: kind_phys, kind_io4, kind_io8 use aerclm_def use netcdf integer, intent(in) :: iflip, nf, nt + integer, intent(inout) :: errflg + character(*), intent(inout) :: errmsg integer :: ncid, varid, i,j,k,ii,klev character :: fname*50, mn*2, vname*10 real(kind=kind_io4),allocatable,dimension(:,:,:) :: buff @@ -406,13 +468,30 @@ subroutine read_netfaer(nf, iflip,nt) allocate (pres_tmp(lonsaer, levsw)) allocate (buffx(lonsaer, latsaer, levsw, 1)) + errflg = 0 + errmsg = ' ' + buff = 0 + pres_tmp = 0 + buffx = 0 + write(mn,'(i2.2)') nf fname=trim("aeroclim.m"//mn//".nc") - call nf_open(fname , nf90_NOWRITE, ncid) + ncid = -1 + if(.not.netcdf_check(nf90_open(fname , nf90_NOWRITE, ncid), & + errmsg, errflg, 'open '//trim(fname))) then + return + endif ! ====> construct 3-d pressure array (Pa) - call nf_inq_varid(ncid, "DELP", varid) - call nf_get_var(ncid, varid, buff) + varid = -1 + if(.not.netcdf_check(nf90_inq_varid(ncid, "DELP", varid), & + errmsg, errflg, 'find id of DELP var')) then + return + endif + if(.not.netcdf_check(nf90_get_var(ncid, varid, buff), & + errmsg, errflg, 'read DELP var')) then + return + endif do j = jamin, jamax do i = iamin, iamax @@ -441,8 +520,15 @@ subroutine read_netfaer(nf, iflip,nt) ! for GFS, iflip 0: toa to sfc; 1: sfc to toa DO ii = 1, ntrcaerm vname=trim(specname(ii)) - call nf_inq_varid(ncid, vname, varid) - call nf_get_var(ncid, varid, buffx) + varid = -1 + if(.not.netcdf_check(nf90_inq_varid(ncid, vname, varid), & + errmsg, errflg, 'get id of '//trim(vname)//' var')) then + return + endif + if(.not.netcdf_check(nf90_get_var(ncid, varid, buffx), & + errmsg, errflg, 'read '//trim(vname)//' var')) then + return + endif do j = jamin, jamax do k = 1, levsaer @@ -464,10 +550,11 @@ subroutine read_netfaer(nf, iflip,nt) ENDDO ! ii-loop (ntracaerm) ! close the file - call nf_close(ncid) + if(.not.netcdf_check(nf90_close(ncid), errmsg, errflg, 'close '//trim(fname))) then + return + endif deallocate (buff, pres_tmp) deallocate (buffx) - return END SUBROUTINE read_netfaer end module aerinterp From 07a38c685d1df610b9fbe6497606897cc1d968c3 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Thu, 15 Jun 2023 12:13:19 -0400 Subject: [PATCH 43/48] fixed rstoch data type --- physics/module_sf_noahmplsm.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 98ac09d6d..273343d40 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -10772,7 +10772,7 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & if ( present(iz0tlnd) ) then if ( iz0tlnd .le. 1 ) then call zilitinkevich_1995(znt,zt,zq,restar,& - ust,vkc,1.0_kind_phys,iz0tlnd,0,0.0) + ust,vkc,1.0_kind_phys,iz0tlnd,0,0.0_kind_phys) elseif ( iz0tlnd .eq. 2 ) then call yang_2008(znt,zt,zq,ust,molx,& qstar,restar,visc) @@ -10787,7 +10787,7 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & !default to zilitinkevich call zilitinkevich_1995(znt,zt,zq,restar,& - ust,vkc,1.0_kind_phys,0,0,0.0) + ust,vkc,1.0_kind_phys,0,0,0.0_kind_phys) endif endif From f477bbb0a8c94a5ed5d486c55cbf023a22f73194 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Fri, 16 Jun 2023 15:51:47 -0400 Subject: [PATCH 44/48] delete some printout statements in sfcsub.f --- physics/sfcsub.F | 53 ------------------------------------------------ 1 file changed, 53 deletions(-) diff --git a/physics/sfcsub.F b/physics/sfcsub.F index 1ff8a41b2..5e27924ba 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -1123,9 +1123,6 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & snoclm(i) = 0. icefl1(i) = .true. enddo -! if(lprnt) print *,' tsffcsin=',tsffcs(iprnt) -! if(lprnt) print *,' slifcsin=',slifcs(iprnt) -! if(lprnt) print *,'slmskl=',slmskl(iprnt),' slmskw=',slmskw(iprnt) ! ! read climatology fields ! @@ -1155,13 +1152,9 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & &, imsk, jmsk, slmskh, rla, rlo, gausm, blnmsk, bltmsk,me &, lprnt,iprnt,fnalbc2,ialb,tile_num_ch,i_index,j_index) -! if(lprnt) print *,'tsfclm=',tsfclm(iprnt),' tsfcl2=',tsfcl2(iprnt) ! ! scale surface roughness and albedo to model required units ! -! do i=1,len -! print *, 'BEFORE QC socclm (i) is ',socclm (i) -! enddo zsca=100. call scale(zorclm,len,zsca) @@ -1237,7 +1230,6 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & ! if(lprnt) print *,' aisclm=',aisclm(iprnt),' sliclm=' ! &,sliclm(iprnt),' slmskw=',slmskw(iprnt) ! -! write(6,*) 'sliclm' ! znnt=1. ! call nntprt(sliclm,len,znnt) ! @@ -1358,11 +1350,6 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & socjmx,socjmn,socsmx,socsmn,epssoc, & rla,rlo,len,kqcm,percrit,lgchek,me) -! do i=1,len -! print *, 'AFTER QC socclm (i) is ',socclm (i) -! enddo - -! write(6,*) 'socclm after QC ' ! znnt=1. ! call nntprt(socclm,len,znnt) @@ -1466,9 +1453,6 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & vmnclm,vmxclm,slpclm,absclm, & len,lsoil) -! do i=1,len -! print *, 'AFTER FILANL (i) is ',socanl (i) -! enddo ! ! reverse scaling to match with grib analysis input ! @@ -1512,9 +1496,6 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & imsk, jmsk, slmskh, rla, rlo, gausm, blnmsk, bltmsk &, me, lanom) -! do i=1,len -! print *, 'AFTER ANALY (i) is ',socanl (i) -! enddo ! if(lprnt) print *,' tsfanl=',tsfanl(iprnt) ! @@ -1768,9 +1749,6 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & soclmx,soclmn,socomx,socomn,socimx,socimn, & socjmx,socjmn,socsmx,socsmn,epssoc, & rla,rlo,len,kqcm,percrit,lgchek,me) -! do i=1,len -! print *, 'AFTER QC (i) is ',socanl (i) -! enddo !clu [+16l]---------------------------------------------------------------------- ! call qcmxmn('vmna ',vmnanl,slianl,snoanl,icefl1, @@ -2027,10 +2005,6 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & socjmx,socjmn,socsmx,socsmn,epssoc, & rla,rlo,len,kqcm,percrit,lgchek,me) -! do i=1,len -! print *, 'AFTER QC SOCFCS(i) is ',socfcs (i) -! enddo - !clu [+16l] --------------------------------------------------------------- ! call qcmxmn('vmnf ',vmnfcs,slifcs,snofcs,icefl1, @@ -2260,17 +2234,11 @@ subroutine sfccycle(lugb,len,lsoil,sig1t,deltsfc & & sotlmx,sotlmn,sotomx,sotomn,sotimx,sotimn, & sotjmx,sotjmn,sotsmx,sotsmn,epssot, & rla,rlo,len,kqcm,percrit,lgchek,me) -! do i=1,len -! print *, 'BEFORE FINAL QC SOCANL(i) is ',socanl (i) -! enddo call qcmxmn('socm ',socanl,slmskl,snoanl,icefl1, & soclmx,soclmn,socomx,socomn,socimx,socimn, & socjmx,socjmn,socsmx,socsmn,epssoc, & rla,rlo,len,kqcm,percrit,lgchek,me) -! do i=1,len -! print *, 'AFTER FINAL QC SOCANL(i) is ',socanl (i) -! enddo !cwu [+8l] add sih, sic, call qcmxmn('sihm ',sihanl,slianl,snoanl,icefl1, & sihlmx,sihlmn,sihomx,sihomn,sihimx,sihimn, @@ -2822,8 +2790,6 @@ subroutine hmskrd(lugb,imsk,jmsk,fnmskh, & call fixrdg(lugb,imsk,jmsk,fnmskh, & kpds5,slmskh,gausm,blnmsk,bltmsk,me) -! print *,'in sfc_sub, aft fixrdg,slmskh=',maxval(slmskh), -! & minval(slmskh),'mdata=',mdata,'imsk*jmsk=',imsk*jmsk do i=1,imsk*jmsk slmskh(i) = nint(slmskh(i)) @@ -3585,9 +3551,6 @@ subroutine la2ga(regin,imxin,jmxin,rinlon,rinlat,rlon,rlat,inttyp,& & wi1j2*sums +wi2j2*sums ) & * wsumiv endif -! print *,' slmask=',slmask(i),' sums=',sums,' sumn=',sumn -! & ,' regin=',regin(i1,j2),regin(i2,j2),' j1=',j1,' j2=',j2 -! & ,' wij=',wi1j1, wi2j1, wi1j2, wi2j2,wsumiv else if (slmask(i) .eq. 1.0) then sums = sum1 @@ -5059,8 +5022,6 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & 100 format('rtsfl,ralbl,raisl,rsnol,rsmcl,rzorl,rvegl=',10f7.3) write(6,101) rtsfs,ralbs,raiss,rsnos,rsmcs,rzors,rvegs,rsics 101 format('rtsfs,ralbs,raiss,rsnos,rsmcs,rzors,rvegs,rsics=',11f7.3) -! print *,' ralfl=',ralfl,' ralfs=',ralfs,' rsotl=',rsotl -! *,' rsots=',rsots,' rvetl=',rvetl,' rvets=',rvets write(6,102) rsocl,rsocs 102 format('rsoc1, rsocs =',10f7.3) @@ -5125,17 +5086,6 @@ subroutine merge(len,lsoil,iy,im,id,ih,fh,deltsfc, & print *, 'dbgx-- csnol, csnos:',csnol,csnos print *, 'dbgx-- rsnol, rsnos:',rsnol,rsnos endif - -! print *, rtsfs, qtsfs, raiss , qaiss -! *, rsnos , qsnos, rzors , qzors, rvegs , qvegs -! *, rvets , qvets, rsots , qsots -! *, rcv, rcvb, rcvt, qcv, qcvb, qcvt -! *, ralbs, qalbs, ralfs, qalfs -! print *, rtsfl, qtsfl, raisl , qaisl -! *, rsnol , qsnol, rzorl , qzorl, rvegl , qvegl -! *, rvetl , qvetl, rsotl , qsotl -! *, ralbl, qalbl, ralfl, qalfl -! ! len_thread_m = (len+num_threads-1) / num_threads @@ -7083,9 +7033,6 @@ subroutine gaulat(gaul,k) do n=1,k gaul(n) = acos(a(n)) * radi enddo -! -! print *,'gaussian lat (deg) for jmax=',k -! print *,(gaul(n),n=1,k) ! return 70 write(6,6000) From 84fd6c4866af72b8c6983796f52bc2e6e6124bd6 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 21 Jun 2023 22:55:15 -0400 Subject: [PATCH 45/48] update CODEOWNERS --- CODEOWNERS | 67 +++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index 189fabd95..8f53a50bc 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -11,26 +11,28 @@ # https://docs.google.com/spreadsheets/d/14y0Th_sSpCqlssEMNfSZ_Ni9wrpPqfpPY0kRG7jCZB8/edit#gid=0 # (Internal NOAA document.) -smoke/* @haiqinli @grantfirl @Qingfu-Liu @dustinswales -physics/aerclm_def.F @AnningCheng-NOAA @andrewgettelman @grantfirl @Qingfu-Liu @dustinswales +smoke_dust/* @haiqinli @grantfirl @Qingfu-Liu @dustinswales physics/aer_cloud.F @AnningCheng-NOAA @andrewgettelman @grantfirl @Qingfu-Liu @dustinswales +physics/aerclm_def.F @AnningCheng-NOAA @andrewgettelman @grantfirl @Qingfu-Liu @dustinswales physics/aerinterp.F90 @AnningCheng-NOAA @andrewgettelman @grantfirl @Qingfu-Liu @dustinswales physics/bl_mynn_common.f90 @joeolson42 @grantfirl @Qingfu-Liu @dustinswales physics/calpreciptype.f90 @grantfirl @Qingfu-Liu @dustinswales -physics/cires_orowam2017.f @grantfirl @Qingfu-Liu @dustinswales -physics/cires_tauamf_data.F90 @grantfirl @Qingfu-Liu @dustinswales -physics/cires_ugwp* @ValeryYudin-NOAA @mdtoyNOAA @grantfirl @Qingfu-Liu @dustinswales +physics/cires_orowam2017.f @mdtoyNOAA @grantfirl @Qingfu-Liu @dustinswales +physics/cires_tauamf_data.F90 @mdtoyNOAA @grantfirl @Qingfu-Liu @dustinswales +physics/cires_ugwp* @mdtoyNOAA @grantfirl @Qingfu-Liu @dustinswales physics/cldmacro.F @AnningCheng-NOAA @andrewgettelman @grantfirl @Qingfu-Liu @dustinswales physics/cldwat2m_micro.F @AnningCheng-NOAA @andrewgettelman @grantfirl @Qingfu-Liu @dustinswales +physics/clm_lake.* @tanyasmirnova @SamuelTrahanNOAA @grantfirl @Qingfu-Liu @dustinswales physics/cnvc90.* @grantfirl @Qingfu-Liu @dustinswales physics/cs_conv_aw_adj.* @AnningCheng-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/cs_conv.* @AnningCheng-NOAA @grantfirl @Qingfu-Liu @dustinswales -physics/cu_gf* @hannahcbarnes @haiqinli @grantfirl @Qingfu-Liu @dustinswales -physics/cu_ntiedtke* @grantfirl @Qingfu-Liu @dustinswales +physics/cu_gf* @haiqinli @grantfirl @Qingfu-Liu @dustinswales +physics/cu_ntiedtke* @JongilHan66 @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales +physics/cu_c3* @lisa-bengtsson @haiqinli @grantfirl @Qingfu-Liu @dustinswales physics/date_def.f @XuLi-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/dcyc2t3.* @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/drag_suite.* @mdtoyNOAA @grantfirl @Qingfu-Liu @dustinswales -physics/flake* @YihuaWu-NOAA @grantfirl @Qingfu-Liu @dustinswales +physics/flake* @barlage @grantfirl @Qingfu-Liu @dustinswales physics/funcphys.f90 @grantfirl @Qingfu-Liu @dustinswales physics/fv_sat_adj.* @RuiyuSun @grantfirl @Qingfu-Liu @dustinswales physics/gcycle.F90 @grantfirl @Qingfu-Liu @dustinswales @@ -39,7 +41,7 @@ physics/get_prs_fv3.* physics/gfdl_cloud_microphys.* @RuiyuSun @grantfirl @Qingfu-Liu @dustinswales physics/GFDL_parse_tracers.F90 @grantfirl @Qingfu-Liu @dustinswales physics/gfdl_sfc_layer.* @ZhanZhang-NOAA @grantfirl @Qingfu-Liu @dustinswales -physics/GFS_cloud_diagnostics.* @dustinswales @grantfirl @Qingfu-Liu @dustinswales +physics/GFS_cloud_diagnostics.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales physics/GFS_DCNV_generic_post.* @grantfirl @Qingfu-Liu @dustinswales physics/GFS_DCNV_generic_pre.* @grantfirl @Qingfu-Liu @dustinswales physics/GFS_debug.* @grantfirl @Qingfu-Liu @dustinswales @@ -58,13 +60,11 @@ physics/GFS_rad_time_vary.fv3.* physics/GFS_rad_time_vary.scm.* @grantfirl @Qingfu-Liu @dustinswales physics/GFS_rrtmgp_cloud_mp.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales physics/GFS_rrtmgp_cloud_overlap.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales -physics/GFS_rrtmgp_lw_post.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales physics/GFS_rrtmg_post.* @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/GFS_rrtmgp_pre.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales physics/GFS_rrtmg_pre.* @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/GFS_rrtmgp_setup.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales -physics/GFS_rrtmgp_sw_post.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales -physics/GFS_rrtmgp_sw_pre.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales +physics/GFS_rrtmgp_post.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales physics/GFS_rrtmg_setup.* @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/GFS_SCNV_generic_post.* @grantfirl @Qingfu-Liu @dustinswales physics/GFS_SCNV_generic_pre.* @grantfirl @Qingfu-Liu @dustinswales @@ -92,7 +92,7 @@ physics/gwdc.* @Songyou184 physics/gwdps.* @Songyou184 @grantfirl @Qingfu-Liu @dustinswales physics/h2o_def.* @grantfirl @Qingfu-Liu @dustinswales physics/h2ointerp.f90 @grantfirl @Qingfu-Liu @dustinswales -physics/h2ophys.* @SMoorthi-emc @grantfirl @Qingfu-Liu @dustinswales +physics/h2ophys.* @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales physics/hedmf.* @JongilHan66 @WeiguoWang-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/iccn_def.F @grantfirl @Qingfu-Liu @dustinswales physics/iccninterp.F90 @grantfirl @Qingfu-Liu @dustinswales @@ -114,18 +114,18 @@ physics/module_BL_MYJPBL.* @Qingfu-Liu physics/module_bl_mynn.* @joeolson42 @grantfirl @Qingfu-Liu @dustinswales physics/module_gfdl_cloud_microphys.* @RuiyuSun @grantfirl @Qingfu-Liu @dustinswales physics/module_MP_FER_HIRES.* @ericaligo-NOAA @grantfirl @Qingfu-Liu @dustinswales -physics/module_mp_nssl_2mom.F90 @grantfirl @Qingfu-Liu @dustinswales +physics/module_mp_nssl_2mom.F90 @MicroTed @grantfirl @Qingfu-Liu @dustinswales physics/module_mp_radar.* @gthompsnWRF @RuiyuSun @grantfirl @Qingfu-Liu @dustinswales physics/module_mp_thompson* @gthompsnWRF @RuiyuSun @AndersJensen-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/module_nst* @XuLi-NOAA @grantfirl @Qingfu-Liu @dustinswales -physics/module_sf_exchcoef.f90 @grantfirl @Qingfu-Liu @dustinswales +physics/module_sf_exchcoef.f90 @ZhanZhang-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/module_SF_JSFC.F90 @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales physics/module_sf_mynn.F90 @joeolson42 @grantfirl @Qingfu-Liu @dustinswales physics/module_sf_ruclsm.* @tanyasmirnova @grantfirl @Qingfu-Liu @dustinswales physics/module_soil_pre.* @tanyasmirnova @grantfirl @Qingfu-Liu @dustinswales -physics/moninshoc.* @SMoorthi-emc @grantfirl @Qingfu-Liu @dustinswales +physics/moninshoc.* @grantfirl @Qingfu-Liu @dustinswales physics/mp_fer_hires.* @ericaligo-NOAA @grantfirl @Qingfu-Liu @dustinswales -physics/mp_nssl.* @grantfirl @Qingfu-Liu @dustinswales +physics/mp_nssl.* @MicroTed @grantfirl @Qingfu-Liu @dustinswales physics/mp_thompson* @gthompsnWRF @RuiyuSun @AndersJensen-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/multi_gases.F90 @RuiyuSun @grantfirl @Qingfu-Liu @dustinswales physics/myjpbl_wrapper.* @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales @@ -137,35 +137,34 @@ physics/namelist_soilveg_ruc.* @tanyasmirnova physics/*noahmp* @barlage @cenlinhe @grantfirl @Qingfu-Liu @dustinswales physics/ozinterp.f90 @grantfirl @Qingfu-Liu @dustinswales physics/ozne_def.* @grantfirl @Qingfu-Liu @dustinswales -physics/ozphys* @SMoorthi-emc @grantfirl @Qingfu-Liu @dustinswales +physics/ozphys* @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/physcons.F90 @grantfirl @Qingfu-Liu @dustinswales physics/phys_tend.* @grantfirl @Qingfu-Liu @dustinswales physics/progsigma_calc.f90 @lisa-bengtsson @grantfirl @Qingfu-Liu @dustinswales physics/radcons.f90 @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales -physics/radiation_aerosols.f @Qingfu-Liu @dustinswales @AnningCheng-NOAA @grantfirl @Qingfu-Liu @dustinswales +physics/radiation_aerosols.f @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/radiation_astronomy.f @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales -physics/radiation_cloud_overlap.F90 @dustinswales @mjiacono @grantfirl @Qingfu-Liu @dustinswales +physics/radiation_cloud_overlap.F90 @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/radiation_clouds.f @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/radiation_gases.f @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/radiation_surface.* @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/radiation_tools.F90 @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/radlw_* @mjiacono @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales physics/radsw_* @mjiacono @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales -physics/rad_sw_pre.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales -physics/rascnv.* @SMoorthi-emc @grantfirl @Qingfu-Liu @dustinswales +physics/rascnv.* @haiqinli @JongilHan66 @grantfirl @Qingfu-Liu @dustinswales physics/rayleigh_damp.* @yangfanglin @grantfirl @Qingfu-Liu @dustinswales -physics/rrtmg_lw_cloud_optics.F90 @dustinswales @grantfirl @Qingfu-Liu @dustinswales +physics/rrtmg_lw_cloud_optics.F90 @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/rrtmg_lw_post.* @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales physics/rrtmg_lw_pre.* @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales -physics/rrtmgp_aerosol_optics.* @dustinswales @grantfirl @Qingfu-Liu @dustinswales -physics/rrtmgp_lw_* @dustinswales @grantfirl @Qingfu-Liu @dustinswales -physics/rrtmgp_sw_* @dustinswales @grantfirl @Qingfu-Liu @dustinswales -physics/rrtmg_sw_cloud_optics.F90 @dustinswales @grantfirl @Qingfu-Liu @dustinswales +physics/rrtmgp_aerosol_optics.* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales +physics/rrtmgp_lw_* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales +physics/rrtmgp_sw_* @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales +physics/rrtmg_sw_cloud_optics.F90 @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales physics/rrtmg_sw_post.* @Qingfu-Liu @dustinswales @grantfirl @Qingfu-Liu @dustinswales -physics/rte-rrtmgp @RobertPincus @dustinswales @grantfirl @Qingfu-Liu @dustinswales +physics/rte-rrtmgp @dustinswales @Qingfu-Liu @grantfirl @Qingfu-Liu @dustinswales physics/samfdeepcnv.* @JongilHan66 @lisa-bengtsson @grantfirl @Qingfu-Liu @dustinswales physics/samfshalcnv.* @JongilHan66 @lisa-bengtsson @grantfirl @Qingfu-Liu @dustinswales -physics/samfaerosols.* @JongilHan66 @grantfirl @Qingfu-Liu @dustinswales +physics/samfaerosols.* @JongilHan66 @lisa-bengtsson @grantfirl @Qingfu-Liu @dustinswales physics/sascnvn.* @JongilHan66 @grantfirl @Qingfu-Liu @dustinswales physics/satmedmfvdif.* @JongilHan66 @grantfirl @Qingfu-Liu @dustinswales physics/satmedmfvdifq.* @JongilHan66 @grantfirl @Qingfu-Liu @dustinswales @@ -179,21 +178,21 @@ physics/sfc_diff.* @JongilHan66 physics/sfc_nst* @XuLi-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/sfc_ocean.* @HelinWei-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/sfc_sice.* @wd20xw @grantfirl @Qingfu-Liu @dustinswales -#physics/sfcsub.F @grantfirl @Qingfu-Liu @dustinswales +physics/sfcsub.F @grantfirl @Qingfu-Liu @dustinswales physics/sflx.f @HelinWei-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/sgscloud_radpost.* @grantfirl @Qingfu-Liu @dustinswales physics/sgscloud_radpre.* @grantfirl @Qingfu-Liu @dustinswales physics/shalcnv.* @JongilHan66 @grantfirl @Qingfu-Liu @dustinswales -physics/shinhongvdif.* @grantfirl @Qingfu-Liu @dustinswales -physics/shoc.* @SMoorthi-emc @grantfirl @Qingfu-Liu @dustinswales +physics/shinhongvdif.* @Qingfu-Liu @WeiguoWang-NOAA @grantfirl @Qingfu-Liu @dustinswales +physics/shoc.* @grantfirl @Qingfu-Liu @dustinswales physics/surface_perturbation.* @HelinWei-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/tridi.f @JongilHan66 @WeiguoWang-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/ugwp_driver_v0.F @mdtoyNOAA @grantfirl @Qingfu-Liu @dustinswales physics/ugwpv1_gsldrag.* @mdtoyNOAA @grantfirl @Qingfu-Liu @dustinswales -physics/ugwpv1_gsldrag_post.* @grantfirl @Qingfu-Liu @dustinswales +physics/ugwpv1_gsldrag_post.* @mdtoyNOAA @grantfirl @Qingfu-Liu @dustinswales physics/unified_ugwp* @mdtoyNOAA @grantfirl @Qingfu-Liu @dustinswales physics/wv_saturation.F @AnningCheng-NOAA @andrewgettelman @grantfirl @Qingfu-Liu @dustinswales -physics/ysuvdif.* @grantfirl @Qingfu-Liu @dustinswales +physics/ysuvdif.* @Qingfu-Liu @WeiguoWang-NOAA @grantfirl @Qingfu-Liu @dustinswales physics/zhaocarr_gscond.* @RuiyuSun @grantfirl @Qingfu-Liu @dustinswales physics/zhaocarr_precpd.* @RuiyuSun @grantfirl @Qingfu-Liu @dustinswales From 85e3edb4ace98c50cc1ff031ccd9a3862843bca1 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Wed, 28 Jun 2023 19:45:42 -0400 Subject: [PATCH 46/48] noahmp table needed to be read in GFS_phys_time_vary.fv3 --- physics/GFS_phys_time_vary.fv3.F90 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index 72f873b12..b11f7ecc2 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -36,7 +36,8 @@ module GFS_phys_time_vary use set_soilveg_mod, only: set_soilveg ! --- needed for Noah MP init - use noahmp_tables, only: laim_table,saim_table,sla_table, & + use noahmp_tables, only: read_mp_table_parameters, & + laim_table,saim_table,sla_table, & bexp_table,smcmax_table,smcwlt_table, & dwsat_table,dksat_table,psisat_table, & isurban_table,isbarren_table, & @@ -295,6 +296,10 @@ subroutine GFS_phys_time_vary_init ( !> - Initialize soil vegetation (needed for sncovr calculation further down) call set_soilveg(me, isot, ivegsrc, nlunit, errmsg, errflg) +!$OMP section +!> - read in NoahMP table (needed for NoahMP init) + call read_mp_table_parameters(errmsg, errflg) + !$OMP end sections ! Need an OpenMP barrier here (implicit in "end sections") From 0a873dad283e900f72f546275b204f2469055ebf Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Thu, 29 Jun 2023 19:03:51 -0400 Subject: [PATCH 47/48] initialize soil color in case no input data --- physics/sfcsub.F | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/physics/sfcsub.F b/physics/sfcsub.F index 5e27924ba..7be07b39c 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -8206,6 +8206,12 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil,slmskl,slmskw, & enddo endif +! initialize socclm in case there is no soil color data input + + do i=1,len + socclm(i) = 4. + enddo + if(fnsocc(1:8).ne.' ') then do i=1,len socclm(i) = soc(i) From 680e8419caa653c4b66face72781a8b3c6d62058 Mon Sep 17 00:00:00 2001 From: Helin Wei Date: Tue, 11 Jul 2023 07:32:02 -0400 Subject: [PATCH 48/48] use log to replace both alog and dlog --- physics/module_sf_noahmplsm.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/module_sf_noahmplsm.F90 b/physics/module_sf_noahmplsm.F90 index 273343d40..86853dabe 100644 --- a/physics/module_sf_noahmplsm.F90 +++ b/physics/module_sf_noahmplsm.F90 @@ -11522,7 +11522,7 @@ real*8 function psim_unstable_full(zolf) x=(1.-16.*zolf)**.25 !psimk=2*alog(0.5*(1+x))+alog(0.5*(1+x*x))-2.*atan(x)+2.*atan(1.) - psimk=2.*dlog(0.5*(1+x))+dlog(0.5*(1+x*x))-2.*atan(x)+2.*atan1 + psimk=2.*log(0.5*(1+x))+log(0.5*(1+x*x))-2.*atan(x)+2.*atan1 ym=(1.-10.*zolf)**onethird !psimc=(3./2.)*log((ym**2.+ym+1.)/3.)-sqrt(3.)*atan((2.*ym+1)/sqrt(3.))+4.*atan(1.)/sqrt(3.)