vegetation_forcing_legacy Subroutine

public subroutine vegetation_forcing_legacy()

Uses

  • proc~~vegetation_forcing_legacy~~UsesGraph proc~vegetation_forcing_legacy vegetation_forcing_legacy module~modfields modfields proc~vegetation_forcing_legacy->module~modfields module~modglobal modglobal proc~vegetation_forcing_legacy->module~modglobal decomp_2d decomp_2d module~modfields->decomp_2d

Arguments

None

Called by

proc~~vegetation_forcing_legacy~~CalledByGraph proc~vegetation_forcing_legacy vegetation_forcing_legacy proc~vegetation_forcing vegetation_forcing proc~vegetation_forcing->proc~vegetation_forcing_legacy program~udales uDALES program~udales->proc~vegetation_forcing

Source Code

  subroutine vegetation_forcing_legacy
    use modglobal, only : Qstar, dzf, pref0, rlv, cp, rv, rd, rhoa
    use modfields, only : thlm, qtm, qtp, thlp, um, vm, wm
    implicit none
    integer :: i, j, k, m
    real :: ladv, decv, clai, rn_top, rn_bot, q_av_leaf
    real :: e_sat, e_vap, d_vap, slope_sat, r_a, omega, qe, qh, gam
    real :: lsizev, rsv, wind2

    gam = (cp*pref0*rv)/(rlv*rd)
    do m = 1, veg%npts
      i = veg%ijk(m,1)
      j = veg%ijk(m,2)
      k = veg%ijk(m,3)

      ladv = veg%lad(m)
      decv = veg%dec(m)
      clai = veg%laiv(m)

      rn_top = Qstar * exp(-decv * (clai - ladv * dzf(k)))
      rn_bot = Qstar * exp(-decv * clai)
      q_av_leaf = (rn_top - rn_bot) / (dzf(k) * max(ladv, 1.0e-12))

      lsizev = max(veg%lsize(m), 1.0e-6)
      rsv = max(veg%rs(m), 1.0e-6)

      e_sat = 610.8*exp((17.27*(thlm(i,j,k)-273.15))/(thlm(i,j,k)-35.85))
      e_vap = (qtm(i,j,k) * pref0) / (0.378 * qtm(i,j,k) + 0.622)
      d_vap = max(e_sat - e_vap, 0.)
      slope_sat = (4098*e_sat)/((thlm(i,j,k)-35.85)**2)

      wind2 = max((0.5*(um(i,j,k)+um(i+1,j,k)))**2 &
                +(0.5*(vm(i,j,k)+vm(i,j+1,k)))**2 &
                +(0.5*(wm(i,j,k)+wm(i,j,k+1)))**2, 1.0e-12)
      r_a = 130*sqrt(lsizev / sqrt(wind2))

      omega = 1/(1 + 2*(gam/(slope_sat+2*gam)) * (rsv/r_a))
      qe = omega*(slope_sat/(slope_sat+2*gam))*q_av_leaf + (1-omega)*(1/(gam*rsv))*rhoa*cp*d_vap
      qh = q_av_leaf - qe

      vegp%omega(m) = omega
      vegp%qtR(m) = ladv*(omega*(slope_sat/(slope_sat+2*gam))*q_av_leaf)/(rhoa*rlv)
      vegp%qtA(m) = ladv*((1-omega)*(1/(gam*rsv))*rhoa*cp*d_vap)/(rhoa*rlv)
      vegp%qt(m) = vegp%qt(m) + ladv*qe/(rhoa*rlv)
      vegp%thl(m) = vegp%thl(m) + ladv*qh/(rhoa*cp)
      qtp(i,j,k) = qtp(i,j,k) + vegp%qt(m)
      thlp(i,j,k) = thlp(i,j,k) + vegp%thl(m)
    end do
  end subroutine vegetation_forcing_legacy