|
1 | 1 | module util_mod
|
2 | 2 |
|
3 | 3 | use netcdf
|
| 4 | +use datetime_module, only : datetime |
4 | 5 | use error_handler, only : assert
|
5 | 6 | use, intrinsic :: iso_fortran_env, only : stderr=>error_unit
|
6 | 7 |
|
7 | 8 | implicit none
|
8 | 9 |
|
9 |
| -integer, parameter, private :: DAYS_IN_MONTH = (/ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 /) |
| 10 | +integer, dimension(12), parameter, private :: DAYS_IN_MONTH = (/ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 /) |
10 | 11 |
|
11 | 12 | contains
|
12 | 13 |
|
@@ -171,24 +172,52 @@ subroutine get_var_dims(ncid, varid, ndims, nx, ny, time)
|
171 | 172 | ! substrings. This is very specifically designed to handle the kinds
|
172 | 173 | ! of filenames used for JRA55 and ERA5 atmospheric forcings.
|
173 | 174 |
|
174 |
| -function find_filename_for_year_month(filename_template, year, month) |
| 175 | +function filename_for_date(filename_template, date) |
175 | 176 | character(len=*), intent(in) :: filename_template
|
176 |
| - integer, intent(in) :: year, month |
| 177 | + type(datetime), intent(in) :: date |
177 | 178 |
|
178 |
| - integer :: start_day, end_day |
| 179 | + integer :: year, month, start_day, end_day |
179 | 180 | character(len=1024) :: filename_for_date
|
180 | 181 | character(len=4) :: year_str, yearp1_str
|
181 | 182 | character(len=2) :: month_str, start_day_str, end_day_str
|
182 | 183 |
|
| 184 | + year = date%getYear() |
| 185 | + month = date%getMonth() |
| 186 | + |
183 | 187 | write(year_str, "(I4)") year
|
184 | 188 | write(yearp1_str, "(I4)") year+1
|
185 |
| - |
186 |
| - filename_for_year = replace_text(filename, "{{ year }}", year_str) |
187 |
| - filename_for_year = replace_text(filename_for_year, "{{year}}", year_str) |
188 |
| - filename_for_year = replace_text(filename_for_year, "{{ year+1 }}", yearp1_str) |
189 |
| - filename_for_year = replace_text(filename_for_year, "{{year+1}}", yearp1_str) |
190 |
| - |
191 |
| -endfunction find_filename_for_year_month |
| 189 | + write(month_str, "(I2)") month |
| 190 | + |
| 191 | + start_day = 1 |
| 192 | + end_day = DAYS_IN_MONTH(month) |
| 193 | + write(start_day_str, "(I2)") start_day |
| 194 | + write(end_day_str, "(I2)") end_day |
| 195 | + |
| 196 | + filename_for_date = replace_text(filename_template, & |
| 197 | + "{{ year }}", year_str) |
| 198 | + filename_for_date = replace_text(filename_for_date, & |
| 199 | + "{{year}}", year_str) |
| 200 | + filename_for_date = replace_text(filename_for_date, & |
| 201 | + "{{ year+1 }}", yearp1_str) |
| 202 | + filename_for_date = replace_text(filename_for_date, & |
| 203 | + "{{year+1}}", yearp1_str) |
| 204 | + |
| 205 | + filename_for_date = replace_text(filename_for_date, & |
| 206 | + "{{ month }}", month_str) |
| 207 | + filename_for_date = replace_text(filename_for_date, & |
| 208 | + "{{month}}", month_str) |
| 209 | + |
| 210 | + filename_for_date = replace_text(filename_for_date, & |
| 211 | + "{{ start_day }}", start_day_str) |
| 212 | + filename_for_date = replace_text(filename_for_date, & |
| 213 | + "{{start_day}}", start_day_str) |
| 214 | + |
| 215 | + filename_for_date = replace_text(filename_for_date, & |
| 216 | + "{{ end_day }}", end_day_str) |
| 217 | + filename_for_date = replace_text(filename_for_date, & |
| 218 | + "{{end_day}}", end_day_str) |
| 219 | + |
| 220 | +endfunction filename_for_date |
192 | 221 |
|
193 | 222 |
|
194 | 223 | end module util_mod
|
0 commit comments