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

📄 snowini.f90

📁 CLM集合卡曼滤波数据同化算法
💻 F90
字号:
  SUBROUTINE snowini (kpt,ivt,msl,maxsnl,snl,z,dz,zi,snowdp)!=======================================================================!      Source file: snowini.f90! Original version: Yongjiu Dai, September 15, 1999!! For snow spatial discretization initially!=======================================================================  IMPLICIT NONE  integer, INTENT(in) :: &        kpt,                     &! Number of land points, including submesh        msl,                     &! Number of soil layer        maxsnl,                  &! Maximum of "snl(k)"        ivt(kpt)                  ! land cover type  real, INTENT(in) :: &        snowdp(kpt)               ! Snow depth [m]  real, INTENT(inout) :: &        z (maxsnl+1:msl, 1:kpt), &! Node depth [m]        dz(maxsnl+1:msl, 1:kpt), &! Layer thickness [m]        zi(maxsnl  :msl, 1:kpt)   ! Depth of layer interface [m]  integer, INTENT(out) :: &           snl(kpt)               ! Number of snow  integer i, k                    ! Nodal looping index!-----------------------------------------------------------------------      do k = 1, kpt         if(ivt(k) == 17) cycle         if(snowdp(k) < 0.01)then            snl(k) = 0         else            if((snowdp(k) >= 0.01) .AND. (snowdp(k) <= 0.03))then               snl(k) = -1               dz(0,k)  = snowdp(k)            else if((snowdp(k) > 0.03) .AND. (snowdp(k) <= 0.04))then               snl(k) = -2               dz(-1,k) = snowdp(k)/2.               dz( 0,k) = dz(-1,k)            else if((snowdp(k) > 0.04) .AND. (snowdp(k) <= 0.07))then               snl(k) = -2               dz(-1,k) = 0.02               dz( 0,k) = snowdp(k) - dz(-1,k)            else if((snowdp(k) > 0.07) .AND. (snowdp(k) <= 0.12))then               snl(k) = -3               dz(-2,k) = 0.02               dz(-1,k) = (snowdp(k) - 0.02)/2.               dz( 0,k) = dz(-1,k)            else if((snowdp(k) > 0.12) .AND. (snowdp(k) <= 0.18))then               snl(k) = -3               dz(-2,k) = 0.02               dz(-1,k) = 0.05               dz( 0,k) = snowdp(k) - dz(-2,k) - dz(-1,k)            else if((snowdp(k) > 0.18) .AND. (snowdp(k) <= 0.29))then               snl(k) = -4               dz(-3,k) = 0.02               dz(-2,k) = 0.05               dz(-1,k) = (snowdp(k) - dz(-3,k) - dz(-2,k))/2.               dz( 0,k) = dz(-1,k)            else if((snowdp(k) > 0.29) .AND. (snowdp(k) <= 0.41))then               snl(k) = -4               dz(-3,k) = 0.02               dz(-2,k) = 0.05               dz(-1,k) = 0.11               dz( 0,k) = snowdp(k) - dz(-3,k) - dz(-2,k) - dz(-1,k)            else if((snowdp(k) > 0.41) .AND. (snowdp(k) <= 0.64))then               snl(k) = -5               dz(-4,k) = 0.02               dz(-3,k) = 0.05               dz(-2,k) = 0.11               dz(-1,k) = (snowdp(k) - dz(-4,k) - dz(-3,k) - dz(-2,k))/2.               dz( 0,k) = dz(-1,k)            else if(snowdp(k) > 0.64)then               snl(k) = -5               dz(-4,k) = 0.02               dz(-3,k) = 0.05               dz(-2,k) = 0.11               dz(-1,k) = 0.23               dz( 0,k) = snowdp(k) - dz(-4,k) - dz(-3,k) - dz(-2,k) - dz(-1,k)            endif            do i = 0, snl(k)+1, -1               z(i,k) = zi(i,k) - 0.5*dz(i,k)               zi(i-1,k) = zi(i,k) - dz(i,k)            enddo         endif      enddo  END SUBROUTINE snowini

⌨️ 快捷键说明

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