From 59e23eaaa9ccbe12e1b347e4b200854fa887326d Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Fri, 24 Feb 2023 12:14:49 +1100 Subject: [PATCH 1/3] Fix rounding bug. --- libforcing/src/ncvar.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libforcing/src/ncvar.F90 b/libforcing/src/ncvar.F90 index 7031f3b..e0aa75f 100644 --- a/libforcing/src/ncvar.F90 +++ b/libforcing/src/ncvar.F90 @@ -148,7 +148,7 @@ subroutine ncvar_refresh(self, filename, & ! Initialise start date and calendar call self%get_time_metadata(time_varid, self%start_date, self%calendar, & self%units_as_seconds) - self%dt = int((self%times(2) - self%times(1))*self%units_as_seconds) + self%dt = nint((self%times(2) - self%times(1))*self%units_as_seconds) status = nf90_get_att(self%ncid, time_varid, "bounds", time_bnds_name) if (status == nf90_noerr) then From b7d9614f3303903fd8308b6b0a824a8ada83fd9e Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Wed, 8 Mar 2023 13:24:12 +1100 Subject: [PATCH 2/3] Add assert to catch call read-no-data case. --- libforcing/src/ncvar.F90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libforcing/src/ncvar.F90 b/libforcing/src/ncvar.F90 index e0aa75f..1971dd5 100644 --- a/libforcing/src/ncvar.F90 +++ b/libforcing/src/ncvar.F90 @@ -331,6 +331,8 @@ subroutine ncvar_read_data(self, indx, dataout) self%cur_time_cache_size = left_to_read endif + call assert(self%cur_time_cache_size > 0, 'Cache is empty') + call read_data(self%ncid, self%varid, self%name, indx, & self%cur_time_cache_size, self%data_cache) From bfa2062c1c6004f6d04e39042168b39fb474013a Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Thu, 9 Mar 2023 13:25:17 +1100 Subject: [PATCH 3/3] Put an if around the read_data to prevent call. --- libforcing/src/ncvar.F90 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libforcing/src/ncvar.F90 b/libforcing/src/ncvar.F90 index 1971dd5..686ab3b 100644 --- a/libforcing/src/ncvar.F90 +++ b/libforcing/src/ncvar.F90 @@ -331,11 +331,11 @@ subroutine ncvar_read_data(self, indx, dataout) self%cur_time_cache_size = left_to_read endif - call assert(self%cur_time_cache_size > 0, 'Cache is empty') - - call read_data(self%ncid, self%varid, self%name, indx, & - self%cur_time_cache_size, self%data_cache) - + if (self%cur_time_cache_size > 0) then + call read_data(self%ncid, self%varid, self%name, indx, & + self%cur_time_cache_size, self%data_cache) + endif + do i=1, self%cur_time_cache_size self%cached_indices(i) = indx + (i - 1) enddo