res_initial.f90 Source File


This file depends on

sourcefile~~res_initial.f90~~EfferentGraph sourcefile~res_initial.f90 res_initial.f90 sourcefile~constituent_mass_module.f90 constituent_mass_module.f90 sourcefile~res_initial.f90->sourcefile~constituent_mass_module.f90 sourcefile~hydrograph_module.f90 hydrograph_module.f90 sourcefile~res_initial.f90->sourcefile~hydrograph_module.f90 sourcefile~maximum_data_module.f90 maximum_data_module.f90 sourcefile~res_initial.f90->sourcefile~maximum_data_module.f90 sourcefile~pesticide_data_module.f90 pesticide_data_module.f90 sourcefile~res_initial.f90->sourcefile~pesticide_data_module.f90 sourcefile~res_cs_module.f90 res_cs_module.f90 sourcefile~res_initial.f90->sourcefile~res_cs_module.f90 sourcefile~res_salt_module.f90 res_salt_module.f90 sourcefile~res_initial.f90->sourcefile~res_salt_module.f90 sourcefile~reservoir_data_module.f90 reservoir_data_module.f90 sourcefile~res_initial.f90->sourcefile~reservoir_data_module.f90 sourcefile~reservoir_module.f90 reservoir_module.f90 sourcefile~res_initial.f90->sourcefile~reservoir_module.f90 sourcefile~water_body_module.f90 water_body_module.f90 sourcefile~res_initial.f90->sourcefile~water_body_module.f90 sourcefile~basin_module.f90 basin_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

