sep_biozone.f90 Source File


This file depends on

sourcefile~~sep_biozone.f90~~EfferentGraph sourcefile~sep_biozone.f90 sep_biozone.f90 sourcefile~basin_module.f90 basin_module.f90 sourcefile~sep_biozone.f90->sourcefile~basin_module.f90 sourcefile~hru_module.f90 hru_module.f90 sourcefile~sep_biozone.f90->sourcefile~hru_module.f90 sourcefile~organic_mineral_mass_module.f90 organic_mineral_mass_module.f90 sourcefile~sep_biozone.f90->sourcefile~organic_mineral_mass_module.f90 sourcefile~pathogen_data_module.f90 pathogen_data_module.f90 sourcefile~sep_biozone.f90->sourcefile~pathogen_data_module.f90 sourcefile~septic_data_module.f90 septic_data_module.f90 sourcefile~sep_biozone.f90->sourcefile~septic_data_module.f90 sourcefile~soil_module.f90 soil_module.f90 sourcefile~sep_biozone.f90->sourcefile~soil_module.f90 sourcefile~time_module.f90 time_module.f90 sourcefile~sep_biozone.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 sep_biozone
        
!!    ~ ~ ~ PURPOSE ~ ~ ~
!!    This subroutine conducts biophysical processes occuring 
!!    in the biozone layer of a septic HRU.

!!    ~ ~ ~ INCOMING VARIABLES ~ ~ ~
!!    name             |units         |definition
!!    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!!    bio_bd(:)        |kg/m^3        |density of biomass 
!!    bio_bod(:)       |kg/ha         |BOD concentration in biozone
!!    biom(:)          |kg/ha         |biomass of live bacteria in biozone       
!!    bz_thk(:)        |mm            |thickness of biozone                    
!!    coeff_bod_dc(:)  |m^3/day       |BOD decay rate coefficient
!!    coeff_bod_conv(:)|none          |BOD to live bacteria biomass conversion factor
!!    coeff_denitr(:)  |none          |Denitrification rate coefficient
!!    coeff_fc1(:)     |none          |field capacity calibration parameter 1
!!    coeff_fc2(:)     |none          |field capacity calibration parameter 2  
!!    coeff_fecal(:)   |m^3/day       |Fecal coliform bacteria decay rate coefficient  
!!    coeff_mrt(:)     |none          |mortality rate coefficient          
!!    coeff_nitr(:)    |none          |Nitrification rate coefficient
!!    coeff_plq(:)     |none          |Conversion factor for plaque from TDS           
!!    coeff_rsp(:)     |none          |respiration rate coefficient          
!!    coeff_slg1(:)    |none          |slough-off calibration parameter
!!    coeff_slg2(:)    |none          |slough-off calibration parameter
!!    fcoli(:)         |cfu/100ml     |concentration of the fecal coliform in the biozone 
!!                     |              |septic tank effluent
!!    ihru             |none          |HRU number
!!    i_sep(:)         |none          |soil layer where biozone exists           
!!    isep_opt(:)      |none          |Septic system operation flag (1=active,2=failing,0=not operated)                 
!!    plqm             |kg/ha         |plaque in biozone
!!    rbiom(:)         |kg/ha         |daily change in biomass of live bacteria
!!    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
!!    ~ ~ ~ ~ ~ ~ END SPECIFICATIONS ~ ~ ~ ~ ~ ~

