From 84cca7ecfd3365f5352be9d8989ee1cffb744a71 Mon Sep 17 00:00:00 2001 From: Gautam Bisht Date: Thu, 29 Feb 2024 19:33:45 -0800 Subject: [PATCH 1/6] Writes/reads C budget related variables in history file The `TCS_MONTH_BEGIN` variable is written and read from the ELM restart file. [BFB] --- components/elm/src/main/restFileMod.F90 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/elm/src/main/restFileMod.F90 b/components/elm/src/main/restFileMod.F90 index 18f3c523de76..58554b50974e 100644 --- a/components/elm/src/main/restFileMod.F90 +++ b/components/elm/src/main/restFileMod.F90 @@ -404,6 +404,8 @@ subroutine restFile_write( bounds, file, & call veg_ps%Restart(bounds, ncid, flag='write') call veg_pf%Restart(bounds, ncid, flag='write') call crop_vars%Restart(bounds, ncid, flag='write') + + call grc_cs%Restart(bounds, ncid, flag='write') end if @@ -627,6 +629,8 @@ subroutine restFile_read( bounds, file, & call veg_ps%Restart(bounds, ncid, flag='read') call veg_pf%Restart(bounds, ncid, flag='read') call crop_vars%Restart(bounds, ncid, flag='read') + + call grc_cs%Restart(bounds, ncid, flag='read') end if if (use_fates) then From ede745a1351e3e47f53ab9890bfbbb5a147dcf45 Mon Sep 17 00:00:00 2001 From: Gautam Bisht Date: Thu, 29 Feb 2024 19:40:56 -0800 Subject: [PATCH 2/6] Fixes a local variable name --- components/elm/src/biogeochem/CNPBudgetMod.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/elm/src/biogeochem/CNPBudgetMod.F90 b/components/elm/src/biogeochem/CNPBudgetMod.F90 index 0a8117ecc45a..16d9f9fe7183 100644 --- a/components/elm/src/biogeochem/CNPBudgetMod.F90 +++ b/components/elm/src/biogeochem/CNPBudgetMod.F90 @@ -1200,7 +1200,7 @@ subroutine CBudget_SetEndingMonthlyStates(bounds, col_cs, grc_cs) associate( & begcb => col_cs%begcb , & ! Input : [real(r8) (:) ] carbon mass begining of the time step endcb => col_cs%endcb , & ! Input : [real(r8) (:) ] carbon mass begining of the time step - tcs_month_end_grc => grc_cs%tcs_month_beg & ! Output: [real(r8) (:) ] grid-level carbon mass at the begining of a month + tcs_month_beg_grc => grc_cs%tcs_month_beg & ! Output: [real(r8) (:) ] grid-level carbon mass at the begining of a month ) ! Get current and previous dates to determine if a new month started @@ -1212,7 +1212,7 @@ subroutine CBudget_SetEndingMonthlyStates(bounds, col_cs, grc_cs) if ( day_curr == 1 .and. sec_curr == 0 .and. get_nstep() <= 1 ) then call c2g( bounds, & begcb(bounds%begc:bounds%endc), & - tcs_month_end_grc(bounds%begg:bounds%endg), & + tcs_month_beg_grc(bounds%begg:bounds%endg), & c2l_scale_type= 'unity', l2g_scale_type='unity' ) endif @@ -1222,7 +1222,7 @@ subroutine CBudget_SetEndingMonthlyStates(bounds, col_cs, grc_cs) if (get_nstep() > 1 .and. day_prev == 1 .and. sec_prev == 0) then call c2g( bounds, & endcb(bounds%begc:bounds%endc), & - tcs_month_end_grc(bounds%begg:bounds%endg), & + tcs_month_beg_grc(bounds%begg:bounds%endg), & c2l_scale_type= 'unity', l2g_scale_type='unity' ) endif From e9ba2e674c99b94cea47f014cb109d0da3714a23 Mon Sep 17 00:00:00 2001 From: Gautam Bisht Date: Thu, 29 Feb 2024 20:00:22 -0800 Subject: [PATCH 3/6] Fixes the typo --- components/elm/src/biogeochem/CNPBudgetMod.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/elm/src/biogeochem/CNPBudgetMod.F90 b/components/elm/src/biogeochem/CNPBudgetMod.F90 index 16d9f9fe7183..c1f4b5d44079 100644 --- a/components/elm/src/biogeochem/CNPBudgetMod.F90 +++ b/components/elm/src/biogeochem/CNPBudgetMod.F90 @@ -1200,7 +1200,7 @@ subroutine CBudget_SetEndingMonthlyStates(bounds, col_cs, grc_cs) associate( & begcb => col_cs%begcb , & ! Input : [real(r8) (:) ] carbon mass begining of the time step endcb => col_cs%endcb , & ! Input : [real(r8) (:) ] carbon mass begining of the time step - tcs_month_beg_grc => grc_cs%tcs_month_beg & ! Output: [real(r8) (:) ] grid-level carbon mass at the begining of a month + tcs_month_end_grc => grc_cs%tcs_month_end & ! Output: [real(r8) (:) ] grid-level carbon mass at the ending of a month ) ! Get current and previous dates to determine if a new month started @@ -1212,7 +1212,7 @@ subroutine CBudget_SetEndingMonthlyStates(bounds, col_cs, grc_cs) if ( day_curr == 1 .and. sec_curr == 0 .and. get_nstep() <= 1 ) then call c2g( bounds, & begcb(bounds%begc:bounds%endc), & - tcs_month_beg_grc(bounds%begg:bounds%endg), & + tcs_month_end_grc(bounds%begg:bounds%endg), & c2l_scale_type= 'unity', l2g_scale_type='unity' ) endif @@ -1222,7 +1222,7 @@ subroutine CBudget_SetEndingMonthlyStates(bounds, col_cs, grc_cs) if (get_nstep() > 1 .and. day_prev == 1 .and. sec_prev == 0) then call c2g( bounds, & endcb(bounds%begc:bounds%endc), & - tcs_month_beg_grc(bounds%begg:bounds%endg), & + tcs_month_end_grc(bounds%begg:bounds%endg), & c2l_scale_type= 'unity', l2g_scale_type='unity' ) endif From 847ac985d169fff5f6e61df4db4ec073f79b210e Mon Sep 17 00:00:00 2001 From: Peter Schwartz Date: Thu, 29 Feb 2024 22:56:17 -0600 Subject: [PATCH 4/6] Add TCS_MONTH_END to restart file --- components/elm/src/data_types/GridcellDataType.F90 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/elm/src/data_types/GridcellDataType.F90 b/components/elm/src/data_types/GridcellDataType.F90 index 092cbd4e1378..3b52a7a47af0 100644 --- a/components/elm/src/data_types/GridcellDataType.F90 +++ b/components/elm/src/data_types/GridcellDataType.F90 @@ -647,6 +647,10 @@ subroutine grc_cs_restart(this, bounds, ncid, flag) long_name='total carbon storage at the beginning of a month', units='gC/m^2', & interpinic_flag='interp', readvar=readvar, data=this%tcs_month_beg) + call restartvar(ncid=ncid, flag=flag, varname='TCS_MONTH_END', xtype=ncd_double, & + dim1name='gridcell', & + long_name='total carbon storage at the end of a month', units='gC/m^2', & + interpinic_flag='interp', readvar=readvar, data=this%tcs_month_end) end subroutine grc_cs_restart !------------------------------------------------------------------------ From 92a1a985821068db7930b6d69708975295eac08e Mon Sep 17 00:00:00 2001 From: Peter Schwartz Date: Thu, 29 Feb 2024 23:23:50 -0600 Subject: [PATCH 5/6] Change time check for end of month in CNPBudgetMod --- components/elm/src/biogeochem/CNPBudgetMod.F90 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/components/elm/src/biogeochem/CNPBudgetMod.F90 b/components/elm/src/biogeochem/CNPBudgetMod.F90 index c1f4b5d44079..a06e9b512c68 100644 --- a/components/elm/src/biogeochem/CNPBudgetMod.F90 +++ b/components/elm/src/biogeochem/CNPBudgetMod.F90 @@ -1204,8 +1204,7 @@ subroutine CBudget_SetEndingMonthlyStates(bounds, col_cs, grc_cs) ) ! Get current and previous dates to determine if a new month started - call get_prev_date(year_curr, month_curr, day_curr, sec_curr); - call get_prev_date(year_prev, month_prev, day_prev, sec_prev) + call get_curr_date(year_curr, month_curr, day_curr, sec_curr); ! If at the beginning of a simulation, save grid-level TCS based on ! 'begcb' from the current time step @@ -1219,7 +1218,7 @@ subroutine CBudget_SetEndingMonthlyStates(bounds, col_cs, grc_cs) ! If multiple steps into a simulation and the last time step was the ! end of a month, save grid-level TCS based on 'endcb' from the last ! time step - if (get_nstep() > 1 .and. day_prev == 1 .and. sec_prev == 0) then + if (get_nstep() > 1 .and. day_curr == 1 .and. sec_curr == 0) then call c2g( bounds, & endcb(bounds%begc:bounds%endc), & tcs_month_end_grc(bounds%begg:bounds%endg), & From dc495fbca99a18621e18350dc39bc82a6b2723e5 Mon Sep 17 00:00:00 2001 From: Gautam Bisht Date: Fri, 1 Mar 2024 12:44:33 -0800 Subject: [PATCH 6/6] Makes C-budget SetEndingMonthlyStates consistent The subroutines for water and carbon are made consistent. --- .../elm/src/biogeochem/CNPBudgetMod.F90 | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/components/elm/src/biogeochem/CNPBudgetMod.F90 b/components/elm/src/biogeochem/CNPBudgetMod.F90 index a06e9b512c68..e4f705f1fe5c 100644 --- a/components/elm/src/biogeochem/CNPBudgetMod.F90 +++ b/components/elm/src/biogeochem/CNPBudgetMod.F90 @@ -1193,8 +1193,7 @@ subroutine CBudget_SetEndingMonthlyStates(bounds, col_cs, grc_cs) type(gridcell_carbon_state), intent(inout) :: grc_cs ! ! !LOCAL VARIABLES: - integer :: year_prev, month_prev, day_prev, sec_prev - integer :: year_curr, month_curr, day_curr, sec_curr + integer :: year, month, day, sec !----------------------------------------------------------------------- associate( & @@ -1203,26 +1202,19 @@ subroutine CBudget_SetEndingMonthlyStates(bounds, col_cs, grc_cs) tcs_month_end_grc => grc_cs%tcs_month_end & ! Output: [real(r8) (:) ] grid-level carbon mass at the ending of a month ) - ! Get current and previous dates to determine if a new month started - call get_curr_date(year_curr, month_curr, day_curr, sec_curr); - - ! If at the beginning of a simulation, save grid-level TCS based on - ! 'begcb' from the current time step - if ( day_curr == 1 .and. sec_curr == 0 .and. get_nstep() <= 1 ) then - call c2g( bounds, & - begcb(bounds%begc:bounds%endc), & - tcs_month_end_grc(bounds%begg:bounds%endg), & - c2l_scale_type= 'unity', l2g_scale_type='unity' ) - endif + ! Get current dates to determine if a new month started + call get_curr_date(year, month, day, sec); ! If multiple steps into a simulation and the last time step was the ! end of a month, save grid-level TCS based on 'endcb' from the last ! time step - if (get_nstep() > 1 .and. day_curr == 1 .and. sec_curr == 0) then + if (get_nstep() > 1 .and. day == 1 .and. sec == 0) then call c2g( bounds, & endcb(bounds%begc:bounds%endc), & tcs_month_end_grc(bounds%begg:bounds%endg), & c2l_scale_type= 'unity', l2g_scale_type='unity' ) + else + tcs_month_end_grc(bounds%begg:bounds%endg) = spval endif end associate