hru_output.f90 Source File


This file depends on

sourcefile~~hru_output.f90~~EfferentGraph sourcefile~hru_output.f90 hru_output.f90 sourcefile~basin_module.f90 basin_module.f90 sourcefile~hru_output.f90->sourcefile~basin_module.f90 sourcefile~carbon_module.f90 carbon_module.f90 sourcefile~hru_output.f90->sourcefile~carbon_module.f90 sourcefile~hru_module.f90 hru_module.f90 sourcefile~hru_output.f90->sourcefile~hru_module.f90 sourcefile~hydrograph_module.f90 hydrograph_module.f90 sourcefile~hru_output.f90->sourcefile~hydrograph_module.f90 sourcefile~landuse_data_module.f90 landuse_data_module.f90 sourcefile~hru_output.f90->sourcefile~landuse_data_module.f90 sourcefile~organic_mineral_mass_module.f90 organic_mineral_mass_module.f90 sourcefile~hru_output.f90->sourcefile~organic_mineral_mass_module.f90 sourcefile~output_landscape_module.f90 output_landscape_module.f90 sourcefile~hru_output.f90->sourcefile~output_landscape_module.f90 sourcefile~plant_data_module.f90 plant_data_module.f90 sourcefile~hru_output.f90->sourcefile~plant_data_module.f90 sourcefile~plant_module.f90 plant_module.f90 sourcefile~hru_output.f90->sourcefile~plant_module.f90 sourcefile~soil_module.f90 soil_module.f90 sourcefile~hru_output.f90->sourcefile~soil_module.f90 sourcefile~time_module.f90 time_module.f90 sourcefile~hru_output.f90->sourcefile~time_module.f90 sourcefile~hydrograph_module.f90->sourcefile~basin_module.f90 sourcefile~hydrograph_module.f90->sourcefile~time_module.f90 sourcefile~organic_mineral_mass_module.f90->sourcefile~carbon_module.f90 sourcefile~soil_module.f90->sourcefile~carbon_module.f90

Source Code

      subroutine hru_output (ihru)

      use plant_module
      use plant_data_module
      use time_module
      use basin_module
      use output_landscape_module
      use hydrograph_module, only : sp_ob1, ob
      use organic_mineral_mass_module
      use soil_module
      use carbon_module
      use hru_module, only : hru
      use landuse_data_module
      
      implicit none
      
      integer, intent (in) :: ihru             !            |
      integer :: idp = 0                       !            |
      integer :: j = 0
      integer :: iob = 0
      integer :: ipl = 0
	  integer :: ilu = 0
      real :: const = 0.
      real :: sw_init = 0.
      real :: sno_init = 0.
                         
