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

📄 stomatab.f90

📁 CLM集合卡曼滤波数据同化算法
💻 F90
字号:
  subroutine stomataB (tfrz ,mpe    ,apar , &                       tv   ,ei     ,ea   ,tgcm   ,pgcm  , &                       o2   ,co2    ,igs  ,btran  ,rb    , &                       rs   ,psn    ,qe25 ,aqe    ,kc25  , &                       ko25 ,vcmx25 ,akc  ,ako    ,avcmx , &                       bp   ,mp     ,foln ,folnmx ,c3psn )   IMPLICIT NONE! ------------------------ code history ---------------------------! source file:       stomata.f90! purpose:           leaf stomatal resistance and leaf photosynthesis! date last revised: March 1996 - lsm version 1! author:            Gordon Bonan! ------------------------ input/output variables -----------------  real, INTENT(in) :: &        tfrz,       &!freezing point (kelvin)        mpe,        &!prevents division by zero errors        tv,         &!foliage temperature (kelvin)        ei,         &!vapor pressure inside leaf (sat vapor press at tv) (pa)        ea,         &!vapor pressure of canopy air (pa)        apar,       &!par absorbed per unit lai (w/m**2)        o2,         &!atmospheric o2 concentration (pa)        co2,        &!atmospheric co2 concentration (pa)        pgcm,       &!air pressure at agcm reference height (pa)        tgcm,       &!air temperature at agcm reference height (kelvin)        igs,        &!growing season index (0=off, 1=on)        btran,      &!soil water transpiration factor (0 to 1)        foln,       &!foliage nitrogen concentration (%)        qe25,       &!quantum efficiency at 25c (umol co2 / umol photon)        ko25,       &!o2 michaelis-menten constant at 25c (pa)        kc25,       &!co2 michaelis-menten constant at 25c (pa)        vcmx25,     &!maximum rate of carboxylation at 25c (umol co2/m**2/s)        aqe,        &!q10 for qe25        ako,        &!q10 for ko25        akc,        &!q10 for kc25        avcmx,      &!q10 for vcmx25        bp,         &!minimum leaf conductance (umol/m**2/s)        mp,         &!slope for conductance-to-photosynthesis relationship         folnmx,     &!foliage nitrogen concentration when f(n)=1 (%)        c3psn        !photosynthetic pathway: 0. = c4, 1. = c3  real, INTENT(inout) :: &        rb           !boundary layer resistance (s/m)! output  real, INTENT(out) :: &        rs,         &!leaf stomatal resistance (s/m)        psn          !foliage photosynthesis (umol co2 /m**2/ s) [always +]! ------------------------ local variables ------------------------  integer, parameter :: niter = 3  ! number of iterations  integer  iter      !iteration index  real ab,          &!used in statement functions       bc,          &!used in statement functions       f1,          &!generic temperature response (statement function)       f2,          &!generic temperature inhibition (statement function)       tc,          &!foliage temperature (degree celsius)       cs,          &!co2 concentration at leaf surface (pa)       kc,          &!co2 michaelis-menten constant (pa)       ko,          &!o2 michaelis-menten constant (pa)       a,b,c,q,     &!intermediate calculations for rs       r1,r2,       &!roots for rs       fnf,         &!foliage nitrogen adjustment factor (0 to 1)       ppf,         &!absorb photosynthetic photon flux (umol photons/m**2/s)       wc,          &!rubisco limited photosynthesis (umol co2/m**2/s)       wj,          &!light limited photosynthesis (umol co2/m**2/s)       we,          &!export limited photosynthesis (umol co2/m**2/s)       cp,          &!co2 compensation point (pa)       ci,          &!internal co2 (pa)       awc,         &!intermediate calcuation for wc       vcmx,        &!maximum rate of carboxylation (umol co2/m**2/s)       j,           &!electron transport (umol co2/m**2/s)       cea,         &!constrain ea or else model blows up       cf,          &!s m**2/umol -> s/m       rsmax0        ! maximum stomatal resistance [s/m]! -----------------------------------------------------------------      f1(ab,bc) = ab**((bc-25.)/10.)      f2(ab) = 1. + exp((-2.2e05+710.*(ab+273.16))/(8.314*(ab+273.16)))! initialize rs=rsmax and psn=0 because will only do calculations! for apar > 0, in which case rs <= rsmax and psn >= 0! set constants      rsmax0 = 2.e4      cf = pgcm/(8.314*tgcm)*1.e06       if(apar <= 0.) then           ! night time!        rs = min(rsmax0, 1./bp * cf)         rs = 1./(bp*btran) * cf         psn = 0.      else                          ! day time         fnf = min(foln/max(mpe,folnmx), 1.0)         tc = tv-tfrz                                     ppf = 4.6*apar                           j = ppf*qe25         kc = kc25 * f1(akc,tc)                ko = ko25 * f1(ako,tc)         awc = kc * (1.+o2/ko)         cp = 0.5*kc/ko*o2*0.21         vcmx = vcmx25 * f1(avcmx,tc) / f2(tc) * fnf * btran! first guess ci         ci = 0.7*co2*c3psn + 0.4*co2*(1.-c3psn)  ! rb: s/m -> s m**2 / umol         rb = rb/cf ! constrain ea         cea = max(0.25*ei*c3psn+0.40*ei*(1.-c3psn), min(ea,ei) ) ! ci iteration         do iter = 1, niter            wj = max(ci-cp,0.)*j/(ci+2.*cp)*c3psn + j*(1.-c3psn)            wc = max(ci-cp,0.)*vcmx/(ci+awc)*c3psn + vcmx*(1.-c3psn)            we = 0.5*vcmx*c3psn + 4000.*vcmx*ci/pgcm*(1.-c3psn)             psn = min(wj,wc,we) * igs            cs = max( co2-1.37*rb*pgcm*psn, mpe )            a = mp*psn*pgcm*cea / (cs*ei) + bp*btran            b = ( mp*psn*pgcm/cs + bp*btran ) * rb - 1.            c = -rb            if (b >= 0.) then               q = -0.5*( b + sqrt(b*b-4.*a*c) )            else               q = -0.5*( b - sqrt(b*b-4.*a*c) )            end if            r1 = q/a            r2 = c/q            rs = max(r1,r2)            ci = max( cs-psn*pgcm*1.65*rs, 0. )         end do! rs, rb:  s m**2 / umol -> s/m !        rs = min(rsmax0, rs*cf)         rs = rs*cf         rb = rb*cf       endif  END SUBROUTINE stomataB

⌨️ 快捷键说明

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