!!    Coded by J.Jeong and C.Santhi. BRC, Temple TX
!!    Septic algorithm adapted from Siegrist et al., 2005

    use septic_data_module
    use basin_module
    use pathogen_data_module
    use organic_mineral_mass_module
    use hru_module, only : hru, ihru, i_sep, iseptic, qstemm, bz_perc, isep, sep_tsincefail,    &
       biom, plqm, bio_bod, fcoli, rbiom, isep
    use soil_module
    use time_module
      
    implicit none

    integer :: bz_lyr = 0      !none          |soil layer where biozone exists
    integer :: isp = 0         !none          |type of septic system for current hru
    integer :: j = 0           !none          |hru
    integer :: nly = 0         !              |
    real*8 :: bz_vol = 0.d0    !m^3           |volume of biozone
    real*8 :: rtrate = 0.d0    !              |
    real*8 :: qin = 0.d0       !m^3 H2O       |water in reach during time step
    real*8 :: qout = 0.d0      !              |
    real*8 :: rplqm = 0.d0     !kg/ha         |daily change in plaque
    real*8 :: ntr_rt = 0.d0    !1/day         |nitrification reaction rate
    real*8 :: dentr_rt = 0.d0  !1/day         |denitrification reaction rate
    real*8 :: bod_rt = 0.d0    !1/day         |BOD reaction rate
    real*8 :: fcoli_rt = 0.d0  !1/day         |fecal coliform reaction rate
    real*8 :: rtof = 0.d0      !none          |weighting factor used to partition the 
                               !              |organic N & P concentration of septic effluent
                               !              |between the fresh organic and the stable 
                               !              |organic pools
    real*8 :: xx = 0.d0        !none          |temp variable, used to hold calculated
                               !              |value needed in later equations
    real*8 :: bodi = 0.d0      !              |
    real*8 :: bode = 0.d0      !              |
    real*8 :: rnit = 0.d0      !kg/ha         |nitrification during the day
    real*8 :: rdenit = 0.d0    !kg/ha         |denitrification during the day
    real*8 :: rmort = 0.d0     !kg/ha         |daily mortality of bacteria
    real*8 :: rrsp = 0.d0      !kg/ha         |daily resparation of bacteria
    real*8 :: rslg = 0.d0      !kg/ha         |daily slough-off bacteria
    real*8 :: rbod = 0.d0      !mg/l          |daily change in bod concentration
    real*8 :: rfcoli = 0.d0    !cfu/100ml     |daily change in fecal coliform
    real*8 :: nh3_begin = 0.d0 !              | 
    real*8 :: nh3_end = 0.d0   !              |
    real*8 :: nh3_inflw_ste = 0.d0!              |
    real*8 :: no3_begin = 0.d0 !              |
    real*8 :: no3_end = 0.d0   !              |
    real*8 :: no3_inflow_ste = 0.d0!              |
    real*8 :: bza = 0.d0       !              |
    real*8 :: qi = 0.d0        !              |
    real*8 :: nperc = 0.d0     !              |
    real*8 :: nh3_init = 0.d0  !              | 
    real*8 :: no3_init = 0.d0  !              |
    real*8 :: hvol = 0.d0      !              |
    real*8 :: solpconc = 0.d0  !              |
    real*8 :: solpsorb = 0.d0  !              |
    real*8 :: qlyr = 0.d0      !              | 
    real*8 :: qsrf = 0.d0      !              |
    real*8 :: solp_init = 0.d0 !              |
    real*8 :: solp_begin = 0.d0  !              |
    real*8 :: solp_end = 0.d0  !              |
    real*8 :: svolp = 0.d0     !              |
    real*8 :: totalp = 0.d0    !              |
    real*8 :: ctmp = 0.d0      !              |
    real*8 :: percp = 0.d0     !              |

    j = ihru
    nly = soil(j)%nly
    isep = iseptic(j)
    isp = sep(isep)%typ        !! J.Jeong 3/09/09
    bz_lyr = i_sep(j)    
    bza = hru(j)%area_ha
    bz_vol = sep(isep)%thk * bza * 10. !m^3
    qlyr = qstemm(j)
    qsrf = 0
    
    !temperature correction factor for bacteria growth/dieoff (Eppley, 1972)
    !ibac = 1        !there should be a loop for all pathogens in this hru
    !ctmp = path_db(ibac)%t_adj ** (soil(j)%phys(bz_lyr)%tmp- 20.) 
    ctmp = 1.

    ! initial water volume
    qi = (soil(j)%phys(bz_lyr)%st + soil(j)%ly(bz_lyr-1)%prk + qstemm(j)) *   &
                                              bza * 10. !m3
    ! STE volume
    qin = qstemm(j) * bza * 10. ! m^3
    ! leaching to septic layer
    qout = bz_perc(j) * bza * 10. !m3/d
    ! final volume
    hvol = soil(j)%phys(bz_lyr)%st * bza * 10.
    rtof = 0.5

    nh3_init = soil1(j)%mn(bz_lyr)%nh4
    no3_init = soil1(j)%mn(bz_lyr)%no3
    solp_init = soil1(j)%mp(bz_lyr)%lab

    !! Failing system: STE saturates upper soil layers
    if (sep(isep)%opt == 2) then
      
      ! increment the number of failing days
      if(sep_tsincefail(j)>0) sep_tsincefail(j) = sep_tsincefail(j) + 1

      ! convert the failing system into an active system if duration of failing ends
      if (sep_tsincefail(j) >= sep(isep)%tfail) then
         sep(isep)%opt  = 1
         soil(j)%phys(bz_lyr)%ul=sep(isep)%thk *                           &
           (soil(j)%phys(bz_lyr)%por - soil(j)%phys(bz_lyr)%wp) 
         soil(j)%phys(bz_lyr)%fc=sep(isep)%thk*(soil(j)%phys(bz_lyr)%up-   &
           soil(j)%phys(bz_lyr)%wp)
         soil1(j)%mn(bz_lyr)%nh4 = 0
         soil1(j)%mn(bz_lyr)%no3 = 0
         soil1(j)%hsta(bz_lyr)%n = 0
         soil1(j)%hsta(bz_lyr)%p = 0
         soil1(j)%tot(bz_lyr)%p = 0 
         soil1(j)%mp(bz_lyr)%lab = 0
         soil1(j)%mp(bz_lyr)%act = 0
         biom(j) = 0        
         plqm(j) = 0
         bio_bod(j) = 0
         fcoli(j) = 0
         sep_tsincefail(j) = 0
      end if

      return
    endif

    !! Active system


   !! Water content(eqn 4-12), biozone hydraulic conductivity(eqn 4-9), 
    !! and percolation (eqn 4-8,10,11) are computed in percmain/percmicro


    ! Add STE nutrients to appropriate soil pools in mass unit
    xx = qin / bza / 1000. ! used for unit conversion: mg/l -> kg/ha
      soil1(j)%mn(bz_lyr)%no3 = soil1(j)%mn(bz_lyr)%no3 + xx *            &
                    (sepdb(sep(isep)%typ)%no3concs +                      &                   
                     sepdb(sep(isep)%typ)%no2concs)  
      soil1(j)%mn(bz_lyr)%nh4 = soil1(j)%mn(bz_lyr)%nh4 + xx *            &
                                    sepdb(sep(isep)%typ)%nh4concs 
      soil1(j)%hsta(bz_lyr)%n = soil1(j)%hsta(bz_lyr)%n + xx *                & 
                                   sepdb(sep(isep)%typ)%orgnconcs*rtof
      soil1(j)%tot(bz_lyr)%n = soil1(j)%tot(bz_lyr)%n +                 &
               xx*sepdb(sep(isep)%typ)%orgnconcs*(1-rtof)
      soil1(j)%hsta(bz_lyr)%p = soil1(j)%hsta(bz_lyr)%p + xx *                &
                                    sepdb(sep(isep)%typ)%orgps*rtof
      soil1(j)%tot(bz_lyr)%p = soil1(j)%tot(bz_lyr)%p + xx *              &
                                    sepdb(sep(isep)%typ)%orgps*           &        
                                    (1-rtof)
      soil1(j)%mp(bz_lyr)%lab = soil1(j)%mp(bz_lyr)%lab + xx*             &
                     sepdb(sep(isep)%typ)%minps  
      bio_bod(j)=bio_bod(j)+xx*sepdb(sep(isep)%typ)%bodconcs   ! J.Jeong 4/03/09

      bodi = bio_bod(j) * bza / qi * 1000.  !mg/l

    !! Field capacity in the biozone Eq. 4-6  ! 
      soil(j)%phys(bz_lyr)%fc = soil(j)%phys(bz_lyr)%fc + sep(isep)%fc1   &
        * (soil(j)%phys(bz_lyr)%ul - soil(j)%phys(bz_lyr)%fc) **          &
        sep(isep)%fc2 * rbiom(j) / (sep(isep)%bd * 10)

    !! Saturated water content in the biozone - Eq. 4-7    
    ! mm = mm - kg/ha / (kg/m^3 * 10)
      soil(j)%phys(bz_lyr)%ul = soil(j)%phys(bz_lyr)%por *                & 
                          sep(isep)%thk-plqm(j) /(sep(isep)%bd*10.)

    if(soil(j)%phys(bz_lyr)%ul.le.soil(j)%phys(bz_lyr)%fc) then
      soil(j)%phys(bz_lyr)%ul = soil(j)%phys(bz_lyr)%fc
      sep(isep)%opt  = 2
    endif
     

    !! Respiration rate(kg/ha)  Eq. 4-2   
    rrsp = ctmp * sep(isep)%rsp * biom(j) 

    !! Mortality rate(kg/ha) Eq. 4-3      
    rmort = ctmp * sep(isep)%mrt * biom(j) 

    !! Slough-off rate(kg/ha)      
    rslg = sep(isep)%slg1 * bz_perc(j) ** sep(isep)%slg2 * biom(j) 
            
    
    !! Build up of plqm(kg/ha) Eq.4-5
    ! kg/ha (perday) = kg/ha + dimensionless * m^3/d * mg/l / (1000*ha)
      rplqm = (rmort - rslg) + sep(isep)%plq * qin *                    &                    
                       sepdb(sep(isep)%typ)%tssconcs / (1000. * bza)  
    rplqm = max(0.,rplqm)

    !! Add build up to plqm  ! kg/ha = kg/ha + kg/ha 
      plqm(j) = plqm(j) + rplqm
    
    nh3_inflw_ste = xx * sepdb(sep(isep)%typ)%nh4concs
    no3_inflow_ste = xx*(sepdb(sep(isep)%typ)%no3concs +                   &                  
           sepdb(sep(isep)%typ)%no2concs) 
    nh3_begin = soil1(j)%mn(bz_lyr)%nh4
    no3_begin = soil1(j)%mn(bz_lyr)%no3
    solp_begin = soil1(j)%mp(bz_lyr)%lab

    !! Add STE f.coli concentration by volumetric averaging
      xx = 10.* soil(j)%phys(bz_lyr)%st * bza / (qin                       &
           + 10.* soil(j)%phys(bz_lyr)%st * bza)
    fcoli(j) = fcoli(j) * xx + sepdb(sep(isep)%typ)%fcolis * (1.- xx)      ! J.Jeong 3/09/09
    
    !! nutrients reaction rate (Equation 4-13)
    rtrate =  biom(j) * bza / (bz_vol * soil(j)%phys(bz_lyr)%por)
              
    !! BOD (kg/ha) 4-14 ! 
    bod_rt = max(0.,sep(isep)%bod_dc * rtrate)      !bod
      if (bod_rt>4) bod_rt=4
    rbod = bodi * (1.- Exp(-bod_rt))
      bode = bodi - rbod                    !mg/l
    bio_bod(j) = bode * (soil(j)%phys(bz_lyr)%st * 10)/1000. !kg/ha

    !! Fecal coliform(cfu/100ml) Eq 4-14, J.Jeong 3/09/09
    fcoli_rt = max(0.,sep(isep)%fecal * rtrate)     !fecal coliform
    rfcoli = fcoli(j) * (1.- exp(-fcoli_rt))
    fcoli(j) = fcoli(j) - rfcoli

    !! change in nh3 & no3 in soil pools due to nitrification(kg/ha) Eq.4-13, 4-14  
    ntr_rt = max(0.,sep(isep)%nitr * rtrate)            !nitrification
    rnit = soil1(j)%mn(bz_lyr)%nh4 * (1. - Exp(-ntr_rt)) !! J.Jeong 4/03/09
    soil1(j)%mn(bz_lyr)%nh4 = soil1(j)%mn(bz_lyr)%nh4 - rnit    !J.Jeong 3/09/09
    soil1(j)%mn(bz_lyr)%no3 = soil1(j)%mn(bz_lyr)%no3 + rnit    !J.Jeong 3/09/09
    
    !ammonium percolation
    nperc = 0.2 * qout / qi * soil1(j)%mn(bz_lyr)%nh4
    nperc = min(nperc,0.5 * soil1(j)%mn(bz_lyr)%nh4)
    soil1(j)%mn(bz_lyr)%nh4 = soil1(j)%mn(bz_lyr)%nh4 - nperc
    soil1(j)%mn(bz_lyr+1)%nh4 = soil1(j)%mn(bz_lyr+1)%nh4 + nperc

    !! denitrification,(kg/ha) Eq 4-14  
    dentr_rt = max(0.,sep(isep)%denitr * rtrate)        !denitrification
      rdenit = soil1(j)%mn(bz_lyr)%no3 * (1. - Exp(-dentr_rt))  !J.Jeong 3/09/09
    soil1(j)%mn(bz_lyr)%no3 = soil1(j)%mn(bz_lyr)%no3 - rdenit      !J.Jeong 3/09/09

    !soil volume for sorption: soil thickness below biozone 
      svolp = (soil(j)%phys(nly)%d - sep(isep)%z) * bza * 10. !m3, 
   
   !max adsorption amnt: linear isotherm, McCray 2005
      solpconc = soil1(j)%mp(bz_lyr)%lab * bza / qi * 1000. !mg/l
    solpsorb = min(sep(isep)%pdistrb * solpconc,sep(isep)%psorpmax) !mgP/kgSoil
    solpsorb = 1.6 * 1.e-3 * solpsorb * svolp *                    &
            (1-soil(j)%phys(bz_lyr)%por) !kgP sorption potential    

  !check if max. P sorption is reached 
      if(soil1(j)%mp(bz_lyr)%lab * bza<solpsorb) then
       totalp = soil1(j)%mp(bz_lyr)%lab + soil1(j)%mp(bz_lyr)%act 
       solp_end = sep(isep)%solpslp * totalp  + sep(isep)%solpintc
        if (solp_end > soil1(j)%mp(bz_lyr)%lab) then
         solp_end = soil1(j)%mp(bz_lyr)%lab
        endif 
      soil1(j)%mp(bz_lyr)%act = soil1(j)%mp(bz_lyr)%act +          &
           soil1(j)%mp(bz_lyr)%lab - solp_end
      soil1(j)%mp(bz_lyr)%lab = solp_end
      endif      
      solpconc = soil1(j)%mp(bz_lyr)%lab * bza / qi * 1000. !mg/l
    percp = 0.01*solpconc * qout / bza * 1.e-3
    soil1(j)%mp(bz_lyr)%lab = soil1(j)%mp(bz_lyr)%lab - percp !kg/ha
      soil1(j)%mp(bz_lyr+1)%lab = soil1(j)%mp(bz_lyr+1)%lab + percp !kg/ha       
      nh3_end = soil1(j)%mn(bz_lyr)%nh4
    no3_end = soil1(j)%mn(bz_lyr)%no3
      solp_end = soil1(j)%mp(bz_lyr)%lab  

    !! daily change in live bacteria biomass(kg/ha) Eq. 4-1 
    ! kg/ha = m^3 * mg/L/(1000.*ha)6
      rbiom(j) = ctmp*sep(isep)%bod_conv*(qin*                          &                          
           sepdb(sep(isep)%typ)%bodconcs -                              &                                
           qout * bode) / (1000. * bza) - (rrsp + rmort + rslg)         
      rbiom(j) = max(1.e-06,rbiom(j))

    !! total live biomass in biozone(kg/ha)    
    biom(j) = biom(j) + rbiom(j)
       
!*** tu Wunused-label: 1000  format(3i5,50es15.4)
      return
      end subroutine sep_biozone