!!    ~ ~ ~ PURPOSE ~ ~ ~
!!    this subroutine outputs HRU variables on daily, monthly and annual time steps

      j = ihru
      
      iob = sp_ob1%hru + j - 1   !!!!!! added for new output write
      ilu = hru(j)%land_use_mgt
          
        hwb_m(j) = hwb_m(j) + hwb_d(j)
        hnb_m(j) = hnb_m(j) + hnb_d(j)
        hls_m(j) = hls_m(j) + hls_d(j) 
        hpw_m(j) = hpw_m(j) + hpw_d(j)
        
        hwb_d(j)%sw_final = soil(j)%sw
        hwb_d(j)%sw = (hwb_d(j)%sw_init + hwb_d(j)%sw_final) / 2.
        hwb_d(j)%sno_final = hru(j)%sno_mm
        hwb_d(j)%snopack = (hwb_d(j)%sno_init + hwb_d(j)%sno_final) / 2.
             
      !! daily print
         if (pco%day_print == "y" .and. pco%int_day_cur == pco%int_day) then
          if (pco%wb_hru%d == "y") then
             write (2000,100) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hwb_d(j),      &
                                                                           lum(ilu)%plant_cov, lum(ilu)%mgt_ops     !! water bal day
             if (pco%csvout == "y") then
               !! changed write unit below (2004 to write file data)
               write (2004,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, &
                                                                    hwb_d(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops  
             end if
          end if
          hwb_d(j)%sw_init = hwb_d(j)%sw_final
          hwb_d(j)%sno_init = hwb_d(j)%sno_final
          
          if (pco%nb_hru%d == "y") then
            write (2020,104) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hnb_d(j),         &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops      !! nutrient bal day
            if (pco%csvout == "y") then
                write (2024,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, &
                                                                    hnb_d(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops  
                end if
          end if
          if (pco%ls_hru%d == "y") then
            write (2030,108) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hls_d(j),         &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops      !! losses day
            if (pco%csvout == "y") then
                write (2034,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, &
                                                                    hls_d(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops  
            end if
          end if
          if (pco%pw_hru%d == "y") then
            write (2040,101) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hpw_d(j),                  & 
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops  !! plant weather day 
              if (pco%csvout == "y") then 
                write (2044,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name,           &
                                                                hpw_d(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops  
              end if 
          end if
        end if
         
        !! check end of month
        if (time%end_mo == 1) then
          hwb_y(j) = hwb_y(j) + hwb_m(j)
          hnb_y(j) = hnb_y(j) + hnb_m(j)
          hls_y(j) = hls_y(j) + hls_m(j)
          hpw_y(j) = hpw_y(j) + hpw_m(j)
          
          const = float (ndays(time%mo + 1) - ndays(time%mo))
          hpw_m(j) = hpw_m(j) // const
          hwb_m(j) = hwb_m(j) // const
          
          !! monthly print
           hwb_m(j)%sw_final = hwb_d(j)%sw_final
           hwb_m(j)%sno_final = hwb_d(j)%sno_final
           
           if (pco%wb_hru%m == "y") then
             write (2001,100) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hwb_m(j),        &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops           !! water bal mon
               if (pco%csvout == "y") then
                 write (2005,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, &
                                                                          hwb_m(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops 
               end if
           end if
           
           if (pco%nb_hru%m == "y") then
             write (2021,104) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hnb_m(j),        &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops           !! nutrient bal mon
             if (pco%csvout == "y") then
                 write (2025,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, &
                                                                          hnb_m(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops 
                 end if
           end if
           
           if (pco%ls_hru%m == "y") then
             write (2031,108) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hls_m(j),        &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops           !! losses mon
             if (pco%csvout == "y") then 
                 write (2035,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, &
                                                                          hls_m(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops 
             end if
           end if
           
           if (pco%pw_hru%m == "y") then
             hpw_m(j)%nplnt = pl_mass(j)%tot_com%n
             hpw_m(j)%pplnt = pl_mass(j)%tot_com%p
             write (2041,101) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hpw_m(j),         &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops  !! plant weather mon
               if (pco%csvout == "y") then 
                 write (2045,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name,  &
                                                                hpw_m(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops  
               end if 
           end if
          
          sw_init = hwb_m(j)%sw_final
          sno_init = hwb_m(j)%sno_final
          hwb_m(j) = hwbz
          hwb_m(j)%sw_init = sw_init
          hwb_m(j)%sno_init = sno_init
          hnb_m(j) = hnbz
          hpw_m(j) = hpwz
          hls_m(j) = hlsz
        end if
        
        !! check end of year
        if (time%end_yr == 1) then
          hwb_a(j) = hwb_a(j) + hwb_y(j)
          hnb_a(j) = hnb_a(j) + hnb_y(j)
          hls_a(j) = hls_a(j) + hls_y(j)
          hpw_a(j) = hpw_a(j) + hpw_y(j)         
          
          const = time%day_end_yr
          hwb_y(j) = hwb_y(j) // const
          hpw_y(j) = hpw_y(j) // const
          
          !! yearly print
          hwb_y(j)%sw_final = hwb_d(j)%sw_final
          hwb_y(j)%sno_final = hwb_d(j)%sno_final
           !! if > 10mm irrigation, flag as irrigated for soft cal
           if (hwb_a(j)%irr > 10.) then
             hru(j)%irr = 1
           end if
          if (pco%wb_hru%y == "y") then
             write (2002,100) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hwb_y(j),          &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops           !! water balance yr
               if (pco%csvout == "y") then
                 write (2006,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name,   &
                                                                          hwb_y(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops 
               end if
          end if
          
           if (pco%nb_hru%y == "y") then
             write (2022,104) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hnb_y(j),          &
                                                                                lum(ilu)%plant_cov, lum(ilu)%mgt_ops     !! nutrient balance yr
             if (pco%csvout == "y") then
                 write (2026,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name,   &
                                                                          hnb_y(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops 
                 end if
           end if
           
           if (pco%ls_hru%y == "y") then
             write (2032,108) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hls_y(j),          &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops           !! losses yr
             if (pco%csvout == "y") then
                 write (2036,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name,   &
                                                                          hls_y(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops 
             end if
           end if
           
           if (pco%pw_hru%y == "y") then
             hpw_y(j)%nplnt = pl_mass(j)%tot_com%n
             hpw_y(j)%pplnt = pl_mass(j)%tot_com%p
             write (2042,101) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hpw_y(j),        &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops  !! plant weather yr             
               if (pco%csvout == "y") then 
                 write (2046,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, &
                                                                hpw_y(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops  
               end if 
           end if
           
          !reset yearly parameters in time_control - for calibration runs
        end if
        
!!!!! average annual print
         if (time%end_sim == 1) then
           sw_init = hwb_a(j)%sw_init
           sno_init = hwb_a(j)%sno_init
           hwb_a(j) = hwb_a(j) / time%yrs_prt
           hwb_a(j) = hwb_a(j) // time%days_prt
           hwb_a(j)%sw_init = sw_init
           hwb_a(j)%sw_final = hwb_d(j)%sw_final
           hwb_a(j)%sno_init = sno_init
           hwb_a(j)%sno_final = hwb_d(j)%sno_final
           if (pco%wb_hru%a == "y") then
             write (2003,100) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hwb_a(j),       &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops       !! water balance ann
             if (pco%csvout == "y") then
               write (2007,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name,  &
                                                                        hwb_a(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops
             end if
           end if
           sw_init = hwb_d(j)%sw_final
           sno_init = hwb_d(j)%sno_final
           hru(j)%precip_aa = hwb_a(j)%precip
           hru(j)%flow(1) = hwb_a(j)%wateryld
           hru(j)%flow(2) = hwb_a(j)%perc
           hru(j)%flow(3) = hwb_a(j)%surq_gen
           hru(j)%flow(4) = hwb_a(j)%latq
           hru(j)%flow(5) = hwb_a(j)%qtile
           hwb_a(j) = hwbz
           hwb_a(j)%sw_init = sw_init
           hwb_a(j)%sno_init = sno_init
         end if
        
         if (time%end_sim == 1 .and. pco%nb_hru%a == "y") then 
           hnb_a(j) = hnb_a(j) / time%yrs_prt
           write (2023,104) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hnb_a(j),        &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops      !! nutrient bal ann
           if (pco%csvout == "y") then 
               write (2027,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, &
                                                                        hnb_a(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops
               end if
             hnb_a(j) = hnbz
         end if
        
         if (time%end_sim == 1 .and. pco%ls_hru%a == "y") then
           hls_a(j) = hls_a(j) / time%yrs_prt 
           write (2033,107) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hls_a(j),        &
                                                                          lum(ilu)%plant_cov, lum(ilu)%mgt_ops      !! losses ann
             if (pco%csvout == "y") then 
               write (2037,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, &
                                                                        hls_a(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops
             end if
             hls_a(j) = hlsz
         end if
        
         if (time%end_sim == 1 .and. pco%pw_hru%a == "y") then     
           hpw_a(j) = hpw_a(j) / time%yrs_prt
           hpw_a(j) = hpw_a(j) // time%days_prt
           hpw_a(j)%nplnt = pl_mass(j)%tot_com%n
           hpw_a(j)%pplnt = pl_mass(j)%tot_com%p
           write (2043,102) time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name, hpw_a(j),           &
                                                                        lum(ilu)%plant_cov, lum(ilu)%mgt_ops  !! plant weather ann
             if (pco%csvout == "y") then 
               write (2047,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, ob(iob)%gis_id, ob(iob)%name,    &
                                                              hpw_a(j), lum(ilu)%plant_cov, lum(ilu)%mgt_ops  
             end if
             hru(j)%strsa = hpw_a(j)%strsa
             hpw_a(j) = hpwz
         end if
         
         !! write yearly crop yields
         if (time%end_yr == 1) then
           if (pco%crop_yld == "y" .or. pco%crop_yld == "b") then
             do ipl = 1, pcom(j)%npl
               if (pcom(j)%plcur(ipl)%harv_num_yr > 0) then 
                 pl_mass(j)%yield_yr(ipl) = pl_mass(j)%yield_yr(ipl) / float(pcom(j)%plcur(ipl)%harv_num_yr)
               endif
               write (4010,103) time%day, time%mo, time%day_mo, time%yrc, j, pcom(j)%pl(ipl), pl_mass(j)%yield_yr(ipl)
               if (pco%csvout == "y") then
                 write (4011,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j, pcom(j)%pl(ipl), pl_mass(j)%yield_yr(ipl) 
               end if
             end do 
           end if
         end if

         !! write average annual crop yields
         if (time%end_sim == 1) then
           if (pco%crop_yld == "a" .or. pco%crop_yld == "b") then
             do ipl = 1, pcom(j)%npl
               idp = pcom(j)%plcur(ipl)%idplt
               if (pcom(j)%plcur(ipl)%harv_num > 0) then 
                 pl_mass(j)%yield_tot(ipl) = pl_mass(j)%yield_tot(ipl) / float(pcom(j)%plcur(ipl)%harv_num)
              endif
              write (4008,103) time%day, time%mo, time%day_mo, time%yrc, j,pldb(idp)%plantnm, pl_mass(j)%yield_tot(ipl)
              if (pco%csvout == "y") then
                write (4009,'(*(G0.3,:","))') time%day, time%mo, time%day_mo, time%yrc, j,pldb(idp)%plantnm, pl_mass(j)%yield_tot(ipl) 
              end if
            end do
           end if
         end if
      return
      
100   format (4i6,2i8,2x,a,42f12.3,3x,a16,a30)
101   format (4i6,2i8,2x,a,25f12.3,3x,a16,a30)
102   format (4i6,2i8,2x,a,25f12.3,3x,a16,a30)
103   format (4i6,i8,4x,a,5x,4f12.3)
104   format (4i6,2i8,2x,a8,4f12.3,15f17.3,7x,a16,a30)
107   format (4i6,2i8,2x,a,12f12.3,3x,a16,a30)
108   format (4i6,2i8,2x,a,12f12.3,3x,a16,a30)
       
      end subroutine hru_output