et_act.f90 Source File


This file depends on

sourcefile~~et_act.f90~~EfferentGraph sourcefile~et_act.f90 et_act.f90 sourcefile~basin_module.f90 basin_module.f90 sourcefile~et_act.f90->sourcefile~basin_module.f90 sourcefile~climate_module.f90 climate_module.f90 sourcefile~et_act.f90->sourcefile~climate_module.f90 sourcefile~hru_module.f90 hru_module.f90 sourcefile~et_act.f90->sourcefile~hru_module.f90 sourcefile~hydrograph_module.f90 hydrograph_module.f90 sourcefile~et_act.f90->sourcefile~hydrograph_module.f90 sourcefile~organic_mineral_mass_module.f90 organic_mineral_mass_module.f90 sourcefile~et_act.f90->sourcefile~organic_mineral_mass_module.f90 sourcefile~plant_module.f90 plant_module.f90 sourcefile~et_act.f90->sourcefile~plant_module.f90 sourcefile~reservoir_data_module.f90 reservoir_data_module.f90 sourcefile~et_act.f90->sourcefile~reservoir_data_module.f90 sourcefile~soil_module.f90 soil_module.f90 sourcefile~et_act.f90->sourcefile~soil_module.f90 sourcefile~water_body_module.f90 water_body_module.f90 sourcefile~et_act.f90->sourcefile~water_body_module.f90 sourcefile~hydrograph_module.f90->sourcefile~basin_module.f90 sourcefile~time_module.f90 time_module.f90 sourcefile~hydrograph_module.f90->sourcefile~time_module.f90 sourcefile~carbon_module.f90 carbon_module.f90 sourcefile~organic_mineral_mass_module.f90->sourcefile~carbon_module.f90 sourcefile~soil_module.f90->sourcefile~carbon_module.f90

Source Code

      subroutine et_act
      
!!    ~ ~ ~ PURPOSE ~ ~ ~
!!    this subroutine calculates potential plant transpiration for Priestley-
!!    Taylor and Hargreaves ET methods, and potential and actual soil
!!    evaporation. NO3 movement into surface soil layer due to evaporation
!!    is also calculated.


!!    ~ ~ ~ INCOMING VARIABLES ~ ~ ~
!!    name         |units         |definition
!!    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!!    canstor(:)   |mm H2O        |amount of water held in canopy storage
!!    ep_max       |mm H2O        |maximum amount of transpiration (plant et)
!!                                |that can occur on current day in HRU 
!!    esco(:)      |none          |soil evaporation compensation factor
!!    ihru         |none          |HRU number
!!    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

!!    ~ ~ ~ OUTGOING VARIABLES ~ ~ ~
!!    name         |units         |definition
!!    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!!    canev        |mm H2O        |amount of water evaporated from canopy
!!                                |storage
!!    ep_max       |mm H2O        |maximum amount of transpiration (plant et)
!!                                |that can occur on current day in HRU
!!    es_day       |mm H2O        |actual amount of evaporation (soil et) that
!!                                |occurs on day in HRU
!!    snoev        |mm H2O        |amount of water in snow lost through
!!                                |sublimation on current day
!!    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!!    ~ ~ ~ SUBROUTINES/FUNCTIONS CALLED ~ ~ ~
!!    Intrinsic: Exp, Min, Max

!!    ~ ~ ~ ~ ~ ~ END SPECIFICATIONS ~ ~ ~ ~ ~ ~
 
      use basin_module
      use organic_mineral_mass_module
      use hru_module, only : hru, canstor, ihru, canev, ep_max,  &
         es_day, pet_day, snoev
      use soil_module
      use plant_module
      use climate_module
      use hydrograph_module
      use water_body_module
      use reservoir_data_module
      
      implicit none

      integer :: j = 0           !none          |HRU number