Source Code

      subroutine res_initial
      
      use reservoir_module
      use maximum_data_module
      use reservoir_data_module
      use hydrograph_module
      use constituent_mass_module
      use pesticide_data_module
      use water_body_module
      use res_salt_module
      use res_cs_module
      
      implicit none
      
      integer :: ires = 0    !none          |counter
      integer :: lnvol = 0   !              |
      real :: resdif = 0.    !              |
      integer :: i = 0       !none          |counter
      integer :: idat = 0    !none          |counter
      integer :: icon = 0    !none          |
      integer :: init = 0    !              | 
      integer :: ipest = 0   !none          |counter
      integer :: ipath = 0   !              |
      integer :: isalt = 0   !              |counter for salt ions !rtb salt
      integer :: ipest_db = 0  !none      |counter

      do ires = 1, sp_ob%res
        !! set initial volumes for res and hru types and convert units
        res_ob(ires)%ob  = sp_ob1%res + ires - 1
        res_ob(ires)%evol = res_hyd(ires)%evol * 10000.       !! ha-m => m**3
        res_ob(ires)%pvol = res_hyd(ires)%pvol * 10000.       !! ha-m => m**3
        res_ob(ires)%esa = res_hyd(ires)%esa
        res_ob(ires)%psa = res_hyd(ires)%psa
        !! set initial weir height to principal depth - m
        res_ob(ires)%weir_hgt = res_ob(ires)%pvol / (res_ob(ires)%psa * 10000.)
        
        !! use br1 as lag - then compute actual br1 (no option to input actual br1)
        res_ob(ires)%lag_up = res_hyd(ires)%br1
        res_ob(ires)%lag_down = res_hyd(ires)%br2
        
        !! calculate shape parameters for surface area equation
        resdif = res_hyd(ires)%evol - res_hyd(ires)%pvol
        if ((res_hyd(ires)%esa - res_hyd(ires)%psa) > 0. .and. resdif > 0.) then
          lnvol = Log10(res_ob(ires)%evol) - Log10(res_ob(ires)%pvol)
          if (lnvol > 1.e-4) then
            res_ob(ires)%br2 = (Log10(res_ob(ires)%esa) - Log10(res_ob(ires)%psa)) / lnvol
          else  
            res_ob(ires)%br2 = (Log10(res_ob(ires)%esa) - Log10(res_ob(ires)%psa)) / 0.001
          end if
          if (res_ob(ires)%br2 > 0.9) then
            res_ob(ires)%br2 = 0.9
            res_ob(ires)%br1 = (res_ob(ires)%psa / res_ob(ires)%pvol) ** 0.9
          else
            res_ob(ires)%br1 = (res_ob(ires)%esa / res_ob(ires)%evol) ** res_ob(ires)%br2
          end if  
        else
          res_ob(ires)%br2 = 0.9
          if (res_ob(ires)%pvol > 1.e-6) then
            res_ob(ires)%br1 = (res_ob(ires)%psa / res_ob(ires)%pvol) ** 0.9
          else
            res_ob(ires)%br1 = .1
          end if
        end if
        
      end do
      
      do ires = 1, sp_ob%res
        !! only initialize volume and constituents if operational at start of simulation
        !! if not, assume zero volume when dam is built
        if (time%yrc > res_hyd(ires)%iyres .or. (time%mo >= res_hyd(ires)%mores   &
                                   .and. time%yrc == res_hyd(ires)%iyres)) then
          idat = res_ob(ires)%props
          i = res_dat(idat)%init
        
          !! initialize org-min in reservoir
          init = res_init(i)%org_min
          res(ires) = om_init_water(init)
          call res_convert_mass (res(ires), res_ob(ires)%pvol)
        
          !! set initial reservoir org-min to reset for soft calibration
          res_om_init(ires) = res(ires)

          !! initialize pesticides in reservoir water and benthic from input data
          init = res_init(i)%pest
          do ipest = 1, cs_db%num_pests
            ipest_db = cs_db%pest_num(ipest)
            res_water(ires)%pest(ipest) = pest_water_ini(init)%water(ipest)
            res_benthic(ires)%pest(ipest) = pest_water_ini(init)%benthic(ipest)
            !! calculate mixing velocity using molecular weight and porosity
            res_ob(ires)%aq_mix(ipest) = pestdb(ipest_db)%mol_wt * (1. - res_sed(ires)%bd / 2.65)
          end do
                  
          !! initialize pathogens in reservoir water and benthic from input data
          init = res_init(i)%path
          do ipath = 1, cs_db%num_paths
            res_water(ires)%path(ipath) = path_water_ini(init)%water(ipath)
            res_benthic(ires)%path(ipath) = path_water_ini(init)%benthic(ipath)
          end do
                        
          !! calculate initial surface area       
          res_wat_d(ires)%area_ha = res_ob(ires)%br1 * res(ires)%flo ** res_ob(ires)%br2

          !! initialize salts in reservoir water, from database file (salt.res)
          !rtb salt
          if(cs_db%num_salts > 0) then
            idat = res_ob(ires)%props
            icon = res_dat(idat)%salt !database to use (in salt_res file)
            if(icon > 0) then
              do isalt = 1, cs_db%num_salts
                res_water(ires)%saltc(isalt) = res_salt_data(icon)%c_init(isalt) !concentration (g/m3)
                res_water(ires)%salt(isalt) = res_water(ires)%saltc(isalt) * res(ires)%flo / 1000. !g/m3 * m3 / 1000. = kg
              enddo
            else
              do isalt = 1, cs_db%num_salts
                res_water(ires)%saltc(isalt) = 0. !concentration (g/m3)
                res_water(ires)%salt(isalt) = 0. !kg
              enddo 
            endif
          endif
          
          !! initialize constituents in reservoir water, from database file (cs_res)
          !rtb cs
          if(cs_db%num_cs > 0) then
            idat = res_ob(ires)%props
            icon = res_dat(idat)%cs !database to use (in cs.res file)
            if(icon > 0) then
              !seo4
              res_water(ires)%csc(1) = res_cs_data(icon)%c_seo4 !concentration (g/m3)
              res_water(ires)%cs(1) = res_water(ires)%csc(1) * res(ires)%flo / 1000. !g/m3 * m3 / 1000. = kg
              !seo3
              res_water(ires)%csc(2) = res_cs_data(icon)%c_seo3 !concentration (g/m3)
              res_water(ires)%cs(2) = res_water(ires)%csc(2) * res(ires)%flo / 1000. !g/m3 * m3 / 1000. = kg
              !boron
              res_water(ires)%csc(3) = res_cs_data(icon)%c_born !concentration (g/m3)
              res_water(ires)%cs(3) = res_water(ires)%csc(3) * res(ires)%flo / 1000. !g/m3 * m3 / 1000. = kg
            else
              !seo4
              res_water(ires)%csc(1) = 0.
              res_water(ires)%cs(1) = 0.
              !seo3
              res_water(ires)%csc(2) = 0.
              res_water(ires)%cs(2) = 0.
              !boron
              res_water(ires)%csc(3) = 0.
              res_water(ires)%cs(3) = 0.
            endif
          endif
          
        endif
        
      end do
      close(105)

      return
      end subroutine res_initial