clmtci.f90

来自「CLM集合卡曼滤波数据同化算法」· F90 代码 · 共 358 行

F90
358
字号
  SUBROUTINE clmtci (kpt    ,msl    ,ivt    ,isc    ,sand   ,clay   ,&                     csol   ,porsl  ,phi0   ,bsw    ,dkmg   ,dksatu ,&                     dkdry  ,albsol ,hksati ,z0m    ,displa ,sqrtdi ,&                     effcon ,vmax25 ,slti   ,hlti   ,shti   ,hhti   ,&                                      trda   ,trdm   ,trop   ,gradm  ,binter ,extkn  ,&                     albvgs ,albvgl ,chil   ,ref    ,tran   ,rootfr ,&                     zsoi   ,dzsoi  ,zsoih)!=======================================================================!      source file: clmtci.f90! Original version: Yongjiu Dai, September 15, 1999!!=======================================================================  USE CLM_TABLE_MODULE  IMPLICIT NONE!-----------------------------------------------------------------------! Dummy argument  integer, INTENT(in) :: &        kpt,                 &!total number of clm land points, including subgrid points        msl,                 &!number of model soil layers        ivt(kpt),            &!index for vegetation type [-]        isc(kpt)              !index for soil color type [-]  real, INTENT(inout) :: &        sand(kpt),           &! percent of snad        clay(kpt)             ! percent of clay! Soil parameters  real, INTENT(out) :: &        csol  (1:msl,1:kpt), &!heat capacity of soil solids [J/(m3 K)]        porsl (1:msl,1:kpt), &!fraction of soil that is voids [-]        phi0  (1:msl,1:kpt), &!minimum soil suction [mm]        bsw   (1:msl,1:kpt), &!clapp and hornbereger "b" parameter [-]        dkmg  (1:msl,1:kpt), &!thermal conductivity of soil minerals [W/m-K]        dksatu(1:msl,1:kpt), &!thermal conductivity of saturated soil [W/m-K]        dkdry (1:msl,1:kpt), &!thermal conductivity for dry soil  [W/(m-K)]        hksati(1:msl,1:kpt), &!hydraulic conductivity at saturation [mm h2o/s]         albsol(kpt)           !soil albedo for different coloured soils [-]! Vegetation static parameters  real, INTENT(out) :: &        z0m(kpt),            &!aerodynamic roughness length [m]        displa(kpt),         &!displacement height [m]        sqrtdi(kpt),         &!inverse sqrt of leaf dimension [m**-0.5]        effcon(kpt),         &! quantum efficiency of RuBP regeneration (mol CO2 / mol quanta)        vmax25(kpt),         &! maximum carboxylation rate at 25 C at canopy top        slti(kpt),           &! slope of low temperature inhibition function      (0.2)        hlti(kpt),           &! 1/2 point of low temperature inhibition function  (288.16)        shti(kpt),           &! slope of high temperature inhibition function     (0.3)        hhti(kpt),           &! 1/2 point of high temperature inhibition function (313.16)        trda(kpt),           &! temperature coefficient in gs-a model             (1.3)        trdm(kpt),           &! temperature coefficient in gs-a model             (328.16)        trop(kpt),           &! temperature coefficient in gs-a model             (298.16)        gradm(kpt),          &! conductance-photosynthesis slope parameter        binter(kpt),         &! conductance-photosynthesis intercep        extkn(kpt),          &!        albvgs(kpt),         &!veg. albedo for wavelengths < 0.7 microns [-]        albvgl(kpt),         &!veg. albedo for wavelengths > 0.7 microns [-]        chil(kpt),           &! leaf angle distribution factor        ref(2,2,kpt),        &! leaf reflectance (iw=iband, il=life and dead)        tran(2,2,kpt),       &! leaf transmittance (iw=iband, il=life and dead)        rootfr(1:msl,1:kpt)   !fraction of roots in each soil layer ! Soil layer thickness, depths  real, INTENT(out) :: &        dzsoi(1:msl,1:kpt),  &!soil node thickness [m]        zsoi(1:msl,1:kpt),   &!soil layer depth [m]        zsoih(0:msl,1:kpt)    !interface level below a zsoi level [m]! Local variables  integer i, j, k             !loop indices  real  scalez                !scale factor for vertical coordinate [m]  real  bd                    !bulk density of dry soil material [kg/m^3]  real  dkm                   !  real  hkdepth               !length scale for decrease of hksati  real  xksat                 !maximum hydraulic conductivity of soil [mm/s]  real  dzlak(1:msl), zlak(1:msl)  integer idlak  integer iw, id !-----------------------------------------------------------------------! soil layer thickness, depths! Spatial discretization for soil, Unit is meter      scalez = 0.025! Define layer structure, vertical profiles of Ksat, and root fractions.! here "0" refers to soil sourface, "msl" refers to the bottom of model soil      do k = 1, kpt         idlak = 1                                      !assumed all lakes are deep lake         if(ivt(k) == 17)then                           !LAKE            if(idlak == 1) then               dzlak = (/1., 2., 3., 4., 5., 7., 7., 7., 7., 7./)                zlak = (/0.5, 1.5, 4.5, 8.0, 12.5, 18.5, 25.5, 32.5, 39.5, 46.5/)            else               dzlak = (/.25, 0.5, 0.75, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0/)     ! shallow lake                zlak = (/ 0.125,  0.5,  1.125,  2.,  3.,  4.,  5.,  6.,  7.,  8./)            end if            zsoih(0,k)   = 0.            do j = 1, msl               dzsoi(j,k) = dzlak(j)                zsoi(j,k) =  zlak(j)                zsoih(j,k) = zsoih(j-1,k)+dzsoi(j,k)            enddo         else                                           !NON LAKE LAND            do j = 1, msl              zsoi(j,k) = scalez*(exp(0.5*(j-0.5))-1.)     !node depths            end do            dzsoi(1,k)  = 0.5*(zsoi(1,k)+zsoi(2,k))        !=zsoih(1)            dzsoi(msl,k)= zsoi(msl,k)-zsoi(msl-1,k)            do j = 2,msl-1              dzsoi(j,k)= 0.5*(zsoi(j+1,k)-zsoi(j-1,k))    !thickness b/n two interfaces            end do            zsoih(0,k)   = 0.            zsoih(msl,k) = zsoi(msl,k) + 0.5*dzsoi(msl,k)            do j = 1, msl-1               zsoih(j,k)= 0.5*(zsoi(j,k)+zsoi(j+1,k))     !interface depths            enddo         endif      enddo!-----------------------------------------------------------------------! soil thermal and hydraulic properties      do k = 1, kpt         if (ivt(k)/=15 .AND. ivt(k)/=17) then  ! not ice, lake            do j = 1, msl! (1) modification 1! RJ forest!             if(zsoih(j,k) <= 0.2)then!                sand(k) = 88. + (82.-88.)/(.2-0.)*(zsoih(j,k)-0.)!                clay(k) = 4.  + (10. - 4.)/(.2-0.)*(zsoih(j,k)-0.)!             else if(zsoih(j,k) <= .4)then!                sand(k) = 82. + (77.-82.)/(.4-.2)*(zsoih(j,k)-.2)!                clay(k) = 10.  + (16. - 10.)/(.4-.2)*(zsoih(j,k)-.2)!             else if(zsoih(j,k) <= .6)then!                sand(k) = 77. + (63.-77.)/(.6-.4)*(zsoih(j,k)-.4)!                clay(k) = 16.  + (18.- 16.)/(.6-.4)*(zsoih(j,k)-.4)!             else if(zsoih(j,k) <= .8)then!                sand(k) = 63. + (58.-63.)/(.8-.6)*(zsoih(j,k)-.6)!                clay(k) = 18. + (35. -18.)/(.8-.6)*(zsoih(j,k)-.6)!             else if(zsoih(j,k) <= 1.)then!                sand(k) = 58. + (58.-58.)/(1.-.8)*(zsoih(j,k)-.8)!                clay(k) = 35. + (35.-35.)/(1.-.8)*(zsoih(j,k)-.8)!             else if(zsoih(j,k) <= 1.2)then!                sand(k) = 58. + (53.-58.)/(1.2-1.)*(zsoih(j,k)-1.)!                clay(k) = 35. + (36.-35.)/(1.2-1.)*(zsoih(j,k)-1.)!             else !                sand(k) = 53.!                clay(k) = 36.!             endif ! RJ pasture!            if(zsoih(j,k) <= 0.1)then!               sand(k) = 85.!               clay(k) = 7.!            else if(zsoih(j,k) <= 1.0)then!               sand(k) = 85. + (53.-85.)/(1.-0.1)*(zsoih(j,k)-0.1)!               clay(k) = 7. + (35.-7.)/(1.-0.1)*(zsoih(j,k)-0.1)!            else if(zsoih(j,k) <= 1.5)then!               sand(k) = 53.!               clay(k) = 35.!            else!               sand(k) = 33.!               clay(k) = 17.!            endif!! -----------------------------------------------------             porsl(j,k) = 0.489 - 0.00126*sand(k)              phi0(j,k) = 10. * ( 10.**(1.88-0.0131*sand(k)) )               bsw(j,k) = 2.91 + 0.159*clay(k)                 dkm    = (8.80*sand(k)+2.92*clay(k)) / (sand(k)+clay(k))       ! W/(m K)              csol(j,k) = (2.128*sand(k)+2.385*clay(k))/(sand(k)+clay(k))*1.e6  ! J/(m3 K)                     bd = (1.- porsl(j,k))*2.7e3              dkmg(j,k) = dkm**(1.-porsl(j,k))            dksatu(j,k) = dkmg(j,k)*0.57**porsl(j,k)             dkdry(j,k) = (.135*bd + 64.7) / (2.7e3 - 0.947*bd)                  xksat = 0.0070556 * ( 10.**(-0.884+0.0153*sand(k)) ) ! mm/s! ABRACOS forest!             if(zsoih(j,k) <= 0.2)then!               porsl(j,k) = 0.483!                xksat = 63./3600.!             else if(zsoih(j,k) <= .4)then!                porsl(j,k) = 0.483 + (0.305-0.483)/(.4-.2)*(zsoih(j,k)-.2)!                xksat = 63./3600.  + (66./3600. - 63./3600.)/(.4-.2)*(zsoih(j,k)-.2)!             else if(zsoih(j,k) <= .6)then!                porsl(j,k) = 0.305 + (0.343-0.305)/(.6-.4)*(zsoih(j,k)-.4)!                xksat = 66./3600.  + (10./3600.- 66./3600.)/(.6-.4)*(zsoih(j,k)-.4)!             else if(zsoih(j,k) <= .8)then!                porsl(j,k) = 0.343 +(0.397-0.343)/(.8-.6)*(zsoih(j,k)-.6)!                xksat = 10./3600. + (5./3600. -10./3600.)/(.8-.6)*(zsoih(j,k)-.6)!             else if(zsoih(j,k) <= 1.)then!                porsl(j,k) = 0.397 + (0.410-0.397)/(1.-.8)*(zsoih(j,k)-.8)!                xksat = 5./3600.   !             else if(zsoih(j,k) <= 1.2)then!                porsl(j,k) = 0.410 + (0.408-0.410)/(1.2-1.)*(zsoih(j,k)-1.)!                xksat = 5./3600.!             else!                porsl(j,k) = 0.418!                xksat = 5./3600.!             endif ! Define the vertical profile of saturated hydraulic conductivity! from 1 (model soil bottom) to msl (soil surface layer)            hkdepth = 0.5        !m length scale for Ksat decrease            hksati(j,k) = xksat  !*exp(-zsoih(j,k)/hkdepth)            end do! only for ABRACOS forest            hksati(10,k) = 0.! Saturated soil albedo for visible beam            albsol(k) = solour(isc(k))         else                                   ! ice/glacier, lake            do j = 1, msl             porsl(j,k) = 1.              phi0(j,k) = -999.               bsw(j,k) = -999.              dkmg(j,k) = -999.              csol(j,k) = -999.            dksatu(j,k) = -999.             dkdry(j,k) = -999.            hksati(j,k) = -999.              albsol(k) = -999.            end do         endif      end do!-----------------------------------------------------------------------! vegetation static parameters      do k = 1, kpt                 i = ivt(k)            z0m(k) = z0m_table   (i)           displa(k) = displa_table(i)         sqrtdi(k) = sqrtdi_table(i)  ! ABRJ -----------------------------         effcon(k) = 0.08         vmax25(k) = 68.e-6    !100.e-6         slti(k)   = 0.2         hlti(k)   = 288.16         shti(k)   = 0.3         hhti(k)   = 313.16         trda(k)   = 1.3         trdm(k)   = 328.16         trop(k)   = 298.16         gradm(k)  = 9.0         binter(k) = 0.01         extkn(k)  = 0.5          chil(k) = 0.1         ref(1,1,k)=0.1; ref(1,2,k)=0.16; ref(2,1,k)=0.45;  ref(2,2,k)=0.39         tran(1,1,k)=0.05;  tran(1,2,k)=0.001; tran(2,1,k)=0.25; tran(2,2,k)=0.001 ! ABNS -----------------------------!        effcon(k) = 0.05!        vmax25(k) = 3.e-5!        slti(k)   = 0.2!        hlti(k)   = 288.16!        shti(k)   = 0.3!        hhti(k)   = 313.16!        trda(k)   = 1.3!        trdm(k)   = 328.16!        trop(k)   = 298.16!        gradm(k)  = 4.0!        binter(k) = 0.04!        extkn(k)  = 0.78! !        chil(k) = -0.3!        ref(1,1,k)=0.105; ref(1,2,k)=0.36; ref(2,1,k)=0.58;  ref(2,2,k)=0.58!        tran(1,1,k)=0.07;  tran(1,2,k)=0.22; tran(2,1,k)=0.25; tran(2,2,k)=0.38!! Boreas forest -----------------------------!        effcon(k) = 0.08!        vmax25(k) = 1.e-4!        slti(k)   = 0.2!        hlti(k)   = 278.16!        shti(k)   = 0.3!        hhti(k)   = 303.16!        trda(k)   = 1.3!        trdm(k)   = 328.16!        trop(k)   = 298.16!        gradm(k)  = 9.0!        binter(k) = 0.01!        extkn(k)  = 0.78!!        chil(k) = -0.3!        ref(1,1,k)=0.07; ref(1,2,k)=0.16; ref(2,1,k)=0.35;  ref(2,2,k)=0.39!        tran(1,1,k)=0.05;  tran(1,2,k)=0.001; tran(2,1,k)=0.1; tran(2,2,k)=0.001! Boreas grass -----------------------------!        effcon(k) = 0.05!        vmax25(k) = 3.e-5!        slti(k)   = 0.2!        hlti(k)   = 288.16!        shti(k)   = 0.3!        hhti(k)   = 313.16!        trda(k)   = 1.3!        trdm(k)   = 328.16!        trop(k)   = 298.16!        gradm(k)  = 4.0!        binter(k) = 0.04!        extkn(k)  = 0.78! !        chil(k) = -0.3!        ref(1,1,k)=0.105; ref(1,2,k)=0.36; ref(2,1,k)=0.58;  ref(2,2,k)=0.58!        tran(1,1,k)=0.07;  tran(1,2,k)=0.22; tran(2,1,k)=0.25; tran(2,2,k)=0.38! ----------------------------------         albvgs(k) = albvgs_table(i)         albvgl(k) = albvgl_table(i)! root fraction (computing from surface, d is depth in meter):! Y = 1 -1/2 (exp(-ad)+exp(-bd) under the constraint that! Y(d =0.1m) = 1-beta^(10 cm) and Y(d=d_obs)=0.99 with beta & d_obs! given in Zeng et al. (1998).         do j = 1, msl-1            rootfr(j,k) = .5*( exp(-roota(i)*zsoih(j-1,k))  &                             + exp(-rootb(i)*zsoih(j-1,k))  &                             - exp(-roota(i)*zsoih(j  ,k))  &                             - exp(-rootb(i)*zsoih(j  ,k)) )         end do         rootfr(msl,k) =  .5*( exp(-roota(i)*zsoih(msl-1,k))&                             + exp(-rootb(i)*zsoih(msl-1,k)))         do j=1,10         rootfr(j,k) = dzsoi(j,k)/zsoih(10,k)         enddo      enddo  END SUBROUTINE clmtci

⌨️ 快捷键说明

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