reservoir_initial_values Subroutine

public subroutine reservoir_initial_values()

Initialise parameters for first day necessary for subroutine Rsv_subbasin

Arguments

None

Calls

proc~~reservoir_initial_values~~CallsGraph proc~reservoir_initial_values reservoir_initial_values proc~rsv_pol rsv_pol proc~reservoir_initial_values->proc~rsv_pol

Called by

proc~~reservoir_initial_values~~CalledByGraph proc~reservoir_initial_values reservoir_initial_values proc~reservoir_initialise reservoir_initialise proc~reservoir_initialise->proc~reservoir_initial_values proc~initialise initialise proc~initialise->proc~reservoir_initialise program~swim swim program~swim->proc~initialise

Contents


Source Code

  subroutine reservoir_initial_values

    ! CALLED BY: reservoir_init_reservoir
    integer :: i
    real(dp) :: A, SH, ResA_dry, ResA_wet

    ! rsv_B and Rsv in [m^3]
    do i = 1, rsv_nReservoirs
      ! if reservoir is active from the first day
      if (rsv_active(i) ) then
        ! set dead storage volume to its capacity
        ! if not, it was already initialised with 0.
        rsv_dead_stor_act(i) = rsv_dead_stor_capac(i)

        ! initialise filling at first day
        ! Filling of reservoir beginning of month [m^3
        ! RsvB(k)= Rsv_Day_Cap_Act(k) * Start_Fill (Hagens version)
        rsv_B(i) = rsv_Capac_Max(i) * rsv_Start_Fill(i) - rsv_dead_stor_act(i) ! not the same as in Hagens version, because 'Rsv_Day_Cap_Act' not yet initialised
        rsv_B(i) = max(0.0_dp, rsv_B(i))
      end if

      ! Filling of reservoir during steps of simulation [m^3]
      Rsv(1, i) = rsv_B(i)

      !! Initialise parameters for first day
      !! necessary for subroutine Rsv_subbasin
      Rsv(2, i) = max(Rsv(1, i), 0.0_dp)
      SH = 0. ! water level [m.a.s.l.]
      SH = RSV_POL(20, rsv_pol_V(i, :), rsv_pol_L(i, :), Rsv(2, i) + rsv_dead_stor_act(i))
      A = 0. ! flooded surface area
      A = RSV_POL(20, rsv_pol_L(i, :), rsv_pol_A(i, :), SH)

      ! calculate dry and wet (flooded) reservoir surface area [km^2]
      ResA_dry = rsv_pol_A(i, 20) - A
      ResA_dry = max(real(1.e-6, dp), ResA_dry)
      ResA_wet = A
      ResA_wet = max(real(1.e-6, dp), ResA_wet)

      ! sl 2015-08-18
      !pd_seepage(i) = (Rsv(1, i) * rsv_loss_seepage(i))/(ResA_wet*10**6)*1000. ![mm]
      rsv_tot_area(i) = ResA_wet * 10 ** 6 + ResA_dry * 10 ** 6
      !rsv_tot_area(i) = dart(rsv_ResSubbasins(i))*10**6 ! subbasin area of the reservoir in m^2
      pd_seepage(i) = (Rsv(1, i) * rsv_loss_seepage(i)) / rsv_tot_area(i) * 1000. ![mm]

      rsv_frac_sr(i) = 0.5
      pd_outflow(i) = 0.5 ![mm]
      pd_et(i) = 1. ![mm]

    end do
  end subroutine reservoir_initial_values