From 9f30120897f7e27178c7e99357efd47d09923bee Mon Sep 17 00:00:00 2001 From: Anton Steketee <79179784+anton-seaice@users.noreply.github.com> Date: Thu, 29 Feb 2024 08:20:48 +1100 Subject: [PATCH] Set 'idate0' and 'use_leap_years' in nuopc cap (#936) Set idate0 in nuopc cap, so that the history "time:units" attribute in netcdf output is consistent with other model components. Set use_leap_years in nuopc cap, so that netcdf output "time:calendar" is set correctly in history output Co-authored-by: Denise Worthen --- .../drivers/nuopc/cmeps/ice_comp_nuopc.F90 | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/cicecore/drivers/nuopc/cmeps/ice_comp_nuopc.F90 b/cicecore/drivers/nuopc/cmeps/ice_comp_nuopc.F90 index efadabbda..6228c0bdd 100644 --- a/cicecore/drivers/nuopc/cmeps/ice_comp_nuopc.F90 +++ b/cicecore/drivers/nuopc/cmeps/ice_comp_nuopc.F90 @@ -23,10 +23,10 @@ module ice_comp_nuopc use ice_domain_size , only : nx_global, ny_global use ice_grid , only : grid_format, init_grid2 use ice_communicate , only : init_communicate, my_task, master_task, mpi_comm_ice - use ice_calendar , only : force_restart_now, write_ic, init_calendar - use ice_calendar , only : idate, mday, mmonth, myear, year_init + use ice_calendar , only : force_restart_now, write_ic + use ice_calendar , only : idate, idate0, mday, mmonth, myear, year_init, month_init, day_init use ice_calendar , only : msec, dt, calendar, calendar_type, nextsw_cday, istep - use ice_calendar , only : ice_calendar_noleap, ice_calendar_gregorian + use ice_calendar , only : ice_calendar_noleap, ice_calendar_gregorian, use_leap_years use ice_kinds_mod , only : dbl_kind, int_kind, char_len, char_len_long use ice_fileunits , only : nu_diag, nu_diag_set, inst_index, inst_name use ice_fileunits , only : inst_suffix, release_all_fileunits, flush_fileunit @@ -676,6 +676,8 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) if(mastertask) write(nu_diag,*) trim(subname)//'WARNING: pio_typename from driver needs to be set for netcdf output to work' end if + + #else ! Read the cice namelist as part of the call to cice_init1 @@ -789,7 +791,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) call cice_init2() call t_stopf ('cice_init2') !--------------------------------------------------------------------------- - ! use EClock to reset calendar information on initial start + ! use EClock to reset calendar information !--------------------------------------------------------------------------- ! - on initial run @@ -805,7 +807,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) if (ref_ymd /= start_ymd .or. ref_tod /= start_tod) then if (my_task == master_task) then write(nu_diag,*) trim(subname),': ref_ymd ',ref_ymd, ' must equal start_ymd ',start_ymd - write(nu_diag,*) trim(subname),': ref_ymd ',ref_tod, ' must equal start_ymd ',start_tod + write(nu_diag,*) trim(subname),': ref_tod',ref_tod, ' must equal start_tod ',start_tod end if end if @@ -837,6 +839,19 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) end if + ! - start time from ESMF clock. Used to set history time units + idate0 = start_ymd + year_init = (idate0/10000) + month_init= (idate0-year_init*10000)/100 ! integer month of basedate + day_init = idate0-year_init*10000-month_init*100 + + ! - Set use_leap_years based on calendar (as some CICE calls use this instead of the calendar type) + if (calendar_type == ice_calendar_gregorian) then + use_leap_years = .true. + else + use_leap_years = .false. ! no_leap calendars + endif + call calendar() ! update calendar info !----------------------------------------------------------------------------