@@ -45,7 +45,7 @@ def esm_grid_mask_cube(args):
4545 return cube
4646
4747
48- def set_gregorian (var ):
48+ def set_gregorian (var , replace_bounds = False ):
4949 # Change the calendar to Gregorian for the model
5050 time = var .coord ("time" )
5151 origin = time .units .origin
@@ -59,17 +59,43 @@ def set_gregorian(var):
5959 date .year , date .month , date .day , date .hour , date .minute , date .second
6060 )
6161 tvals [i ] = newunits .date2num (newdate )
62- for j in range (2 ):
63- date = time .units .num2date (tbnds [i ][j ])
64- newdate = cftime .DatetimeProlepticGregorian (
62+ if replace_bounds :
63+ beg_date = cftime .DatetimeProlepticGregorian (
6564 date .year ,
6665 date .month ,
67- date . day ,
66+ 1 ,
6867 date .hour ,
6968 date .minute ,
7069 date .second ,
7170 )
72- tbnds [i ][j ] = newunits .date2num (newdate )
71+ tbnds [i ][0 ] = newunits .date2num (beg_date )
72+ if date .month == 12 :
73+ end_year = date .year + 1
74+ end_month = 1
75+ else :
76+ end_year = date .year
77+ end_month = date .month + 1
78+ end_date = cftime .DatetimeProlepticGregorian (
79+ end_year ,
80+ end_month ,
81+ 1 ,
82+ date .hour ,
83+ date .minute ,
84+ date .second ,
85+ )
86+ tbnds [i ][1 ] = newunits .date2num (end_date )
87+ else :
88+ for j in range (2 ):
89+ date = time .units .num2date (tbnds [i ][j ])
90+ newdate = cftime .DatetimeProlepticGregorian (
91+ date .year ,
92+ date .month ,
93+ date .day ,
94+ date .hour ,
95+ date .minute ,
96+ date .second ,
97+ )
98+ tbnds [i ][j ] = newunits .date2num (newdate )
7399 time .points = tvals
74100 time .bounds = tbnds
75101 time .units = newunits
@@ -134,7 +160,9 @@ def zero_poles(cube):
134160 cube .data [:, - 1 ] = 0.0
135161
136162
137- def save_ancil (cubes , save_dirpath , save_filename , gregorian = True ):
163+ def save_ancil (
164+ cubes , save_dirpath , save_filename , gregorian = True , replace_bounds = False
165+ ):
138166 """
139167 Handle both a list and a single cube
140168 """
@@ -148,7 +176,7 @@ def save_ancil(cubes, save_dirpath, save_filename, gregorian=True):
148176 cube .attributes ["grid_staggering" ] = 3 # New dynamics
149177 if gregorian :
150178 cube .attributes ["time_type" ] = 1 # Gregorian
151- set_gregorian (cube )
179+ set_gregorian (cube , replace_bounds = replace_bounds )
152180 """
153181 ANTS doesn't set the calendar header for monthly fields
154182 See fileformats/ancil/time_headers.py
0 commit comments