⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 surfacerunoff.f90

📁 CCSM Research Tools: Community Atmosphere Model (CAM)
💻 F90
字号:
#include <misc.h>#include <preproc.h>subroutine SurfaceRunoff (clm, zwice, vol_liq, s, zwt, &                          fcov ) !-----------------------------------------------------------------------!!  CLMCLMCLMCLMCLMCLMCLMCLMCLMCL  A community developed and sponsored, freely!  L                           M  available land surface process model.!  M --COMMUNITY LAND MODEL--  C!  C                           L!  LMCLMCLMCLMCLMCLMCLMCLMCLMCLM!!-----------------------------------------------------------------------! Purpose:! Calculate surface runoff!! Method:! The original code for total runoff was provided by Robert E. Dickinson! based on the following properties:  exponential decrease of Ksat, a! water table level determination level including highland and lowland ! levels and fractional area of wetland (water table above the surface). ! Runoff is parameterized from the lowlands in terms of precip ! incident on wet areas and a base flow, where these are estimated ! using ideas from TOPMODEL.!! The original scheme was modified by Z.-L. Yang and G.-Y. Niu,! o  using a new method to determine water table depth and!    the fractional wet area (fcov)! o  computing runoff (surface and subsurface) from this!    fraction and the remaining fraction (i.e. 1-fcov)! o  for the 1-fcov part, using BATS1e method to compute!    surface and subsurface runoff.!! The original code on soil moisture and runoff were provided by ! R. E. Dickinson in July 1996.!! Author:! 15 September 1999: Yongjiu Dai; Initial code! 12 November 1999:  Z.-L. Yang and G.-Y. Niu! 15 December 1999:  Paul Houser and Jon Radakovich; F90 Revision ! April 2002: Vertenstein/Oleson/Levis; Final form!!-----------------------------------------------------------------------! $Id: SurfaceRunoff.F90,v 1.2.10.2 2002/04/27 15:38:42 erik Exp $!-----------------------------------------------------------------------  use precision  use clmtype  use clm_varcon, only : denice, denh2o  use clm_varpar, only : nlevsoi  implicit none!----Arguments----------------------------------------------------------  type (clm1d), intent(inout) :: clm	 !CLM 1-D Module  real(r8), intent(out) :: zwice              ! the sum of ice mass of soil (kg/m2)  real(r8), intent(out) :: vol_liq(1:nlevsoi) ! partial volume of liquid water in layer [-]  real(r8), intent(out) :: s(1:nlevsoi)       ! wetness of soil (including ice) [-]  real(r8), intent(out) :: zwt                ! water table depth [m]  real(r8), intent(out) :: fcov               ! fractional area with water table at surface [-]!----Local Variables----------------------------------------------------  integer i                   ! do loop index   real(r8) vol_ice(1:nlevsoi) ! partial volume of ice lens in layer [-]  real(r8) zmean              ! The surface soil layers contributing to runoff [m]  real(r8) wmean              ! The averaged soil wetness depth in surface soil layers [m]  real(r8) fz                 ! coefficient for water table depth!----End Variable List--------------------------------------------------!! Porosity of soil, partial volume of ice and liquid!  zwice = 0.  do i = 1,nlevsoi      zwice = zwice + clm%h2osoi_ice(i)     vol_ice(i) = min(clm%watsat(i), clm%h2osoi_ice(i)/(clm%dz(i)*denice))     clm%eff_porosity(i) = clm%watsat(i)-vol_ice(i)     vol_liq(i) = min(clm%eff_porosity(i), clm%h2osoi_liq(i)/(clm%dz(i)*denh2o))  enddo!! Calculate wetness of soil!  do i = 1,nlevsoi     s(i) = min(1._r8,(vol_ice(i)+vol_liq(i))/clm%watsat(i))  end do!! Determine water table !  wmean = 0.                                                    fz    = 1.0                                                  do i  = 1, nlevsoi                                             wmean = wmean + s(i)*clm%dz(i)                            enddo  zwt = fz * (clm%zi(nlevsoi) - wmean)                     !! Saturation fraction!  fcov = clm%wtfact*min(1._r8,exp(-zwt))    wmean = 0.                                                 zmean = 0.                                                do i = 1, 3                                               zmean = zmean + clm%dz(i)                               wmean = wmean + s(i) * clm%dz(i)                   enddo  wmean = wmean / zmean                           !! If top soil layer is impermeable then all qflx_top_soil goes to surface runoff!  if (clm%eff_porosity(1) < clm%wimp) then   clm%qflx_surf =  max(0._r8, fcov*clm%qflx_top_soil) + &                    max(0._r8, (1.-fcov)*clm%qflx_top_soil)          else   clm%qflx_surf =  max(0._r8, fcov*clm%qflx_top_soil) + &                    max(0._r8, (1.-fcov)*min(1._r8,wmean**4)*clm%qflx_top_soil)          endifend subroutine SurfaceRunoff

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -