subroutine output_day(year, month, day)
! Aggregate space/time and write to csv/bin, if interval is daily.
integer, intent(in) :: year, month, day
integer i, dc, mc
integer :: sti(3, 3), stb(3, 3)
real :: hydval(output_nhydrotopes), subval(output_nsubbasins), &
catval(output_ncatchments)
dc = output_store_day_counter
mc = output_store_month_counter
! Format day label for csv output
write(output_day_ix(dc), "(i0.4, '-', i0.2, '-', i0.2)") year, month, day
! aggregate day to month
do i = 1, output_nvars
! 0/1 (space, time) for current variable
stb = output_is_requested(i, :, :)
! indeces in aggregation arrays of current variable
sti = sum(output_is_requested(:i, :, :), dim=1)
! current hydrotope/subbasin variables
if (output_hydrotope_var_ix(i) > 0) then
hydval = output_storage_hydrotope(output_hydrotope_var_ix(i), :, dc)
subval = output_hydrotope_to_subbasin(hydval)
catval = output_hydrotope_to_catchment(hydval)
end if
if (output_subbasin_var_ix(i) > 0) then
hydval = 0
subval = output_storage_subbasin(output_subbasin_var_ix(i), :, dc)
catval = output_subbasin_to_catchment(subval)
end if
! Add daily values to aggregation arrays as needed
if (stb(1, 2) == 1) output_agg_hydrotope_monthly(sti(1, 2), :, mc) = &
output_agg_hydrotope_monthly(sti(1, 2), :, mc) + hydval
if (stb(1, 3) == 1) output_agg_hydrotope_annual(sti(1, 3), :, 1) = &
output_agg_hydrotope_annual(sti(1, 3), :, 1) + hydval
if (stb(2, 1) == 1) output_agg_subbasin_daily(sti(2, 1), :, dc) = &
output_agg_subbasin_daily(sti(2, 1), :, dc) + subval
if (stb(2, 2) == 1) output_agg_subbasin_monthly(sti(2, 2), :, mc) = &
output_agg_subbasin_monthly(sti(2, 2), :, mc) + subval
if (stb(2, 3) == 1) output_agg_subbasin_annual(sti(2, 3), :, 1) = &
output_agg_subbasin_annual(sti(2, 3), :, 1) + subval
if (stb(3, 1) == 1) output_agg_catchment_daily(sti(3, 1), :, dc) = &
output_agg_catchment_daily(sti(3, 1), :, dc) + catval
if (stb(3, 2) == 1) output_agg_catchment_monthly(sti(3, 2), :, mc) = &
output_agg_catchment_monthly(sti(3, 2), :, mc) + catval
if (stb(3, 3) == 1) output_agg_catchment_annual(sti(3, 3), :, 1) = &
output_agg_catchment_annual(sti(3, 3), :, 1) + catval
end do
! Increase/reset day counter
if (output_write_interval == "D") then
call output_write_daily
output_store_day_counter = 0
end if
output_store_day_counter = output_store_day_counter + 1
output_ndays_per_month = output_ndays_per_month + 1
end subroutine output_day