!!    real, parameter :: esd = 500., etco = 0.80, effnup = 0.1
      real :: esd = 0.           !mm            |maximum soil depth from which evaporation
                                 !              |is allowed to occur
      real :: etco = 0.          !              |
      real :: effnup = 0.        !              ! 
      real :: no3up = 0.         !kg N/ha       |amount of nitrate moving upward in profile 
      real :: es_max = 0.        !mm H2O        |maximum amount of evaporation (soil et)
                                 !              |that can occur on current day in HRU
      real :: eos1 = 0.          !none          |variable to hold intermediate calculation
                                 !              |result
      real :: xx = 0.            !none          |variable to hold intermediate calculation 
                                 !              |result
      real :: cej = 0.           !              |
      real :: eaj = 0.           !none          |weighting factor to adjust PET for impact of
                                 !              |plant cover    
      real :: pet = 0.           !mm H2O        |amount of PET remaining after water stored
                                 !              |in canopy is evaporated
      real :: esleft = 0.        !mm H2O        |potential soil evap that is still available
      real :: evzp = 0.          !              |
      real :: eosl = 0.          !mm H2O        |maximum amount of evaporation that can occur
                                 !              |from soil profile
      real :: dep = 0.           !mm            |soil depth from which evaporation will occur
                                 !              |in current soil layer
      real :: evz = 0.           !              | 
      real :: sev = 0.           !mm H2O        |amount of evaporation from soil layer
      real :: sev_st = 0.        !mm H2O        |evaporation / soil water for no3 flux from layer 1 -> 2
      real :: cover = 0.         !kg/ha         |soil cover
      real :: wetvol_mm = 0.     !mm            |wetland water volume - average depth over hru
      integer :: ly = 0          !none          |counter     
      integer:: ires = 0  !Jaehak 2022
      integer:: ihyd = 0  !Jaehak 2022

      j = ihru
      pet = pet_day
!!    added statements for test of real statement above
      esd = 500.  !soil(j)%zmx
      etco = 0.80
      effnup = 0.05
      ires= hru(j)%dbs%surf_stor !Jaehak 2022


