📄 snowini.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 + -