diff --git a/physics/GFS_GWD_generic.F90 b/physics/GFS_GWD_generic.F90 index 2ab0fb37a..94153d532 100644 --- a/physics/GFS_GWD_generic.F90 +++ b/physics/GFS_GWD_generic.F90 @@ -1,4 +1,4 @@ -!> \file GFS_GWD_generic.f +!> \file GFS_GWD_generic.F90 !! This file contains the CCPP-compliant orographic gravity wave !! drag pre interstitial codes. diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index ecfd876d0..09fe3475a 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -65,6 +65,7 @@ end subroutine GFS_MP_generic_pre_finalize end module GFS_MP_generic_pre +!>\defgroup gfs_calpreciptype GFS Precipitation Type Diagnostics Module !> This module contains the subroutine that calculates !! precipitation type and its post, which provides precipitation forcing !! to LSM. @@ -74,8 +75,7 @@ module GFS_MP_generic_post subroutine GFS_MP_generic_post_init() end subroutine GFS_MP_generic_post_init -!>\defgroup gfs_calpreciptype GFS Precipitation Type Diagnostics Module -!! \brief If dominant precip type is requested (i.e., Zhao-Carr MP scheme), 4 more algorithms in calpreciptype() +!> \brief If dominant precip type is requested (i.e., Zhao-Carr MP scheme), 4 more algorithms in calpreciptype() !! will be called. the tallies are then summed in calwxt_dominant(). For GFDL cloud MP scheme, determine convective !! rain/snow by surface temperature; and determine explicit rain/snow by rain/snow coming out directly from MP. !! @@ -119,15 +119,8 @@ subroutine GFS_MP_generic_post_run(im, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, real(kind=kind_phys), dimension(:,:), intent(inout) :: dq3dt ! only if ldiag3d and qdiag3d ! Stochastic physics / surface perturbations -<<<<<<< HEAD real(kind=kind_phys), dimension(im), intent(inout) :: drain_cpl real(kind=kind_phys), dimension(im), intent(inout) :: dsnow_cpl -======= - logical, intent(in) :: do_sppt, ca_global - real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdtr - real(kind=kind_phys), dimension(:,:), intent(in) :: dtdtc - real(kind=kind_phys), dimension(:), intent(inout) :: drain_cpl, dsnow_cpl ->>>>>>> 3f240db... Merge pull request #540 from climbfuji/release_public_v2_gnu10_crashes ! Rainfall variables previous time step integer, intent(in) :: lsm, lsm_ruc, lsm_noahmp diff --git a/physics/GFS_rad_time_vary.fv3.F90 b/physics/GFS_rad_time_vary.fv3.F90 index a081ddcf1..8dd070b12 100644 --- a/physics/GFS_rad_time_vary.fv3.F90 +++ b/physics/GFS_rad_time_vary.fv3.F90 @@ -1,4 +1,4 @@ -!>\file GFS_rad_time_vary.F90 +!>\file GFS_rad_time_vary.fv3.F90 !! Contains code related to GFS physics suite setup (radiation part of time_vary_step) module GFS_rad_time_vary diff --git a/physics/GFS_rrtmg_post.F90 b/physics/GFS_rrtmg_post.F90 index 278d3c416..b882930bf 100644 --- a/physics/GFS_rrtmg_post.F90 +++ b/physics/GFS_rrtmg_post.F90 @@ -1,10 +1,12 @@ !>\file GFS_rrtmg_post.f90 !! This file contains + +!>\defgroup GFS_rrtmg_post_mod GFS RRTMG Scheme Post module GFS_rrtmg_post contains -!>\defgroup GFS_rrtmg_post GFS RRTMG Scheme Post -!! @{ +!> \section arg_table_GFS_rrtmg_post_init Argument Table +!! subroutine GFS_rrtmg_post_init () end subroutine GFS_rrtmg_post_init @@ -200,5 +202,4 @@ end subroutine GFS_rrtmg_post_run subroutine GFS_rrtmg_post_finalize () end subroutine GFS_rrtmg_post_finalize -!! @} end module GFS_rrtmg_post diff --git a/physics/GFS_rrtmg_setup.F90 b/physics/GFS_rrtmg_setup.F90 index 85ffe7d67..dd2a19b5d 100644 --- a/physics/GFS_rrtmg_setup.F90 +++ b/physics/GFS_rrtmg_setup.F90 @@ -1,5 +1,7 @@ !> \file GFS_rrtmg_setup.f90 !! This file contains + +!> \defgroup GFS_rrtmg_setup_mod GFS RRTMG Scheme Setup module GFS_rrtmg_setup use physparam, only : isolar , ictmflg, ico2flg, ioznflg, iaerflg,& @@ -38,9 +40,7 @@ module GFS_rrtmg_setup contains -!> \defgroup GFS_rrtmg_setup GFS RRTMG Scheme Setup -!! @{ -!! \section arg_table_GFS_rrtmg_setup_init Argument Table +!> \section arg_table_GFS_rrtmg_setup_init Argument Table !! \htmlinclude GFS_rrtmg_setup_init.html !! subroutine GFS_rrtmg_setup_init ( & @@ -817,5 +817,4 @@ subroutine radupdate( idate,jdate,deltsw,deltim,lsswr, me, & end subroutine radupdate !----------------------------------- -!! @} end module GFS_rrtmg_setup diff --git a/physics/GFS_stochastics.F90 b/physics/GFS_stochastics.F90 index 10081e2af..5e6329a10 100644 --- a/physics/GFS_stochastics.F90 +++ b/physics/GFS_stochastics.F90 @@ -1,6 +1,8 @@ !> \file GFS_stochastics.f90 !! This file contains code previously in GFS_stochastics_driver. +!>\defgroup gfs_stoch GFS Stochastics Physics Module +!! This module module GFS_stochastics contains @@ -12,9 +14,6 @@ subroutine GFS_stochastics_finalize() end subroutine GFS_stochastics_finalize -!>\defgroup gfs_stoch GFS Stochastics Physics Module -!! This module -!> @{ !> \section arg_table_GFS_stochastics_run Argument Table !! \htmlinclude GFS_stochastics_run.html !! @@ -357,4 +356,3 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc end subroutine GFS_stochastics_run end module GFS_stochastics -!> @} diff --git a/physics/GFS_surface_generic.F90 b/physics/GFS_surface_generic.F90 index aaabde80a..2392e6bb0 100644 --- a/physics/GFS_surface_generic.F90 +++ b/physics/GFS_surface_generic.F90 @@ -1,6 +1,7 @@ !> \file GFS_surface_generic.F90 !! Contains code related to all GFS surface schemes. +!>\defgroup mod_GFS_surface_generic_pre GFS Surface Generic Pre module module GFS_surface_generic_pre use machine, only: kind_phys diff --git a/physics/GFS_time_vary_pre.fv3.F90 b/physics/GFS_time_vary_pre.fv3.F90 index ba971fa67..71a33c8be 100644 --- a/physics/GFS_time_vary_pre.fv3.F90 +++ b/physics/GFS_time_vary_pre.fv3.F90 @@ -1,6 +1,7 @@ -!> \file GFS_time_vary_pre.F90 +!> \file GFS_time_vary_pre.fv3.F90 !! Contains code related to GFS physics suite setup (generic part of time_vary_step) +!>\defgroup gfs_time_vary_pre_mod GFS Time Vary Pre Module module GFS_time_vary_pre use funcphys, only: gfuncphys diff --git a/physics/cires_ugwp.F90 b/physics/cires_ugwp.F90 index 672a2ac81..f985f3fdd 100644 --- a/physics/cires_ugwp.F90 +++ b/physics/cires_ugwp.F90 @@ -10,6 +10,7 @@ !! 3. GW Effects: Unified representation of GW impacts on the "resolved" flow for all sources (energy-balanced schemes for momentum, heat and mixing). !! https://www.weather.gov/media/sti/nggps/Presentations%202017/02%20NGGPS_VYUDIN_2017_.pdf +!>\defgroup cires_ugwp_run Unified Gravity Wave Physics General Algorithm module cires_ugwp use machine, only: kind_phys @@ -136,8 +137,6 @@ end subroutine cires_ugwp_finalize ! order = dry-adj=>conv=mp-aero=>radiation -sfc/land- chem -> vertdiff-> [rf-gws]=> ion-re ! ----------------------------------------------------------------------- !>@brief These subroutines and modules execute the CIRES UGWP Version 0 -!>\defgroup cires_ugwp_run Unified Gravity Wave Physics General Algorithm -!> @{ !! The physics of NGWs in the UGWP framework (Yudin et al. 2018 \cite yudin_et_al_2018) is represented by four GW-solvers, which is introduced in Lindzen (1981) \cite lindzen_1981, Hines (1997) \cite hines_1997, Alexander and Dunkerton (1999) \cite alexander_and_dunkerton_1999, and Scinocca (2003) \cite scinocca_2003. The major modification of these GW solvers is represented by the addition of the background dissipation of temperature and winds to the saturation criteria for wave breaking. This feature is important in the mesosphere and thermosphere for WAM applications and it considers appropriate scale-dependent dissipation of waves near the model top lid providing the momentum and energy conservation in the vertical column physics (Shaw and Shepherd 2009 \cite shaw_and_shepherd_2009). In the UGWP-v0, the modification of Scinocca (2003) \cite scinocca_2003 scheme for NGWs with non-hydrostatic and rotational effects for GW propagations and background dissipation is represented by the subroutine \ref fv3_ugwp_solv2_v0. In the next release of UGWP, additional GW-solvers will be implemented along with physics-based triggering of waves and stochastic approaches for selection of GW modes characterized by horizontal phase velocities, azimuthal directions and magnitude of the vertical momentum flux (VMF). !! !! In UGWP-v0, the specification for the VMF function is adopted from the GEOS-5 global atmosphere model of GMAO NASA/GSFC, as described in Molod et al. (2015) \cite molod_et_al_2015 and employed in the MERRRA-2 reanalysis (Gelaro et al., 2017 \cite gelaro_et_al_2017). The Fortran subroutine \ref slat_geos5_tamp describes the latitudinal shape of VMF-function as displayed in Figure 3 of Molod et al. (2015) \cite molod_et_al_2015. It shows that the enhanced values of VMF in the equatorial region gives opportunity to simulate the QBO-like oscillations in the equatorial zonal winds and lead to more realistic simulations of the equatorial dynamics in GEOS-5 operational and MERRA-2 reanalysis products. For the first vertically extended version of FV3GFS in the stratosphere and mesosphere, this simplified function of VMF allows us to tune the model climate and to evaluate multi-year simulations of FV3GFS with the MERRA-2 and ERA-5 reanalysis products, along with temperature, ozone, and water vapor observations of current satellite missions. After delivery of the UGWP-code, the EMC group developed and tested approach to modulate the zonal mean NGW forcing by 3D-distributions of the total precipitation as a proxy for the excitation of NGWs by convection and the vertically-integrated (surface - tropopause) Turbulent Kinetic Energy (TKE). The verification scores with updated NGW forcing, as reported elsewhere by EMC researchers, display noticeable improvements in the forecast scores produced by FV3GFS configuration extended into the mesosphere. @@ -377,5 +376,4 @@ subroutine cires_ugwp_run(do_ugwp, me, master, im, levs, ntrac, dtp, kdt, lonr end subroutine cires_ugwp_run !! @} -!>@} end module cires_ugwp diff --git a/physics/cires_ugwp_post.F90 b/physics/cires_ugwp_post.F90 index 68c90bc55..bc75f10f3 100644 --- a/physics/cires_ugwp_post.F90 +++ b/physics/cires_ugwp_post.F90 @@ -1,11 +1,11 @@ !> \file cires_ugwp_post.F90 !! This file contains + +!>\defgroup cires_ugwp_post_mod CIRES UGWP Scheme Post module cires_ugwp_post contains -!>\defgroup cires_ugwp_post CIRES UGWP Scheme Post -!! @{ subroutine cires_ugwp_post_init () end subroutine cires_ugwp_post_init @@ -71,5 +71,4 @@ end subroutine cires_ugwp_post_run subroutine cires_ugwp_post_finalize () end subroutine cires_ugwp_post_finalize -!! @} end module cires_ugwp_post diff --git a/physics/cnvc90.f b/physics/cnvc90.f index fe3601ce2..0f3d0f19d 100644 --- a/physics/cnvc90.f +++ b/physics/cnvc90.f @@ -130,5 +130,6 @@ END SUBROUTINE cnvc90_run subroutine cnvc90_finalize() end subroutine cnvc90_finalize + end module cnvc90 diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 index a7b03d387..24ce63256 100644 --- a/physics/cs_conv.F90 +++ b/physics/cs_conv.F90 @@ -78,8 +78,7 @@ end subroutine cs_conv_post_init subroutine cs_conv_post_finalize() end subroutine cs_conv_post_finalize -!! -!! \section arg_table_cs_conv_post_run Argument Table +!> \section arg_table_cs_conv_post_run Argument Table !! \htmlinclude cs_conv_post_run.html !! subroutine cs_conv_post_run(im, kmax, do_aw, sigmatot, sigmafrac, errmsg, errflg) @@ -2031,88 +2030,88 @@ SUBROUTINE CUMUP & !! in-cloud properties logical :: lprnt ! ! [OUTPUT] - REAL(r8) ACWF (IJSDIM) ! cloud work function - REAL(r8) GCLZ (IJSDIM, KMAX) ! cloud liquid water*eta - REAL(r8) GCIZ (IJSDIM, KMAX) ! cloud ice*eta - REAL(r8) GPRCIZ(IJSDIM, KMAX) ! rain generation*eta - REAL(r8) GSNWIZ(IJSDIM, KMAX) ! snow generation*eta - REAL(r8) GCYT (IJSDIM) ! norm. mass flux @top - REAL(r8) GCHT (IJSDIM) ! cloud top MSE*eta - REAL(r8) GCQT (IJSDIM) ! cloud top moisture*eta - REAL(r8) GCLT (IJSDIM) ! cloud top liquid water*eta - REAL(r8) GCIT (IJSDIM) ! cloud top ice*eta - REAL(r8) GCtrT (IJSDIM, ntrq:ntr) ! cloud top tracer*eta - REAL(r8) GTPRT (IJSDIM) ! cloud top (rain+snow)*eta - REAL(r8) GCUT (IJSDIM) ! cloud top u*eta - REAL(r8) GCVT (IJSDIM) ! cloud top v*eta - REAL(r8) GCwT (IJSDIM) ! cloud top v*eta - INTEGER KT (IJSDIM) ! cloud top - INTEGER KTMX ! max of cloud top - REAL(r8) WCV (IJSDIM, KMAX) ! updraft velocity (half lev) !DD sigma make output + REAL(r8) ACWF (IJSDIM) !< cloud work function + REAL(r8) GCLZ (IJSDIM, KMAX) !< cloud liquid water*eta + REAL(r8) GCIZ (IJSDIM, KMAX) !< cloud ice*eta + REAL(r8) GPRCIZ(IJSDIM, KMAX) !< rain generation*eta + REAL(r8) GSNWIZ(IJSDIM, KMAX) !< snow generation*eta + REAL(r8) GCYT (IJSDIM) !< norm. mass flux @top + REAL(r8) GCHT (IJSDIM) !< cloud top MSE*eta + REAL(r8) GCQT (IJSDIM) !< cloud top moisture*eta + REAL(r8) GCLT (IJSDIM) !< cloud top liquid water*eta + REAL(r8) GCIT (IJSDIM) !< cloud top ice*eta + REAL(r8) GCtrT (IJSDIM, ntrq:ntr) !< cloud top tracer*eta + REAL(r8) GTPRT (IJSDIM) !< cloud top (rain+snow)*eta + REAL(r8) GCUT (IJSDIM) !< cloud top u*eta + REAL(r8) GCVT (IJSDIM) !< cloud top v*eta + REAL(r8) GCwT (IJSDIM) !< cloud top v*eta + INTEGER KT (IJSDIM) !< cloud top + INTEGER KTMX !< max of cloud top + REAL(r8) WCV (IJSDIM, KMAX) !< updraft velocity (half lev) !DD sigma make output ! ! [MODIFIED] - REAL(r8) GCYM (IJSDIM, KMAX) ! norm. mass flux + REAL(r8) GCYM (IJSDIM, KMAX) !< norm. mass flux ! ! [INPUT] - REAL(r8) GCHB (IJSDIM) ! cloud base Moist Static Energy - REAL(r8) GCWB (IJSDIM) ! cloud base total water - REAL(r8) GCUB (IJSDIM) ! cloud base U - REAL(r8) GCVB (IJSDIM) ! cloud base V - REAL(r8) GCIB (IJSDIM) ! cloud base ice - REAL(r8) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracers - REAL(r8) GDU (IJSDIM, KMAX) ! U - REAL(r8) GDV (IJSDIM, KMAX) ! V - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDHS (IJSDIM, KMAX) ! saturation MSE - REAL(r8) GDQS (IJSDIM, KMAX) ! saturation q - REAL(r8) GDT (IJSDIM, KMAX) ! T - REAL(r8) GDTM (IJSDIM, KMAX+1) ! T (half lev) - REAL(r8) GDQ (IJSDIM, KMAX, NTR) ! q !!DDsigmadiag - REAL(r8) GDQI (IJSDIM, KMAX) ! cloud ice - REAL(r8) GDZ (IJSDIM, KMAX) ! z - REAL(r8) GDZM (IJSDIM, KMAX+1) ! z (half lev) - REAL(r8) GDPM (IJSDIM, KMAX+1) ! p (half lev) + REAL(r8) GCHB (IJSDIM) !< cloud base Moist Static Energy + REAL(r8) GCWB (IJSDIM) !< cloud base total water + REAL(r8) GCUB (IJSDIM) !< cloud base U + REAL(r8) GCVB (IJSDIM) !< cloud base V + REAL(r8) GCIB (IJSDIM) !< cloud base ice + REAL(r8) GCtrB (IJSDIM,ntrq:ntr) !< cloud base tracers + REAL(r8) GDU (IJSDIM, KMAX) !< U + REAL(r8) GDV (IJSDIM, KMAX) !< V + REAL(r8) GDH (IJSDIM, KMAX) !< moist static energy + REAL(r8) GDW (IJSDIM, KMAX) !< total water + REAL(r8) GDHS (IJSDIM, KMAX) !< saturation MSE + REAL(r8) GDQS (IJSDIM, KMAX) !< saturation q + REAL(r8) GDT (IJSDIM, KMAX) !< T + REAL(r8) GDTM (IJSDIM, KMAX+1) !< T (half lev) + REAL(r8) GDQ (IJSDIM, KMAX, NTR) !< q !!DDsigmadiag + REAL(r8) GDQI (IJSDIM, KMAX) !< cloud ice + REAL(r8) GDZ (IJSDIM, KMAX) !< z + REAL(r8) GDZM (IJSDIM, KMAX+1) !< z (half lev) + REAL(r8) GDPM (IJSDIM, KMAX+1) !< p (half lev) REAL(r8) FDQS (IJSDIM, KMAX) REAL(r8) GAM (IJSDIM, KMAX) - REAL(r8) GDZTR (IJSDIM) ! tropopause height - REAL(r8) CPRES ! pres. fac. for cum. fric. - REAL(r8) WCB(ijsdim) ! cloud base updraft velocity**2 -! REAL(r8) ERMR ! entrainment rate (ASMODE) + REAL(r8) GDZTR (IJSDIM) !< tropopause height + REAL(r8) CPRES !< pres. fac. for cum. fric. + REAL(r8) WCB(ijsdim) !< cloud base updraft velocity**2 +! REAL(r8) ERMR !< entrainment rate (ASMODE) INTEGER KB (IJSDIM) INTEGER CTP, ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) ACWFK (IJSDIM,KMAX) ! cloud work function - REAL(r8) ACWFN (IJSDIM,KMAX) ! negative part of cloud work function - REAL(r8) myGCHt ! cloud top h *eta (half lev) - REAL(r8) GCHMZ (IJSDIM, KMAX) ! cloud h *eta (half lev) - REAL(r8) GCWMZ (IJSDIM, KMAX) ! cloud Qt*eta (half lev) - REAL(r8) GCUMZ (IJSDIM, KMAX) ! cloud U *eta (half lev) - REAL(r8) GCVMZ (IJSDIM, KMAX) ! cloud V *eta (half lev) - REAL(r8) GCqMZ (IJSDIM ) ! cloud qv*eta (half lev) - REAL(r8) GCIMZ (IJSDIM, KMAX) ! cloud Qi*eta (half lev) - REAL(r8) GCtrMZ(IJSDIM, KMAX,ntrq:ntr)! cloud tracer*eta (half lev) - REAL(r8) GTPRMZ(IJSDIM, KMAX) ! rain+snow *eta (half lev) -! - REAL(r8) BUOY (IJSDIM, KMAX) ! buoyancy - REAL(r8) BUOYM (IJSDIM, KMAX) ! buoyancy (half lev) - REAL(r8) WCM (IJSDIM ) ! updraft velocity**2 (half lev) -! REAL(r8) WCM (IJSDIM, KMAX) ! updraft velocity**2 (half lev) + REAL(r8) ACWFK (IJSDIM,KMAX) !< cloud work function + REAL(r8) ACWFN (IJSDIM,KMAX) !< negative part of cloud work function + REAL(r8) myGCHt !< cloud top h *eta (half lev) + REAL(r8) GCHMZ (IJSDIM, KMAX) !< cloud h *eta (half lev) + REAL(r8) GCWMZ (IJSDIM, KMAX) !< cloud Qt*eta (half lev) + REAL(r8) GCUMZ (IJSDIM, KMAX) !< cloud U *eta (half lev) + REAL(r8) GCVMZ (IJSDIM, KMAX) !< cloud V *eta (half lev) + REAL(r8) GCqMZ (IJSDIM ) !< cloud qv*eta (half lev) + REAL(r8) GCIMZ (IJSDIM, KMAX) !< cloud Qi*eta (half lev) + REAL(r8) GCtrMZ(IJSDIM, KMAX,ntrq:ntr)!< cloud tracer*eta (half lev) + REAL(r8) GTPRMZ(IJSDIM, KMAX) !< rain+snow *eta (half lev) +! + REAL(r8) BUOY (IJSDIM, KMAX) !< buoyancy + REAL(r8) BUOYM (IJSDIM, KMAX) !< buoyancy (half lev) + REAL(r8) WCM (IJSDIM ) !< updraft velocity**2 (half lev) +! REAL(r8) WCM (IJSDIM, KMAX) !< updraft velocity**2 (half lev) !DD sigma make output REAL(r8) WCV ( IJSDIM, KMAX+1 ) !! updraft velocity (half lev) - REAL(r8) GCY (IJSDIM, KMAX) ! norm. mass flux -! REAL(r8) ELAR (IJSDIM, KMAX) ! entrainment rate - REAL(r8) ELAR ! entrainment rate at mid layer -! - REAL(r8) GCHM (IJSDIM, KMAX) ! cloud MSE (half lev) - REAL(r8) GCWM (IJSDIM, KMAX) ! cloud Qt (half lev) !DDsigmadiag - REAL(r8) GCTM (IJSDIM, KMAX) ! cloud T (half lev) !DDsigmadiag make output - REAL(r8) GCQM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GCLM (IJSDIM, KMAX) ! cloud liquid ( half lev) - REAL(r8) GCIM (IJSDIM, KMAX) ! cloud ice (half lev) - REAL(r8) GCUM (IJSDIM, KMAX) ! cloud U (half lev) - REAL(r8) GCVM (IJSDIM, KMAX) ! cloud V (half lev) - REAL(r8) GCtrM (IJSDIM, KMAX,ntrq:ntr) ! cloud tracer (half lev) + REAL(r8) GCY (IJSDIM, KMAX) !< norm. mass flux +! REAL(r8) ELAR (IJSDIM, KMAX) !< entrainment rate + REAL(r8) ELAR !< entrainment rate at mid layer +! + REAL(r8) GCHM (IJSDIM, KMAX) !< cloud MSE (half lev) + REAL(r8) GCWM (IJSDIM, KMAX) !< cloud Qt (half lev) !DDsigmadiag + REAL(r8) GCTM (IJSDIM, KMAX) !< cloud T (half lev) !DDsigmadiag make output + REAL(r8) GCQM (IJSDIM, KMAX) !< cloud q (half lev) !DDsigmadiag make output + REAL(r8) GCLM (IJSDIM, KMAX) !< cloud liquid ( half lev) + REAL(r8) GCIM (IJSDIM, KMAX) !< cloud ice (half lev) + REAL(r8) GCUM (IJSDIM, KMAX) !< cloud U (half lev) + REAL(r8) GCVM (IJSDIM, KMAX) !< cloud V (half lev) + REAL(r8) GCtrM (IJSDIM, KMAX,ntrq:ntr) !< cloud tracer (half lev) ! REAL(r8), dimension(IJSDIM) :: WCM_, ELARM1, GDZMKB REAL(r8) GDQSM, GDHSM, GDQM, GDSM, GDCM, FDQSM, GCCM, & @@ -2663,19 +2662,19 @@ SUBROUTINE CUMBMX & !! cloud base mass flux INTEGER, INTENT(IN) :: IJSDIM, KMAX ! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) CBMFX (IJSDIM) ! cloud base mass flux + REAL(r8) CBMFX (IJSDIM) !< cloud base mass flux ! ! [INPUT] - REAL(r8) ACWF (IJSDIM) ! cloud work function - REAL(r8) GCYT (IJSDIM) ! norm mass flux @top - REAL(r8) GDZM (IJSDIM, KMAX+1) ! height - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate humidity - REAL(r8) DELP (IJSDIM, KMAX) ! delt pressure - INTEGER KT (IJSDIM) ! cloud top - INTEGER KTMX ! max. of cloud top - INTEGER KB (IJSDIM) ! cloud base - REAL(r8) DELT ! time step + REAL(r8) ACWF (IJSDIM) !< cloud work function + REAL(r8) GCYT (IJSDIM) !< norm mass flux @top + REAL(r8) GDZM (IJSDIM, KMAX+1) !< height + REAL(r8) GDW (IJSDIM, KMAX) !< total water + REAL(r8) GDQS (IJSDIM, KMAX) !< saturate humidity + REAL(r8) DELP (IJSDIM, KMAX) !< delt pressure + INTEGER KT (IJSDIM) !< cloud top + INTEGER KTMX !< max. of cloud top + INTEGER KB (IJSDIM) !< cloud base + REAL(r8) DELT !< time step INTEGER ISTS, IENS ! ! [INTERNAL WORK] @@ -2748,26 +2747,26 @@ SUBROUTINE CUMFLX & !! cloud mass flux INTEGER, INTENT(IN) :: IJSDIM, KMAX, IM !! DD, for GFS, pass in ! ! [OUTPUT] - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux - REAL(r8) CMDET (IJSDIM, KMAX) !! detrainment mass flux - REAL(r8) GPRCI (IJSDIM, KMAX) !! rainfall generation - REAL(r8) GSNWI (IJSDIM, KMAX) !! snowfall generation - REAL(r8) QLIQ (IJSDIM, KMAX) !! cloud liquid - REAL(r8) QICE (IJSDIM, KMAX) !! cloud ice - REAL(r8) GTPRC0(IJSDIM) !! precip. before evap. + REAL(r8) GMFLX (IJSDIM, KMAX) !< mass flux + REAL(r8) CMDET (IJSDIM, KMAX) !< detrainment mass flux + REAL(r8) GPRCI (IJSDIM, KMAX) !< rainfall generation + REAL(r8) GSNWI (IJSDIM, KMAX) !< snowfall generation + REAL(r8) QLIQ (IJSDIM, KMAX) !< cloud liquid + REAL(r8) QICE (IJSDIM, KMAX) !< cloud ice + REAL(r8) GTPRC0(IJSDIM) !< precip. before evap. ! ! [INPUT] - REAL(r8) CBMFX (IJSDIM) !! cloud base mass flux - REAL(r8) GCYM (IJSDIM, KMAX) !! normalized mass flux - REAL(r8) GCYT (IJSDIM) !! detraining mass flux - REAL(r8) GPRCIZ(IJSDIM, KMAX) !! precipitation/M - REAL(r8) GSNWIZ(IJSDIM, KMAX) !! snowfall/M - REAL(r8) GTPRT (IJSDIM) !! rain+snow @top - REAL(r8) GCLZ (IJSDIM, KMAX) !! cloud liquid/M - REAL(r8) GCIZ (IJSDIM, KMAX) !! cloud ice/M - INTEGER KB (IJSDIM) !! cloud base - INTEGER KT (IJSDIM) !! cloud top - INTEGER KTMX !! max of cloud top + REAL(r8) CBMFX (IJSDIM) !< cloud base mass flux + REAL(r8) GCYM (IJSDIM, KMAX) !< normalized mass flux + REAL(r8) GCYT (IJSDIM) !< detraining mass flux + REAL(r8) GPRCIZ(IJSDIM, KMAX) !< precipitation/M + REAL(r8) GSNWIZ(IJSDIM, KMAX) !< snowfall/M + REAL(r8) GTPRT (IJSDIM) !< rain+snow @top + REAL(r8) GCLZ (IJSDIM, KMAX) !< cloud liquid/M + REAL(r8) GCIZ (IJSDIM, KMAX) !< cloud ice/M + INTEGER KB (IJSDIM) !< cloud base + INTEGER KT (IJSDIM) !< cloud top + INTEGER KTMX !< max of cloud top INTEGER ISTS, IENS, I, K ! DO K=1,KTMX @@ -2810,30 +2809,30 @@ SUBROUTINE CUMDET & !! detrainment INTEGER, INTENT(IN) :: im, IJSDIM, KMAX, NTR, nctp, ntrq !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) !! temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) !! moisture tendency -! REAL(r8) GTCFRC(IJSDIM, KMAX) !! cloud fraction tendency - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(r8) GTT (IJSDIM, KMAX) !< temperature tendency + REAL(r8) GTQ (IJSDIM, KMAX, NTR) !< moisture tendency +! REAL(r8) GTCFRC(IJSDIM, KMAX) !< cloud fraction tendency + REAL(r8) GTU (IJSDIM, KMAX) !< u tendency + REAL(r8) GTV (IJSDIM, KMAX) !< v tendency ! ! [INPUT] - REAL(r8) GDH (IJSDIM, KMAX) !! moist static energy - REAL(r8) GDQ (IJSDIM, KMAX, NTR) !! humidity qv -! REAL(r8) GDCFRC(IJSDIM, KMAX) !! cloud fraction + REAL(r8) GDH (IJSDIM, KMAX) !< moist static energy + REAL(r8) GDQ (IJSDIM, KMAX, NTR) !< humidity qv +! REAL(r8) GDCFRC(IJSDIM, KMAX) !< cloud fraction REAL(r8) GDU (IJSDIM, KMAX) REAL(r8) GDV (IJSDIM, KMAX) REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) CBMFX (IM, NCTP) !! cloud base mass flux - REAL(r8) GCYT (IJSDIM, NCTP) !! detraining mass flux - REAL(r8) GCHT (IJSDIM, NCTP) !! detraining MSE - REAL(r8) GCQT (IJSDIM, NCTP) !! detraining qv - REAL(r8) GCLT (IJSDIM, NCTP) !! detraining ql - REAL(r8) GCIT (IJSDIM, NCTP) !! detraining qi - REAL(r8) GCtrT (IJSDIM, ntrq:ntr, NCTP)!! detraining tracer - REAL(r8) GCUT (IJSDIM, NCTP) !! detraining u - REAL(r8) GCVT (IJSDIM, NCTP) !! detraining v - REAL(r8) GDQI (IJSDIM, KMAX) !! cloud ice - INTEGER KT (IJSDIM, NCTP) !! cloud top + REAL(r8) CBMFX (IM, NCTP) !< cloud base mass flux + REAL(r8) GCYT (IJSDIM, NCTP) !< detraining mass flux + REAL(r8) GCHT (IJSDIM, NCTP) !< detraining MSE + REAL(r8) GCQT (IJSDIM, NCTP) !< detraining qv + REAL(r8) GCLT (IJSDIM, NCTP) !< detraining ql + REAL(r8) GCIT (IJSDIM, NCTP) !< detraining qi + REAL(r8) GCtrT (IJSDIM, ntrq:ntr, NCTP)!< detraining tracer + REAL(r8) GCUT (IJSDIM, NCTP) !< detraining u + REAL(r8) GCVT (IJSDIM, NCTP) !< detraining v + REAL(r8) GDQI (IJSDIM, KMAX) !< cloud ice + INTEGER KT (IJSDIM, NCTP) !< cloud top INTEGER ISTS, IENS ! ! [INTERNAL WORK] @@ -2885,23 +2884,23 @@ SUBROUTINE CUMSBH & !! adiabat. descent INTEGER, INTENT(IN) :: IJSDIM, IM, KMAX, NTR, ntrq !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) !! Temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) !! Moisture etc tendency - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(r8) GTT (IJSDIM, KMAX) !< Temperature tendency + REAL(r8) GTQ (IJSDIM, KMAX, NTR) !< Moisture etc tendency + REAL(r8) GTU (IJSDIM, KMAX) !< u tendency + REAL(r8) GTV (IJSDIM, KMAX) !< v tendency ! ! [INPUT] REAL(r8) GDH (IJSDIM, KMAX) - REAL(r8) GDQ (IJSDIM, KMAX, NTR) !! humidity etc + REAL(r8) GDQ (IJSDIM, KMAX, NTR) !< humidity etc REAL(r8) GDQI (IJSDIM, KMAX) REAL(r8) GDU (IJSDIM, KMAX) REAL(r8) GDV (IJSDIM, KMAX) REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux (updraft+downdraft) - REAL(r8) GMFX0 (IJSDIM, KMAX) !! mass flux (updraft only) - INTEGER KB(IJSDIM) !! cloud base index - negative means no convection + REAL(r8) GMFLX (IJSDIM, KMAX) !< mass flux (updraft+downdraft) + REAL(r8) GMFX0 (IJSDIM, KMAX) !< mass flux (updraft only) + INTEGER KB(IJSDIM) !< cloud base index - negative means no convection INTEGER KTMX - REAL(r8) CPRES !! pressure factor for cumulus friction + REAL(r8) CPRES !< pressure factor for cumulus friction INTEGER ISTS, IENS ! ! [INTERNAL WORK] @@ -3007,18 +3006,18 @@ SUBROUTINE CUMSBW & !! adiabat. descent INTEGER, INTENT(IN) :: IJSDIM, IM, KMAX!! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(r8) GTU (IJSDIM, KMAX) !< u tendency + REAL(r8) GTV (IJSDIM, KMAX) !< v tendency ! ! [INPUT] REAL(r8) GDU (IJSDIM, KMAX) REAL(r8) GDV (IJSDIM, KMAX) REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux (updraft+downdraft) - REAL(r8) GMFX0 (IJSDIM, KMAX) !! mass flux (updraft only) - INTEGER KB(IJSDIM) !! cloud base index - negative means no convection + REAL(r8) GMFLX (IJSDIM, KMAX) !< mass flux (updraft+downdraft) + REAL(r8) GMFX0 (IJSDIM, KMAX) !< mass flux (updraft only) + INTEGER KB(IJSDIM) !< cloud base index - negative means no convection INTEGER KTMX, ISTS, IENS - REAL(r8) CPRES !! pressure factor for cumulus friction + REAL(r8) CPRES !< pressure factor for cumulus friction ! ! [INTERNAL WORK] REAL(r8) FX1, SBU0, SBV0, SBU1, SBV1, wrk, wrk1 @@ -3090,46 +3089,46 @@ SUBROUTINE CUMDWN & ! Freeze & Melt & Evaporation logical, intent(in) :: do_aw, do_awdd, flx_form ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) ! Temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) ! Moisture etc tendency - REAL(r8) GTU (IJSDIM, KMAX) ! u tendency - REAL(r8) GTV (IJSDIM, KMAX) ! v tendency - REAL(r8) GMFLX (IJSDIM, KMAX) ! mass flux + REAL(r8) GTT (IJSDIM, KMAX) !< Temperature tendency + REAL(r8) GTQ (IJSDIM, KMAX, NTR) !< Moisture etc tendency + REAL(r8) GTU (IJSDIM, KMAX) !< u tendency + REAL(r8) GTV (IJSDIM, KMAX) !< v tendency + REAL(r8) GMFLX (IJSDIM, KMAX) !< mass flux ! ! [OUTPUT] - REAL(r8) GPRCP (IJSDIM, KMAX) ! rainfall flux - REAL(r8) GSNWP (IJSDIM, KMAX) ! snowfall flux - REAL(r8) GTEVP (IJSDIM, KMAX) ! evaporation+sublimation - REAL(r8) GMDD (IJSDIM, KMAX) ! downdraft mass flux + REAL(r8) GPRCP (IJSDIM, KMAX) !< rainfall flux + REAL(r8) GSNWP (IJSDIM, KMAX) !< snowfall flux + REAL(r8) GTEVP (IJSDIM, KMAX) !< evaporation+sublimation + REAL(r8) GMDD (IJSDIM, KMAX) !< downdraft mass flux !AW microphysical tendencies - REAL(r8) gtmelt (IJSDIM, KMAX) ! t tendency ice-liq - REAL(r8) gtevap (IJSDIM, KMAX) ! t tendency liq-vapor - REAL(r8) gtsubl (IJSDIM, KMAX) ! t tendency ice-vapor + REAL(r8) gtmelt (IJSDIM, KMAX) !< t tendency ice-liq + REAL(r8) gtevap (IJSDIM, KMAX) !< t tendency liq-vapor + REAL(r8) gtsubl (IJSDIM, KMAX) !< t tendency ice-vapor !AW eddy flux tendencies - REAL(r8) dtdwn (IJSDIM, KMAX) ! t tendency downdraft detrainment - REAL(r8) dqvdwn (IJSDIM, KMAX) ! qv tendency downdraft detrainment - REAL(r8) dqldwn (IJSDIM, KMAX) ! ql tendency downdraft detrainment - REAL(r8) dqidwn (IJSDIM, KMAX) ! qi tendency downdraft detrainment - REAL(r8) dtrdwn (IJSDIM, KMAX, ntrq:ntr) ! tracer tendency downdraft detrainment + REAL(r8) dtdwn (IJSDIM, KMAX) !< t tendency downdraft detrainment + REAL(r8) dqvdwn (IJSDIM, KMAX) !< qv tendency downdraft detrainment + REAL(r8) dqldwn (IJSDIM, KMAX) !< ql tendency downdraft detrainment + REAL(r8) dqidwn (IJSDIM, KMAX) !< qi tendency downdraft detrainment + REAL(r8) dtrdwn (IJSDIM, KMAX, ntrq:ntr) !< tracer tendency downdraft detrainment ! AW downdraft area fraction (assumed zero for now) - REAL(r8) sigmad (IJSDIM,KMAX) !DDsigma cloud downdraft area fraction + REAL(r8) sigmad (IJSDIM,KMAX) !< DDsigma cloud downdraft area fraction ! [INPUT] - REAL(r8) GPRCI (IJSDIM, KMAX) ! rainfall generation - REAL(r8) GSNWI (IJSDIM, KMAX) ! snowfall generation - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDQ (IJSDIM, KMAX, NTR) ! humidity etc - REAL(r8) GDQI (IJSDIM, KMAX) ! cloud ice - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate humidity - REAL(r8) GDS (IJSDIM, KMAX) ! dry static energy - REAL(r8) GDHS (IJSDIM, KMAX) ! saturate moist static energy - REAL(r8) GDT (IJSDIM, KMAX) ! air temperature T - REAL(r8) GDU (IJSDIM, KMAX) ! u-velocity - REAL(r8) GDV (IJSDIM, KMAX) ! v-velocity - REAL(r8) GDZ (IJSDIM, KMAX) ! altitude - REAL(r8) GDZM (IJSDIM, KMAX+1) ! altitude (half lev) + REAL(r8) GPRCI (IJSDIM, KMAX) !< rainfall generation + REAL(r8) GSNWI (IJSDIM, KMAX) !< snowfall generation + REAL(r8) GDH (IJSDIM, KMAX) !< moist static energy + REAL(r8) GDW (IJSDIM, KMAX) !< total water + REAL(r8) GDQ (IJSDIM, KMAX, NTR) !< humidity etc + REAL(r8) GDQI (IJSDIM, KMAX) !< cloud ice + REAL(r8) GDQS (IJSDIM, KMAX) !< saturate humidity + REAL(r8) GDS (IJSDIM, KMAX) !< dry static energy + REAL(r8) GDHS (IJSDIM, KMAX) !< saturate moist static energy + REAL(r8) GDT (IJSDIM, KMAX) !< air temperature T + REAL(r8) GDU (IJSDIM, KMAX) !< u-velocity + REAL(r8) GDV (IJSDIM, KMAX) !< v-velocity + REAL(r8) GDZ (IJSDIM, KMAX) !< altitude + REAL(r8) GDZM (IJSDIM, KMAX+1) !< altitude (half lev) REAL(r8) FDQS (IJSDIM, KMAX) REAL(r8) DELP (IJSDIM, KMAX) REAL(r8) DELPI (IJSDIM, KMAX) @@ -3138,29 +3137,29 @@ SUBROUTINE CUMDWN & ! Freeze & Melt & Evaporation ! ! [INTERNAL WORK] ! Note: Some variables have 3-dimensions for the purpose of budget check. - REAL(r8) EVAPD (IJSDIM, KMAX) ! evap. in downdraft - REAL(r8) SUBLD (IJSDIM, KMAX) ! subl. in downdraft - REAL(r8) EVAPE (IJSDIM, KMAX) ! evap. in environment - REAL(r8) SUBLE (IJSDIM, KMAX) ! subl. in environment - REAL(r8) EVAPX (IJSDIM, KMAX) ! evap. env. to DD - REAL(r8) SUBLX (IJSDIM, KMAX) ! subl. env. to DD - REAL(r8) GMDDE (IJSDIM, KMAX) ! downdraft entrainment - REAL(r8) SNMLT (IJSDIM, KMAX) ! melt - freeze - REAL(r8) GCHDD (IJSDIM, KMAX) ! MSE detrainment - REAL(r8) GCWDD (IJSDIM, KMAX) ! water detrainment - REAL(r8) GTTEV (IJSDIM, KMAX) ! T tendency by evaporation - REAL(r8) GTQEV (IJSDIM, KMAX) ! q tendency by evaporation - REAL(r8) GCHD (ISTS:IENS) ! downdraft MSE - REAL(r8) GCWD (ISTS:IENS) ! downdraft q + REAL(r8) EVAPD (IJSDIM, KMAX) !< evap. in downdraft + REAL(r8) SUBLD (IJSDIM, KMAX) !< subl. in downdraft + REAL(r8) EVAPE (IJSDIM, KMAX) !< evap. in environment + REAL(r8) SUBLE (IJSDIM, KMAX) !< subl. in environment + REAL(r8) EVAPX (IJSDIM, KMAX) !< evap. env. to DD + REAL(r8) SUBLX (IJSDIM, KMAX) !< subl. env. to DD + REAL(r8) GMDDE (IJSDIM, KMAX) !< downdraft entrainment + REAL(r8) SNMLT (IJSDIM, KMAX) !< melt - freeze + REAL(r8) GCHDD (IJSDIM, KMAX) !< MSE detrainment + REAL(r8) GCWDD (IJSDIM, KMAX) !< water detrainment + REAL(r8) GTTEV (IJSDIM, KMAX) !< T tendency by evaporation + REAL(r8) GTQEV (IJSDIM, KMAX) !< q tendency by evaporation + REAL(r8) GCHD (ISTS:IENS) !< downdraft MSE + REAL(r8) GCWD (ISTS:IENS) !< downdraft q ! profiles of downdraft variables for AW flux tendencies - REAL(r8) GCdseD(ISTS:IENS, KMAX) ! downdraft dse - REAL(r8) GCqvD (ISTS:IENS, KMAX) ! downdraft qv -! REAL(r8) GCqlD (ISTS:IENS, KMAX) ! downdraft ql -! REAL(r8) GCqiD (ISTS:IENS, KMAX) ! downdraft qi - REAL(r8) GCtrD (ISTS:IENS, ntrq:ntr) ! downdraft tracer - - REAL(r8) GCUD (ISTS:IENS) ! downdraft u - REAL(r8) GCVD (ISTS:IENS) ! downdraft v + REAL(r8) GCdseD(ISTS:IENS, KMAX) !< downdraft dse + REAL(r8) GCqvD (ISTS:IENS, KMAX) !< downdraft qv +! REAL(r8) GCqlD (ISTS:IENS, KMAX) !< downdraft ql +! REAL(r8) GCqiD (ISTS:IENS, KMAX) !< downdraft qi + REAL(r8) GCtrD (ISTS:IENS, ntrq:ntr) !< downdraft tracer + + REAL(r8) GCUD (ISTS:IENS) !< downdraft u + REAL(r8) GCVD (ISTS:IENS) !< downdraft v REAL(r8) FSNOW (ISTS:IENS) REAL(r8) GMDDD (ISTS:IENS) @@ -3179,24 +3178,24 @@ SUBROUTINE CUMDWN & ! Freeze & Melt & Evaporation !DD#endif ! ! [INTERNAL PARM] - REAL(r8), parameter :: TWSNOW = 273.15_r8 ! wet-bulb temp. rain/snow - REAL(r8), parameter :: FTMLT = 4._r8 ! temp. factor for melt - REAL(r8), parameter :: GMFLXC = 5.e-2_r8 ! critical mass flux - REAL(r8), parameter :: VTERMS = 2._r8 ! terminal velocity of snowflake -! REAL(r8), parameter :: MELTAU = 10._r8 ! melting timescale - REAL(r8), parameter :: MELTAU = 20._r8 ! melting timescale ! Moorthi june 30, 2017 -! -! REAL(r8), parameter :: EVAPR = 0.4_r8 ! evaporation factor ! Moorthi June 28, 2017 - REAL(r8), parameter :: EVAPR = 0.3_r8 ! evaporation factor -! REAL(r8), parameter :: EVAPR = 0._r8 ! evaporation factor - REAL(r8), parameter :: REVPDD = 1._r8 ! max rate of DD to evapolation - REAL(r8), parameter :: RDDR = 5.e-4_r8 ! DD rate (T0 R0 W0)^-1 -! REAL(r8), parameter :: RDDR = 0._r8 ! DD rate (T0 R0 W0)^-1 - REAL(r8), parameter :: RDDMX = 0.5_r8 ! norm. flux of downdraft - REAL(r8), parameter :: VTERM = 5._r8 ! term. vel. of precip. -! REAL(r8), parameter :: VTERM = 4._r8 ! term. vel. of precip. ! Moorthi June 28, 2017 - REAL(r8), parameter :: EVATAU = 2._r8 ! evaporation/sublimation timescale - REAL(r8), parameter :: ZDMIN = 5.e2_r8 ! min altitude of downdraft detrainment + REAL(r8), parameter :: TWSNOW = 273.15_r8 !< wet-bulb temp. rain/snow + REAL(r8), parameter :: FTMLT = 4._r8 !< temp. factor for melt + REAL(r8), parameter :: GMFLXC = 5.e-2_r8 !< critical mass flux + REAL(r8), parameter :: VTERMS = 2._r8 !< terminal velocity of snowflake +! REAL(r8), parameter :: MELTAU = 10._r8 !< melting timescale + REAL(r8), parameter :: MELTAU = 20._r8 !< melting timescale ! Moorthi june 30, 2017 +! +! REAL(r8), parameter :: EVAPR = 0.4_r8 !< evaporation factor ! Moorthi June 28, 2017 + REAL(r8), parameter :: EVAPR = 0.3_r8 !< evaporation factor +! REAL(r8), parameter :: EVAPR = 0._r8 !< evaporation factor + REAL(r8), parameter :: REVPDD = 1._r8 !< max rate of DD to evapolation + REAL(r8), parameter :: RDDR = 5.e-4_r8 !< DD rate (T0 R0 W0)^-1 +! REAL(r8), parameter :: RDDR = 0._r8 !< DD rate (T0 R0 W0)^-1 + REAL(r8), parameter :: RDDMX = 0.5_r8 !< norm. flux of downdraft + REAL(r8), parameter :: VTERM = 5._r8 !< term. vel. of precip. +! REAL(r8), parameter :: VTERM = 4._r8 !< term. vel. of precip. ! Moorthi June 28, 2017 + REAL(r8), parameter :: EVATAU = 2._r8 !< evaporation/sublimation timescale + REAL(r8), parameter :: ZDMIN = 5.e2_r8 !< min altitude of downdraft detrainment real(r8), parameter :: evapovtrm=EVAPR/VTERM !NOTE @@ -3543,16 +3542,16 @@ SUBROUTINE CUMCLD & !! cloudiness INTEGER, INTENT(IN) :: IJSDIM, KMAX ! DD, for GFS, pass in ! ! [OUTPUT] - REAL(r8) CUMFRC(IJSDIM) ! cumulus cloud fraction + REAL(r8) CUMFRC(IJSDIM) !< cumulus cloud fraction ! ! [MODIFY] - REAL(r8) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus - REAL(r8) QLIQ (IJSDIM, KMAX) ! cloud liquid - REAL(r8) QICE (IJSDIM, KMAX) ! cloud ice - REAL(r8) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus + REAL(r8) CUMCLW(IJSDIM, KMAX) !< cloud water in cumulus + REAL(r8) QLIQ (IJSDIM, KMAX) !< cloud liquid + REAL(r8) QICE (IJSDIM, KMAX) !< cloud ice + REAL(r8) FLIQC (IJSDIM, KMAX) !< liquid ratio in cumulus ! ! [INPUT] - REAL(r8) GMFLX (IJSDIM, KMAX) ! cumulus mass flux + REAL(r8) GMFLX (IJSDIM, KMAX) !< cumulus mass flux INTEGER KTMX INTEGER ISTS, IENS ! @@ -3561,11 +3560,11 @@ SUBROUTINE CUMCLD & !! cloudiness REAL(r8) CUMF, QC, wrk ! ! [INTERNAL PARAM] - REAL(r8), parameter :: CMFMIN = 2.e-3_r8, &! Mc->cloudiness - CMFMAX = 3.e-1_r8, &! Mc->cloudiness - CLMIN = 1.e-3_r8, &! cloudiness Min. - CLMAX = 0.1_r8, &! cloudiness Max. - FACLW = 0.1_r8, &! Mc->CLW + REAL(r8), parameter :: CMFMIN = 2.e-3_r8, &!< Mc->cloudiness + CMFMAX = 3.e-1_r8, &!< Mc->cloudiness + CLMIN = 1.e-3_r8, &!< cloudiness Min. + CLMAX = 0.1_r8, &!< cloudiness Max. + FACLW = 0.1_r8, &!< Mc->CLW FACLF = (CLMAX-CLMIN)/LOG(CMFMAX/CMFMIN) ! CUMFRC(ISTS:IENS) = zero diff --git a/physics/drag_suite.F90 b/physics/drag_suite.F90 index 2e68ceb12..195b1862e 100644 --- a/physics/drag_suite.F90 +++ b/physics/drag_suite.F90 @@ -1309,7 +1309,6 @@ subroutine drag_suite_run( & end subroutine drag_suite_run !------------------------------------------------------------------- ! - subroutine drag_suite_finalize() end subroutine drag_suite_finalize diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90 index e46a17d9a..db5eef99a 100644 --- a/physics/module_MYNNSFC_wrapper.F90 +++ b/physics/module_MYNNSFC_wrapper.F90 @@ -40,7 +40,7 @@ end subroutine mynnsfc_wrapper_init subroutine mynnsfc_wrapper_finalize () end subroutine mynnsfc_wrapper_finalize -!>\defgroup gsd_mynn_sfc GSD MYNN Surface Layer Scheme Module +!>\defgroup mynn_sfc GSD MYNN Surface Layer Scheme Module !> \brief This scheme (1) performs pre-mynnsfc work, (2) runs the mynn sfc layer scheme, and (3) performs post-mynnsfc work !! \section arg_table_mynnsfc_wrapper_run Argument Table !! \htmlinclude mynnsfc_wrapper_run.html diff --git a/physics/module_SGSCloud_RadPre.F90 b/physics/module_SGSCloud_RadPre.F90 index 592b88e32..a315f9efa 100644 --- a/physics/module_SGSCloud_RadPre.F90 +++ b/physics/module_SGSCloud_RadPre.F90 @@ -6,6 +6,7 @@ !! scale) qc, qi and cloud fraction coming from the microphysics scheme. !! 4) Recompute the diagnostic high, mid, low, total and bl clouds to be consistent with radiation +!> \defgroup sgsrad_group GSD sgscloud_radpre_run Module module sgscloud_radpre contains @@ -16,9 +17,7 @@ end subroutine sgscloud_radpre_init subroutine sgscloud_radpre_finalize () end subroutine sgscloud_radpre_finalize -!> \defgroup sgsrad_group GSD sgscloud_radpre_run Module -!> \ingroup sgscloud_radpre -!! This interstitial code adds the subgrid clouds to the resolved-scale clouds +!> This interstitial code adds the subgrid clouds to the resolved-scale clouds !! if there is no resolved-scale clouds in that particular grid box. It can also !! specify a cloud fraction for resolved-scale clouds, using Xu-Randall (1996), !! if desired. diff --git a/physics/module_gfdl_cloud_microphys.F90 b/physics/module_gfdl_cloud_microphys.F90 index 5750d27fd..da332728f 100644 --- a/physics/module_gfdl_cloud_microphys.F90 +++ b/physics/module_gfdl_cloud_microphys.F90 @@ -1,6 +1,6 @@ !> \file gfdl_cloud_microphys.F90 !! This file contains the full GFDL cloud microphysics (Chen and Lin (2013) -!! \cite chen_and_lin_2013 and Zhou et al. 2019 \cite zhou2019toward). +!! \cite chen_and_lin_2013 and Zhou et al. 2019 \cite zhou_etal_2019). !! The module is paired with 'gfdl_fv_sat_adj', which performs the "fast" !! processes !>author Shian-Jiann Lin, Linjiong Zhou diff --git a/physics/module_sf_mynn.F90 b/physics/module_sf_mynn.F90 index 340fb703a..d09332571 100644 --- a/physics/module_sf_mynn.F90 +++ b/physics/module_sf_mynn.F90 @@ -2,7 +2,7 @@ !! This file contains !WRF:MODEL_LAYER:PHYSICS ! -!>\ingroup gsd_mynn_sfc +!>\ingroup mynn_sfc !>\defgroup module_sf_mynn_mod GSD MYNN SFC Module MODULE module_sf_mynn @@ -123,7 +123,7 @@ MODULE module_sf_mynn !------------------------------------------------------------------- !------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !! This subroutine SUBROUTINE SFCLAY_mynn( & U3D,V3D,T3D,QV3D,P3D,dz8w, & !in @@ -471,7 +471,7 @@ SUBROUTINE SFCLAY_mynn( & END SUBROUTINE SFCLAY_MYNN !------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !! This subroutine calculates u*, z/L, and the exchange coefficients !! which are passed to subsequent scheme to calculate the fluxes. !! This scheme has options to calculate the fluxes and near-surface @@ -2126,7 +2126,7 @@ SUBROUTINE SFCLAY1D_mynn( & END SUBROUTINE SFCLAY1D_mynn !------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the thermal and moisture roughness lengths !! from Zilitinkevich (1995) and Zilitinkevich et al. (2001) over !! land and water, respectively. @@ -2198,6 +2198,7 @@ SUBROUTINE zilitinkevich_1995(Z_0,Zt,Zq,restar,ustar,KARMAN,& END SUBROUTINE zilitinkevich_1995 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE davis_etal_2008(Z_0,ustar) !a.k.a. : Donelan et al. (2004) @@ -2228,7 +2229,7 @@ SUBROUTINE davis_etal_2008(Z_0,ustar) END SUBROUTINE davis_etal_2008 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !>This formulation for roughness length was designed account for. !!wave steepness. SUBROUTINE Taylor_Yelland_2001(Z_0,ustar,wsp10) @@ -2254,7 +2255,7 @@ SUBROUTINE Taylor_Yelland_2001(Z_0,ustar,wsp10) END SUBROUTINE Taylor_Yelland_2001 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !>This version of Charnock's relation employs a varying !! Charnock parameter, similar to COARE3.0 [Fairall et al. (2003)]. !! The Charnock parameter CZC is varied from .011 to .018. @@ -2279,7 +2280,7 @@ SUBROUTINE charnock_1955(Z_0,ustar,wsp10,visc,zu) END SUBROUTINE charnock_1955 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This version of Charnock's relation employs a varying !!Charnock parameter, taken from COARE 3.5 [Edson et al. (2001, JPO)]. !!The Charnock parameter CZC is varied from about .005 to .028 @@ -2307,7 +2308,7 @@ SUBROUTINE edson_etal_2013(Z_0,ustar,wsp10,visc,zu) END SUBROUTINE edson_etal_2013 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This formulation for the thermal and moisture roughness lengths !! (Zt and Zq) relates them to Z0 via the roughness Reynolds number (Ren). !!This formula comes from Fairall et al. (2003). It is modified from @@ -2340,7 +2341,7 @@ SUBROUTINE garratt_1992(Zt,Zq,Z_0,Ren,landsea) END SUBROUTINE garratt_1992 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !>This formulation for thermal and moisture roughness length (Zt and Zq) !! as a function of the roughness Reynolds number (Ren) comes from the !! COARE3.0 formulation, empirically derived from COARE and HEXMAX data @@ -2388,7 +2389,7 @@ SUBROUTINE fairall_etal_2003(Zt,Zq,Ren,ustar,visc,rstoch,spp_pbl) END SUBROUTINE fairall_etal_2003 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This formulation for thermal and moisture roughness length (Zt and Zq) !! as a function of the roughness Reynolds number (Ren) comes from the !! COARE 3.5/4.0 formulation, empirically derived from COARE and HEXMAX data @@ -2417,7 +2418,7 @@ SUBROUTINE fairall_etal_2014(Zt,Zq,Ren,ustar,visc,rstoch,spp_pbl) END SUBROUTINE fairall_etal_2014 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This is a modified version of Yang et al (2002 QJRMS, 2008 JAMC) !! and Chen et al (2010, J of Hydromet). Although it was originally !! designed for arid regions with bare soil, it is modified @@ -2475,6 +2476,7 @@ SUBROUTINE Yang_2008(Z_0,Zt,Zq,ustar,tstar,qst,Ren,visc) END SUBROUTINE Yang_2008 !-------------------------------------------------------------------- ! Taken from the GFS (sfc_diff.f) for comparison +!>\ingroup mynn_sfc SUBROUTINE GFS_z0_lnd(z0max,shdmax,z1,vegtype,ivegsrc,z0pert) REAL, INTENT(OUT) :: z0max @@ -2534,10 +2536,7 @@ SUBROUTINE GFS_z0_lnd(z0max,shdmax,z1,vegtype,ivegsrc,z0pert) END SUBROUTINE GFS_z0_lnd !-------------------------------------------------------------------- ! Taken from the GFS (sfc_diff.f) for comparison -! This formulation comes from Zheng et al. (2012, JGR), which is a -! modified form of the Zilitinkevich thermal roughness length but it adds -! the dependence on vegetation fraction. -! +!>\ingroup mynn_sfc SUBROUTINE GFS_zt_lnd(ztmax,z0max,sigmaf,ztpert,ustar_lnd) REAL, INTENT(OUT) :: ztmax @@ -2565,6 +2564,7 @@ SUBROUTINE GFS_zt_lnd(ztmax,z0max,sigmaf,ztpert,ustar_lnd) END SUBROUTINE GFS_zt_lnd !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE GFS_z0_ocn(z0rl_ocn,ustar_ocn,WSPD,z1,sfc_z0_type,redrag) REAL, INTENT(OUT) :: z0rl_ocn @@ -2617,6 +2617,7 @@ SUBROUTINE GFS_z0_ocn(z0rl_ocn,ustar_ocn,WSPD,z1,sfc_z0_type,redrag) END SUBROUTINE GFS_z0_ocn !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE GFS_zt_ocn(ztmax,z0rl_ocn,restar,WSPD,z1,sfc_z0_type) REAL, INTENT(OUT) :: ztmax @@ -2659,6 +2660,7 @@ SUBROUTINE GFS_zt_ocn(ztmax,z0rl_ocn,restar,WSPD,z1,sfc_z0_type) END SUBROUTINE GFS_zt_ocn !-------------------------------------------------------------------- +!>\ingroup mynn_sfc !! add fitted z0,zt curves for hurricane application (used in HWRF/HMON) !! Weiguo Wang, 2019-0425 @@ -2708,6 +2710,7 @@ SUBROUTINE znot_m_v6(uref, znotm) END SUBROUTINE znot_m_v6 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE znot_t_v6(uref, znott) IMPLICIT NONE @@ -2772,7 +2775,7 @@ SUBROUTINE znot_t_v6(uref, znott) END SUBROUTINE znot_t_v6 !------------------------------------------------------------------- - +!>\ingroup mynn_sfc SUBROUTINE znot_m_v7(uref, znotm) IMPLICIT NONE @@ -2820,6 +2823,7 @@ SUBROUTINE znot_m_v7(uref, znotm) END SUBROUTINE znot_m_v7 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE znot_t_v7(uref, znott) IMPLICIT NONE @@ -2886,7 +2890,7 @@ SUBROUTINE znot_t_v7(uref, znott) END SUBROUTINE znot_t_v7 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This is taken from Andreas (2002; J. of Hydromet) and !! Andreas et al. (2005; BLM). !! @@ -2937,7 +2941,7 @@ SUBROUTINE Andreas_2002(Z_0,bvisc,ustar,Zt,Zq) END SUBROUTINE Andreas_2002 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the stability functions based off !! of Hogstrom (1996). SUBROUTINE PSI_Hogstrom_1996(psi_m, psi_h, zL, Zt, Z_0, Za) @@ -2973,7 +2977,7 @@ SUBROUTINE PSI_Hogstrom_1996(psi_m, psi_h, zL, Zt, Z_0, Za) END SUBROUTINE PSI_Hogstrom_1996 !-------------------------------------------------------------------- -!> \ingroup module_sf_mynn_mod +!> \ingroup mynn_sfc !> This subroutine returns the stability functions based off !! of Hogstrom (1996), but with different constants compatible !! with Dyer and Hicks (1970/74?). This formulation is used for @@ -3012,7 +3016,7 @@ SUBROUTINE PSI_DyerHicks(psi_m, psi_h, zL, Zt, Z_0, Za) END SUBROUTINE PSI_DyerHicks !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the stability functions based off !! of Beljaar and Holtslag 1991, which is an extension of Holtslag !! and Debruin 1989. @@ -3043,7 +3047,7 @@ SUBROUTINE PSI_Beljaars_Holtslag_1991(psi_m, psi_h, zL) END SUBROUTINE PSI_Beljaars_Holtslag_1991 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the stability functions come from !! Zilitinkevich and Esau (2007, BM), which are formulatioed from the !! "generalized similarity theory" and tuned to the LES DATABASE64 @@ -3074,7 +3078,7 @@ SUBROUTINE PSI_Zilitinkevich_Esau_2007(psi_m, psi_h, zL) END SUBROUTINE PSI_Zilitinkevich_Esau_2007 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the flux-profile relationships !! of Businger el al. 1971. SUBROUTINE PSI_Businger_1971(psi_m, psi_h, zL) @@ -3106,7 +3110,7 @@ SUBROUTINE PSI_Businger_1971(psi_m, psi_h, zL) END SUBROUTINE PSI_Businger_1971 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns flux-profile relatioships based off !!of Lobocki (1993), which is derived from the MY-level 2 model. !!Suselj and Sood (2010) applied the surface layer length scales @@ -3139,12 +3143,12 @@ SUBROUTINE PSI_Suselj_Sood_2010(psi_m, psi_h, zL) END SUBROUTINE PSI_Suselj_Sood_2010 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc +!! This subroutine returns the stability functions based off +!! of Cheng and Brutseart (2005, BLM), for use in stable conditions only. +!! The returned values are the combination of psi((za+zo)/L) - psi(z0/L) SUBROUTINE PSI_CB2005(psim1,psih1,zL,z0L) - ! This subroutine returns the stability functions based off - ! of Cheng and Brutseart (2005, BLM), for use in stable conditions only. - ! The returned values are the combination of psi((za+zo)/L) - psi(z0/L) - IMPLICIT NONE REAL, INTENT(IN) :: zL,z0L REAL, INTENT(OUT) :: psim1,psih1 @@ -3158,12 +3162,12 @@ SUBROUTINE PSI_CB2005(psim1,psih1,zL,z0L) END SUBROUTINE PSI_CB2005 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc +!! This subroutine returns a more robust z/L that best matches +!! the z/L from Hogstrom (1996) for unstable conditions and Beljaars +!! and Holtslag (1991) for stable conditions. SUBROUTINE Li_etal_2010(zL, Rib, zaz0, z0zt) - !This subroutine returns a more robust z/L that best matches - !the z/L from Hogstrom (1996) for unstable conditions and Beljaars - !and Holtslag (1991) for stable conditions. - IMPLICIT NONE REAL, INTENT(OUT) :: zL REAL, INTENT(IN) :: Rib, zaz0, z0zt @@ -3439,6 +3443,7 @@ END SUBROUTINE psi_init ! ================================================================== ! ... integrated similarity functions from MYNN... ! +!>\ingroup mynn_sfc REAL function psim_stable_full(zolf) REAL :: zolf @@ -3448,6 +3453,7 @@ REAL function psim_stable_full(zolf) return end function +!>\ingroup mynn_sfc REAL function psih_stable_full(zolf) REAL :: zolf @@ -3457,6 +3463,7 @@ REAL function psih_stable_full(zolf) return end function +!>\ingroup mynn_sfc REAL function psim_unstable_full(zolf) REAL :: zolf,x,ym,psimc,psimk @@ -3473,6 +3480,7 @@ REAL function psim_unstable_full(zolf) return end function +!>\ingroup mynn_sfc REAL function psih_unstable_full(zolf) REAL :: zolf,y,yh,psihc,psihk diff --git a/physics/module_sf_noahmp_glacier.f90 b/physics/module_sf_noahmp_glacier.f90 index ebe4654bd..be24381f4 100644 --- a/physics/module_sf_noahmp_glacier.f90 +++ b/physics/module_sf_noahmp_glacier.f90 @@ -13,58 +13,58 @@ module noahmp_glacier_globals ! physical constants: ! !------------------------------------------------------------------------------------------! - real (kind=kind_phys), parameter :: grav = 9.80616 !acceleration due to gravity (m/s2) - real (kind=kind_phys), parameter :: sb = 5.67e-08 !stefan-boltzmann constant (w/m2/k4) - real (kind=kind_phys), parameter :: vkc = 0.40 !von karman constant - real (kind=kind_phys), parameter :: tfrz = 273.16 !freezing/melting point (k) - real (kind=kind_phys), parameter :: hsub = 2.8440e06 !latent heat of sublimation (j/kg) - real (kind=kind_phys), parameter :: hvap = 2.5104e06 !latent heat of vaporization (j/kg) - real (kind=kind_phys), parameter :: hfus = 0.3336e06 !latent heat of fusion (j/kg) - real (kind=kind_phys), parameter :: cwat = 4.188e06 !specific heat capacity of water (j/m3/k) - real (kind=kind_phys), parameter :: cice = 2.094e06 !specific heat capacity of ice (j/m3/k) - real (kind=kind_phys), parameter :: cpair = 1004.64 !heat capacity dry air at const pres (j/kg/k) - real (kind=kind_phys), parameter :: tkwat = 0.6 !thermal conductivity of water (w/m/k) - real (kind=kind_phys), parameter :: tkice = 2.2 !thermal conductivity of ice (w/m/k) - real (kind=kind_phys), parameter :: tkair = 0.023 !thermal conductivity of air (w/m/k) - real (kind=kind_phys), parameter :: rair = 287.04 !gas constant for dry air (j/kg/k) - real (kind=kind_phys), parameter :: rw = 461.269 !gas constant for water vapor (j/kg/k) - real (kind=kind_phys), parameter :: denh2o = 1000. !density of water (kg/m3) - real (kind=kind_phys), parameter :: denice = 917. !density of ice (kg/m3) + real (kind=kind_phys), parameter :: grav = 9.80616 !< acceleration due to gravity (m/s2) + real (kind=kind_phys), parameter :: sb = 5.67e-08 !< stefan-boltzmann constant (w/m2/k4) + real (kind=kind_phys), parameter :: vkc = 0.40 !< von karman constant + real (kind=kind_phys), parameter :: tfrz = 273.16 !< freezing/melting point (k) + real (kind=kind_phys), parameter :: hsub = 2.8440e06 !< latent heat of sublimation (j/kg) + real (kind=kind_phys), parameter :: hvap = 2.5104e06 !< latent heat of vaporization (j/kg) + real (kind=kind_phys), parameter :: hfus = 0.3336e06 !< latent heat of fusion (j/kg) + real (kind=kind_phys), parameter :: cwat = 4.188e06 !< specific heat capacity of water (j/m3/k) + real (kind=kind_phys), parameter :: cice = 2.094e06 !< specific heat capacity of ice (j/m3/k) + real (kind=kind_phys), parameter :: cpair = 1004.64 !< heat capacity dry air at const pres (j/kg/k) + real (kind=kind_phys), parameter :: tkwat = 0.6 !< thermal conductivity of water (w/m/k) + real (kind=kind_phys), parameter :: tkice = 2.2 !< thermal conductivity of ice (w/m/k) + real (kind=kind_phys), parameter :: tkair = 0.023 !< thermal conductivity of air (w/m/k) + real (kind=kind_phys), parameter :: rair = 287.04 !< gas constant for dry air (j/kg/k) + real (kind=kind_phys), parameter :: rw = 461.269 !< gas constant for water vapor (j/kg/k) + real (kind=kind_phys), parameter :: denh2o = 1000. !< density of water (kg/m3) + real (kind=kind_phys), parameter :: denice = 917. !< density of ice (kg/m3) ! =====================================options for different schemes================================ -! options for ground snow surface albedo -! 1-> BATS; 2 -> CLASS +!> options for ground snow surface albedo +!! 1-> BATS; 2 -> CLASS INTEGER :: OPT_ALB != 2 !(suggested 2) -! options for partitioning precipitation into rainfall & snowfall -! 1 -> Jordan (1991); 2 -> BATS: when SFCTMP SFCTMP options for partitioning precipitation into rainfall & snowfall +!! 1 -> Jordan (1991); 2 -> BATS: when SFCTMP SFCTMP zero heat flux from bottom (ZBOT and TBOT not used) -! 2 -> TBOT at ZBOT (8m) read from a file (original Noah) +!> options for lower boundary condition of soil temperature +!! 1 -> zero heat flux from bottom (ZBOT and TBOT not used) +!! 2 -> TBOT at ZBOT (8m) read from a file (original Noah) INTEGER :: OPT_TBOT != 2 !(suggested 2) -! options for snow/soil temperature time scheme (only layer 1) -! 1 -> semi-implicit; 2 -> full implicit (original Noah) +!> options for snow/soil temperature time scheme (only layer 1) +!! 1 -> semi-implicit; 2 -> full implicit (original Noah) INTEGER :: OPT_STC != 1 !(suggested 1) -! options for glacier treatment -! 1 -> include phase change of ice; 2 -> ice treatment more like original Noah +!> options for glacier treatment +!! 1 -> include phase change of ice; 2 -> ice treatment more like original Noah INTEGER :: OPT_GLA != 1 !(suggested 1) ! adjustable parameters for snow processes - REAL, PARAMETER :: Z0SNO = 0.002 !snow surface roughness length (m) (0.002) - REAL, PARAMETER :: SSI = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03) - REAL, PARAMETER :: SWEMX = 1.00 !new snow mass to fully cover old snow (mm) - !equivalent to 10mm depth (density = 100 kg/m3) + REAL, PARAMETER :: Z0SNO = 0.002 !< snow surface roughness length (m) (0.002) + REAL, PARAMETER :: SSI = 0.03 !< liquid water holding capacity for snowpack (m3/m3) (0.03) + REAL, PARAMETER :: SWEMX = 1.00 !< new snow mass to fully cover old snow (mm) + !< equivalent to 10mm depth (density = 100 kg/m3) !------------------------------------------------------------------------------------------! end module noahmp_glacier_globals @@ -138,72 +138,72 @@ subroutine noahmp_glacier (& implicit none ! -------------------------------------------------------------------------------------------------- ! input - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle [0-1] - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !no. of soil layers - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(in) :: uu !wind speed in eastward dir (m/s) - real (kind=kind_phys) , intent(in) :: vv !wind speed in northward dir (m/s) - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) lowest model layer - real (kind=kind_phys) , intent(in) :: soldn !downward shortwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: prcp !precipitation rate (kg m-2 s-1) - real (kind=kind_phys) , intent(in) :: lwdn !downward longwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: tbot !bottom condition for soil temp. [k] - real (kind=kind_phys) , intent(in) :: zlvl !reference height (m) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle [0-1] + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< no. of soil layers + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(in) :: uu !< wind speed in eastward dir (m/s) + real (kind=kind_phys) , intent(in) :: vv !< wind speed in northward dir (m/s) + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) lowest model layer + real (kind=kind_phys) , intent(in) :: soldn !< downward shortwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: prcp !< precipitation rate (kg m-2 s-1) + real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: tbot !< bottom condition for soil temp. [k] + real (kind=kind_phys) , intent(in) :: zlvl !< reference height (m) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) ! input/output : need arbitary intial values - real (kind=kind_phys) , intent(inout) :: qsnow !snowfall [mm/s] - real (kind=kind_phys) , intent(inout) :: sneqvo !snow mass at last time step (mm) - real (kind=kind_phys) , intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys) , intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys) , intent(inout) :: ch !sensible heat exchange coefficient + real (kind=kind_phys) , intent(inout) :: qsnow !< snowfall [mm/s] + real (kind=kind_phys) , intent(inout) :: sneqvo !< snow mass at last time step (mm) + real (kind=kind_phys) , intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys) , intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys) , intent(inout) :: ch !< sensible heat exchange coefficient ! prognostic variables - integer , intent(inout) :: isnow !actual no. of snow layers [-] - real (kind=kind_phys) , intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !soil moisture (ice + liq.) [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys) , intent(inout) :: tg !ground temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil temperature [k] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !liquid soil moisture [m3/m3] - real (kind=kind_phys) , intent(inout) :: tauss !non-dimensional snow age - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer + integer , intent(inout) :: isnow !< actual no. of snow layers [-] + real (kind=kind_phys) , intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !< soil moisture (ice + liq.) [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys) , intent(inout) :: tg !< ground temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil temperature [k] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< liquid soil moisture [m3/m3] + real (kind=kind_phys) , intent(inout) :: tauss !< non-dimensional snow age + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer ! output - real (kind=kind_phys) , intent(out) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fira !total net lw rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fgev !ground evap heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: ssoil !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys) , intent(out) :: trad !surface radiative temperature (k) - real (kind=kind_phys) , intent(out) :: edir !soil surface evaporation rate (mm/s] - real (kind=kind_phys) , intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys) , intent(out) :: runsub !baseflow (saturation excess) [mm/s] - real (kind=kind_phys) , intent(out) :: sag !solar rad absorbed by ground (w/m2) - real (kind=kind_phys) , intent(out) :: albedo !surface albedo [-] - real (kind=kind_phys) , intent(out) :: qsnbot !snowmelt [mm/s] - real (kind=kind_phys) , intent(out) :: ponding!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding1!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding2!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: t2m !2-m air temperature over bare ground part [k] + real (kind=kind_phys) , intent(out) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fira !< total net lw rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fgev !< ground evap heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: ssoil !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys) , intent(out) :: trad !< surface radiative temperature (k) + real (kind=kind_phys) , intent(out) :: edir !< soil surface evaporation rate (mm/s] + real (kind=kind_phys) , intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys) , intent(out) :: runsub !< baseflow (saturation excess) [mm/s] + real (kind=kind_phys) , intent(out) :: sag !< solar rad absorbed by ground (w/m2) + real (kind=kind_phys) , intent(out) :: albedo !< surface albedo [-] + real (kind=kind_phys) , intent(out) :: qsnbot !< snowmelt [mm/s] + real (kind=kind_phys) , intent(out) :: ponding!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding1!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding2!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: t2m !< 2-m air temperature over bare ground part [k] real (kind=kind_phys) , intent(out) :: q2e real (kind=kind_phys) , intent(out) :: emissi real (kind=kind_phys) , intent(out) :: fpice real (kind=kind_phys) , intent(out) :: ch2b real (kind=kind_phys) , intent(out) :: esnow - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !snow albedo (diffuse) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !< snow albedo (diffuse) #ifdef CCPP @@ -212,25 +212,25 @@ subroutine noahmp_glacier (& #endif ! local - integer :: iz !do-loop index - integer, dimension(-nsnow+1:nsoil) :: imelt !phase change index [1-melt; 2-freeze] - real (kind=kind_phys) :: rhoair !density air (kg/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys) :: thair !potential temperature (k) - real (kind=kind_phys) :: qair !specific humidity (kg/kg) (q2/(1+q2)) - real (kind=kind_phys) :: eair !vapor pressure air (pa) - real (kind=kind_phys), dimension( 1: 2) :: solad !incoming direct solar rad (w/m2) - real (kind=kind_phys), dimension( 1: 2) :: solai !incoming diffuse solar rad (w/m2) - real (kind=kind_phys), dimension( 1:nsoil) :: sice !soil ice content (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !partial volume ice of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !partial volume liq of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !effective porosity [m3/m3] - real (kind=kind_phys) :: qdew !ground surface dew rate [mm/s] - real (kind=kind_phys) :: qvap !ground surface evap. rate [mm/s] - real (kind=kind_phys) :: lathea !latent heat [j/kg] - real (kind=kind_phys) :: qmelt !internal pack melt - real (kind=kind_phys) :: swdown !downward solar [w/m2] - real (kind=kind_phys) :: beg_wb !beginning water for error check + integer :: iz !< do-loop index + integer, dimension(-nsnow+1:nsoil) :: imelt !< phase change index [1-melt; 2-freeze] + real (kind=kind_phys) :: rhoair !< density air (kg/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys) :: thair !< potential temperature (k) + real (kind=kind_phys) :: qair !< specific humidity (kg/kg) (q2/(1+q2)) + real (kind=kind_phys) :: eair !< vapor pressure air (pa) + real (kind=kind_phys), dimension( 1: 2) :: solad !< incoming direct solar rad (w/m2) + real (kind=kind_phys), dimension( 1: 2) :: solai !< incoming diffuse solar rad (w/m2) + real (kind=kind_phys), dimension( 1:nsoil) :: sice !< soil ice content (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !< partial volume ice of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !< partial volume liq of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys) :: qdew !< ground surface dew rate [mm/s] + real (kind=kind_phys) :: qvap !< ground surface evap. rate [mm/s] + real (kind=kind_phys) :: lathea !< latent heat [j/kg] + real (kind=kind_phys) :: qmelt !< internal pack melt + real (kind=kind_phys) :: swdown !< downward solar [w/m2] + real (kind=kind_phys) :: beg_wb !< beginning water for error check real (kind=kind_phys) :: zbot = -8.0 character*256 message @@ -330,6 +330,7 @@ subroutine noahmp_glacier (& end subroutine noahmp_glacier ! ================================================================================================== !>\ingroup NoahMP_LSM +!! re-process atmospheric forcing subroutine atm_glacier (sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & qair ,eair ,rhoair ,solad ,solai , & swdown ) @@ -340,25 +341,25 @@ subroutine atm_glacier (sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & ! -------------------------------------------------------------------------------------------------- ! inputs - 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) - real (kind=kind_phys) , intent(in) :: soldn !downward shortwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle [0-1] + 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) + real (kind=kind_phys) , intent(in) :: soldn !< downward shortwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle [0-1] ! outputs - real (kind=kind_phys) , intent(out) :: thair !potential temperature (k) - real (kind=kind_phys) , intent(out) :: qair !specific humidity (kg/kg) (q2/(1+q2)) - real (kind=kind_phys) , intent(out) :: eair !vapor pressure air (pa) - real (kind=kind_phys), dimension( 1: 2), intent(out) :: solad !incoming direct solar radiation (w/m2) - real (kind=kind_phys), dimension( 1: 2), intent(out) :: solai !incoming diffuse solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: rhoair !density air (kg/m3) - real (kind=kind_phys) , intent(out) :: swdown !downward solar filtered by sun angle [w/m2] + real (kind=kind_phys) , intent(out) :: thair !< potential temperature (k) + real (kind=kind_phys) , intent(out) :: qair !< specific humidity (kg/kg) (q2/(1+q2)) + real (kind=kind_phys) , intent(out) :: eair !< vapor pressure air (pa) + real (kind=kind_phys), dimension( 1: 2), intent(out) :: solad !< incoming direct solar radiation (w/m2) + real (kind=kind_phys), dimension( 1: 2), intent(out) :: solai !< incoming diffuse solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: rhoair !< density air (kg/m3) + real (kind=kind_phys) , intent(out) :: swdown !< downward solar filtered by sun angle [w/m2] !locals - real (kind=kind_phys) :: pair !atm bottom level pressure (pa) + real (kind=kind_phys) :: pair !< atm bottom level pressure (pa) ! -------------------------------------------------------------------------------------------------- pair = sfcprs ! atm bottom level pressure (pa) @@ -408,43 +409,43 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair , & !i implicit none ! -------------------------------------------------------------------------------------------------- ! inputs - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !number of soil layers - integer , intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: qsnow !snowfall on the ground (mm/s) - real (kind=kind_phys) , intent(in) :: rhoair !density air (kg/m3) - real (kind=kind_phys) , intent(in) :: eair !vapor pressure air (pa) - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(in) :: qair !specific humidity (kg/kg) - real (kind=kind_phys) , intent(in) :: sfctmp !air temperature (k) - real (kind=kind_phys) , intent(in) :: lwdn !downward longwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: uu !wind speed in e-w dir (m/s) - real (kind=kind_phys) , intent(in) :: vv !wind speed in n-s dir (m/s) - real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solad !incoming direct solar rad. (w/m2) - real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solai !incoming diffuse solar rad. (w/m2) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle (0-1) - real (kind=kind_phys) , intent(in) :: zref !reference height (m) - real (kind=kind_phys) , intent(in) :: tbot !bottom condition for soil temp. (k) - real (kind=kind_phys) , intent(in) :: zbot !depth for tbot [m] - real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !depth of snow & soil layer-bottom [m] + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< number of soil layers + integer , intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: qsnow !< snowfall on the ground (mm/s) + real (kind=kind_phys) , intent(in) :: rhoair !< density air (kg/m3) + real (kind=kind_phys) , intent(in) :: eair !< vapor pressure air (pa) + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(in) :: qair !< specific humidity (kg/kg) + real (kind=kind_phys) , intent(in) :: sfctmp !< air temperature (k) + real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: uu !< wind speed in e-w dir (m/s) + real (kind=kind_phys) , intent(in) :: vv !< wind speed in n-s dir (m/s) + real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solad !< incoming direct solar rad. (w/m2) + real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solai !< incoming diffuse solar rad. (w/m2) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle (0-1) + real (kind=kind_phys) , intent(in) :: zref !< reference height (m) + real (kind=kind_phys) , intent(in) :: tbot !< bottom condition for soil temp. (k) + real (kind=kind_phys) , intent(in) :: zbot !< depth for tbot [m] + real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< depth of snow & soil layer-bottom [m] ! input & output - real (kind=kind_phys) , intent(inout) :: tg !ground temperature (k) - real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil temperature [k] - real (kind=kind_phys) , intent(inout) :: snowh !snow height [m] - real (kind=kind_phys) , intent(inout) :: sneqv !snow mass (mm) - real (kind=kind_phys) , intent(inout) :: sneqvo !snow mass at last time step (mm) - real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: sh2o !liquid soil moisture [m3/m3] - real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: smc !soil moisture (ice + liq.) [m3/m3] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snice !snow ice mass (kg/m2) - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snliq !snow liq mass (kg/m2) - real (kind=kind_phys) , intent(inout) :: albold !snow albedo at last time step(class type) - real (kind=kind_phys) , intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys) , intent(inout) :: ch !sensible heat exchange coefficient - real (kind=kind_phys) , intent(inout) :: tauss !snow aging factor - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer + real (kind=kind_phys) , intent(inout) :: tg !< ground temperature (k) + real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil temperature [k] + real (kind=kind_phys) , intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys) , intent(inout) :: sneqv !< snow mass (mm) + real (kind=kind_phys) , intent(inout) :: sneqvo !< snow mass at last time step (mm) + real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: sh2o !< liquid soil moisture [m3/m3] + real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: smc !< soil moisture (ice + liq.) [m3/m3] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snice !< snow ice mass (kg/m2) + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow liq mass (kg/m2) + real (kind=kind_phys) , intent(inout) :: albold !< snow albedo at last time step(class type) + real (kind=kind_phys) , intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys) , intent(inout) :: ch !< sensible heat exchange coefficient + real (kind=kind_phys) , intent(inout) :: tauss !< snow aging factor + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer #ifdef CCPP character(len=*) , intent(inout) :: errmsg @@ -452,42 +453,42 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair , & !i #endif ! outputs - integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !phase change index [1-melt; 2-freeze] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snicev !partial volume ice [m3/m3] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snliqv !partial volume liq. water [m3/m3] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: epore !effective porosity [m3/m3] - real (kind=kind_phys) , intent(out) :: qmelt !snowmelt [mm/s] - real (kind=kind_phys) , intent(out) :: ponding!pounding at ground [mm] - real (kind=kind_phys) , intent(out) :: sag !solar rad. absorbed by ground (w/m2) - real (kind=kind_phys) , intent(out) :: fsa !tot. absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fsr !tot. reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fira !total net lw. rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fgev !ground evaporation (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: trad !radiative temperature (k) - real (kind=kind_phys) , intent(out) :: t2m !2 m height air temperature (k) - real (kind=kind_phys) , intent(out) :: ssoil !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys) , intent(out) :: lathea !latent heat vap./sublimation (j/kg) + integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !< phase change index [1-melt; 2-freeze] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snicev !< partial volume ice [m3/m3] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snliqv !< partial volume liq. water [m3/m3] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys) , intent(out) :: qmelt !< snowmelt [mm/s] + real (kind=kind_phys) , intent(out) :: ponding!< pounding at ground [mm] + real (kind=kind_phys) , intent(out) :: sag !< solar rad. absorbed by ground (w/m2) + real (kind=kind_phys) , intent(out) :: fsa !< tot. absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fsr !< tot. reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fira !< total net lw. rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fgev !< ground evaporation (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: trad !< radiative temperature (k) + real (kind=kind_phys) , intent(out) :: t2m !< 2 m height air temperature (k) + real (kind=kind_phys) , intent(out) :: ssoil !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys) , intent(out) :: lathea !< latent heat vap./sublimation (j/kg) real (kind=kind_phys) , intent(out) :: q2e real (kind=kind_phys) , intent(out) :: emissi - real (kind=kind_phys) , intent(out) :: ch2b !sensible heat conductance, canopy air to zlvl air (m/s) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !snow albedo (diffuse) + real (kind=kind_phys) , intent(out) :: ch2b !< sensible heat conductance, canopy air to zlvl air (m/s) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !< snow albedo (diffuse) ! local - real (kind=kind_phys) :: ur !wind speed at height zlvl (m/s) - real (kind=kind_phys) :: zlvl !reference height (m) - real (kind=kind_phys) :: rsurf !ground surface resistance (s/m) - real (kind=kind_phys) :: zpd !zero plane displacement (m) - real (kind=kind_phys) :: z0mg !z0 momentum, ground (m) - real (kind=kind_phys) :: emg !ground emissivity - real (kind=kind_phys) :: fire !emitted ir (w/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: fact !temporary used in phase change - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: df !thermal conductivity [w/m/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hcpct !heat capacity [j/m3/k] - real (kind=kind_phys) :: gamma !psychrometric constant (pa/k) - real (kind=kind_phys) :: rhsur !raltive humidity in surface soil/snow air space (-) + real (kind=kind_phys) :: ur !< wind speed at height zlvl (m/s) + real (kind=kind_phys) :: zlvl !< reference height (m) + real (kind=kind_phys) :: rsurf !< ground surface resistance (s/m) + real (kind=kind_phys) :: zpd !< zero plane displacement (m) + real (kind=kind_phys) :: z0mg !< z0 momentum, ground (m) + real (kind=kind_phys) :: emg !< ground emissivity + real (kind=kind_phys) :: fire !< emitted ir (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: fact !< temporary used in phase change + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: df !< thermal conductivity [w/m/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hcpct !< heat capacity [j/m3/k] + real (kind=kind_phys) :: gamma !< psychrometric constant (pa/k) + real (kind=kind_phys) :: rhsur !< raltive humidity in surface soil/snow air space (-) ! --------------------------------------------------------------------------------------------------- @@ -600,29 +601,29 @@ subroutine thermoprop_glacier (nsoil ,nsnow ,isnow ,dzsnso , & !in implicit none ! -------------------------------------------------------------------------------------------------- ! inputs - integer , intent(in) :: nsoil !number of soil layers - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys) , intent(in) :: dt !time step [s] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !snow ice mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !snow liq mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !thickness of snow/soil layers [m] - real (kind=kind_phys) , intent(in) :: snowh !snow height [m] + integer , intent(in) :: nsoil !< number of soil layers + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys) , intent(in) :: dt !< time step [s] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !< snow ice mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !< snow liq mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< thickness of snow/soil layers [m] + real (kind=kind_phys) , intent(in) :: snowh !< snow height [m] ! outputs - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: df !thermal conductivity [w/m/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: hcpct !heat capacity [j/m3/k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !partial volume of ice [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !partial volume of liquid water [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !effective porosity [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: fact !computing energy for phase change + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: df !< thermal conductivity [w/m/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: hcpct !< heat capacity [j/m3/k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !< partial volume of ice [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !< partial volume of liquid water [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: fact !< computing energy for phase change ! -------------------------------------------------------------------------------------------------- ! locals integer :: iz, iz2 - real (kind=kind_phys), dimension(-nsnow+1: 0) :: cvsno !volumetric specific heat (j/m3/k) - real (kind=kind_phys), dimension(-nsnow+1: 0) :: tksno !snow thermal conductivity (j/m3/k) - real (kind=kind_phys) :: zmid !mid-point soil depth + real (kind=kind_phys), dimension(-nsnow+1: 0) :: cvsno !< volumetric specific heat (j/m3/k) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: tksno !< snow thermal conductivity (j/m3/k) + real (kind=kind_phys) :: zmid !< mid-point soil depth ! -------------------------------------------------------------------------------------------------- ! compute snow thermal conductivity and heat capacity @@ -665,6 +666,7 @@ end subroutine thermoprop_glacier ! ================================================================================================== ! -------------------------------------------------------------------------------------------------- !>\ingroup NoahMP_LSM +!! snow bulk density, volumetric capacity, and thermal conductivity subroutine csnow_glacier (isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso , & !in tksno ,cvsno ,snicev ,snliqv ,epore ) !out ! -------------------------------------------------------------------------------------------------- @@ -674,25 +676,25 @@ subroutine csnow_glacier (isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso , !--------------------------------------------------------------------------------------------------- ! inputs - integer, intent(in) :: isnow !number of snow layers (-) - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !number of soil layers - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !snow ice mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !snow liq mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer thickness [m] + integer, intent(in) :: isnow !< number of snow layers (-) + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< number of soil layers + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !< snow ice mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !< snow liq mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer thickness [m] ! outputs - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: cvsno !volumetric specific heat (j/m3/k) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: tksno !thermal conductivity (w/m/k) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !partial volume of ice [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !partial volume of liquid water [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !effective porosity [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: cvsno !< volumetric specific heat (j/m3/k) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: tksno !< thermal conductivity (w/m/k) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !< partial volume of ice [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !< partial volume of liquid water [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !< effective porosity [m3/m3] ! locals integer :: iz - real (kind=kind_phys), dimension(-nsnow+1: 0) :: bdsnoi !bulk density of snow(kg/m3) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: bdsnoi !< bulk density of snow(kg/m3) !--------------------------------------------------------------------------------------------------- ! thermal capacity of snow @@ -730,35 +732,35 @@ subroutine radiation_glacier (dt ,tg ,sneqvo ,sneqv ,cosz , & !i implicit none ! -------------------------------------------------------------------------------------------------- ! input - real (kind=kind_phys), intent(in) :: dt !time step [s] - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), intent(in) :: sneqvo !snow mass at last time step(mm) - real (kind=kind_phys), intent(in) :: sneqv !snow mass (mm) - real (kind=kind_phys), intent(in) :: cosz !cosine solar zenith angle (0-1) - real (kind=kind_phys), intent(in) :: qsnow !snowfall (mm/s) - real (kind=kind_phys), dimension(1:2) , intent(in) :: solad !incoming direct solar radiation (w/m2) - real (kind=kind_phys), dimension(1:2) , intent(in) :: solai !incoming diffuse solar radiation (w/m2) + real (kind=kind_phys), intent(in) :: dt !< time step [s] + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(in) :: sneqvo !< snow mass at last time step(mm) + real (kind=kind_phys), intent(in) :: sneqv !< snow mass (mm) + real (kind=kind_phys), intent(in) :: cosz !< cosine solar zenith angle (0-1) + real (kind=kind_phys), intent(in) :: qsnow !< snowfall (mm/s) + real (kind=kind_phys), dimension(1:2) , intent(in) :: solad !< incoming direct solar radiation (w/m2) + real (kind=kind_phys), dimension(1:2) , intent(in) :: solai !< incoming diffuse solar radiation (w/m2) ! inout - real (kind=kind_phys), intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys), intent(inout) :: tauss !non-dimensional snow age - real (kind=kind_phys), dimension(1:2) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) :: albsni !snow albedo (diffuse) + real (kind=kind_phys), intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys), intent(inout) :: tauss !< non-dimensional snow age + real (kind=kind_phys), dimension(1:2) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) :: albsni !< snow albedo (diffuse) ! output - real (kind=kind_phys), intent(out) :: sag !solar radiation absorbed by ground (w/m2) - real (kind=kind_phys), intent(out) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys), intent(out) :: fsa !total absorbed solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: sag !< solar radiation absorbed by ground (w/m2) + real (kind=kind_phys), intent(out) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: fsa !< total absorbed solar radiation (w/m2) ! local - integer :: ib !number of radiation bands - integer :: nband !number of radiation bands - real (kind=kind_phys) :: fage !snow age function (0 - new snow) - real (kind=kind_phys) :: alb !current class albedo - real (kind=kind_phys) :: abs !temporary absorbed rad - real (kind=kind_phys) :: ref !temporary reflected rad - real (kind=kind_phys) :: fsno !snow-cover fraction, = 1 if any snow - real (kind=kind_phys), dimension(1:2) :: albice !albedo land ice: 1=vis, 2=nir + integer :: ib !< number of radiation bands + integer :: nband !< number of radiation bands + real (kind=kind_phys) :: fage !< snow age function (0 - new snow) + real (kind=kind_phys) :: alb !< current class albedo + real (kind=kind_phys) :: abs !< temporary absorbed rad + real (kind=kind_phys) :: ref !< temporary reflected rad + real (kind=kind_phys) :: fsno !< snow-cover fraction, = 1 if any snow + real (kind=kind_phys), dimension(1:2) :: albice !< albedo land ice: 1=vis, 2=nir real (kind=kind_phys),parameter :: mpe = 1.e-6 @@ -820,27 +822,27 @@ subroutine snow_age_glacier (dt,tg,sneqvo,sneqv,tauss,fage) ! from bats ! ------------------------ input/output variables -------------------------------------------------- !input - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), intent(in) :: sneqvo !snow mass at last time step(mm) - real (kind=kind_phys), intent(in) :: sneqv !snow water per unit ground area (mm) + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(in) :: sneqvo !< snow mass at last time step(mm) + real (kind=kind_phys), intent(in) :: sneqv !< snow water per unit ground area (mm) ! inout - real (kind=kind_phys), intent(inout) :: tauss !non-dimensional snow age + real (kind=kind_phys), intent(inout) :: tauss !< non-dimensional snow age !output - real (kind=kind_phys), intent(out) :: fage !snow age + real (kind=kind_phys), intent(out) :: fage !< snow age !local - real (kind=kind_phys) :: tage !total aging effects - real (kind=kind_phys) :: age1 !effects of grain growth due to vapor diffusion - real (kind=kind_phys) :: age2 !effects of grain growth at freezing of melt water - real (kind=kind_phys) :: age3 !effects of soot - real (kind=kind_phys) :: dela !temporary variable - real (kind=kind_phys) :: sge !temporary variable - real (kind=kind_phys) :: dels !temporary variable - real (kind=kind_phys) :: dela0 !temporary variable - real (kind=kind_phys) :: arg !temporary variable + real (kind=kind_phys) :: tage !< total aging effects + real (kind=kind_phys) :: age1 !< effects of grain growth due to vapor diffusion + real (kind=kind_phys) :: age2 !< effects of grain growth at freezing of melt water + real (kind=kind_phys) :: age3 !< effects of soot + real (kind=kind_phys) :: dela !< temporary variable + real (kind=kind_phys) :: sge !< temporary variable + real (kind=kind_phys) :: dels !< temporary variable + real (kind=kind_phys) :: dela0 !< temporary variable + real (kind=kind_phys) :: arg !< temporary variable ! see yang et al. (1997) j.of climate for detail. !--------------------------------------------------------------------------------------------------- @@ -874,26 +876,26 @@ subroutine snowalb_bats_glacier (nband,cosz,fage,albsnd,albsni) ! -------------------------------------------------------------------------------------------------- ! input - integer,intent(in) :: nband !number of waveband classes + integer,intent(in) :: nband !< number of waveband classes - real (kind=kind_phys),intent(in) :: cosz !cosine solar zenith angle - real (kind=kind_phys),intent(in) :: fage !snow age correction + real (kind=kind_phys),intent(in) :: cosz !< cosine solar zenith angle + real (kind=kind_phys),intent(in) :: fage !< snow age correction ! output - real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !snow albedo for direct(1=vis, 2=nir) - real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !snow albedo for diffuse + real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !< snow albedo for direct(1=vis, 2=nir) + real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !< snow albedo for diffuse ! --------------------------------------------------------------------------------------------- - real (kind=kind_phys) :: fzen !zenith angle correction - real (kind=kind_phys) :: cf1 !temperary variable - real (kind=kind_phys) :: sl2 !2.*sl - real (kind=kind_phys) :: sl1 !1/sl - real (kind=kind_phys) :: sl !adjustable parameter - real (kind=kind_phys), parameter :: c1 = 0.2 !default in bats - real (kind=kind_phys), parameter :: c2 = 0.5 !default in bats -! real (kind=kind_phys), parameter :: c1 = 0.2 * 2. ! double the default to match sleepers river's -! real (kind=kind_phys), parameter :: c2 = 0.5 * 2. ! snow surface albedo (double aging effects) + real (kind=kind_phys) :: fzen !< zenith angle correction + real (kind=kind_phys) :: cf1 !< temperary variable + real (kind=kind_phys) :: sl2 !< 2.*sl + real (kind=kind_phys) :: sl1 !< 1/sl + real (kind=kind_phys) :: sl !< adjustable parameter + real (kind=kind_phys), parameter :: c1 = 0.2 !< default in bats + real (kind=kind_phys), parameter :: c2 = 0.5 !< default in bats +! real (kind=kind_phys), parameter :: c1 = 0.2 * 2. !< double the default to match sleepers river's +! real (kind=kind_phys), parameter :: c2 = 0.5 * 2. !< snow surface albedo (double aging effects) ! --------------------------------------------------------------------------------------------- ! zero albedos for all points @@ -924,19 +926,19 @@ subroutine snowalb_class_glacier (nband,qsnow,dt,alb,albold,albsnd,albsni) ! -------------------------------------------------------------------------------------------------- ! input - integer,intent(in) :: nband !number of waveband classes + integer,intent(in) :: nband !< number of waveband classes - real (kind=kind_phys),intent(in) :: qsnow !snowfall (mm/s) - real (kind=kind_phys),intent(in) :: dt !time step (sec) - real (kind=kind_phys),intent(in) :: albold !snow albedo at last time step + real (kind=kind_phys),intent(in) :: qsnow !< snowfall (mm/s) + real (kind=kind_phys),intent(in) :: dt !< time step (sec) + real (kind=kind_phys),intent(in) :: albold !< snow albedo at last time step ! in & out real (kind=kind_phys), intent(inout) :: alb ! ! output - real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !snow albedo for direct(1=vis, 2=nir) - real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !snow albedo for diffuse + real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !< snow albedo for direct(1=vis, 2=nir) + real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !< snow albedo for diffuse ! --------------------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------------------- @@ -964,6 +966,8 @@ subroutine snowalb_class_glacier (nband,qsnow,dt,alb,albold,albsnd,albsni) end subroutine snowalb_class_glacier ! ================================================================================================== !>\ingroup NoahMP_LSM +!! use newton-raphson iteration to solve ground (tg) temperature +!! that balances the surface energy budgets for glacier. subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso ,z0m , & !in zlvl ,zpd ,qair ,sfctmp ,rhoair ,sfcprs , & !in ur ,gamma ,rsurf ,lwdn ,rhsur ,smc , & !in @@ -988,37 +992,37 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso ,z implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !number of soil layers - real (kind=kind_phys), intent(in) :: emg !ground emissivity - integer, intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity of snow/soil (w/m/k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !thickness of snow/soil layers (m) - real (kind=kind_phys), intent(in) :: z0m !roughness length, 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) :: qair !specific humidity at height zlvl (kg/kg) - real (kind=kind_phys), intent(in) :: sfctmp !air temperature at reference height (k) - real (kind=kind_phys), intent(in) :: rhoair !density air (kg/m3) - real (kind=kind_phys), intent(in) :: sfcprs !density air (kg/m3) - real (kind=kind_phys), intent(in) :: ur !wind speed at height zlvl (m/s) - real (kind=kind_phys), intent(in) :: gamma !psychrometric constant (pa/k) - real (kind=kind_phys), intent(in) :: rsurf !ground surface resistance (s/m) - real (kind=kind_phys), intent(in) :: lwdn !atmospheric longwave radiation (w/m2) - real (kind=kind_phys), intent(in) :: rhsur !raltive humidity in surface soil/snow air space (-) - real (kind=kind_phys), intent(in) :: eair !vapor pressure air at height (pa) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !soil/snow temperature (k) - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smc !soil moisture - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: sh2o !soil liquid water - real (kind=kind_phys), intent(in) :: sag !solar radiation absorbed by ground (w/m2) - real (kind=kind_phys), intent(in) :: snowh !actual snow depth [m] - real (kind=kind_phys), intent(in) :: lathea !latent heat of vaporization/subli (j/kg) + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< number of soil layers + real (kind=kind_phys), intent(in) :: emg !< ground emissivity + integer, intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity of snow/soil (w/m/k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< thickness of snow/soil layers (m) + real (kind=kind_phys), intent(in) :: z0m !< roughness length, 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) :: qair !< specific humidity at height zlvl (kg/kg) + real (kind=kind_phys), intent(in) :: sfctmp !< air temperature at reference height (k) + real (kind=kind_phys), intent(in) :: rhoair !< density air (kg/m3) + real (kind=kind_phys), intent(in) :: sfcprs !< density air (kg/m3) + real (kind=kind_phys), intent(in) :: ur !< wind speed at height zlvl (m/s) + real (kind=kind_phys), intent(in) :: gamma !< psychrometric constant (pa/k) + real (kind=kind_phys), intent(in) :: rsurf !< ground surface resistance (s/m) + real (kind=kind_phys), intent(in) :: lwdn !< atmospheric longwave radiation (w/m2) + real (kind=kind_phys), intent(in) :: rhsur !< raltive humidity in surface soil/snow air space (-) + real (kind=kind_phys), intent(in) :: eair !< vapor pressure air at height (pa) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< soil/snow temperature (k) + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smc !< soil moisture + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: sh2o !< soil liquid water + real (kind=kind_phys), intent(in) :: sag !< solar radiation absorbed by ground (w/m2) + real (kind=kind_phys), intent(in) :: snowh !< actual snow depth [m] + real (kind=kind_phys), intent(in) :: lathea !< latent heat of vaporization/subli (j/kg) ! input/output - real (kind=kind_phys), intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys), intent(inout) :: ch !sensible heat exchange coefficient - real (kind=kind_phys), intent(inout) :: tgb !ground temperature (k) - real (kind=kind_phys), intent(inout) :: qsfc !mixing ratio at lowest model layer + real (kind=kind_phys), intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys), intent(inout) :: ch !< sensible heat exchange coefficient + real (kind=kind_phys), intent(inout) :: tgb !< ground temperature (k) + real (kind=kind_phys), intent(inout) :: qsfc !< mixing ratio at lowest model layer #ifdef CCPP character(len=*), intent(inout) :: errmsg @@ -1027,49 +1031,49 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso ,z ! output ! -sab + irb[tg] + shb[tg] + evb[tg] + ghb[tg] = 0 - real (kind=kind_phys), intent(out) :: irb !net longwave rad (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: shb !sensible heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: evb !latent heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: ghb !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys), intent(out) :: t2mb !2 m height air temperature (k) - real (kind=kind_phys), intent(out) :: q2b !bare ground heat conductance - real (kind=kind_phys), intent(out) :: ehb2 !sensible heat conductance for diagnostics + real (kind=kind_phys), intent(out) :: irb !< net longwave rad (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: shb !< sensible heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: evb !< latent heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: ghb !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys), intent(out) :: t2mb !< 2 m height air temperature (k) + real (kind=kind_phys), intent(out) :: q2b !< bare ground heat conductance + real (kind=kind_phys), intent(out) :: ehb2 !< sensible heat conductance for diagnostics ! local variables - integer :: niterb !number of iterations for surface temperature - real (kind=kind_phys) :: mpe !prevents overflow error if division by zero - real (kind=kind_phys) :: dtg !change in tg, last iteration (k) - integer :: mozsgn !number of times moz changes sign - real (kind=kind_phys) :: mozold !monin-obukhov stability parameter from prior iteration - real (kind=kind_phys) :: fm2 !monin-obukhov momentum adjustment at 2m - real (kind=kind_phys) :: fh2 !monin-obukhov heat adjustment at 2m - real (kind=kind_phys) :: ch2 !surface exchange at 2m - real (kind=kind_phys) :: h !temporary sensible heat flux (w/m2) - real (kind=kind_phys) :: fv !friction velocity (m/s) - real (kind=kind_phys) :: cir !coefficients for ir as function of ts**4 - real (kind=kind_phys) :: cgh !coefficients for st as function of ts - real (kind=kind_phys) :: csh !coefficients for sh as function of ts - real (kind=kind_phys) :: cev !coefficients for ev as function of esat[ts] - real (kind=kind_phys) :: cq2b ! - integer :: iter !iteration index - real (kind=kind_phys) :: z0h !roughness length, sensible heat, ground (m) - real (kind=kind_phys) :: moz !monin-obukhov stability parameter - real (kind=kind_phys) :: fm !momentum stability correction, weighted by prior iters - real (kind=kind_phys) :: fh !sen heat stability correction, weighted by prior iters - real (kind=kind_phys) :: ramb !aerodynamic resistance for momentum (s/m) - real (kind=kind_phys) :: rahb !aerodynamic resistance for sensible heat (s/m) - real (kind=kind_phys) :: rawb !aerodynamic resistance for water vapor (s/m) - real (kind=kind_phys) :: estg !saturation vapor pressure at tg (pa) - real (kind=kind_phys) :: destg !d(es)/dt at tg (pa/k) - real (kind=kind_phys) :: esatw !es for water - real (kind=kind_phys) :: esati !es for ice - real (kind=kind_phys) :: dsatw !d(es)/dt at tg (pa/k) for water - real (kind=kind_phys) :: dsati !d(es)/dt at tg (pa/k) for ice - real (kind=kind_phys) :: a !temporary calculation - real (kind=kind_phys) :: b !temporary calculation - real (kind=kind_phys) :: t, tdc !kelvin to degree celsius with limit -50 to +50 - real (kind=kind_phys), dimension( 1:nsoil) :: sice !soil ice + integer :: niterb !< number of iterations for surface temperature + real (kind=kind_phys) :: mpe !< prevents overflow error if division by zero + real (kind=kind_phys) :: dtg !< change in tg, last iteration (k) + integer :: mozsgn !< number of times moz changes sign + real (kind=kind_phys) :: mozold !< monin-obukhov stability parameter from prior iteration + real (kind=kind_phys) :: fm2 !< monin-obukhov momentum adjustment at 2m + real (kind=kind_phys) :: fh2 !< monin-obukhov heat adjustment at 2m + real (kind=kind_phys) :: ch2 !< surface exchange at 2m + real (kind=kind_phys) :: h !< temporary sensible heat flux (w/m2) + real (kind=kind_phys) :: fv !< friction velocity (m/s) + real (kind=kind_phys) :: cir !< coefficients for ir as function of ts**4 + real (kind=kind_phys) :: cgh !< coefficients for st as function of ts + real (kind=kind_phys) :: csh !< coefficients for sh as function of ts + real (kind=kind_phys) :: cev !< coefficients for ev as function of esat[ts] + real (kind=kind_phys) :: cq2b !< + integer :: iter !< iteration index + real (kind=kind_phys) :: z0h !< roughness length, sensible heat, ground (m) + real (kind=kind_phys) :: moz !< monin-obukhov stability parameter + real (kind=kind_phys) :: fm !< momentum stability correction, weighted by prior iters + real (kind=kind_phys) :: fh !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys) :: ramb !< aerodynamic resistance for momentum (s/m) + real (kind=kind_phys) :: rahb !< aerodynamic resistance for sensible heat (s/m) + real (kind=kind_phys) :: rawb !< aerodynamic resistance for water vapor (s/m) + real (kind=kind_phys) :: estg !< saturation vapor pressure at tg (pa) + real (kind=kind_phys) :: destg !< d(es)/dt at tg (pa/k) + real (kind=kind_phys) :: esatw !< es for water + real (kind=kind_phys) :: esati !< es for ice + real (kind=kind_phys) :: dsatw !< d(es)/dt at tg (pa/k) for water + real (kind=kind_phys) :: dsati !< d(es)/dt at tg (pa/k) for ice + real (kind=kind_phys) :: a !< temporary calculation + real (kind=kind_phys) :: b !< temporary calculation + real (kind=kind_phys) :: t, tdc !< kelvin to degree celsius with limit -50 to +50 + real (kind=kind_phys), dimension( 1:nsoil) :: sice !< soil ice tdc(t) = min( 50., max(-50.,(t-tfrz)) ) @@ -1201,27 +1205,27 @@ end subroutine glacier_flux !>\ingroup NoahMP_LSM subroutine esat(t, esw, esi, desw, desi) !--------------------------------------------------------------------------------------------------- -! use polynomials to calculate saturation vapor pressure and derivative with -! respect to temperature: over water when t > 0 c and over ice when t <= 0 c +!> use polynomials to calculate saturation vapor pressure and derivative with +!! respect to temperature: over water when t > 0 c and over ice when t <= 0 c implicit none !--------------------------------------------------------------------------------------------------- ! in - real (kind=kind_phys), intent(in) :: t !temperature + real (kind=kind_phys), intent(in) :: t !< temperature !out - real (kind=kind_phys), intent(out) :: esw !saturation vapor pressure over water (pa) - real (kind=kind_phys), intent(out) :: esi !saturation vapor pressure over ice (pa) - real (kind=kind_phys), intent(out) :: desw !d(esat)/dt over water (pa/k) - real (kind=kind_phys), intent(out) :: desi !d(esat)/dt over ice (pa/k) + real (kind=kind_phys), intent(out) :: esw !< saturation vapor pressure over water (pa) + real (kind=kind_phys), intent(out) :: esi !< saturation vapor pressure over ice (pa) + real (kind=kind_phys), intent(out) :: desw !< d(esat)/dt over water (pa/k) + real (kind=kind_phys), intent(out) :: desi !< d(esat)/dt over ice (pa/k) ! local - real (kind=kind_phys) :: a0,a1,a2,a3,a4,a5,a6 !coefficients for esat over water - real (kind=kind_phys) :: b0,b1,b2,b3,b4,b5,b6 !coefficients for esat over ice - real (kind=kind_phys) :: c0,c1,c2,c3,c4,c5,c6 !coefficients for dsat over water - real (kind=kind_phys) :: d0,d1,d2,d3,d4,d5,d6 !coefficients for dsat over ice + real (kind=kind_phys) :: a0,a1,a2,a3,a4,a5,a6 !< coefficients for esat over water + real (kind=kind_phys) :: b0,b1,b2,b3,b4,b5,b6 !< coefficients for esat over ice + real (kind=kind_phys) :: c0,c1,c2,c3,c4,c5,c6 !< coefficients for dsat over water + real (kind=kind_phys) :: d0,d1,d2,d3,d4,d5,d6 !< coefficients for dsat over ice parameter (a0=6.107799961 , a1=4.436518521e-01, & a2=1.428945805e-02, a3=2.650648471e-04, & @@ -1251,6 +1255,7 @@ subroutine esat(t, esw, esi, desw, desi) end subroutine esat ! ================================================================================================== !>\ingroup NoahMP_LSM +!! compute surface drag coefficient cm for momentum and ch for heat subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in qair ,sfctmp ,h ,rhoair ,mpe ,ur , & !in #ifdef CCPP @@ -1265,25 +1270,25 @@ subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in implicit none ! ------------------------------------------------------------------------------------------------- ! inputs - integer, intent(in) :: iter !iteration index - 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) :: z0h !roughness length, sensible heat, ground (m) - real (kind=kind_phys), intent(in) :: z0m !roughness length, momentum, ground (m) - real (kind=kind_phys), intent(in) :: qair !specific humidity at reference height (kg/kg) - real (kind=kind_phys), intent(in) :: sfctmp !temperature at reference height (k) - real (kind=kind_phys), intent(in) :: h !sensible heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(in) :: rhoair !density air (kg/m**3) - real (kind=kind_phys), intent(in) :: mpe !prevents overflow error if division by zero - real (kind=kind_phys), intent(in) :: ur !wind speed (m/s) + integer, intent(in) :: iter !< iteration index + 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) :: z0h !< roughness length, sensible heat, ground (m) + real (kind=kind_phys), intent(in) :: z0m !< roughness length, momentum, ground (m) + real (kind=kind_phys), intent(in) :: qair !< specific humidity at reference height (kg/kg) + real (kind=kind_phys), intent(in) :: sfctmp !< temperature at reference height (k) + real (kind=kind_phys), intent(in) :: h !< sensible heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(in) :: rhoair !< density air (kg/m**3) + real (kind=kind_phys), intent(in) :: mpe !< prevents overflow error if division by zero + real (kind=kind_phys), intent(in) :: ur !< wind speed (m/s) ! in & out - real (kind=kind_phys), intent(inout) :: moz !monin-obukhov stability (z/l) - integer, intent(inout) :: mozsgn !number of times moz changes sign - real (kind=kind_phys), intent(inout) :: fm !momentum stability correction, weighted by prior iters - 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) :: moz !< monin-obukhov stability (z/l) + integer, intent(inout) :: mozsgn !< number of times moz changes sign + real (kind=kind_phys), intent(inout) :: fm !< momentum stability correction, weighted by prior iters + 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 #ifdef CCPP character(len=*), intent(inout) :: errmsg @@ -1291,26 +1296,26 @@ 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(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 + real (kind=kind_phys), intent(out) :: 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 ! locals - real (kind=kind_phys) :: mozold !monin-obukhov stability parameter from prior iteration - real (kind=kind_phys) :: tmpcm !temporary calculation for cm - real (kind=kind_phys) :: tmpch !temporary calculation for ch - real (kind=kind_phys) :: mol !monin-obukhov length (m) - real (kind=kind_phys) :: tvir !temporary virtual temperature (k) - real (kind=kind_phys) :: tmp1,tmp2,tmp3 !temporary calculation - real (kind=kind_phys) :: fmnew !stability correction factor, momentum, for current moz - real (kind=kind_phys) :: fhnew !stability correction factor, sen heat, for current moz - real (kind=kind_phys) :: moz2 !2/l - real (kind=kind_phys) :: tmpcm2 !temporary calculation for cm2 - real (kind=kind_phys) :: tmpch2 !temporary calculation for ch2 - real (kind=kind_phys) :: fm2new !stability correction factor, momentum, for current moz - real (kind=kind_phys) :: fh2new !stability correction factor, sen heat, for current moz - real (kind=kind_phys) :: tmp12,tmp22,tmp32 !temporary calculation + real (kind=kind_phys) :: mozold !< monin-obukhov stability parameter from prior iteration + real (kind=kind_phys) :: tmpcm !< temporary calculation for cm + real (kind=kind_phys) :: tmpch !< temporary calculation for ch + real (kind=kind_phys) :: mol !< monin-obukhov length (m) + real (kind=kind_phys) :: tvir !< temporary virtual temperature (k) + real (kind=kind_phys) :: tmp1,tmp2,tmp3 !< temporary calculation + real (kind=kind_phys) :: fmnew !< stability correction factor, momentum, for current moz + real (kind=kind_phys) :: fhnew !< stability correction factor, sen heat, for current moz + real (kind=kind_phys) :: moz2 !< 2/l + real (kind=kind_phys) :: tmpcm2 !< temporary calculation for cm2 + real (kind=kind_phys) :: tmpch2 !< temporary calculation for ch2 + real (kind=kind_phys) :: fm2new !< stability correction factor, momentum, for current moz + real (kind=kind_phys) :: fh2new !< stability correction factor, sen heat, for current moz + real (kind=kind_phys) :: tmp12,tmp22,tmp32 !< temporary calculation real (kind=kind_phys) :: cmfm, chfh, cm2fm2, ch2fh2 @@ -1430,26 +1435,26 @@ subroutine tsnosoi_glacier (nsoil ,nsnow ,isnow ,dt ,tbot , & !in hcpct , & !in stc ) !inout ! -------------------------------------------------------------------------------------------------- -! compute snow (up to 3l) and soil (4l) temperature. note that snow temperatures -! during melting season may exceed melting point (tfrz) but later in phasechange -! subroutine the snow temperatures are reset to tfrz for melting snow. +!> compute snow (up to 3l) and soil (4l) temperature. note that snow temperatures +!! during melting season may exceed melting point (tfrz) but later in phasechange +!! subroutine the snow temperatures are reset to tfrz for melting snow. ! -------------------------------------------------------------------------------------------------- implicit none ! -------------------------------------------------------------------------------------------------- !input - integer, intent(in) :: nsoil !no of soil layers (4) - integer, intent(in) :: nsnow !maximum no of snow layers (3) - integer, intent(in) :: isnow !actual no of snow layers + integer, intent(in) :: nsoil !< no of soil layers (4) + integer, intent(in) :: nsnow !< maximum no of snow layers (3) + integer, intent(in) :: isnow !< actual no of snow layers - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), intent(in) :: tbot ! - real (kind=kind_phys), intent(in) :: ssoil !ground heat flux (w/m2) - real (kind=kind_phys), intent(in) :: snowh !snow depth (m) - real (kind=kind_phys), intent(in) :: zbot !from soil surface (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !layer-bot. depth from snow surf.(m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !heat capacity (j/m3/k) + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), intent(in) :: tbot !< + real (kind=kind_phys), intent(in) :: ssoil !< ground heat flux (w/m2) + real (kind=kind_phys), intent(in) :: snowh !< snow depth (m) + real (kind=kind_phys), intent(in) :: zbot !< from soil surface (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< layer-bot. depth from snow surf.(m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !< heat capacity (j/m3/k) !input and output @@ -1458,10 +1463,10 @@ subroutine tsnosoi_glacier (nsoil ,nsnow ,isnow ,dt ,tbot , & !in !local integer :: iz - real (kind=kind_phys) :: zbotsno !zbot from snow surface + real (kind=kind_phys) :: zbotsno !< zbot from snow surface real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: ai, bi, ci, rhsts - real (kind=kind_phys) :: eflxb !energy influx from soil bottom (w/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: phi !light through water (w/m2) + real (kind=kind_phys) :: eflxb !< energy influx from soil bottom (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: phi !< light through water (w/m2) ! ---------------------------------------------------------------------- @@ -1496,34 +1501,34 @@ subroutine hrt_glacier (nsnow ,nsoil ,isnow ,zsnso , & !in botflx ) !out ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- -! calculate the right hand side of the time tendency term of the soil -! thermal diffusion equation. also to compute ( prepare ) the matrix -! coefficients for the tri-diagonal matrix of the implicit time scheme. +!> calculate the right hand side of the time tendency term of the soil +!! thermal diffusion equation. also to compute ( prepare ) the matrix +!! coefficients for the tri-diagonal matrix of the implicit time scheme. ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsoil !no of soil layers (4) - integer, intent(in) :: nsnow !maximum no of snow layers (3) - integer, intent(in) :: isnow !actual no of snow layers - real (kind=kind_phys), intent(in) :: tbot !bottom soil temp. at zbot (k) - real (kind=kind_phys), intent(in) :: zbot !depth of lower boundary condition (m) - !from soil surface not snow surface - real (kind=kind_phys), intent(in) :: ssoil !ground heat flux (w/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !depth of layer-bottom of snow/soil (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !snow/soil temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity [w/m/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !heat capacity [j/m3/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: phi !light through water (w/m2) + integer, intent(in) :: nsoil !< no of soil layers (4) + integer, intent(in) :: nsnow !< maximum no of snow layers (3) + integer, intent(in) :: isnow !< actual no of snow layers + real (kind=kind_phys), intent(in) :: tbot !< bottom soil temp. at zbot (k) + real (kind=kind_phys), intent(in) :: zbot !< depth of lower boundary condition (m) + !! from soil surface not snow surface + real (kind=kind_phys), intent(in) :: ssoil !< ground heat flux (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< depth of layer-bottom of snow/soil (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< snow/soil temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity [w/m/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !< heat capacity [j/m3/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: phi !< light through water (w/m2) ! output - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: rhsts !right-hand side of the matrix - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ai !left-hand side coefficient - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: bi !left-hand side coefficient - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ci !left-hand side coefficient - real (kind=kind_phys), intent(out) :: botflx !energy influx from soil bottom (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: rhsts !< right-hand side of the matrix + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ai !< left-hand side coefficient + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: bi !< left-hand side coefficient + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ci !< left-hand side coefficient + real (kind=kind_phys), intent(out) :: botflx !< energy influx from soil bottom (w/m2) ! local @@ -1592,7 +1597,7 @@ subroutine hstep_glacier (nsnow ,nsoil ,isnow ,dt , & !in ai ,bi ,ci ,rhsts , & !inout stc ) !inout ! ---------------------------------------------------------------------- -! calculate/update the soil temperature field. +!> calculate/update the soil temperature field. ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- @@ -1710,48 +1715,48 @@ subroutine phasechange_glacier (nsnow ,nsoil ,isnow ,dt ,fact , & smc ,sh2o , & !inout qmelt ,imelt ,ponding ) !out ! ---------------------------------------------------------------------- -! melting/freezing of snow water and soil water +!> melting/freezing of snow water and soil water ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! inputs - integer, intent(in) :: nsnow !maximum no. of snow layers [=3] - integer, intent(in) :: nsoil !no. of soil layers [=4] - integer, intent(in) :: isnow !actual no. of snow layers [<=3] - real (kind=kind_phys), intent(in) :: dt !land model time step (sec) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: fact !temporary - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer thickness [m] + integer, intent(in) :: nsnow !< maximum no. of snow layers [=3] + integer, intent(in) :: nsoil !< no. of soil layers [=4] + integer, intent(in) :: isnow !< actual no. of snow layers [<=3] + real (kind=kind_phys), intent(in) :: dt !< land model time step (sec) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: fact !< temporary + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer thickness [m] ! inputs/outputs - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), intent(inout) :: sneqv - real (kind=kind_phys), intent(inout) :: snowh - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid water [m3/m3] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !total soil water [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), intent(inout) :: sneqv !< + real (kind=kind_phys), intent(inout) :: snowh !< + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid water [m3/m3] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !< total soil water [m3/m3] ! outputs - real (kind=kind_phys), intent(out) :: qmelt !snowmelt rate [mm/s] - integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !phase change index - real (kind=kind_phys), intent(out) :: ponding!snowmelt when snow has no layer [mm] + real (kind=kind_phys), intent(out) :: qmelt !< snowmelt rate [mm/s] + integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !< phase change index + real (kind=kind_phys), intent(out) :: ponding!< snowmelt when snow has no layer [mm] ! local - integer :: j,k !do loop index - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hm !energy residual [w/m2] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: xm !melting or freezing water [kg/m2] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wmass0 - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wice0 - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wliq0 - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mice !soil/snow ice mass [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mliq !soil/snow liquid water mass [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: heatr !energy residual or loss after melting/freezing - real (kind=kind_phys) :: temp1 !temporary variables [kg/m2] - real (kind=kind_phys) :: propor - real (kind=kind_phys) :: xmf !total latent heat of phase change + integer :: j,k !< do loop index + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hm !< energy residual [w/m2] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: xm !< melting or freezing water [kg/m2] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wmass0 !< + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wice0 !< + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wliq0 !< + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mice !< soil/snow ice mass [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mliq !< soil/snow liquid water mass [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: heatr !< energy residual or loss after melting/freezing + real (kind=kind_phys) :: temp1 !< temporary variables [kg/m2] + real (kind=kind_phys) :: propor !< + real (kind=kind_phys) :: xmf !< total latent heat of phase change ! ---------------------------------------------------------------------- ! initialization @@ -2107,53 +2112,53 @@ subroutine water_glacier (nsnow ,nsoil ,imelt ,dt ,prcp ,sfctmp , & !in implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [1-melt; 2-freeze] - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: prcp !precipitation (mm/s) - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys), intent(inout) :: qvap !soil surface evaporation rate[mm/s] - real (kind=kind_phys), intent(inout) :: qdew !soil surface dew rate[mm/s] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold !ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [1-melt; 2-freeze] + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: prcp !< precipitation (mm/s) + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys), intent(inout) :: qvap !< soil surface evaporation rate[mm/s] + real (kind=kind_phys), intent(inout) :: qdew !< soil surface dew rate[mm/s] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold !< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) ! input/output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid water content [m3/m3] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice content [m3/m3] - real (kind=kind_phys) , intent(inout) :: ponding ![mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , intent(inout) :: fsh !total sensible heat (w/m2) [+ to atm] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid water content [m3/m3] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice content [m3/m3] + real (kind=kind_phys) , intent(inout) :: ponding !< [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , intent(inout) :: fsh !< total sensible heat (w/m2) [+ to atm] ! output - real (kind=kind_phys), intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys), intent(out) :: runsub !baseflow (sturation excess) [mm/s] - real (kind=kind_phys), intent(out) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(out) :: ponding1 - real (kind=kind_phys), intent(out) :: ponding2 - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] - real (kind=kind_phys), intent(out) :: fpice !precipitation frozen fraction - real (kind=kind_phys), intent(out) :: esnow ! + real (kind=kind_phys), intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys), intent(out) :: runsub !< baseflow (sturation excess) [mm/s] + real (kind=kind_phys), intent(out) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(out) :: ponding1!< + real (kind=kind_phys), intent(out) :: ponding2!< + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: fpice !< precipitation frozen fraction + real (kind=kind_phys), intent(out) :: esnow !< ! local - real (kind=kind_phys) :: qrain !rain at ground srf (mm) [+] - real (kind=kind_phys) :: qseva !soil surface evap rate [mm/s] - real (kind=kind_phys) :: qsdew !soil surface dew rate [mm/s] - real (kind=kind_phys) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys) :: qsnsub !snow surface sublimation rate [mm/s] - real (kind=kind_phys) :: snowhin !snow depth increasing rate (m/s) - real (kind=kind_phys) :: snoflow !glacier flow [mm/s] - real (kind=kind_phys) :: bdfall !density of new snow (mm water/m snow) - real (kind=kind_phys) :: replace !replacement water due to sublimation of glacier - real (kind=kind_phys), dimension( 1:nsoil) :: sice_save !soil ice content [m3/m3] - real (kind=kind_phys), dimension( 1:nsoil) :: sh2o_save !soil liquid water content [m3/m3] + real (kind=kind_phys) :: qrain !< rain at ground srf (mm) [+] + real (kind=kind_phys) :: qseva !< soil surface evap rate [mm/s] + real (kind=kind_phys) :: qsdew !< soil surface dew rate [mm/s] + real (kind=kind_phys) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys) :: qsnsub !< snow surface sublimation rate [mm/s] + real (kind=kind_phys) :: snowhin !< snow depth increasing rate (m/s) + real (kind=kind_phys) :: snoflow !< glacier flow [mm/s] + real (kind=kind_phys) :: bdfall !< density of new snow (mm water/m snow) + real (kind=kind_phys) :: replace !< replacement water due to sublimation of glacier + real (kind=kind_phys), dimension( 1:nsoil) :: sice_save !< soil ice content [m3/m3] + real (kind=kind_phys), dimension( 1:nsoil) :: sh2o_save !< soil liquid water content [m3/m3] integer :: ilev @@ -2276,41 +2281,41 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [0-no melt;1-melt] - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys), intent(in) :: snowhin!snow depth increasing rate (m/s) - real (kind=kind_phys), intent(in) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(inout) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys), intent(inout) :: qsnsub !snow surface sublimation rate[mm/s] - real (kind=kind_phys), intent(in) :: qrain !snow surface rain rate[mm/s] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(in) :: ficeold!ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [0-no melt;1-melt] + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys), intent(in) :: snowhin!< snow depth increasing rate (m/s) + real (kind=kind_phys), intent(in) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(inout) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys), intent(inout) :: qsnsub !< snow surface sublimation rate[mm/s] + real (kind=kind_phys), intent(in) :: qrain !< snow surface rain rate[mm/s] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(in) :: ficeold!< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) ! input & output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys), intent(inout) :: fsh !total sensible heat (w/m2) [+ to atm] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys), intent(inout) :: fsh !< total sensible heat (w/m2) [+ to atm] ! output - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] - real (kind=kind_phys), intent(out) :: snoflow!glacier flow [mm] - real (kind=kind_phys), intent(out) :: ponding1 - real (kind=kind_phys), intent(out) :: ponding2 + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: snoflow!< glacier flow [mm] + real (kind=kind_phys), intent(out) :: ponding1 !< + real (kind=kind_phys), intent(out) :: ponding2 !< ! local integer :: iz - real (kind=kind_phys) :: bdsnow !bulk density of snow (kg/m3) + real (kind=kind_phys) :: bdsnow !< bulk density of snow (kg/m3) ! ---------------------------------------------------------------------- snoflow = 0.0 ponding1 = 0.0 @@ -2399,33 +2404,33 @@ subroutine snowfall_glacier (nsoil ,nsnow ,dt ,qsnow ,snowhin , & !in isnow ,snowh ,dzsnso ,stc ,snice , & !inout snliq ,sneqv ) !inout ! ---------------------------------------------------------------------- -! snow depth and density to account for the new snowfall. -! new values of snow depth & density returned. +!> snow depth and density to account for the new snowfall. +!! new values of snow depth & density returned. ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsoil !no. of soil layers - integer, intent(in) :: nsnow !maximum no. of snow layers - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(in) :: snowhin!snow depth increasing rate (m/s) - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] + integer, intent(in) :: nsoil !< no. of soil layers + integer, intent(in) :: nsnow !< maximum no. of snow layers + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(in) :: snowhin!< snow depth increasing rate (m/s) + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow depth [m] - real (kind=kind_phys), intent(inout) :: sneqv !swow water equivalent [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !thickness of snow/soil layers (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow depth [m] + real (kind=kind_phys), intent(inout) :: sneqv !< swow water equivalent [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< thickness of snow/soil layers (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] ! local - integer :: newnode ! 0-no new layers, 1-creating new layers + integer :: newnode !< 0-no new layers, 1-creating new layers ! ---------------------------------------------------------------------- newnode = 0 @@ -2468,38 +2473,38 @@ subroutine compact_glacier (nsnow ,nsoil ,dt ,stc ,snice , & !in implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsoil !no. of soil layers [ =4] - integer, intent(in) :: nsnow !maximum no. of snow layers [ =3] - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [0-no melt;1-melt] - real (kind=kind_phys), intent(in) :: dt !time step (sec) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!ice fraction at last timestep + integer, intent(in) :: nsoil !< no. of soil layers [ =4] + integer, intent(in) :: nsnow !< maximum no. of snow layers [ =3] + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [0-no melt;1-melt] + real (kind=kind_phys), intent(in) :: dt !< time step (sec) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!< ice fraction at last timestep ! input and output - integer, intent(inout) :: isnow ! actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso ! snow layer thickness [m] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow layer thickness [m] ! local - real (kind=kind_phys), parameter :: c2 = 21.e-3 ![m3/kg] ! default 21.e-3 - real (kind=kind_phys), parameter :: c3 = 2.5e-6 ![1/s] - real (kind=kind_phys), parameter :: c4 = 0.04 ![1/k] - real (kind=kind_phys), parameter :: c5 = 2.0 ! - real (kind=kind_phys), parameter :: dm = 100.0 !upper limit on destructive metamorphism compaction [kg/m3] - real (kind=kind_phys), parameter :: eta0 = 0.8e+6 !viscosity coefficient [kg-s/m2] + real (kind=kind_phys), parameter :: c2 = 21.e-3 !< [m3/kg] ! default 21.e-3 + real (kind=kind_phys), parameter :: c3 = 2.5e-6 !< [1/s] + real (kind=kind_phys), parameter :: c4 = 0.04 !< [1/k] + real (kind=kind_phys), parameter :: c5 = 2.0 !< + real (kind=kind_phys), parameter :: dm = 100.0 !< upper limit on destructive metamorphism compaction [kg/m3] + real (kind=kind_phys), parameter :: eta0 = 0.8e+6 !< viscosity coefficient [kg-s/m2] !according to anderson, it is between 0.52e6~1.38e6 - real (kind=kind_phys) :: burden !pressure of overlying snow [kg/m2] - real (kind=kind_phys) :: ddz1 !rate of settling of snow pack due to destructive metamorphism. - real (kind=kind_phys) :: ddz2 !rate of compaction of snow pack due to overburden. - real (kind=kind_phys) :: ddz3 !rate of compaction of snow pack due to melt [1/s] - real (kind=kind_phys) :: dexpf !expf=exp(-c4*(273.15-stc)). - real (kind=kind_phys) :: td !stc - tfrz [k] - real (kind=kind_phys) :: pdzdtc !nodal rate of change in fractional-thickness due to compaction [fraction/s] - real (kind=kind_phys) :: void !void (1 - snice - snliq) - real (kind=kind_phys) :: wx !water mass (ice + liquid) [kg/m2] - real (kind=kind_phys) :: bi !partial density of ice [kg/m3] - real (kind=kind_phys), dimension(-nsnow+1:0) :: fice !fraction of ice at current time step + real (kind=kind_phys) :: burden !< pressure of overlying snow [kg/m2] + real (kind=kind_phys) :: ddz1 !< rate of settling of snow pack due to destructive metamorphism. + real (kind=kind_phys) :: ddz2 !< rate of compaction of snow pack due to overburden. + real (kind=kind_phys) :: ddz3 !< rate of compaction of snow pack due to melt [1/s] + real (kind=kind_phys) :: dexpf !< expf=exp(-c4*(273.15-stc)). + real (kind=kind_phys) :: td !< stc - tfrz [k] + real (kind=kind_phys) :: pdzdtc !< nodal rate of change in fractional-thickness due to compaction [fraction/s] + real (kind=kind_phys) :: void !< void (1 - snice - snliq) + real (kind=kind_phys) :: wx !< water mass (ice + liquid) [kg/m2] + real (kind=kind_phys) :: bi !< partial density of ice [kg/m3] + real (kind=kind_phys), dimension(-nsnow+1:0) :: fice !< fraction of ice at current time step integer :: j @@ -2569,32 +2574,32 @@ subroutine combine_glacier (nsnow ,nsoil , & !in ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!snow layer depth [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water equivalent [m] - real (kind=kind_phys), intent(inout) :: snowh !snow depth [m] - real (kind=kind_phys), intent(inout) :: ponding1 - real (kind=kind_phys), intent(inout) :: ponding2 + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!< snow layer depth [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water equivalent [m] + real (kind=kind_phys), intent(inout) :: snowh !< snow depth [m] + real (kind=kind_phys), intent(inout) :: ponding1 !< + real (kind=kind_phys), intent(inout) :: ponding2 !< ! local variables: - integer :: i,j,k,l ! node indices - integer :: isnow_old ! number of top snow layer - integer :: mssi ! node index - integer :: neibor ! adjacent node selected for combination - real (kind=kind_phys) :: zwice ! total ice mass in snow - real (kind=kind_phys) :: zwliq ! total liquid water in snow - real (kind=kind_phys) :: dzmin(3) ! minimum of top snow layer + integer :: i,j,k,l !< node indices + integer :: isnow_old !< number of top snow layer + integer :: mssi !< node index + integer :: neibor !< adjacent node selected for combination + real (kind=kind_phys) :: zwice !< total ice mass in snow + real (kind=kind_phys) :: zwliq !< total liquid water in snow + real (kind=kind_phys) :: dzmin(3) !< minimum of top snow layer data dzmin /0.045, 0.05, 0.2/ ! data dzmin /0.025, 0.025, 0.1/ ! mb: change limit !----------------------------------------------------------------------- @@ -2741,24 +2746,24 @@ subroutine combo_glacier(dz, wliq, wice, t, dz2, wliq2, wice2, t2) ! ----------------------------------------------------------------------s ! input - real (kind=kind_phys), intent(in) :: dz2 !nodal thickness of 2 elements being combined [m] - real (kind=kind_phys), intent(in) :: wliq2 !liquid water of element 2 [kg/m2] - real (kind=kind_phys), intent(in) :: wice2 !ice of element 2 [kg/m2] - real (kind=kind_phys), intent(in) :: t2 !nodal temperature of element 2 [k] - real (kind=kind_phys), intent(inout) :: dz !nodal thickness of 1 elements being combined [m] - real (kind=kind_phys), intent(inout) :: wliq !liquid water of element 1 - real (kind=kind_phys), intent(inout) :: wice !ice of element 1 [kg/m2] - real (kind=kind_phys), intent(inout) :: t !node temperature of element 1 [k] + real (kind=kind_phys), intent(in) :: dz2 !< nodal thickness of 2 elements being combined [m] + real (kind=kind_phys), intent(in) :: wliq2 !< liquid water of element 2 [kg/m2] + real (kind=kind_phys), intent(in) :: wice2 !< ice of element 2 [kg/m2] + real (kind=kind_phys), intent(in) :: t2 !< nodal temperature of element 2 [k] + real (kind=kind_phys), intent(inout) :: dz !< nodal thickness of 1 elements being combined [m] + real (kind=kind_phys), intent(inout) :: wliq !< liquid water of element 1 + real (kind=kind_phys), intent(inout) :: wice !< ice of element 1 [kg/m2] + real (kind=kind_phys), intent(inout) :: t !< node temperature of element 1 [k] ! local - real (kind=kind_phys) :: dzc !total thickness of nodes 1 and 2 (dzc=dz+dz2). - real (kind=kind_phys) :: wliqc !combined liquid water [kg/m2] - real (kind=kind_phys) :: wicec !combined ice [kg/m2] - real (kind=kind_phys) :: tc !combined node temperature [k] - real (kind=kind_phys) :: h !enthalpy of element 1 [j/m2] - real (kind=kind_phys) :: h2 !enthalpy of element 2 [j/m2] - real (kind=kind_phys) :: hc !temporary + real (kind=kind_phys) :: dzc !< total thickness of nodes 1 and 2 (dzc=dz+dz2). + real (kind=kind_phys) :: wliqc !< combined liquid water [kg/m2] + real (kind=kind_phys) :: wicec !< combined ice [kg/m2] + real (kind=kind_phys) :: tc !< combined node temperature [k] + real (kind=kind_phys) :: h !< enthalpy of element 1 [j/m2] + real (kind=kind_phys) :: h2 !< enthalpy of element 2 [j/m2] + real (kind=kind_phys) :: hc !< temporary !----------------------------------------------------------------------- @@ -2792,30 +2797,30 @@ subroutine divide_glacier (nsnow ,nsoil , & !in ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers [ =3] - integer, intent(in) :: nsoil !no. of soil layers [ =4] + integer, intent(in) :: nsnow !< maximum no. of snow layers [ =3] + integer, intent(in) :: nsoil !< no. of soil layers [ =4] ! input and output - integer , intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!snow layer depth [m] + integer , intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!< snow layer depth [m] ! local variables: - integer :: j !indices - integer :: msno !number of layer (top) to msno (bot) - real (kind=kind_phys) :: drr !thickness of the combined [m] - real (kind=kind_phys), dimension( 1:nsnow) :: dz !snow layer thickness [m] - real (kind=kind_phys), dimension( 1:nsnow) :: swice !partial volume of ice [m3/m3] - real (kind=kind_phys), dimension( 1:nsnow) :: swliq !partial volume of liquid water [m3/m3] - real (kind=kind_phys), dimension( 1:nsnow) :: tsno !node temperature [k] - real (kind=kind_phys) :: zwice !temporary - real (kind=kind_phys) :: zwliq !temporary - real (kind=kind_phys) :: propor!temporary - real (kind=kind_phys) :: dtdz !temporary + integer :: j !< indices + integer :: msno !< number of layer (top) to msno (bot) + real (kind=kind_phys) :: drr !< thickness of the combined [m] + real (kind=kind_phys), dimension( 1:nsnow) :: dz !< snow layer thickness [m] + real (kind=kind_phys), dimension( 1:nsnow) :: swice !< partial volume of ice [m3/m3] + real (kind=kind_phys), dimension( 1:nsnow) :: swliq !< partial volume of liquid water [m3/m3] + real (kind=kind_phys), dimension( 1:nsnow) :: tsno !< node temperature [k] + real (kind=kind_phys) :: zwice !< temporary + real (kind=kind_phys) :: zwliq !< temporary + real (kind=kind_phys) :: propor!< temporary + real (kind=kind_phys) :: dtdz !< temporary ! ---------------------------------------------------------------------- do j = 1,nsnow @@ -2918,48 +2923,48 @@ subroutine snowh2o_glacier (nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in ponding1 ,ponding2 ,fsh , & !inout qsnbot ) !out ! ---------------------------------------------------------------------- -! renew the mass of ice lens (snice) and liquid (snliq) of the -! surface snow layer resulting from sublimation (frost) / evaporation (dew) +!> renew the mass of ice lens (snice) and liquid (snliq) of the +!! surface snow layer resulting from sublimation (frost) / evaporation (dew) ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers[=3] - integer, intent(in) :: nsoil !no. of soil layers[=4] - real (kind=kind_phys), intent(in) :: dt !time step - real (kind=kind_phys), intent(inout) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys), intent(inout) :: qsnsub !snow surface sublimation rate[mm/s] - real (kind=kind_phys), intent(in) :: qrain !snow surface rain rate[mm/s] + integer, intent(in) :: nsnow !< maximum no. of snow layers[=3] + integer, intent(in) :: nsoil !< no. of soil layers[=4] + real (kind=kind_phys), intent(in) :: dt !< time step + real (kind=kind_phys), intent(inout) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys), intent(inout) :: qsnsub !< snow surface sublimation rate[mm/s] + real (kind=kind_phys), intent(in) :: qrain !< snow surface rain rate[mm/s] ! output - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso ! snow layer depth [m] - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow layer depth [m] + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] real (kind=kind_phys), intent(inout) :: ponding1 real (kind=kind_phys), intent(inout) :: ponding2 - real (kind=kind_phys), intent(inout) :: fsh !total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys), intent(inout) :: fsh !< total sensible heat (w/m2) [+ to atm] ! local variables: - integer :: j !do loop/array indices - real (kind=kind_phys) :: qin !water flow into the element (mm/s) - real (kind=kind_phys) :: qout !water flow out of the element (mm/s) - real (kind=kind_phys) :: wgdif !ice mass after minus sublimation - real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_liq !partial volume of liquid water in layer - real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_ice !partial volume of ice lens in layer - real (kind=kind_phys), dimension(-nsnow+1:0) :: epore !effective porosity = porosity - vol_ice + integer :: j !< do loop/array indices + real (kind=kind_phys) :: qin !< water flow into the element (mm/s) + real (kind=kind_phys) :: qout !< water flow out of the element (mm/s) + real (kind=kind_phys) :: wgdif !< ice mass after minus sublimation + real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_liq !< partial volume of liquid water in layer + real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_ice !< partial volume of ice lens in layer + real (kind=kind_phys), dimension(-nsnow+1:0) :: epore !< effective porosity = porosity - vol_ice real (kind=kind_phys) :: propor, temp ! ---------------------------------------------------------------------- @@ -3080,39 +3085,39 @@ subroutine error_glacier (iloc ,jloc ,swdown ,fsa ,fsr ,fira , & runsrf ,runsub ,sneqv ,dt ,beg_wb ) #endif ! -------------------------------------------------------------------------------------------------- -! check surface energy balance and water balance +!> check surface energy balance and water balance ! -------------------------------------------------------------------------------------------------- implicit none ! -------------------------------------------------------------------------------------------------- ! inputs - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - real (kind=kind_phys) , intent(in) :: swdown !downward solar filtered by sun angle [w/m2] - real (kind=kind_phys) , intent(in) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(in) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(in) :: fira !total net longwave rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: fgev !ground evaporation heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: ssoil !ground heat flux (w/m2) [+ to soil] + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + real (kind=kind_phys) , intent(in) :: swdown !< downward solar filtered by sun angle [w/m2] + real (kind=kind_phys) , intent(in) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(in) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(in) :: fira !< total net longwave rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: fgev !< ground evaporation heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: ssoil !< ground heat flux (w/m2) [+ to soil] real (kind=kind_phys) , intent(in) :: sag - real (kind=kind_phys) , intent(in) :: prcp !precipitation rate (kg m-2 s-1) - real (kind=kind_phys) , intent(in) :: edir !soil surface evaporation rate[mm/s] - real (kind=kind_phys) , intent(in) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys) , intent(in) :: runsub !baseflow (saturation excess) [mm/s] - real (kind=kind_phys) , intent(in) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: beg_wb !water storage at begin of a timesetp [mm] + real (kind=kind_phys) , intent(in) :: prcp !< precipitation rate (kg m-2 s-1) + real (kind=kind_phys) , intent(in) :: edir !< soil surface evaporation rate[mm/s] + real (kind=kind_phys) , intent(in) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys) , intent(in) :: runsub !< baseflow (saturation excess) [mm/s] + real (kind=kind_phys) , intent(in) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: beg_wb !< water storage at begin of a timesetp [mm] #ifdef CCPP character(len=*) , intent(inout) :: errmsg integer , intent(inout) :: errflg #endif - real (kind=kind_phys) :: end_wb !water storage at end of a timestep [mm] - real (kind=kind_phys) :: errwat !error in water balance [mm/timestep] - real (kind=kind_phys) :: erreng !error in surface energy balance [w/m2] - real (kind=kind_phys) :: errsw !error in shortwave radiation balance [w/m2] + real (kind=kind_phys) :: end_wb !< water storage at end of a timestep [mm] + real (kind=kind_phys) :: errwat !< error in water balance [mm/timestep] + real (kind=kind_phys) :: erreng !< error in surface energy balance [w/m2] + real (kind=kind_phys) :: errsw !< error in shortwave radiation balance [w/m2] character(len=256) :: message ! -------------------------------------------------------------------------------------------------- errsw = swdown - (fsa + fsr) @@ -3162,12 +3167,12 @@ subroutine noahmp_options_glacier(iopt_alb ,iopt_snf ,iopt_tbot, iopt_stc, iop implicit none - integer, intent(in) :: iopt_alb !snow surface albedo (1->bats; 2->class) - integer, intent(in) :: iopt_snf !rainfall & snowfall (1-jordan91; 2->bats; 3->noah) - integer, intent(in) :: iopt_tbot !lower boundary of soil temperature (1->zero-flux; 2->noah) - integer, intent(in) :: iopt_stc !snow/soil temperature time scheme (only layer 1) - ! 1 -> semi-implicit; 2 -> full implicit (original noah) - integer, intent(in) :: iopt_gla ! glacier option (1->phase change; 2->simple) + integer, intent(in) :: iopt_alb !< snow surface albedo (1->bats; 2->class) + integer, intent(in) :: iopt_snf !< rainfall & snowfall (1-jordan91; 2->bats; 3->noah) + integer, intent(in) :: iopt_tbot !< lower boundary of soil temperature (1->zero-flux; 2->noah) + integer, intent(in) :: iopt_stc !< snow/soil temperature time scheme (only layer 1) + !! 1 -> semi-implicit; 2 -> full implicit (original noah) + integer, intent(in) :: iopt_gla !< glacier option (1->phase change; 2->simple) ! ------------------------------------------------------------------------------------------------- diff --git a/physics/module_sf_noahmplsm.f90 b/physics/module_sf_noahmplsm.f90 index 8cba5871e..045540061 100644 --- a/physics/module_sf_noahmplsm.f90 +++ b/physics/module_sf_noahmplsm.f90 @@ -73,7 +73,7 @@ module module_sf_noahmplsm ! =====================================options for different schemes================================ ! **recommended - integer :: dveg ! options for dynamic vegetation: + integer :: dveg !< options for dynamic vegetation: ! 1 -> off (use table lai; use fveg = shdfac from input) ! 2 -> on (together with opt_crs = 1) ! 3 -> off (use table lai; calculate fveg) @@ -85,16 +85,16 @@ module module_sf_noahmplsm ! 9 -> off (use input LAI; use maximum vegetation fraction) ! 10 -> crop model on (use maximum vegetation fraction) - integer :: opt_crs ! options for canopy stomatal resistance + integer :: opt_crs !< options for canopy stomatal resistance ! **1 -> ball-berry ! 2 -> jarvis - integer :: opt_btr ! options for soil moisture factor for stomatal resistance + integer :: opt_btr !< options for soil moisture factor for stomatal resistance ! **1 -> noah (soil moisture) ! 2 -> clm (matric potential) ! 3 -> ssib (matric potential) - integer :: opt_run ! options for runoff and groundwater + integer :: opt_run !< options for runoff and groundwater ! **1 -> topmodel with groundwater (niu et al. 2007 jgr) ; ! 2 -> topmodel with an equilibrium water table (niu et al. 2005 jgr) ; ! 3 -> original surface and subsurface runoff (free drainage) @@ -102,59 +102,59 @@ module module_sf_noahmplsm ! 5 -> miguez-macho&fan groundwater scheme (miguez-macho et al. 2007 jgr; fan et al. 2007 jgr) ! (needs further testing for public use) - integer :: opt_sfc ! options for surface layer drag coeff (ch & cm) + integer :: opt_sfc !< options for surface layer drag coeff (ch & cm) ! **1 -> m-o ! **2 -> original noah (chen97) ! **3 -> myj consistent; 4->ysu consistent. mb: removed in v3.7 for further testing - integer :: opt_frz ! options for supercooled liquid water (or ice fraction) + integer :: opt_frz !< options for supercooled liquid water (or ice fraction) ! **1 -> no iteration (niu and yang, 2006 jhm) ! 2 -> koren's iteration - integer :: opt_inf ! options for frozen soil permeability + integer :: opt_inf !< options for frozen soil permeability ! **1 -> linear effects, more permeable (niu and yang, 2006, jhm) ! 2 -> nonlinear effects, less permeable (old) - integer :: opt_rad ! options for radiation transfer + integer :: opt_rad !< options for radiation transfer ! 1 -> modified two-stream (gap = f(solar angle, 3d structure ...)<1-fveg) ! 2 -> two-stream applied to grid-cell (gap = 0) ! **3 -> two-stream applied to vegetated fraction (gap=1-fveg) - integer :: opt_alb ! options for ground snow surface albedo + integer :: opt_alb !< options for ground snow surface albedo ! 1 -> bats ! **2 -> class - integer :: opt_snf ! options for partitioning precipitation into rainfall & snowfall + integer :: opt_snf !< options for partitioning precipitation into rainfall & snowfall ! **1 -> jordan (1991) ! 2 -> bats: when sfctmp sfctmp < tfrz ! 4 -> use wrf microphysics output - integer :: opt_tbot ! options for lower boundary condition of soil temperature + integer :: opt_tbot !< options for lower boundary condition of soil temperature ! 1 -> zero heat flux from bottom (zbot and tbot not used) ! **2 -> tbot at zbot (8m) read from a file (original noah) - integer :: opt_stc ! options for snow/soil temperature time scheme (only layer 1) + integer :: opt_stc !< options for snow/soil temperature time scheme (only layer 1) ! **1 -> semi-implicit; flux top boundary condition ! 2 -> full implicit (original noah); temperature top boundary condition ! 3 -> same as 1, but fsno for ts calculation (generally improves snow; v3.7) - integer :: opt_rsf ! options for surface resistent to evaporation/sublimation + integer :: opt_rsf !< options for surface resistent to evaporation/sublimation ! **1 -> sakaguchi and zeng, 2009 ! 2 -> sellers (1992) ! 3 -> adjusted sellers to decrease rsurf for wet soil ! 4 -> option 1 for non-snow; rsurf = rsurf_snow for snow (set in mptable); ad v3.8 - integer :: opt_soil ! options for defining soil properties + integer :: opt_soil !< options for defining soil properties ! **1 -> use input dominant soil texture ! 2 -> use input soil texture that varies with depth ! 3 -> use soil composition (sand, clay, orgm) and pedotransfer functions (opt_pedo) ! 4 -> use input soil properties (bexp_3d, smcmax_3d, etc.) - integer :: opt_pedo ! options for pedotransfer functions (used when opt_soil = 3) + integer :: opt_pedo !< options for pedotransfer functions (used when opt_soil = 3) ! **1 -> saxton and rawls (2006) - integer :: opt_crop ! options for crop model + integer :: opt_crop !< options for crop model ! **0 -> no crop model, will run default dynamic vegetation ! 1 -> liu, et al. 2016 @@ -162,23 +162,23 @@ module module_sf_noahmplsm ! physical constants: ! !------------------------------------------------------------------------------------------! - real (kind=kind_phys), parameter :: grav = 9.80616 !acceleration due to gravity (m/s2) - real (kind=kind_phys), parameter :: sb = 5.67e-08 !stefan-boltzmann constant (w/m2/k4) - real (kind=kind_phys), parameter :: vkc = 0.40 !von karman constant - real (kind=kind_phys), parameter :: tfrz = 273.16 !freezing/melting point (k) - real (kind=kind_phys), parameter :: hsub = 2.8440e06 !latent heat of sublimation (j/kg) - real (kind=kind_phys), parameter :: hvap = 2.5104e06 !latent heat of vaporization (j/kg) - real (kind=kind_phys), parameter :: hfus = 0.3336e06 !latent heat of fusion (j/kg) - real (kind=kind_phys), parameter :: cwat = 4.188e06 !specific heat capacity of water (j/m3/k) - real (kind=kind_phys), parameter :: cice = 2.094e06 !specific heat capacity of ice (j/m3/k) - real (kind=kind_phys), parameter :: cpair = 1004.64 !heat capacity dry air at const pres (j/kg/k) - real (kind=kind_phys), parameter :: tkwat = 0.6 !thermal conductivity of water (w/m/k) - real (kind=kind_phys), parameter :: tkice = 2.2 !thermal conductivity of ice (w/m/k) - real (kind=kind_phys), parameter :: tkair = 0.023 !thermal conductivity of air (w/m/k) (not used mb: 20140718) - real (kind=kind_phys), parameter :: rair = 287.04 !gas constant for dry air (j/kg/k) - real (kind=kind_phys), parameter :: rw = 461.269 !gas constant for water vapor (j/kg/k) - real (kind=kind_phys), parameter :: denh2o = 1000. !density of water (kg/m3) - real (kind=kind_phys), parameter :: denice = 917. !density of ice (kg/m3) + real (kind=kind_phys), parameter :: grav = 9.80616 !< acceleration due to gravity (m/s2) + real (kind=kind_phys), parameter :: sb = 5.67e-08 !< stefan-boltzmann constant (w/m2/k4) + real (kind=kind_phys), parameter :: vkc = 0.40 !< von karman constant + real (kind=kind_phys), parameter :: tfrz = 273.16 !< freezing/melting point (k) + real (kind=kind_phys), parameter :: hsub = 2.8440e06 !< latent heat of sublimation (j/kg) + real (kind=kind_phys), parameter :: hvap = 2.5104e06 !< latent heat of vaporization (j/kg) + real (kind=kind_phys), parameter :: hfus = 0.3336e06 !< latent heat of fusion (j/kg) + real (kind=kind_phys), parameter :: cwat = 4.188e06 !< specific heat capacity of water (j/m3/k) + real (kind=kind_phys), parameter :: cice = 2.094e06 !< specific heat capacity of ice (j/m3/k) + real (kind=kind_phys), parameter :: cpair = 1004.64 !< heat capacity dry air at const pres (j/kg/k) + real (kind=kind_phys), parameter :: tkwat = 0.6 !< thermal conductivity of water (w/m/k) + real (kind=kind_phys), parameter :: tkice = 2.2 !< thermal conductivity of ice (w/m/k) + real (kind=kind_phys), parameter :: tkair = 0.023 !< thermal conductivity of air (w/m/k) (not used mb: 20140718) + real (kind=kind_phys), parameter :: rair = 287.04 !< gas constant for dry air (j/kg/k) + real (kind=kind_phys), parameter :: rw = 461.269 !< gas constant for water vapor (j/kg/k) + real (kind=kind_phys), parameter :: denh2o = 1000. !< density of water (kg/m3) + real (kind=kind_phys), parameter :: denice = 917. !< density of ice (kg/m3) integer, private, parameter :: mband = 2 integer, private, parameter :: nsoil = 4 @@ -197,60 +197,60 @@ module module_sf_noahmplsm integer :: iscrop integer :: eblforest - real (kind=kind_phys) :: ch2op !maximum intercepted h2o per unit lai+sai (mm) - real (kind=kind_phys) :: dleaf !characteristic leaf dimension (m) - 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) :: 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 () - real (kind=kind_phys) :: scffac !snow cover factor (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] - real (kind=kind_phys) :: dilefc !coeficient for leaf stress death [1/s] - real (kind=kind_phys) :: dilefw !coeficient for leaf stress death [1/s] - real (kind=kind_phys) :: fragr !fraction of growth respiration !original was 0.3 - real (kind=kind_phys) :: ltovrc !leaf turnover [1/s] - - real (kind=kind_phys) :: c3psn !photosynthetic pathway: 0. = c4, 1. = c3 - real (kind=kind_phys) :: kc25 !co2 michaelis-menten constant at 25c (pa) - real (kind=kind_phys) :: akc !q10 for kc25 - real (kind=kind_phys) :: ko25 !o2 michaelis-menten constant at 25c (pa) - real (kind=kind_phys) :: ako !q10 for ko25 - real (kind=kind_phys) :: vcmx25 !maximum rate of carboxylation at 25c (umol co2/m**2/s) - real (kind=kind_phys) :: avcmx !q10 for vcmx25 - real (kind=kind_phys) :: bp !minimum leaf conductance (umol/m**2/s) - real (kind=kind_phys) :: mp !slope of conductance-to-photosynthesis relationship - real (kind=kind_phys) :: qe25 !quantum efficiency at 25c (umol co2 / umol photon) - real (kind=kind_phys) :: aqe !q10 for qe25 - real (kind=kind_phys) :: rmf25 !leaf maintenance respiration at 25c (umol co2/m**2/s) - real (kind=kind_phys) :: rms25 !stem maintenance respiration at 25c (umol co2/kg bio/s) - real (kind=kind_phys) :: rmr25 !root maintenance respiration at 25c (umol co2/kg bio/s) - real (kind=kind_phys) :: arm !q10 for maintenance respiration - real (kind=kind_phys) :: folnmx !foliage nitrogen concentration when f(n)=1 (%) - real (kind=kind_phys) :: tmin !minimum temperature for photosynthesis (k) + real (kind=kind_phys) :: ch2op !< maximum intercepted h2o per unit lai+sai (mm) + real (kind=kind_phys) :: dleaf !< characteristic leaf dimension (m) + 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) :: 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 () + real (kind=kind_phys) :: scffac !< snow cover factor (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] + real (kind=kind_phys) :: dilefc !< coeficient for leaf stress death [1/s] + real (kind=kind_phys) :: dilefw !< coeficient for leaf stress death [1/s] + real (kind=kind_phys) :: fragr !< fraction of growth respiration !original was 0.3 + real (kind=kind_phys) :: ltovrc !< leaf turnover [1/s] + + real (kind=kind_phys) :: c3psn !< photosynthetic pathway: 0. = c4, 1. = c3 + real (kind=kind_phys) :: kc25 !< co2 michaelis-menten constant at 25c (pa) + real (kind=kind_phys) :: akc !< q10 for kc25 + real (kind=kind_phys) :: ko25 !< o2 michaelis-menten constant at 25c (pa) + real (kind=kind_phys) :: ako !< q10 for ko25 + real (kind=kind_phys) :: vcmx25 !< maximum rate of carboxylation at 25c (umol co2/m**2/s) + real (kind=kind_phys) :: avcmx !< q10 for vcmx25 + real (kind=kind_phys) :: bp !< minimum leaf conductance (umol/m**2/s) + real (kind=kind_phys) :: mp !< slope of conductance-to-photosynthesis relationship + real (kind=kind_phys) :: qe25 !< quantum efficiency at 25c (umol co2 / umol photon) + real (kind=kind_phys) :: aqe !< q10 for qe25 + real (kind=kind_phys) :: rmf25 !< leaf maintenance respiration at 25c (umol co2/m**2/s) + real (kind=kind_phys) :: rms25 !< stem maintenance respiration at 25c (umol co2/kg bio/s) + real (kind=kind_phys) :: rmr25 !< root maintenance respiration at 25c (umol co2/kg bio/s) + real (kind=kind_phys) :: arm !< q10 for maintenance respiration + real (kind=kind_phys) :: folnmx !< foliage nitrogen concentration when f(n)=1 (%) + real (kind=kind_phys) :: tmin !< minimum temperature for photosynthesis (k) - real (kind=kind_phys) :: xl !leaf/stem orientation index - real (kind=kind_phys) :: rhol(mband) !leaf reflectance: 1=vis, 2=nir - real (kind=kind_phys) :: rhos(mband) !stem reflectance: 1=vis, 2=nir - real (kind=kind_phys) :: taul(mband) !leaf transmittance: 1=vis, 2=nir - real (kind=kind_phys) :: taus(mband) !stem transmittance: 1=vis, 2=nir - - real (kind=kind_phys) :: mrp !microbial respiration parameter (umol co2 /kg c/ s) - real (kind=kind_phys) :: cwpvt !empirical canopy wind parameter - - real (kind=kind_phys) :: wrrat !wood to non-wood ratio - real (kind=kind_phys) :: wdpool !wood pool (switch 1 or 0) depending on woody or not [-] - real (kind=kind_phys) :: tdlef !characteristic t for leaf freezing [k] - - integer :: nroot !number of soil layers with root present - real (kind=kind_phys) :: rgl !parameter used in radiation stress function - real (kind=kind_phys) :: rsmin !minimum stomatal resistance [s m-1] - real (kind=kind_phys) :: hs !parameter used in vapor pressure deficit function - real (kind=kind_phys) :: topt !optimum transpiration air temperature [k] - real (kind=kind_phys) :: rsmax !maximal stomatal resistance [s m-1] + real (kind=kind_phys) :: xl !< leaf/stem orientation index + real (kind=kind_phys) :: rhol(mband) !< leaf reflectance: 1=vis, 2=nir + real (kind=kind_phys) :: rhos(mband) !< stem reflectance: 1=vis, 2=nir + real (kind=kind_phys) :: taul(mband) !< leaf transmittance: 1=vis, 2=nir + real (kind=kind_phys) :: taus(mband) !< stem transmittance: 1=vis, 2=nir + + real (kind=kind_phys) :: mrp !< microbial respiration parameter (umol co2 /kg c/ s) + real (kind=kind_phys) :: cwpvt !< empirical canopy wind parameter + + real (kind=kind_phys) :: wrrat !< wood to non-wood ratio + real (kind=kind_phys) :: wdpool !< wood pool (switch 1 or 0) depending on woody or not [-] + real (kind=kind_phys) :: tdlef !< characteristic t for leaf freezing [k] + + integer :: nroot !< number of soil layers with root present + real (kind=kind_phys) :: rgl !< parameter used in radiation stress function + real (kind=kind_phys) :: rsmin !< minimum stomatal resistance [s m-1] + real (kind=kind_phys) :: hs !< parameter used in vapor pressure deficit function + real (kind=kind_phys) :: topt !< optimum transpiration air temperature [k] + real (kind=kind_phys) :: rsmax !< maximal stomatal resistance [s m-1] real (kind=kind_phys) :: slarea real (kind=kind_phys) :: eps(5) @@ -259,111 +259,111 @@ module module_sf_noahmplsm ! from the rad section of mptable.tbl !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: albsat(mband) !saturated soil albedos: 1=vis, 2=nir - real (kind=kind_phys) :: albdry(mband) !dry soil albedos: 1=vis, 2=nir - real (kind=kind_phys) :: albice(mband) !albedo land ice: 1=vis, 2=nir - real (kind=kind_phys) :: alblak(mband) !albedo frozen lakes: 1=vis, 2=nir - real (kind=kind_phys) :: omegas(mband) !two-stream parameter omega for snow - real (kind=kind_phys) :: betads !two-stream parameter betad for snow - real (kind=kind_phys) :: betais !two-stream parameter betad for snow - real (kind=kind_phys) :: eg(2) !emissivity + real (kind=kind_phys) :: albsat(mband) !< saturated soil albedos: 1=vis, 2=nir + real (kind=kind_phys) :: albdry(mband) !< dry soil albedos: 1=vis, 2=nir + real (kind=kind_phys) :: albice(mband) !< albedo land ice: 1=vis, 2=nir + real (kind=kind_phys) :: alblak(mband) !< albedo frozen lakes: 1=vis, 2=nir + real (kind=kind_phys) :: omegas(mband) !< two-stream parameter omega for snow + real (kind=kind_phys) :: betads !< two-stream parameter betad for snow + real (kind=kind_phys) :: betais !< two-stream parameter betad for snow + real (kind=kind_phys) :: eg(2) !< emissivity !------------------------------------------------------------------------------------------! ! from the globals section of mptable.tbl !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: co2 !co2 partial pressure - real (kind=kind_phys) :: o2 !o2 partial pressure - real (kind=kind_phys) :: timean !gridcell mean topgraphic index (global mean) - real (kind=kind_phys) :: fsatmx !maximum surface saturated fraction (global mean) - real (kind=kind_phys) :: z0sno !snow surface roughness length (m) (0.002) - real (kind=kind_phys) :: ssi !liquid water holding capacity for snowpack (m3/m3) - real (kind=kind_phys) :: snow_ret_fac !snowpack water release timescale factor (1/s) - real (kind=kind_phys) :: swemx !new snow mass to fully cover old snow (mm) - real (kind=kind_phys) :: snow_emis !snow emissivity - real (kind=kind_phys) :: tau0 !tau0 from yang97 eqn. 10a - real (kind=kind_phys) :: grain_growth !growth from vapor diffusion yang97 eqn. 10b - real (kind=kind_phys) :: extra_growth !extra growth near freezing yang97 eqn. 10c - real (kind=kind_phys) :: dirt_soot !dirt and soot term yang97 eqn. 10d - real (kind=kind_phys) :: bats_cosz !zenith angle snow albedo adjustment; b in yang97 eqn. 15 - real (kind=kind_phys) :: bats_vis_new !new snow visible albedo - real (kind=kind_phys) :: bats_nir_new !new snow nir albedo - real (kind=kind_phys) :: bats_vis_age !age factor for diffuse visible snow albedo yang97 eqn. 17 - real (kind=kind_phys) :: bats_nir_age !age factor for diffuse nir snow albedo yang97 eqn. 18 - real (kind=kind_phys) :: bats_vis_dir !cosz factor for direct visible snow albedo yang97 eqn. 15 - real (kind=kind_phys) :: bats_nir_dir !cosz factor for direct nir snow albedo yang97 eqn. 16 - real (kind=kind_phys) :: rsurf_snow !surface resistance for snow(s/m) - real (kind=kind_phys) :: rsurf_exp !exponent in the shape parameter for soil resistance option 1 + real (kind=kind_phys) :: co2 !< co2 partial pressure + real (kind=kind_phys) :: o2 !< o2 partial pressure + real (kind=kind_phys) :: timean !< gridcell mean topgraphic index (global mean) + real (kind=kind_phys) :: fsatmx !< maximum surface saturated fraction (global mean) + real (kind=kind_phys) :: z0sno !< snow surface roughness length (m) (0.002) + real (kind=kind_phys) :: ssi !< liquid water holding capacity for snowpack (m3/m3) + real (kind=kind_phys) :: snow_ret_fac !< snowpack water release timescale factor (1/s) + real (kind=kind_phys) :: swemx !< new snow mass to fully cover old snow (mm) + real (kind=kind_phys) :: snow_emis !< snow emissivity + real (kind=kind_phys) :: tau0 !< tau0 from yang97 eqn. 10a + real (kind=kind_phys) :: grain_growth !< growth from vapor diffusion yang97 eqn. 10b + real (kind=kind_phys) :: extra_growth !< extra growth near freezing yang97 eqn. 10c + real (kind=kind_phys) :: dirt_soot !< dirt and soot term yang97 eqn. 10d + real (kind=kind_phys) :: bats_cosz !< zenith angle snow albedo adjustment; b in yang97 eqn. 15 + real (kind=kind_phys) :: bats_vis_new !< new snow visible albedo + real (kind=kind_phys) :: bats_nir_new !< new snow nir albedo + real (kind=kind_phys) :: bats_vis_age !< age factor for diffuse visible snow albedo yang97 eqn. 17 + real (kind=kind_phys) :: bats_nir_age !< age factor for diffuse nir snow albedo yang97 eqn. 18 + real (kind=kind_phys) :: bats_vis_dir !< cosz factor for direct visible snow albedo yang97 eqn. 15 + real (kind=kind_phys) :: bats_nir_dir !< cosz factor for direct nir snow albedo yang97 eqn. 16 + real (kind=kind_phys) :: rsurf_snow !< surface resistance for snow(s/m) + real (kind=kind_phys) :: rsurf_exp !< exponent in the shape parameter for soil resistance option 1 !------------------------------------------------------------------------------------------! ! from the crop section of mptable.tbl !------------------------------------------------------------------------------------------! - integer :: pltday ! planting date - integer :: hsday ! harvest date - real (kind=kind_phys) :: plantpop ! plant density [per ha] - used? - real (kind=kind_phys) :: irri ! irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) - real (kind=kind_phys) :: gddtbase ! base temperature for gdd accumulation [c] - real (kind=kind_phys) :: gddtcut ! upper temperature for gdd accumulation [c] - real (kind=kind_phys) :: gdds1 ! gdd from seeding to emergence - real (kind=kind_phys) :: gdds2 ! gdd from seeding to initial vegetative - real (kind=kind_phys) :: gdds3 ! gdd from seeding to post vegetative - real (kind=kind_phys) :: gdds4 ! gdd from seeding to intial reproductive - real (kind=kind_phys) :: gdds5 ! gdd from seeding to pysical maturity - integer :: c3c4 ! photosynthetic pathway: 1 = c3 2 = c4 - real (kind=kind_phys) :: aref ! reference maximum co2 assimulation rate - real (kind=kind_phys) :: psnrf ! co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) - real (kind=kind_phys) :: i2par ! fraction of incoming solar radiation to photosynthetically active radiation - real (kind=kind_phys) :: tassim0 ! minimum temperature for co2 assimulation [c] - real (kind=kind_phys) :: tassim1 ! co2 assimulation linearly increasing until temperature reaches t1 [c] - real (kind=kind_phys) :: tassim2 ! co2 assmilation rate remain at aref until temperature reaches t2 [c] - real (kind=kind_phys) :: k ! light extinction coefficient - real (kind=kind_phys) :: epsi ! initial light use efficiency - real (kind=kind_phys) :: q10mr ! q10 for maintainance respiration - real (kind=kind_phys) :: foln_mx ! foliage nitrogen concentration when f(n)=1 (%) - real (kind=kind_phys) :: lefreez ! characteristic t for leaf freezing [k] - real (kind=kind_phys) :: dile_fc(nstage) ! coeficient for temperature leaf stress death [1/s] - real (kind=kind_phys) :: dile_fw(nstage) ! coeficient for water leaf stress death [1/s] - real (kind=kind_phys) :: fra_gr ! fraction of growth respiration - real (kind=kind_phys) :: lf_ovrc(nstage) ! fraction of leaf turnover [1/s] - real (kind=kind_phys) :: st_ovrc(nstage) ! fraction of stem turnover [1/s] - real (kind=kind_phys) :: rt_ovrc(nstage) ! fraction of root tunrover [1/s] - real (kind=kind_phys) :: lfmr25 ! leaf maintenance respiration at 25c [umol co2/m**2 /s] - real (kind=kind_phys) :: stmr25 ! stem maintenance respiration at 25c [umol co2/kg bio/s] - real (kind=kind_phys) :: rtmr25 ! root maintenance respiration at 25c [umol co2/kg bio/s] - real (kind=kind_phys) :: grainmr25 ! grain maintenance respiration at 25c [umol co2/kg bio/s] - real (kind=kind_phys) :: lfpt(nstage) ! fraction of carbohydrate flux to leaf - real (kind=kind_phys) :: stpt(nstage) ! fraction of carbohydrate flux to stem - real (kind=kind_phys) :: rtpt(nstage) ! fraction of carbohydrate flux to root - real (kind=kind_phys) :: grainpt(nstage) ! fraction of carbohydrate flux to grain - real (kind=kind_phys) :: bio2lai ! leaf are per living leaf biomass [m^2/kg] + integer :: pltday !< planting date + integer :: hsday !< harvest date + real (kind=kind_phys) :: plantpop !< plant density [per ha] - used? + real (kind=kind_phys) :: irri !< irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) + real (kind=kind_phys) :: gddtbase !< base temperature for gdd accumulation [c] + real (kind=kind_phys) :: gddtcut !< upper temperature for gdd accumulation [c] + real (kind=kind_phys) :: gdds1 !< gdd from seeding to emergence + real (kind=kind_phys) :: gdds2 !< gdd from seeding to initial vegetative + real (kind=kind_phys) :: gdds3 !< gdd from seeding to post vegetative + real (kind=kind_phys) :: gdds4 !< gdd from seeding to intial reproductive + real (kind=kind_phys) :: gdds5 !< gdd from seeding to pysical maturity + integer :: c3c4 !< photosynthetic pathway: 1 = c3 2 = c4 + real (kind=kind_phys) :: aref !< reference maximum co2 assimulation rate + real (kind=kind_phys) :: psnrf !< co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) + real (kind=kind_phys) :: i2par !< fraction of incoming solar radiation to photosynthetically active radiation + real (kind=kind_phys) :: tassim0 !< minimum temperature for co2 assimulation [c] + real (kind=kind_phys) :: tassim1 !< co2 assimulation linearly increasing until temperature reaches t1 [c] + real (kind=kind_phys) :: tassim2 !< co2 assmilation rate remain at aref until temperature reaches t2 [c] + real (kind=kind_phys) :: k !< light extinction coefficient + real (kind=kind_phys) :: epsi !< initial light use efficiency + real (kind=kind_phys) :: q10mr !< q10 for maintainance respiration + real (kind=kind_phys) :: foln_mx !< foliage nitrogen concentration when f(n)=1 (%) + real (kind=kind_phys) :: lefreez !< characteristic t for leaf freezing [k] + real (kind=kind_phys) :: dile_fc(nstage) !< coeficient for temperature leaf stress death [1/s] + real (kind=kind_phys) :: dile_fw(nstage) !< coeficient for water leaf stress death [1/s] + real (kind=kind_phys) :: fra_gr !< fraction of growth respiration + real (kind=kind_phys) :: lf_ovrc(nstage) !< fraction of leaf turnover [1/s] + real (kind=kind_phys) :: st_ovrc(nstage) !< fraction of stem turnover [1/s] + real (kind=kind_phys) :: rt_ovrc(nstage) !< fraction of root tunrover [1/s] + real (kind=kind_phys) :: lfmr25 !< leaf maintenance respiration at 25c [umol co2/m**2 /s] + real (kind=kind_phys) :: stmr25 !< stem maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: rtmr25 !< root maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: grainmr25 !< grain maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: lfpt(nstage) !< fraction of carbohydrate flux to leaf + real (kind=kind_phys) :: stpt(nstage) !< fraction of carbohydrate flux to stem + real (kind=kind_phys) :: rtpt(nstage) !< fraction of carbohydrate flux to root + real (kind=kind_phys) :: grainpt(nstage) !< fraction of carbohydrate flux to grain + real (kind=kind_phys) :: bio2lai !< leaf are per living leaf biomass [m^2/kg] !------------------------------------------------------------------------------------------! ! from the soilparm.tbl tables, as functions of soil category. !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: bexp(nsoil) !b parameter - real (kind=kind_phys) :: smcdry(nsoil) !dry soil moisture threshold where direct evap from top + real (kind=kind_phys) :: bexp(nsoil) !< b parameter + real (kind=kind_phys) :: smcdry(nsoil) !< dry soil moisture threshold where direct evap from top !layer ends (volumetric) (not used mb: 20140718) - real (kind=kind_phys) :: smcwlt(nsoil) !wilting point soil moisture (volumetric) - real (kind=kind_phys) :: smcref(nsoil) !reference soil moisture (field capacity) (volumetric) - real (kind=kind_phys) :: smcmax (nsoil) !porosity, saturated value of soil moisture (volumetric) - real (kind=kind_phys) :: psisat(nsoil) !saturated soil matric potential - real (kind=kind_phys) :: dksat(nsoil) !saturated soil hydraulic conductivity - real (kind=kind_phys) :: dwsat(nsoil) !saturated soil hydraulic diffusivity - real (kind=kind_phys) :: quartz(nsoil) !soil quartz content - real (kind=kind_phys) :: f1 !soil thermal diffusivity/conductivity coef (not used mb: 20140718) + real (kind=kind_phys) :: smcwlt(nsoil) !< wilting point soil moisture (volumetric) + real (kind=kind_phys) :: smcref(nsoil) !< reference soil moisture (field capacity) (volumetric) + real (kind=kind_phys) :: smcmax (nsoil) !< porosity, saturated value of soil moisture (volumetric) + real (kind=kind_phys) :: psisat(nsoil) !< saturated soil matric potential + real (kind=kind_phys) :: dksat(nsoil) !< saturated soil hydraulic conductivity + real (kind=kind_phys) :: dwsat(nsoil) !< saturated soil hydraulic diffusivity + real (kind=kind_phys) :: quartz(nsoil) !< soil quartz content + real (kind=kind_phys) :: f1 !< soil thermal diffusivity/conductivity coef (not used mb: 20140718) !------------------------------------------------------------------------------------------! ! from the genparm.tbl file !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: slope !slope index (0 - 1) - real (kind=kind_phys) :: csoil !vol. soil heat capacity [j/m3/k] - real (kind=kind_phys) :: zbot !depth (m) of lower boundary soil temperature - real (kind=kind_phys) :: czil !calculate roughness length of heat + real (kind=kind_phys) :: slope !< slope index (0 - 1) + real (kind=kind_phys) :: csoil !< vol. soil heat capacity [j/m3/k] + real (kind=kind_phys) :: zbot !< depth (m) of lower boundary soil temperature + real (kind=kind_phys) :: czil !< calculate roughness length of heat real (kind=kind_phys) :: refdk real (kind=kind_phys) :: refkdt - real (kind=kind_phys) :: kdt !used in compute maximum infiltration rate (in infil) - real (kind=kind_phys) :: frzx !used in compute maximum infiltration rate (in infil) + real (kind=kind_phys) :: kdt !< used in compute maximum infiltration rate (in infil) + real (kind=kind_phys) :: frzx !< used in compute maximum infiltration rate (in infil) end type noahmp_parameters @@ -418,129 +418,129 @@ subroutine noahmp_sflx (parameters, & ! input type (noahmp_parameters), intent(in) :: parameters - integer , intent(in) :: ice !ice (ice = 1) - integer , intent(in) :: ist !surface type 1->soil; 2->lake - integer , intent(in) :: vegtyp !vegetation type - INTEGER , INTENT(IN) :: CROPTYPE !crop type - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !no. of soil layers - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - 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) - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) lowest model layer - real (kind=kind_phys) , intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys) , intent(in) :: uu !wind speed in eastward dir (m/s) - real (kind=kind_phys) , intent(in) :: vv !wind speed in northward dir (m/s) - real (kind=kind_phys) , intent(in) :: soldn !downward shortwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: lwdn !downward longwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(inout) :: zlvl !reference height (m) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle [0-1] - real (kind=kind_phys) , intent(in) :: tbot !bottom condition for soil temp. [k] - real (kind=kind_phys) , intent(in) :: foln !foliage nitrogen (%) [1-saturated] - real (kind=kind_phys) , intent(in) :: shdfac !green vegetation fraction [0.0-1.0] - integer , intent(in) :: yearlen!number of days in the particular year. - real (kind=kind_phys) , intent(in) :: julian !julian day of year (floating point) - real (kind=kind_phys) , intent(in) :: lat !latitude (radians) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smceq !equilibrium soil water content [m3/m3] - real (kind=kind_phys) , intent(in) :: prcpconv ! convective precipitation entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpnonc ! non-convective precipitation entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpshcv ! shallow convective precip entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpsnow ! snow entering land model [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpgrpl ! graupel entering land model [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcphail ! hail entering land model [mm/s] ! mb/an : v3.7 + integer , intent(in) :: ice !< ice (ice = 1) + integer , intent(in) :: ist !< surface type 1->soil; 2->lake + integer , intent(in) :: vegtyp !< vegetation type + INTEGER , INTENT(IN) :: CROPTYPE !< crop type + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< no. of soil layers + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + 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) + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) lowest model layer + real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys) , intent(in) :: uu !< wind speed in eastward dir (m/s) + real (kind=kind_phys) , intent(in) :: vv !< wind speed in northward dir (m/s) + real (kind=kind_phys) , intent(in) :: soldn !< downward shortwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(inout) :: zlvl !< reference height (m) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle [0-1] + real (kind=kind_phys) , intent(in) :: tbot !< bottom condition for soil temp. [k] + real (kind=kind_phys) , intent(in) :: foln !< foliage nitrogen (%) [1-saturated] + real (kind=kind_phys) , intent(in) :: shdfac !< green vegetation fraction [0.0-1.0] + integer , intent(in) :: yearlen!< number of days in the particular year. + real (kind=kind_phys) , intent(in) :: julian !< julian day of year (floating point) + real (kind=kind_phys) , intent(in) :: lat !< latitude (radians) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smceq !< equilibrium soil water content [m3/m3] + real (kind=kind_phys) , intent(in) :: prcpconv !< convective precipitation entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpnonc !< non-convective precipitation entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpshcv !< shallow convective precip entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpsnow !< snow entering land model [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpgrpl !< graupel entering land model [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcphail !< hail entering land model [mm/s] ! mb/an : v3.7 !jref:start; in - real (kind=kind_phys) , intent(in) :: qc !cloud water mixing ratio - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer - real (kind=kind_phys) , intent(in) :: psfc !pressure at lowest model layer - real (kind=kind_phys) , intent(in) :: dz8w !thickness of lowest layer + real (kind=kind_phys) , intent(in) :: qc !< cloud water mixing ratio + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer + real (kind=kind_phys) , intent(in) :: psfc !< pressure at lowest model layer + real (kind=kind_phys) , intent(in) :: dz8w !< thickness of lowest layer real (kind=kind_phys) , intent(in) :: dx - real (kind=kind_phys) , intent(in) :: shdmax !yearly max vegetation fraction + real (kind=kind_phys) , intent(in) :: shdmax !< yearly max vegetation fraction !jref:end ! input/output : need arbitary intial values - real (kind=kind_phys) , intent(inout) :: qsnow !snowfall [mm/s] - REAL (kind=kind_phys) , INTENT(INOUT) :: QRAIN !rainfall [mm/s] - real (kind=kind_phys) , intent(inout) :: fwet !wetted or snowed fraction of canopy (-) - real (kind=kind_phys) , intent(inout) :: sneqvo !snow mass at last time step (mm) - real (kind=kind_phys) , intent(inout) :: eah !canopy air vapor pressure (pa) - real (kind=kind_phys) , intent(inout) :: tah !canopy air tmeperature (k) - real (kind=kind_phys) , intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys) , intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys) , intent(inout) :: ch !sensible heat exchange coefficient - real (kind=kind_phys) , intent(inout) :: tauss !non-dimensional snow age + real (kind=kind_phys) , intent(inout) :: qsnow !< snowfall [mm/s] + REAL (kind=kind_phys) , INTENT(INOUT) :: QRAIN !< rainfall [mm/s] + real (kind=kind_phys) , intent(inout) :: fwet !< wetted or snowed fraction of canopy (-) + real (kind=kind_phys) , intent(inout) :: sneqvo !< snow mass at last time step (mm) + real (kind=kind_phys) , intent(inout) :: eah !< canopy air vapor pressure (pa) + real (kind=kind_phys) , intent(inout) :: tah !< canopy air tmeperature (k) + real (kind=kind_phys) , intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys) , intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys) , intent(inout) :: ch !< sensible heat exchange coefficient + real (kind=kind_phys) , intent(inout) :: tauss !< non-dimensional snow age ! prognostic variables - integer , intent(inout) :: isnow !actual no. of snow layers [-] - real (kind=kind_phys) , intent(inout) :: canliq !intercepted liquid water (mm) - real (kind=kind_phys) , intent(inout) :: canice !intercepted ice mass (mm) - real (kind=kind_phys) , intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !soil moisture (ice + liq.) [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys) , intent(inout) :: tv !vegetation temperature (k) - real (kind=kind_phys) , intent(inout) :: tg !ground temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil temperature [k] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !liquid soil moisture [m3/m3] - real (kind=kind_phys) , intent(inout) :: zwt !depth to water table [m] - real (kind=kind_phys) , intent(inout) :: wa !water storage in aquifer [mm] - real (kind=kind_phys) , intent(inout) :: wt !water in aquifer&saturated soil [mm] - real (kind=kind_phys) , intent(inout) :: wslake !lake water storage (can be neg.) (mm) - real (kind=kind_phys), intent(inout) :: smcwtd !soil water content between bottom of the soil and water table [m3/m3] - real (kind=kind_phys), intent(inout) :: deeprech !recharge to or from the water table when deep [m] - real (kind=kind_phys), intent(inout) :: rech !recharge to or from the water table when shallow [m] (diagnostic) + integer , intent(inout) :: isnow !< actual no. of snow layers [-] + real (kind=kind_phys) , intent(inout) :: canliq !< intercepted liquid water (mm) + real (kind=kind_phys) , intent(inout) :: canice !< intercepted ice mass (mm) + real (kind=kind_phys) , intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !< soil moisture (ice + liq.) [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys) , intent(inout) :: tv !< vegetation temperature (k) + real (kind=kind_phys) , intent(inout) :: tg !< ground temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil temperature [k] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< liquid soil moisture [m3/m3] + real (kind=kind_phys) , intent(inout) :: zwt !< depth to water table [m] + real (kind=kind_phys) , intent(inout) :: wa !< water storage in aquifer [mm] + real (kind=kind_phys) , intent(inout) :: wt !< water in aquifer&saturated soil [mm] + real (kind=kind_phys) , intent(inout) :: wslake !< lake water storage (can be neg.) (mm) + real (kind=kind_phys), intent(inout) :: smcwtd !< soil water content between bottom of the soil and water table [m3/m3] + real (kind=kind_phys), intent(inout) :: deeprech !< recharge to or from the water table when deep [m] + real (kind=kind_phys), intent(inout) :: rech !< recharge to or from the water table when shallow [m] (diagnostic) ! output - real (kind=kind_phys) , intent(out) :: z0wrf !combined z0 sent to coupled model - real (kind=kind_phys) , intent(out) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fira !total net lw rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fcev !canopy evap heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fgev !ground evap heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fctr !transpiration heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: ssoil !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys) , intent(out) :: trad !surface radiative temperature (k) - real (kind=kind_phys) :: ts !surface temperature (k) - real (kind=kind_phys) , intent(out) :: ecan !evaporation of intercepted water (mm/s) - real (kind=kind_phys) , intent(out) :: etran !transpiration rate (mm/s) - real (kind=kind_phys) , intent(out) :: edir !soil surface evaporation rate (mm/s] - real (kind=kind_phys) , intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys) , intent(out) :: runsub !baseflow (saturation excess) [mm/s] - real (kind=kind_phys) , intent(out) :: psn !total photosynthesis (umol co2/m2/s) [+] - real (kind=kind_phys) , intent(out) :: apar !photosyn active energy by canopy (w/m2) - real (kind=kind_phys) , intent(out) :: sav !solar rad absorbed by veg. (w/m2) - real (kind=kind_phys) , intent(out) :: sag !solar rad absorbed by ground (w/m2) - real (kind=kind_phys) , intent(out) :: fsno !snow cover fraction on the ground (-) - real (kind=kind_phys) , intent(out) :: fveg !green vegetation fraction [0.0-1.0] - real (kind=kind_phys) , intent(out) :: albedo !surface albedo [-] - real (kind=kind_phys) :: errwat !water error [kg m{-2}] - real (kind=kind_phys) , intent(out) :: qsnbot !snowmelt out bottom of pack [mm/s] - real (kind=kind_phys) , intent(out) :: ponding!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding1!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding2!surface ponding [mm] + real (kind=kind_phys) , intent(out) :: z0wrf !< combined z0 sent to coupled model + real (kind=kind_phys) , intent(out) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fira !< total net lw rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fcev !< canopy evap heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fgev !< ground evap heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fctr !< transpiration heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: ssoil !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys) , intent(out) :: trad !< surface radiative temperature (k) + real (kind=kind_phys) :: ts !< surface temperature (k) + real (kind=kind_phys) , intent(out) :: ecan !< evaporation of intercepted water (mm/s) + real (kind=kind_phys) , intent(out) :: etran !< transpiration rate (mm/s) + real (kind=kind_phys) , intent(out) :: edir !< soil surface evaporation rate (mm/s] + real (kind=kind_phys) , intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys) , intent(out) :: runsub !< baseflow (saturation excess) [mm/s] + real (kind=kind_phys) , intent(out) :: psn !< total photosynthesis (umol co2/m2/s) [+] + real (kind=kind_phys) , intent(out) :: apar !< photosyn active energy by canopy (w/m2) + real (kind=kind_phys) , intent(out) :: sav !< solar rad absorbed by veg. (w/m2) + real (kind=kind_phys) , intent(out) :: sag !< solar rad absorbed by ground (w/m2) + real (kind=kind_phys) , intent(out) :: fsno !< snow cover fraction on the ground (-) + real (kind=kind_phys) , intent(out) :: fveg !< green vegetation fraction [0.0-1.0] + real (kind=kind_phys) , intent(out) :: albedo !< surface albedo [-] + real (kind=kind_phys) :: errwat !< water error [kg m{-2}] + real (kind=kind_phys) , intent(out) :: qsnbot !< snowmelt out bottom of pack [mm/s] + real (kind=kind_phys) , intent(out) :: ponding!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding1!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding2!< surface ponding [mm] real (kind=kind_phys) , intent(out) :: esnow - 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) :: 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) !jref:start; output - real (kind=kind_phys) , intent(out) :: t2mv !2-m air temperature over vegetated part [k] - real (kind=kind_phys) , intent(out) :: t2mb !2-m air temperature over bare ground part [k] - real (kind=kind_phys), intent(out) :: rssun !sunlit leaf stomatal resistance (s/m) - real (kind=kind_phys), intent(out) :: rssha !shaded leaf stomatal resistance (s/m) + real (kind=kind_phys) , intent(out) :: t2mv !< 2-m air temperature over vegetated part [k] + real (kind=kind_phys) , intent(out) :: t2mb !< 2-m air temperature over bare ground part [k] + real (kind=kind_phys), intent(out) :: rssun !< sunlit leaf stomatal resistance (s/m) + real (kind=kind_phys), intent(out) :: rssha !< shaded leaf stomatal resistance (s/m) real (kind=kind_phys), intent(out) :: bgap real (kind=kind_phys), intent(out) :: wgap - real (kind=kind_phys), dimension(1:2) , intent(out) :: albd ! albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albi ! albedo (diffuse) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !snow albedo (diffuse) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albd !< albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albi !< albedo (diffuse) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !< snow albedo (diffuse) real (kind=kind_phys), intent(out) :: tgv real (kind=kind_phys), intent(out) :: tgb real (kind=kind_phys) :: q1 @@ -552,59 +552,59 @@ subroutine noahmp_sflx (parameters, & #endif ! local - integer :: iz !do-loop index - integer, dimension(-nsnow+1:nsoil) :: imelt !phase change index [1-melt; 2-freeze] - real (kind=kind_phys) :: cmc !intercepted water (canice+canliq) (mm) - real (kind=kind_phys) :: taux !wind stress: e-w (n/m2) - real (kind=kind_phys) :: tauy !wind stress: n-s (n/m2) - real (kind=kind_phys) :: rhoair !density air (kg/m3) -! real (kind=kind_phys), dimension( 1: 5) :: vocflx !voc fluxes [ug c m-2 h-1] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys) :: thair !potential temperature (k) - real (kind=kind_phys) :: qair !specific humidity (kg/kg) (q2/(1+q2)) - real (kind=kind_phys) :: eair !vapor pressure air (pa) - real (kind=kind_phys), dimension( 1: 2) :: solad !incoming direct solar rad (w/m2) - real (kind=kind_phys), dimension( 1: 2) :: solai !incoming diffuse solar rad (w/m2) - real (kind=kind_phys) :: qprecc !convective precipitation (mm/s) - real (kind=kind_phys) :: qprecl !large-scale precipitation (mm/s) - real (kind=kind_phys) :: igs !growing season index (0=off, 1=on) - real (kind=kind_phys) :: elai !leaf area index, after burying by snow - real (kind=kind_phys) :: esai !stem area index, after burying by snow - real (kind=kind_phys) :: bevap !soil water evaporation factor (0 - 1) - real (kind=kind_phys), dimension( 1:nsoil) :: btrani !soil water transpiration factor (0 - 1) - real (kind=kind_phys) :: btran !soil water transpiration factor (0 - 1) - real (kind=kind_phys) :: qin !groundwater recharge [mm/s] - real (kind=kind_phys) :: qdis !groundwater discharge [mm/s] - real (kind=kind_phys), dimension( 1:nsoil) :: sice !soil ice content (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !partial volume ice of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !partial volume liq of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !effective porosity [m3/m3] - real (kind=kind_phys) :: totsc !total soil carbon (g/m2) - real (kind=kind_phys) :: totlb !total living carbon (g/m2) - real (kind=kind_phys) :: t2m !2-meter air temperature (k) - real (kind=kind_phys) :: qdew !ground surface dew rate [mm/s] - real (kind=kind_phys) :: qvap !ground surface evap. rate [mm/s] - real (kind=kind_phys) :: lathea !latent heat [j/kg] - real (kind=kind_phys) :: swdown !downward solar [w/m2] - real (kind=kind_phys) :: qmelt !snowmelt [mm/s] - real (kind=kind_phys) :: beg_wb !water storage at begin of a step [mm] - real (kind=kind_phys),intent(out) :: irc !canopy net lw rad. [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: irg !ground net lw rad. [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: shc !canopy sen. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: shg !ground sen. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: evg !ground evap. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: ghv !ground heat flux [w/m2] [+ to soil] - real (kind=kind_phys),intent(out) :: irb !net longwave rad. [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: shb !sensible heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: evb !evaporation heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: ghb !ground heat flux [w/m2] [+ to soil] - real (kind=kind_phys),intent(out) :: evc !canopy evap. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: tr !transpiration heat [w/m2] [+ to atm] - real (kind=kind_phys), intent(out) :: fpice !snow fraction in precipitation - real (kind=kind_phys), intent(out) :: pahv !precipitation advected heat - vegetation net (w/m2) - real (kind=kind_phys), intent(out) :: pahg !precipitation advected heat - under canopy net (w/m2) - real (kind=kind_phys), intent(out) :: pahb !precipitation advected heat - bare ground net (w/m2) - real (kind=kind_phys), intent(out) :: pah !precipitation advected heat - total (w/m2) + integer :: iz !< do-loop index + integer, dimension(-nsnow+1:nsoil) :: imelt !< phase change index [1-melt; 2-freeze] + real (kind=kind_phys) :: cmc !< intercepted water (canice+canliq) (mm) + real (kind=kind_phys) :: taux !< wind stress: e-w (n/m2) + real (kind=kind_phys) :: tauy !< wind stress: n-s (n/m2) + real (kind=kind_phys) :: rhoair !< density air (kg/m3) +! real (kind=kind_phys), dimension( 1: 5) :: vocflx !< voc fluxes [ug c m-2 h-1] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys) :: thair !< potential temperature (k) + real (kind=kind_phys) :: qair !< specific humidity (kg/kg) (q2/(1+q2)) + real (kind=kind_phys) :: eair !< vapor pressure air (pa) + real (kind=kind_phys), dimension( 1: 2) :: solad !< incoming direct solar rad (w/m2) + real (kind=kind_phys), dimension( 1: 2) :: solai !< incoming diffuse solar rad (w/m2) + real (kind=kind_phys) :: qprecc !< convective precipitation (mm/s) + real (kind=kind_phys) :: qprecl !< large-scale precipitation (mm/s) + real (kind=kind_phys) :: igs !< growing season index (0=off, 1=on) + real (kind=kind_phys) :: elai !< leaf area index, after burying by snow + real (kind=kind_phys) :: esai !< stem area index, after burying by snow + real (kind=kind_phys) :: bevap !< soil water evaporation factor (0 - 1) + real (kind=kind_phys), dimension( 1:nsoil) :: btrani !< soil water transpiration factor (0 - 1) + real (kind=kind_phys) :: btran !< soil water transpiration factor (0 - 1) + real (kind=kind_phys) :: qin !< groundwater recharge [mm/s] + real (kind=kind_phys) :: qdis !< groundwater discharge [mm/s] + real (kind=kind_phys), dimension( 1:nsoil) :: sice !< soil ice content (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !< partial volume ice of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !< partial volume liq of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys) :: totsc !< total soil carbon (g/m2) + real (kind=kind_phys) :: totlb !< total living carbon (g/m2) + real (kind=kind_phys) :: t2m !< 2-meter air temperature (k) + real (kind=kind_phys) :: qdew !< ground surface dew rate [mm/s] + real (kind=kind_phys) :: qvap !< ground surface evap. rate [mm/s] + real (kind=kind_phys) :: lathea !< latent heat [j/kg] + real (kind=kind_phys) :: swdown !< downward solar [w/m2] + real (kind=kind_phys) :: qmelt !< snowmelt [mm/s] + real (kind=kind_phys) :: beg_wb !< water storage at begin of a step [mm] + real (kind=kind_phys),intent(out) :: irc !< canopy net lw rad. [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: irg !< ground net lw rad. [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: shc !< canopy sen. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: shg !< ground sen. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: evg !< ground evap. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: ghv !< ground heat flux [w/m2] [+ to soil] + real (kind=kind_phys),intent(out) :: irb !< net longwave rad. [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: shb !< sensible heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: evb !< evaporation heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: ghb !< ground heat flux [w/m2] [+ to soil] + real (kind=kind_phys),intent(out) :: evc !< canopy evap. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: tr !< transpiration heat [w/m2] [+ to atm] + real (kind=kind_phys), intent(out) :: fpice !< snow fraction in precipitation + real (kind=kind_phys), intent(out) :: pahv !< precipitation advected heat - vegetation net (w/m2) + real (kind=kind_phys), intent(out) :: pahg !< precipitation advected heat - under canopy net (w/m2) + real (kind=kind_phys), intent(out) :: pahb !< precipitation advected heat - bare ground net (w/m2) + real (kind=kind_phys), intent(out) :: pah !< precipitation advected heat - total (w/m2) !jref:start real (kind=kind_phys) :: fsrv @@ -613,58 +613,58 @@ subroutine noahmp_sflx (parameters, & real (kind=kind_phys),intent(out) :: q2b real (kind=kind_phys) :: q2e real (kind=kind_phys) :: qfx - real (kind=kind_phys),intent(out) :: chv !sensible heat exchange coefficient over vegetated fraction - real (kind=kind_phys),intent(out) :: chb !sensible heat exchange coefficient over bare-ground - real (kind=kind_phys),intent(out) :: chleaf !leaf exchange coefficient - real (kind=kind_phys),intent(out) :: chuc !under canopy exchange coefficient - real (kind=kind_phys),intent(out) :: chv2 !sensible heat exchange coefficient over vegetated fraction - real (kind=kind_phys),intent(out) :: chb2 !sensible heat exchange coefficient over bare-ground + real (kind=kind_phys),intent(out) :: chv !< sensible heat exchange coefficient over vegetated fraction + real (kind=kind_phys),intent(out) :: chb !< sensible heat exchange coefficient over bare-ground + real (kind=kind_phys),intent(out) :: chleaf !< leaf exchange coefficient + real (kind=kind_phys),intent(out) :: chuc !< under canopy exchange coefficient + real (kind=kind_phys),intent(out) :: chv2 !< sensible heat exchange coefficient over vegetated fraction + real (kind=kind_phys),intent(out) :: chb2 !< sensible heat exchange coefficient over bare-ground !jref:end ! carbon ! inputs - real (kind=kind_phys) , intent(in) :: co2air !atmospheric co2 concentration (pa) - real (kind=kind_phys) , intent(in) :: o2air !atmospheric o2 concentration (pa) + real (kind=kind_phys) , intent(in) :: co2air !< atmospheric co2 concentration (pa) + real (kind=kind_phys) , intent(in) :: o2air !< atmospheric o2 concentration (pa) ! inputs and outputs : prognostic variables - real (kind=kind_phys) , intent(inout) :: lfmass !leaf mass [g/m2] - real (kind=kind_phys) , intent(inout) :: rtmass !mass of fine roots [g/m2] - real (kind=kind_phys) , intent(inout) :: stmass !stem mass [g/m2] - real (kind=kind_phys) , intent(inout) :: wood !mass of wood (incl. woody roots) [g/m2] - real (kind=kind_phys) , intent(inout) :: stblcp !stable carbon in deep soil [g/m2] - real (kind=kind_phys) , intent(inout) :: fastcp !short-lived carbon, shallow soil [g/m2] - real (kind=kind_phys) , intent(inout) :: lai !leaf area index [-] - real (kind=kind_phys) , intent(inout) :: sai !stem area index [-] - real (kind=kind_phys) , intent(inout) :: grain !grain mass [g/m2] - real (kind=kind_phys) , intent(inout) :: gdd !growing degree days - integer , intent(inout) :: pgs !plant growing stage [-] + real (kind=kind_phys) , intent(inout) :: lfmass !< leaf mass [g/m2] + real (kind=kind_phys) , intent(inout) :: rtmass !< mass of fine roots [g/m2] + real (kind=kind_phys) , intent(inout) :: stmass !< stem mass [g/m2] + real (kind=kind_phys) , intent(inout) :: wood !< mass of wood (incl. woody roots) [g/m2] + real (kind=kind_phys) , intent(inout) :: stblcp !< stable carbon in deep soil [g/m2] + real (kind=kind_phys) , intent(inout) :: fastcp !< short-lived carbon, shallow soil [g/m2] + real (kind=kind_phys) , intent(inout) :: lai !< leaf area index [-] + real (kind=kind_phys) , intent(inout) :: sai !< stem area index [-] + real (kind=kind_phys) , intent(inout) :: grain !< grain mass [g/m2] + real (kind=kind_phys) , intent(inout) :: gdd !< growing degree days + integer , intent(inout) :: pgs !< plant growing stage [-] ! outputs - real (kind=kind_phys) , intent(out) :: nee !net ecosys exchange (g/m2/s co2) - real (kind=kind_phys) , intent(out) :: gpp !net instantaneous assimilation [g/m2/s c] - real (kind=kind_phys) , intent(out) :: npp !net primary productivity [g/m2/s c] - real (kind=kind_phys) :: autors !net ecosystem respiration (g/m2/s c) - real (kind=kind_phys) :: heters !organic respiration (g/m2/s c) - real (kind=kind_phys) :: troot !root-zone averaged temperature (k) - real (kind=kind_phys) :: bdfall !bulk density of new snow (kg/m3) ! mb/an: v3.7 - real (kind=kind_phys) :: rain !rain rate (mm/s) ! mb/an: v3.7 - real (kind=kind_phys) :: snow !liquid equivalent snow rate (mm/s) ! mb/an: v3.7 + real (kind=kind_phys) , intent(out) :: nee !< net ecosys exchange (g/m2/s co2) + real (kind=kind_phys) , intent(out) :: gpp !< net instantaneous assimilation [g/m2/s c] + real (kind=kind_phys) , intent(out) :: npp !< net primary productivity [g/m2/s c] + real (kind=kind_phys) :: autors !< net ecosystem respiration (g/m2/s c) + real (kind=kind_phys) :: heters !< organic respiration (g/m2/s c) + real (kind=kind_phys) :: troot !< root-zone averaged temperature (k) + real (kind=kind_phys) :: bdfall !< bulk density of new snow (kg/m3) ! mb/an: v3.7 + real (kind=kind_phys) :: rain !< rain rate (mm/s) ! mb/an: v3.7 + real (kind=kind_phys) :: snow !< liquid equivalent snow rate (mm/s) ! mb/an: v3.7 real (kind=kind_phys) :: fp ! mb/an: v3.7 real (kind=kind_phys) :: prcp ! mb/an: v3.7 !more local variables for precip heat mb - real (kind=kind_phys) :: qintr !interception rate for rain (mm/s) - real (kind=kind_phys) :: qdripr !drip rate for rain (mm/s) - real (kind=kind_phys) :: qthror !throughfall for rain (mm/s) - real (kind=kind_phys) :: qints !interception (loading) rate for snowfall (mm/s) - real (kind=kind_phys) :: qdrips !drip (unloading) rate for intercepted snow (mm/s) - real (kind=kind_phys) :: qthros !throughfall of snowfall (mm/s) - real (kind=kind_phys) :: snowhin !snow depth increasing rate (m/s) - real (kind=kind_phys) :: latheav !latent heat vap./sublimation (j/kg) - real (kind=kind_phys) :: latheag !latent heat vap./sublimation (j/kg) - logical :: frozen_ground ! used to define latent heat pathway - logical :: frozen_canopy ! used to define latent heat pathway - LOGICAL :: dveg_active ! flag to run dynamic vegetation - LOGICAL :: crop_active ! flag to run crop model + real (kind=kind_phys) :: qintr !< interception rate for rain (mm/s) + real (kind=kind_phys) :: qdripr !< drip rate for rain (mm/s) + real (kind=kind_phys) :: qthror !< throughfall for rain (mm/s) + real (kind=kind_phys) :: qints !< interception (loading) rate for snowfall (mm/s) + real (kind=kind_phys) :: qdrips !< drip (unloading) rate for intercepted snow (mm/s) + real (kind=kind_phys) :: qthros !< throughfall of snowfall (mm/s) + real (kind=kind_phys) :: snowhin !< snow depth increasing rate (m/s) + real (kind=kind_phys) :: latheav !< latent heat vap./sublimation (j/kg) + real (kind=kind_phys) :: latheag !< latent heat vap./sublimation (j/kg) + logical :: frozen_ground !< used to define latent heat pathway + logical :: frozen_canopy !< used to define latent heat pathway + LOGICAL :: dveg_active !< flag to run dynamic vegetation + LOGICAL :: crop_active !< flag to run crop model ! intent (out) variables need to be assigned a value. these normally get assigned values ! only if dveg == 2. @@ -882,6 +882,7 @@ end subroutine noahmp_sflx !== begin atm ====================================================================================== !>\ingroup NoahMP_LSM +!! re-precess atmospheric forcing. subroutine atm (parameters,sfcprs ,sfctmp ,q2 , & prcpconv,prcpnonc ,prcpshcv,prcpsnow,prcpgrpl,prcphail , & soldn ,cosz ,thair ,qair , & @@ -1029,6 +1030,8 @@ end subroutine atm !== begin phenology ================================================================================ !>\ingroup NoahMP_LSM +!!vegetation phenology considering vegetation canopy being buried by snow and +!!evolution in time. subroutine phenology (parameters,vegtyp ,croptype, snowh , tv , lat , yearlen , julian , & !in lai , sai , troot , elai , esai , igs, pgs) @@ -1143,6 +1146,8 @@ end subroutine phenology !== begin precip_heat ============================================================================== !>\ingroup NoahMP_LSM +!! Michael Barlage: Oct 2013 - Split canwater to calculate precip movement for +!! tracking of advected heat. subroutine precip_heat (parameters,iloc ,jloc ,vegtyp ,dt ,uu ,vv , & !in elai ,esai ,fveg ,ist , & !in bdfall ,rain ,snow ,fp , & !in @@ -1373,6 +1378,7 @@ end subroutine precip_heat !== begin error ==================================================================================== !>\ingroup NoahMP_LSM +!! check surface energy balance and water balance. subroutine error (parameters,swdown ,fsa ,fsr ,fira ,fsh ,fcev , & fgev ,fctr ,ssoil ,beg_wb ,canliq ,canice , & sneqv ,wa ,smc ,dzsnso ,prcp ,ecan , & @@ -1567,6 +1573,13 @@ end subroutine error !== begin energy =================================================================================== !>\ingroup NoahMP_LSM +!! We use different approaches to deal with subgrid features of radiation +!! transfer and turbulent transfer. we use 'tile' approach to compute turbulent +!! fluxes,while we use modified two-stream to compute radiation transfer. +!! tile approach, assemblying vegetation canopies together, +!! may expose too much ground surfaces (either covered by snow or grass) to solar +!! radiation. the modified two-stream assumes vegetation covers fully the +!! gridcell but with gaps between tree crowns. subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in isnow ,dt ,rhoair ,sfcprs ,qair , & !in sfctmp ,thair ,lwdn ,uu ,vv ,zref , & !in @@ -2357,6 +2370,7 @@ end subroutine thermoprop !== begin csnow ==================================================================================== !>\ingroup NoahMP_LSM +!! snow bulk density,volumetric capacity, and thermal conductivity subroutine csnow (parameters,isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso , & !in tksno ,cvsno ,snicev ,snliqv ,epore ) !out ! -------------------------------------------------------------------------------------------------- @@ -2417,6 +2431,8 @@ end subroutine csnow !== begin tdfcnd =================================================================================== !>\ingroup NoahMP_LSM +!! calculate thermal diffusivity and conductivity of the soil. peters-lidard +!! approach (peters-lidard et al., 1998) subroutine tdfcnd (parameters, isoil, df, smc, sh2o) ! -------------------------------------------------------------------------------------------------- ! calculate thermal diffusivity and conductivity of the soil. @@ -2656,6 +2672,9 @@ end subroutine radiation !== begin albedo =================================================================================== !>\ingroup NoahMP_LSM +!! surface albedos. also fluxes (per unit incoming direct and diffuse radiation) +!! reflected, transmitted, and absorbed by vegetation. also sunlight fraction +!! of the canopy. subroutine albedo (parameters,vegtyp ,ist ,ice ,nsoil , & !in dt ,cosz ,fage ,elai ,esai , & !in tg ,tv ,snowh ,fsno ,fwet , & !in @@ -3195,6 +3214,11 @@ end subroutine groundalb !== begin twostream ================================================================================ !>\ingroup NoahMP_LSM +!! use two-stream approximation of Dickinson (1983) adv geophysics +!! 25: 305-353 and sellers (1985) int j remote sensing 6: 1335-1372 +!! to calculate fluxes absorbed by vegetation, reflected by vegetation, +!! and transmitted through vegetation for unit incoming direct or diffuse +!! flux given an underlying surface with known albedo. subroutine twostream (parameters,ib ,ic ,vegtyp ,cosz ,vai , & !in fwet ,t ,albgrd ,albgri ,rho , & !in tau ,fveg ,ist ,iloc ,jloc , & !in @@ -3446,6 +3470,8 @@ end subroutine twostream !== begin vege_flux ================================================================================ !>\ingroup NoahMP_LSM +!! use newton-raphson iteration to solve for vegetation (tv) and +!! ground (tg) temperatures that balance the surface energy budgets. subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & !in dt ,sav ,sag ,lwdn ,ur , & !in uu ,vv ,sfctmp ,thair ,qair , & !in @@ -4012,6 +4038,8 @@ end subroutine vege_flux !== begin bare_flux ================================================================================ !>\ingroup NoahMP_LSM +!! use newton-raphson iteration to solve ground (tg) temperature +!! that balances the surface energy budgets for bare soil fraction. subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & !in lwdn ,ur ,uu ,vv ,sfctmp , & !in thair ,qair ,eair ,rhoair ,snowh , & !in @@ -4337,6 +4365,8 @@ end subroutine bare_flux !== begin ragrb ==================================================================================== !>\ingroup NoahMP_LSM +!! compute under-canopy aerodynamic resistance rag and leaf boundary layer +!! resistance rb. subroutine ragrb(parameters,iter ,vai ,rhoair ,hg ,tah , & !in zpd ,z0mg ,z0hg ,hcan ,uc , & !in z0h ,fv ,cwp ,vegtyp ,mpe , & !in @@ -4439,6 +4469,7 @@ end subroutine ragrb !== begin sfcdif1 ================================================================================== !>\ingroup NoahMP_LSM +!! compute surface drag coefficient cm for momentum and ch for heat. subroutine sfcdif1(parameters,iter ,sfctmp ,rhoair ,h ,qair , & !in & zlvl ,zpd ,z0m ,z0h ,ur , & !in & mpe ,iloc ,jloc , & !in @@ -4618,6 +4649,8 @@ end subroutine sfcdif1 !== begin sfcdif2 ================================================================================== !>\ingroup NoahMP_LSM +!! calculate surface layer exchange coefficients via iteractive process (Chen et +!! al. 1997, blm) subroutine sfcdif2(parameters,iter ,z0 ,thz0 ,thlm ,sfcspd , & !in zlm ,iloc ,jloc , & !in akms ,akhs ,rlmo ,wstar2 , & !in @@ -4825,6 +4858,8 @@ end subroutine sfcdif2 !== begin esat ===================================================================================== !>\ingroup NoahMP_LSM +!! use polynomials to calculate saturation vapor pressure and derivative with +!! respect to temperature: over water when t > 0 c and over ice when t <= 0 c. subroutine esat(t, esw, esi, desw, desi) !--------------------------------------------------------------------------------------------------- ! use polynomials to calculate saturation vapor pressure and derivative with @@ -5013,6 +5048,10 @@ end subroutine stomata !== begin canres =================================================================================== !>\ingroup NoahMP_LSM +!! calculate canopy resistance which depends on incoming solar radiation, +!! 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 rc ,psn ,iloc ,jloc ) !out @@ -5130,6 +5169,10 @@ end subroutine calhum !== begin tsnosoi ================================================================================== !>\ingroup NoahMP_LSM +!! compute snow (up to 3l) and soil (4l) temperature. note that snow +!! temperatures during melting season may exceed melting point (tfrz) but later +!! in phasechange subroutine the snow temperatures are reset to tfrz for melting +!! snow. subroutine tsnosoi (parameters,ice ,nsoil ,nsnow ,isnow ,ist , & !in tbot ,zsnso ,ssoil ,df ,hcpct , & !in sag ,dt ,snowh ,dzsnso , & !in @@ -5266,6 +5309,9 @@ end subroutine tsnosoi !== begin hrt ====================================================================================== !>\ingroup NoahMP_LSM +!! calculate the right hand side of the time tendency term of the soil +!! thermal diffusion equation. also to compute (prepare) the matrix +!! coefficients for the tri-diagonal matrix of the implicit time scheme. subroutine hrt (parameters,nsnow ,nsoil ,isnow ,zsnso , & stc ,tbot ,zbot ,dt , & df ,hcpct ,ssoil ,phi , & @@ -5369,6 +5415,7 @@ end subroutine hrt !== begin hstep ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate/update the soil temperature fields. subroutine hstep (parameters,nsnow ,nsoil ,isnow ,dt , & ai ,bi ,ci ,rhsts , & stc ) @@ -5489,6 +5536,7 @@ end subroutine rosr12 !== begin phasechange ============================================================================== !>\ingroup NoahMP_LSM +!! melting/freezing of snow water and soil water subroutine phasechange (parameters,nsnow ,nsoil ,isnow ,dt ,fact , & !in dzsnso ,hcpct ,ist ,iloc ,jloc , & !in stc ,snice ,snliq ,sneqv ,snowh , & !inout @@ -5720,6 +5768,10 @@ end subroutine phasechange !== begin frh2o ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate amount of supercooled liquid soil water content if +!! temperature is below 273.15k (tfrz). requires newton-type iteration +!! to solve the nonlinear implicit equation given in eqn 17 of koren et al. +!! (1999, jgr, vol 104(d16),19569-19585) subroutine frh2o (parameters,isoil,free,tkelv,smc,sh2o,& #ifdef CCPP errmsg,errflg) @@ -6106,6 +6158,7 @@ end subroutine water !== begin canwater ================================================================================= !>\ingroup NoahMP_LSM +!! canopy hydrology subroutine canwater (parameters,vegtyp ,dt , & !in fcev ,fctr ,elai , & !in esai ,tg ,fveg ,iloc , jloc , & !in @@ -6373,6 +6426,8 @@ end subroutine snowwater !== begin snowfall ================================================================================= !>\ingroup NoahMP_LSM +!! snow depth and density to account for the new snowfall. +!! new values of snow depth & density returned. subroutine snowfall (parameters,nsoil ,nsnow ,dt ,qsnow ,snowhin , & !in sfctmp ,iloc ,jloc , & !in isnow ,snowh ,dzsnso ,stc ,snice , & !inout @@ -6924,6 +6979,8 @@ end subroutine compact !== begin snowh2o ================================================================================== !>\ingroup NoahMP_LSM +!! renew the mass of ice lens (snice) and liquid (snliq) of the +!! surface snow layer resulting from sublimation (frost) / evaporation (dew) subroutine snowh2o (parameters,nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in qrain ,iloc ,jloc , & !in isnow ,dzsnso ,snowh ,sneqv ,snice , & !inout @@ -7074,6 +7131,7 @@ end subroutine snowh2o !== begin soilwater ================================================================================ !>\ingroup NoahMP_LSM +!! calculate surface runoff and soil moisture. subroutine soilwater (parameters,nsoil ,nsnow ,dt ,zsoil ,dzsnso , & !in qinsur ,qseva ,etrani ,sice ,iloc , jloc, & !in sh2o ,smc ,zwt ,vegtyp ,& !inout @@ -7345,6 +7403,7 @@ end subroutine soilwater !== begin zwteq ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate equilibrium water table depth (niu et al., 2005) subroutine zwteq (parameters,nsoil ,nsnow ,zsoil ,dzsnso ,sh2o ,zwt) ! ---------------------------------------------------------------------- ! calculate equilibrium water table depth (niu et al., 2005) @@ -7402,6 +7461,7 @@ end subroutine zwteq !== begin infil ==================================================================================== !>\ingroup NoahMP_LSM +!! compute inflitration rate at soil surface and surface runoff subroutine infil (parameters,nsoil ,dt ,zsoil ,sh2o ,sice , & !in sicemax,qinsur , & !in pddum ,runsrf ) !out @@ -7503,6 +7563,9 @@ end subroutine infil !== begin srt ====================================================================================== !>\ingroup NoahMP_LSM +!! calculate the right hand side of the time tendency term of the soil +!! water diffusion equation. also to compute (prepare) the matrix coefficients +!! for the tri-diagonal matrix of the implicit time scheme. subroutine srt (parameters,nsoil ,zsoil ,dt ,pddum ,etrani , & !in qseva ,sh2o ,smc ,zwt ,fcr , & !in sicemax,fcrmax ,iloc ,jloc ,smcwtd , & !in @@ -7637,6 +7700,7 @@ end subroutine srt !== begin sstep ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate/update soil moisture content values. subroutine sstep (parameters,nsoil ,nsnow ,dt ,zsoil ,dzsnso , & !in sice ,iloc ,jloc ,zwt , & !in sh2o ,smc ,ai ,bi ,ci , & !inout @@ -7765,6 +7829,7 @@ end subroutine sstep !== begin wdfcnd1 ================================================================================== !>\ingroup NoahMP_LSM +!! calculate soil water diffusivity and soil hydraulic conductivity. subroutine wdfcnd1 (parameters,wdf,wcnd,smc,fcr,isoil) ! ---------------------------------------------------------------------- ! calculate soil water diffusivity and soil hydraulic conductivity. @@ -7805,6 +7870,7 @@ end subroutine wdfcnd1 !== begin wdfcnd2 ================================================================================== !>\ingroup NoahMP_LSM +!! calculate soil water diffusivity and soil hydraulic conductivity. subroutine wdfcnd2 (parameters,wdf,wcnd,smc,sice,isoil) ! ---------------------------------------------------------------------- ! calculate soil water diffusivity and soil hydraulic conductivity. @@ -8038,6 +8104,8 @@ end subroutine groundwater !== begin shallowwatertable ======================================================================== !>\ingroup NoahMP_LSM +!! diagnoses water table depth and computes recharge when the water table is +!! within the resolved soil layers, according to the miguez-macho&fan scheme. subroutine shallowwatertable (parameters,nsnow ,nsoil ,zsoil, dt , & !in dzsnso ,smceq ,iloc ,jloc , & !in smc ,wtd ,smcwtd ,rech, qdrain ) !inout @@ -8296,6 +8364,8 @@ end subroutine carbon !== begin co2flux ================================================================================== !>\ingroup NoahMP_LSM +!! the original code is from Dickinson et al.(1998), modified by guo-yue niu, +!! 2004 subroutine co2flux (parameters,nsnow ,nsoil ,vegtyp ,igs ,dt , & !in dzsnso ,stc ,psn ,troot ,tv , & !in wroot ,wstres ,foln ,lapm , & !in @@ -8567,7 +8637,9 @@ subroutine co2flux (parameters,nsnow ,nsoil ,vegtyp ,igs ,dt , & !in end subroutine co2flux !== begin carbon_crop ============================================================================== - +!>\ingroup NoahMP_LSM +!! initial crop version created by xing liu +!! initial crop version added by barlage v3.8 subroutine carbon_crop (parameters,nsnow ,nsoil ,vegtyp ,dt ,zsoil ,julian , & !in dzsnso ,stc ,smc ,tv ,psn ,foln ,btran , & !in soldn ,t2m , & !in @@ -8685,7 +8757,9 @@ subroutine carbon_crop (parameters,nsnow ,nsoil ,vegtyp ,dt ,zsoil ,julia end subroutine carbon_crop !== begin co2flux_crop ============================================================================= - +!>\ingroup NoahMP_LSM +!! the original code from re dickinson et al.(1998) and guo-yue niu (2004), +!! modified by xing liu, 2014. subroutine co2flux_crop (parameters, & !in dt ,stc ,psn ,tv ,wroot ,wstres ,foln , & !in ipa ,iha ,pgs , & !in xing @@ -8966,7 +9040,7 @@ subroutine co2flux_crop (parameters, end subroutine co2flux_crop !== begin growing_gdd ============================================================================== - +!>\ingroup NoahMP_LSM subroutine growing_gdd (parameters, & !in t2m , dt, julian, & !in gdd , & !inout @@ -9063,7 +9137,7 @@ subroutine growing_gdd (parameters, & !in end subroutine growing_gdd !== begin psn_crop ================================================================================= - +!>\ingroup NoahMP_LSM subroutine psn_crop ( parameters, & !in soldn, xlai,t2m, & !in psncrop ) !out diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index 6341ae61a..9cb25b3f3 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -35,7 +35,7 @@ module noahmp_tables integer :: high_intensity_industrial_table = 33 ! - real :: ch2op_table(mvt) !maximum intercepted h2o per unit lai+sai (mm) + 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, & @@ -43,14 +43,14 @@ module noahmp_tables & 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) + 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) + 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, & @@ -59,28 +59,28 @@ module noahmp_tables ! - real :: hvt_table(mvt) !top of canopy (m) + 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) + 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) + 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) + 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, & @@ -88,14 +88,14 @@ module noahmp_tables & 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 () + 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) + 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, & @@ -105,7 +105,7 @@ module noahmp_tables ! - real :: saim_table(mvt,12) !monthly stem area index, one-sided + 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, & @@ -189,7 +189,7 @@ module noahmp_tables & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / !! lai - real :: laim_table(mvt,12) !monthly leaf area index, one-sided + 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, & @@ -271,35 +271,35 @@ module noahmp_tables & 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] + 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] + 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] + 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 + 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] + 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, & @@ -307,21 +307,21 @@ module noahmp_tables & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / ! - real :: c3psn_table(mvt) !photosynthetic pathway: 0. = c4, 1. = c3 + 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) + 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 + 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, & @@ -329,7 +329,7 @@ module noahmp_tables & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: ko25_table(mvt) !o2 michaelis-menten constant at 25c (pa) + 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, & @@ -337,14 +337,14 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: ako_table(mvt) !q10 for ko25 + 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) + 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, & @@ -352,7 +352,7 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: avcmx_table(mvt) !q10 for vcmx25 + 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, & @@ -361,70 +361,70 @@ module noahmp_tables - real :: bp_table(mvt) !minimum leaf conductance (umol/m**2/s) + 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 + 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) + 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 + 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) + 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) + 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) + 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 + 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 (%) + 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) + 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, & @@ -433,14 +433,14 @@ module noahmp_tables ! - real :: xl_table(mvt) !leaf/stem orientation index + 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 + 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, & @@ -456,7 +456,7 @@ module noahmp_tables & 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 + 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, & @@ -472,7 +472,7 @@ module noahmp_tables ! &_______________________________________________________________________& - real :: taul_table(mvt,mband) !leaf transmittance: 1=vis, 2=nir + 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, & @@ -486,7 +486,7 @@ module noahmp_tables & 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 + 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, & @@ -501,7 +501,7 @@ module noahmp_tables & 0.001, 0.001, 0.000, 0.000, 0.000, 0.000 / - real :: mrp_table(mvt) !microbial respiration parameter (umol co2 /kg c/ s) + 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, & @@ -509,7 +509,7 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / ! - real :: cwpvt_table(mvt) !empirical canopy wind parameter + real :: cwpvt_table(mvt) !< empirical canopy wind parameter data ( cwpvt_table (i),i=1,mvt) / 0.18, 0.67, 0.18, 0.67, 0.29, 1.00, & & 2.00, 1.30, 1.00, 5.00, 1.17, 1.67, & & 1.67, 1.67, 0.18, 0.18, 0.18, 0.67, & @@ -517,21 +517,21 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: wrrat_table(mvt) !wood to non-wood ratio + 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 [-] + 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] + 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, & @@ -539,28 +539,28 @@ module noahmp_tables & 0, 0, 0, 0, 0, 0 / - real :: nroot_table(mvt) !number of soil layers with root present + 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 + 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] + 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 + 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, & @@ -568,14 +568,14 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: topt_table(mvt) !optimum transpiration air temperature [k] + 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] + 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., & @@ -726,41 +726,41 @@ module noahmp_tables ! genparm.tbl parameters - real :: slope_table(9) !slope factor for soil drainage + 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 :: 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 = 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 ! mptable.tbl radiation parameters ! &_______________________________________________________________________& - real :: albsat_table(msc,mband) !saturated soil albedos: 1=vis, 2=nir + 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/ - real :: albdry_table(msc,mband) !dry soil albedos: 1=vis, 2=nir + 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/ - real :: albice_table(mband) !albedo land ice: 1=vis, 2=nir + 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 + 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 + 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 :: 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 + real :: eg_table(2) !< emissivity data eg_table /0.97, 0.98 / real :: betads, betais @@ -769,30 +769,30 @@ module noahmp_tables ! 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 + 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 @@ -806,77 +806,77 @@ module noahmp_tables ! &_______________________________________________________________________& - integer :: pltday_table(ncrop) ! planting date + integer :: pltday_table(ncrop) !< planting date data (pltday_table(i), i=1,5) /130,111,111,111,111/ - integer :: hsday_table(ncrop) ! harvest date + 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? + 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) + 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] + 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] + 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 + 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 + 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 + 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 + 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 + 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 + 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 :: aref_table(ncrop) ! reference maximum co2 assimulation rate + 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) + 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 + 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] + 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] + 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] + 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 + 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 + 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 + 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 (%) + 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] + 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] + 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/ @@ -886,7 +886,7 @@ module noahmp_tables 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] + 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/ @@ -896,10 +896,10 @@ module noahmp_tables 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 + 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] + 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/ @@ -909,7 +909,7 @@ module noahmp_tables 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] + 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/ @@ -919,7 +919,7 @@ module noahmp_tables 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] + 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/ @@ -929,19 +929,19 @@ module noahmp_tables 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] + 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] + 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] + 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] + 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 + 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/ @@ -952,7 +952,7 @@ module noahmp_tables 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 + 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/ @@ -963,7 +963,7 @@ module noahmp_tables 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 + 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/ @@ -973,7 +973,7 @@ module noahmp_tables 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 + 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/ @@ -983,7 +983,7 @@ module noahmp_tables 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 :: bio2lai_table(ncrop) ! leaf are per living leaf biomass [m^2/kg] + 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/ ! mptable.tbl optional parameters @@ -992,54 +992,54 @@ 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 = -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 end module noahmp_tables diff --git a/physics/radiation_aerosols.f b/physics/radiation_aerosols.f index f732c37ef..bd2cfd52d 100644 --- a/physics/radiation_aerosols.f +++ b/physics/radiation_aerosols.f @@ -127,7 +127,6 @@ !> \ingroup rad !! \defgroup module_radiation_aerosols module_radiation_aerosols -!> @{ !! This module contains climatological atmospheric aerosol schemes for !! radiation computations. !! @@ -766,8 +765,6 @@ end subroutine wrt_aerlog !> This subroutine defines the one wavenumber solar fluxes based on toa !! solar spectral distribution, and define the one wavenumber IR fluxes !! based on black-body emission distribution at a predefined temperature. -!>\section gel_set_spec General Algorithm -!-------------------------------- subroutine set_spectrum !................................ ! --- inputs: (module constants) @@ -915,7 +912,6 @@ end subroutine aer_init !! !!\section gen_clim_aerinit General Algorithm !!@{ -!----------------------------------- subroutine clim_aerinit & & ( solfwv, eirfwv, me & ! --- inputs & ) ! --- outputs @@ -4525,4 +4521,3 @@ end subroutine aer_property_gocart !..........................................! end module module_radiation_aerosols ! !==========================================! -!> @} diff --git a/physics/rascnv.F90 b/physics/rascnv.F90 index e78570f34..c57315109 100644 --- a/physics/rascnv.F90 +++ b/physics/rascnv.F90 @@ -2,6 +2,7 @@ !! This file contains the entire Relaxed Arakawa-Schubert convection !! parameteriztion +!>\defgroup rascnv_schm Relaxed Arakawa-Schubert Convection Scheme module rascnv USE machine , ONLY : kind_phys @@ -103,6 +104,7 @@ module rascnv ! CCPP entry points for gfdl cloud microphysics ! ----------------------------------------------------------------------- +!>\ingroup rascnv_schm !>\brief The subroutine initializes rascnv !! !> \section arg_table_rascnv_init Argument Table @@ -291,6 +293,7 @@ end subroutine rascnv_finalize !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!>\ingroup rascnv_schm !! \section arg_table_rascnv_run Argument Table !! \htmlinclude rascnv_run.html !! @@ -1078,6 +1081,8 @@ subroutine rascnv_run(IM, k, ntr, dt, dtf & ! RETURN end subroutine rascnv_run + +!>\ingroup rascnv_schm SUBROUTINE CLOUD( & & K, KP1, KD, NTRC, KBLMX, kblmn & &, FRACBL, MAX_NEG_BOUY, vsmooth, aw_scal & @@ -2704,6 +2709,7 @@ SUBROUTINE CLOUD( & RETURN end subroutine cloud +!>\ingroup rascnv_schm SUBROUTINE DDRFT( & & K, KP1, KD & &, TLA, ALFIND, wcbase & @@ -3980,6 +3986,7 @@ SUBROUTINE DDRFT( & RETURN end subroutine ddrft +!>\ingroup rascnv_schm SUBROUTINE QSATCN(TT,P,Q,DQDT) ! USE FUNCPHYS , ONLY : fpvs @@ -4011,6 +4018,7 @@ SUBROUTINE QSATCN(TT,P,Q,DQDT) return end subroutine qsatcn +!>\ingroup rascnv_schm SUBROUTINE ANGRAD(PRES, ALM, AL2, TLA) implicit none @@ -4061,6 +4069,7 @@ SUBROUTINE ANGRAD(PRES, ALM, AL2, TLA) RETURN end subroutine angrad +!>\ingroup rascnv_schm SUBROUTINE SETQRP implicit none @@ -4085,6 +4094,7 @@ SUBROUTINE SETQRP RETURN end subroutine setqrp +!>\ingroup rascnv_schm SUBROUTINE QRABF(QRP,QRAF,QRBF) implicit none ! @@ -4101,6 +4111,7 @@ SUBROUTINE QRABF(QRP,QRAF,QRBF) RETURN end subroutine qrabf +!>\ingroup rascnv_schm SUBROUTINE SETVTP implicit none @@ -4121,6 +4132,7 @@ SUBROUTINE SETVTP RETURN end subroutine setvtp ! +!>\ingroup rascnv_schm real(kind=kind_phys) FUNCTION QRPF(QRP) ! implicit none @@ -4137,6 +4149,7 @@ real(kind=kind_phys) FUNCTION QRPF(QRP) RETURN end function qrpf +!>\ingroup rascnv_schm real(kind=kind_phys) FUNCTION VTPF(ROR) ! implicit none @@ -4151,6 +4164,7 @@ real(kind=kind_phys) FUNCTION VTPF(ROR) RETURN end function vtpf +!>\ingroup rascnv_schm real(kind=kind_phys) FUNCTION CLF(PRATE) ! implicit none diff --git a/physics/rrtmg_lw_cloud_optics.F90 b/physics/rrtmg_lw_cloud_optics.F90 index 02f32096a..1dd225514 100644 --- a/physics/rrtmg_lw_cloud_optics.F90 +++ b/physics/rrtmg_lw_cloud_optics.F90 @@ -4,22 +4,22 @@ module mo_rrtmg_lw_cloud_optics implicit none - ! Parameter used for RRTMG cloud-optics + !< Parameter used for RRTMG cloud-optics integer,parameter :: & nBandsLW_RRTMG = 16 - ! ipat is bands index for ebert & curry ice cloud (for iflagice=1) + !< ipat is bands index for ebert & curry ice cloud (for iflagice=1) integer,dimension(nBandsLW_RRTMG),parameter :: & ipat = (/ 1, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5 /) real(kind_phys), parameter :: & - absrain = 0.33e-3, & ! Rain drop absorption coefficient \f$(m^{2}/g)\f$ . - abssnow0 = 1.5, & ! Snow flake absorption coefficient (micron), fu coeff - abssnow1 = 2.34e-3 ! Snow flake absorption coefficient \f$(m^{2}/g)\f$, ncar coef + absrain = 0.33e-3, & !< Rain drop absorption coefficient \f$(m^{2}/g)\f$ . + abssnow0 = 1.5, & !< Snow flake absorption coefficient (micron), fu coeff + abssnow1 = 2.34e-3 !< Snow flake absorption coefficient \f$(m^{2}/g)\f$, ncar coef - ! Reset diffusivity angle for Bands 2-3 and 5-9 to vary (between 1.50 - ! and 1.80) as a function of total column water vapor. the function - ! has been defined to minimize flux and cooling rate errors in these bands - ! over a wide range of precipitable water values. - ! *NOTE* This is done in GFS_rrtmgp_lw_pre.F90:_run() + !< Reset diffusivity angle for Bands 2-3 and 5-9 to vary (between 1.50 + !! and 1.80) as a function of total column water vapor. the function + !! has been defined to minimize flux and cooling rate errors in these bands + !! over a wide range of precipitable water values. + !! *NOTE* This is done in GFS_rrtmgp_lw_pre.F90:_run() real (kind_phys), dimension(nbandsLW_RRTMG) :: & a0 = (/ 1.66, 1.55, 1.58, 1.66, 1.54, 1.454, 1.89, 1.33, & 1.668, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66 /), & @@ -28,11 +28,11 @@ module mo_rrtmg_lw_cloud_optics a2 = (/ 0.00, -12.0, -11.7, 0.00, -0.72, -0.243, 0.19, -0.062, & 0.414, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) real(kind_phys),parameter :: & - diffusivityLow = 1.50, & ! Minimum diffusivity angle for bands 2-3 and 5-9 - diffusivityHigh = 1.80, & ! Maximum diffusivity angle for bands 2-3 and 5-9 - diffusivityB1410 = 1.66 ! Diffusivity for bands 1, 4, and 10 + diffusivityLow = 1.50, & !< Minimum diffusivity angle for bands 2-3 and 5-9 + diffusivityHigh = 1.80, & !< Maximum diffusivity angle for bands 2-3 and 5-9 + diffusivityB1410 = 1.66 !< Diffusivity for bands 1, 4, and 10 - ! RRTMG LW cloud property coefficients + !< RRTMG LW cloud property coefficients real(kind_phys) , dimension(58,nBandsLW_RRTMG),parameter :: & absliq1 = reshape(source=(/ & 1.64047e-03, 6.90533e-02, 7.72017e-02, 7.78054e-02, 7.69523e-02, & !1 @@ -557,26 +557,26 @@ subroutine rrtmg_lw_cloud_optics(ncol, nlay, nBandsLW, cld_lwp, cld_ref_liq, cld ilwcice, tau_cld, tau_precip) ! Inputs integer,intent(in) :: & - nBandsLW, & ! Number of spectral bands - ncol, & ! Number of horizontal gridpoints - nlay, & ! Number of vertical layers + nBandsLW, & !< Number of spectral bands + ncol, & !< Number of horizontal gridpoints + nlay, & !< Number of vertical layers ilwcliq, & ! ilwcice real(kind_phys), dimension(ncol,nlay), intent(in) :: & - cld_frac, & ! Cloud-fraction (1) - cld_lwp, & ! Cloud liquid water path (g/m2) - cld_ref_liq, & ! Effective radius (liquid) (micron) - cld_iwp, & ! Cloud ice water path (g/m2) - cld_ref_ice, & ! Effective radius (ice) (micron) - cld_rwp, & ! Cloud rain water path (g/m2) - cld_ref_rain, & ! Effective radius (rain-drop) (micron) - cld_swp, & ! Cloud snow-water path (g/m2) - cld_ref_snow ! Effective radius (snow-flake) (micron) + cld_frac, & !< Cloud-fraction (1) + cld_lwp, & !< Cloud liquid water path (g/m2) + cld_ref_liq, & !< Effective radius (liquid) (micron) + cld_iwp, & !< Cloud ice water path (g/m2) + cld_ref_ice, & !< Effective radius (ice) (micron) + cld_rwp, & !< Cloud rain water path (g/m2) + cld_ref_rain, & !< Effective radius (rain-drop) (micron) + cld_swp, & !< Cloud snow-water path (g/m2) + cld_ref_snow !< Effective radius (snow-flake) (micron) ! Outputs real(kind_phys),dimension(ncol,nlay,nBandsLW),intent(out) :: & - tau_cld, & ! Cloud optical-depth (1) - tau_precip ! Precipitation optical-depth (1) + tau_cld, & !< Cloud optical-depth (1) + tau_precip !< Precipitation optical-depth (1) ! Local variables integer :: ij,ik,ib,index,ia diff --git a/physics/rrtmg_lw_post.F90 b/physics/rrtmg_lw_post.F90 index bb84c2137..39601b269 100644 --- a/physics/rrtmg_lw_post.F90 +++ b/physics/rrtmg_lw_post.F90 @@ -1,5 +1,5 @@ -!>\file rrtmg_lw_post -!!This file contains +!>\file rrtmg_lw_post.F90 +!!This file contains GFS RRTMG scheme post. module rrtmg_lw_post contains diff --git a/physics/rrtmg_sw_post.F90 b/physics/rrtmg_sw_post.F90 index d9946f695..98d9ac767 100644 --- a/physics/rrtmg_sw_post.F90 +++ b/physics/rrtmg_sw_post.F90 @@ -1,5 +1,5 @@ -!>\file rrtmg_sw_post -!! This file contains +!>\file rrtmg_sw_post.F90 +!! This file contains GFS RRTMG scheme post. module rrtmg_sw_post contains diff --git a/physics/sfcsub.F b/physics/sfcsub.F index a84e9aef9..2d2b3cbc3 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -3,7 +3,7 @@ !>\defgroup mod_sfcsub GFS sfcsub Module -!!\ingroup LSMs +!!\ingroup Noah_LSM !> @{ !! This module contains grib code for each parameter-used in subroutines sfccycle() !! and setrmsk(). diff --git a/physics/ugwp_driver_v0.F b/physics/ugwp_driver_v0.F index abb78e7a6..1f0f02406 100644 --- a/physics/ugwp_driver_v0.F +++ b/physics/ugwp_driver_v0.F @@ -1,3 +1,5 @@ +!>\file ugwp_driver_v0.F + ! !===================================================================== !