lcu_read_softcal.f90 Source File


This file depends on

sourcefile~~lcu_read_softcal.f90~~EfferentGraph sourcefile~lcu_read_softcal.f90 lcu_read_softcal.f90 sourcefile~basin_module.f90 basin_module.f90 sourcefile~lcu_read_softcal.f90->sourcefile~basin_module.f90 sourcefile~calibration_data_module.f90 calibration_data_module.f90 sourcefile~lcu_read_softcal.f90->sourcefile~calibration_data_module.f90 sourcefile~hru_lte_module.f90 hru_lte_module.f90 sourcefile~lcu_read_softcal.f90->sourcefile~hru_lte_module.f90 sourcefile~hru_module.f90 hru_module.f90 sourcefile~lcu_read_softcal.f90->sourcefile~hru_module.f90 sourcefile~hydrograph_module.f90 hydrograph_module.f90 sourcefile~lcu_read_softcal.f90->sourcefile~hydrograph_module.f90 sourcefile~input_file_module.f90 input_file_module.f90 sourcefile~lcu_read_softcal.f90->sourcefile~input_file_module.f90 sourcefile~maximum_data_module.f90 maximum_data_module.f90 sourcefile~lcu_read_softcal.f90->sourcefile~maximum_data_module.f90 sourcefile~output_landscape_module.f90 output_landscape_module.f90 sourcefile~lcu_read_softcal.f90->sourcefile~output_landscape_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 lcu_read_softcal
   
      use input_file_module
      use maximum_data_module
      use calibration_data_module
      use hydrograph_module
      use hru_module, only : ihru  
      use hru_lte_module
      use output_landscape_module
      use basin_module
      
      implicit none
      
      character (len=80) :: titldum = ""!           |title of file
      character (len=80) :: header = "" !           |header of file
      integer :: eof = 0              !           |end of file
      integer :: imax = 0             !none       |determine max number for array (imax) and total number in file
      logical :: i_exist              !none       |check to determine if file exists
      integer :: mcal = 0             !           |
      integer :: mreg = 0             !none       |end of loop
      integer :: ireg = 0             !none       |counter 
      integer :: mlug = 0             !none       |end of loop
      integer :: ilum = 0             !none       |counter
       
      imax = 0
      mcal = 0
      mreg = 0
      
      inquire (file=in_chg%water_balance_sft, exist=i_exist)
      if (.not. i_exist .or. in_chg%water_balance_sft == "null") then
        allocate (lscal(0:0))
        allocate (region(0:0))
      else  
        do
          open (107,file=in_chg%water_balance_sft)
          read (107,*,iostat=eof) titldum
          if (eof < 0) exit
          read (107,*,iostat=eof) mreg
          if (eof < 0) exit
          read (107,*,iostat=eof) header
          if (eof < 0) exit
          
          allocate (lscal(0:mreg))
          allocate (region(0:mreg))
          !! allocate regional output files
          allocate (rwb_d(mreg))
          allocate (rwb_m(mreg))
          allocate (rwb_y(mreg))
          allocate (rwb_a(mreg))
          allocate (rnb_d(mreg))
          allocate (rnb_m(mreg))
          allocate (rnb_y(mreg))
          allocate (rnb_a(mreg))
          allocate (rls_d(mreg))
          allocate (rls_m(mreg))
          allocate (rls_y(mreg))
          allocate (rls_a(mreg))
          allocate (rpw_d(mreg))
          allocate (rpw_m(mreg))
          allocate (rpw_y(mreg))
          allocate (rpw_a(mreg))

          db_mx%lsu_reg = mreg

          do ireg = 1, mreg

            read (107,*,iostat=eof) region(ireg)%name, region(ireg)%nlum
            if (eof < 0) exit
            
            db_mx%landuse = region(ireg)%nlum
            mlug = region(ireg)%nlum
            allocate (region(ireg)%lum_ha_tot(mlug), source = 0.)
            allocate (region(ireg)%lum_num_tot(mlug), source = 0)
            allocate (lscal(ireg)%lum(mlug))
            !! allocate land use for each regional output
            allocate (rwb_a(ireg)%lum(mlug))
            allocate (rnb_a(ireg)%lum(mlug))
            allocate (rls_a(ireg)%lum(mlug))
            allocate (rpw_a(ireg)%lum(mlug))
            region(ireg)%lum_ha_tot = 0.
            region(ireg)%lum_num_tot = 0
            region(ireg)%lum_ha_tot = 0.
            
            if (mlug > 0) then
              read (107,*,iostat=eof) header
              if (eof < 0) exit
              !! read soft calibration data for each land use within the region
              do ilum = 1, mlug
                read (107,*,iostat=eof) lscal(ireg)%lum(ilum)%meas
                if (eof < 0) exit
                !! when using wyr and bfr to calibrate
                if (cal_codes%hyd_hru /= "a") then
                  !! convert baseflow ratio from frac of water yield to frac of precip
                  lscal(ireg)%lum(ilum)%meas%srr = lscal(ireg)%lum(ilum)%meas%wyr * (1. - lscal(ireg)%lum(ilum)%meas%bfr)
                  lscal(ireg)%lum(ilum)%meas%bfr = lscal(ireg)%lum(ilum)%meas%wyr * lscal(ireg)%lum(ilum)%meas%bfr
                  lscal(ireg)%lum(ilum)%meas%lfr = 0.1 * lscal(ireg)%lum(ilum)%meas%bfr
                end if
              end do
            end if 
               
            !! if calibrating the entire region - later we can set up for lsu/regional calibrations
            if (region(ireg)%name == "basin" .or. db_mx%lsu_reg == 1) then
              region(ireg)%num_tot = sp_ob%hru
              allocate (region(ireg)%num(sp_ob%hru), source = 0)
              allocate (region(ireg)%hru_ha(sp_ob%hru), source = 0.)
              do ihru = 1, sp_ob%hru
                region(ireg)%num(ihru) = ihru
                region(ireg)%hru_ha(ihru) = bsn%area_ls_ha * lsu_elem(ihru)%bsn_frac
              end do
            end if
            
          end do    !mreg

          exit
        end do 
      end if

      return
      end subroutine lcu_read_softcal