sq_surfst.f90 Source File


This file depends on

sourcefile~~sq_surfst.f90~~EfferentGraph sourcefile~sq_surfst.f90 sq_surfst.f90 sourcefile~basin_module.f90 basin_module.f90 sourcefile~sq_surfst.f90->sourcefile~basin_module.f90 sourcefile~hru_module.f90 hru_module.f90 sourcefile~sq_surfst.f90->sourcefile~hru_module.f90 sourcefile~time_module.f90 time_module.f90 sourcefile~sq_surfst.f90->sourcefile~time_module.f90

Source Code

      subroutine sq_surfst

!!    ~ ~ ~ PURPOSE ~ ~ ~
!!    this subroutine determines the net surface runoff reaching the 
!!    main channel on a given day. The net amount of water reaching
!!    the main channel can include water in surface runoff from the 
!!    previous day and will exclude surface runoff generated on the
!!    current day which takes longer than one day to reach the main
!!    channel

!!    ~ ~ ~ INCOMING VARIABLES ~ ~ ~
!!    name        |units         |definition
!!    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!!    brt(:)      |none          |fraction of surface runoff that takes
!!                               |one day or less to reach the subbasin
!!                               |outlet
!!    surf_bs(1,:)|mm H2O        |amount of surface runoff lagged over one
!!                               |day
!!    surfq(:)    |mm H2O        |surface runoff generated in HRU on the
!!                               |current day 
!!    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

!!    ~ ~ ~ OUTGOING VARIABLES ~ ~ ~
!!    name        |units         |definition
!!    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!!    bsprev      |mm H2O        |surface runoff lagged from prior day
!!    surf_bs(1,:)|mm H2O        |amount of surface runoff lagged over one
!!                               |day 
!!    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!!    ~ ~ ~ SUBROUTINES/FUNCTIONS CALLED ~ ~ ~
!!    Intrinsic: Max
!!    ~ ~ ~ ~ ~ ~ END SPECIFICATIONS ~ ~ ~ ~ ~ ~

      use basin_module
      use time_module
      use hru_module, only : surf_bs, surfq, brt, hhsurf_bs, hhsurfq, ihru, bsprev, qday 
      
      implicit none

      integer :: j = 0       !none          |HRU number
      integer :: k = 0       !none          |counter

      j = ihru

      if (bsn_cc%gampt == 0) then   
        bsprev = surf_bs(1,j)
        surf_bs(1,j) = Max(1.e-6, surf_bs(1,j) + surfq(j))
        qday = surf_bs(1,j) * brt(j)
        surf_bs(1,j) = surf_bs(1,j) - qday
      else
        bsprev = hhsurf_bs(1,j,time%step)       ! lag from previous day J.Jeong 4/06/2009
        qday = 0.
        do k=1,time%step
          !! Left-over (previous timestep) + inflow (current  timestep)
          hhsurf_bs(1,j,k) = Max(0., bsprev + hhsurfq(j,k))
    
          !! new estimation of runoff and sediment reaching the main channel
          hhsurfq(j,k) = hhsurf_bs(1,j,k) * brt(j)
          hhsurf_bs(1,j,k) = hhsurf_bs(1,j,k) - hhsurfq(j,k)
      
          !! lagged at the end of time step  
          bsprev = hhsurf_bs(1,j,k)
          
          !! daily total yield from the HRU
          qday = qday + hhsurfq(j,k)
        end do
      end if
     
    return
    end subroutine sq_surfst