!! evaporate canopy storage first
!! canopy interception (sq_canopyint) is computed for every surface runoff
!! method, curve number and Green & Ampt, so canstor can be nonzero with
!! either
      canev = 0.
      pet = pet - canstor(j)
      if (pet < 0.) then
        canstor(j) = -pet
        canev = pet_day
        pet = 0.
        ep_max = 0.
        es_max = 0.
      else
        canev = canstor(j)
        canstor(j) = 0.
      endif

      if (pet > 1.0e-6) then

        !! compute potential plant evap for methods other that Penman-Monteith
        !if (bsn_cc%pet /= 1) then
          if (pcom(j)%lai_sum <= 3.0) then
            ep_max = pcom(j)%lai_sum * pet / 3.
          else
            ep_max = pet
          end if
          if (ep_max < 0.) ep_max = 0.
        !end if

        !! compute potential soil evaporation
        cej = -5.e-5
        eaj = 0.
        es_max = 0.
        eos1 = 0.
        cover = pl_mass(j)%ab_gr_com%m + pl_mass(j)%rsd_tot%m
        if (hru(j)%sno_mm >= 0.5) then
          eaj = 0.5
        else
          eaj = Exp(cej * (cover + 0.1))
        end if
        es_max = pet * eaj
        eos1 = pet / (es_max + ep_max + 1.e-10)
        eos1 = es_max * eos1
        es_max = Min(es_max, eos1)
        es_max = Max(es_max, 0.)

        if (wet(j)%flo > 0.) then !wetlands water evaporation reduced by canopy Jaehak 2022
        
          if (pcom(j)%lai_sum <= 4.0) then 
            ihyd = wet_dat(ires)%hyd
            es_max = wet_hyd(ihyd)%evrsv * (1.-pcom(j)%lai_sum / 4.) * pet !adapted from Sakaguchi et al. 2014
          else
            es_max = 0.
          endif

        else  
        
          !! make sure maximum plant and soil ET doesn't exceed potential ET
          if (pet_day < es_max + ep_max) then
            es_max = pet_day - ep_max
            if (pet < es_max + ep_max) then
              es_max = pet * es_max / (es_max + ep_max)
              ep_max = pet * ep_max / (es_max + ep_max)
            end if
          end if
        end if
        
        !! adjust es_max and ep_max for impervous urban cover
        !es_max = 0.5 * es_max
        !ep_max = 0.5 * ep_max
          
        !! initialize soil evaporation variables
        esleft = es_max

        !! compute sublimation
        if (w%tave > 0.) then
          if (hru(j)%sno_mm >= esleft) then
            !! take all soil evap from snow cover
            hru(j)%sno_mm = hru(j)%sno_mm - esleft
            snoev = snoev + esleft
            esleft = 0.
          else
            !! take all soil evap from snow cover before taking from soil
            esleft = esleft - hru(j)%sno_mm
            snoev = snoev + hru(j)%sno_mm
            hru(j)%sno_mm = 0.
          endif
        endif

        !! compute evaporation from the standing water in wetlands/paddies Jaehak 2026
        wet_wat_d(j)%evap = 0.
        if (wet(j)%flo > 0.) then
          wetvol_mm = wet(j)%flo / (10. *  hru(j)%area_ha)    !mm=m3/(10.*ha)
          !! take all soil evap from wetland storage before taking from soil
          if (wetvol_mm >= esleft) then
            wetvol_mm = wetvol_mm - esleft
            wet_wat_d(j)%evap = esleft * (10. *  hru(j)%area_ha) !m3
            esleft = 0.
          else
            esleft = esleft - wetvol_mm
            wet_wat_d(j)%evap = wetvol_mm * (10. *  hru(j)%area_ha)
            wetvol_mm = 0.
          endif
          wet(j)%flo = 10. * wetvol_mm * hru(j)%area_ha
          hru(j)%water_evap = wet_wat_d(j)%evap / (10. * hru(j)%area_ha)  !mm=m3/(10*ha)

        endif
        
        !! take soil evap from each soil layer (no standing water)
        if (wet(j)%flo < 1e-6) then

          evzp = 0.
          eosl = esleft
          do ly = 1, soil(j)%nly

            !! depth exceeds max depth for soil evap (esd)
            dep = 0.
            if (ly == 1) then
              dep = soil(j)%phys(1)%d
            else
              dep = soil(j)%phys(ly-1)%d
            endif

            if (dep < esd) then
              !! calculate evaporation from soil layer
              evz = eosl * soil(j)%phys(ly)%d / (soil(j)%phys(ly)%d +        &
                 Exp(2.374 - .00713 * soil(j)%phys(ly)%d))
              sev = evz - evzp * (1. - hru(j)%hyd%esco)
              evzp = evz
              if (soil(j)%phys(ly)%st < soil(j)%phys(ly)%fc) then
                xx =  2.5 * (soil(j)%phys(ly)%st - soil(j)%phys(ly)%fc) /    &
                 soil(j)%phys(ly)%fc
                sev = sev * exp(xx)
              end if
              sev = Min(sev, soil(j)%phys(ly)%st * etco)

              if (sev < 0.) sev = 0.
              if (sev > esleft) sev = esleft

              !! adjust soil storage, potential evap
              if (soil(j)%phys(ly)%st > sev) then
                esleft = max(0.,esleft - sev)
                soil(j)%phys(ly)%st = Max(1.e-6, soil(j)%phys(ly)%st - sev)
              else
                esleft = max(0.,esleft - soil(j)%phys(ly)%st)
                sev = soil(j)%phys(ly)%st
                soil(j)%phys(ly)%st = 0.
              endif
            endif

            !! compute no3 flux from layer 2 to 1 by soil evaporation
            if (ly == 2) then
              if (soil(j)%phys(2)%st > 1.e-3) then
                sev_st = sev / (soil(j)%phys(2)%st)
              else
                sev_st = 0.
              end if
              sev_st = amin1 (1., sev_st)
              no3up = effnup * sev_st * soil1(j)%mn(2)%no3
              no3up = Min(no3up, soil1(j)%mn(2)%no3)
              soil1(j)%mn(2)%no3 = max(0.0001,soil1(j)%mn(2)%no3 - no3up)
              soil1(j)%mn(1)%no3 = max(0.0001,soil1(j)%mn(1)%no3 + no3up)
            endif

          end do    !layer loop
        end if

        !! calculate actual amount of evaporation from soil
        es_day = max(0.,es_max - esleft)
      endif

      !! update total soil water content
      soil(j)%sw = 0.
      do ly = 1, soil(j)%nly
        soil(j)%sw = soil(j)%sw + soil(j)%phys(ly)%st
      end do

      return
      end subroutine et_act