From 085686c2f1d86523568914eae91611bd9d701d3e Mon Sep 17 00:00:00 2001 From: Knut-Frode Dagestad Date: Thu, 25 Apr 2024 16:23:13 +0200 Subject: [PATCH 1/3] Skipping unnecessary trimming of last pixel of ROMS native datasets --- examples/example_chemicaldrift.py | 2 +- examples/example_radionuclides.py | 2 +- opendrift/models/basemodel/environment.py | 1 + opendrift/readers/basereader/structured.py | 6 ++++++ opendrift/readers/basereader/variables.py | 4 +++- opendrift/readers/reader_ROMS_native.py | 4 ++-- 6 files changed, 14 insertions(+), 5 deletions(-) diff --git a/examples/example_chemicaldrift.py b/examples/example_chemicaldrift.py index 8100e6fd8..a524f394d 100755 --- a/examples/example_chemicaldrift.py +++ b/examples/example_chemicaldrift.py @@ -4,7 +4,7 @@ ======================================================== """ -from opendrift.readers import reader_netCDF_CF_generic, reader_ROMS_native +from opendrift.readers import reader_netCDF_CF_generic from opendrift.models.chemicaldrift import ChemicalDrift from opendrift.readers.reader_constant import Reader as ConstantReader from datetime import timedelta, datetime diff --git a/examples/example_radionuclides.py b/examples/example_radionuclides.py index 10a00af87..2432f679a 100755 --- a/examples/example_radionuclides.py +++ b/examples/example_radionuclides.py @@ -4,7 +4,7 @@ ============= """ -from opendrift.readers import reader_netCDF_CF_generic, reader_ROMS_native +from opendrift.readers import reader_netCDF_CF_generic from opendrift.models.radionuclides import RadionuclideDrift from datetime import timedelta, datetime import numpy as np diff --git a/opendrift/models/basemodel/environment.py b/opendrift/models/basemodel/environment.py index 2240bc32d..550c9ceb0 100644 --- a/opendrift/models/basemodel/environment.py +++ b/opendrift/models/basemodel/environment.py @@ -613,6 +613,7 @@ def get_environment(self, variables, time, lon, lat, z, profiles=None, profiles_ logger.debug('Variable group %s' % (str(variable_group))) logger.debug('----------------------------------------') missing_indices = np.array(range(len(lon))) + print(len(lon), 'LENLON') # For each reader: for reader_name in reader_group: logger.debug('Calling reader ' + reader_name) diff --git a/opendrift/readers/basereader/structured.py b/opendrift/readers/basereader/structured.py index eb051cf16..a1ee6662a 100644 --- a/opendrift/readers/basereader/structured.py +++ b/opendrift/readers/basereader/structured.py @@ -313,7 +313,13 @@ def _get_variables_interpolated_(self, variables, profiles, profiles_depth, len(self.var_block_after[blockvars_after].y), len_z, time_after)) block_after = self.var_block_after[blockvars_after] + print(len(reader_x), 'LEN-Reader-X') + print(f'Len(rx) {len(reader_x)}') + print(f'Before cover: {block_before.covers_positions(reader_x, reader_y)}') + print(f'After cover: {block_before.covers_positions(reader_x, reader_y)}') + print(block_before.y.min(), block_before.y.max(), reader_y.min(), reader_y.max(), 'BByminmax, reader_y_minmax') + print(self.ymin, self.ymax, 'reader ymin ymax') if (block_before is not None and block_before.covers_positions( reader_x, reader_y) is False) or (\ block_after is not None and block_after.covers_positions( diff --git a/opendrift/readers/basereader/variables.py b/opendrift/readers/basereader/variables.py index 8d8795536..b14c65679 100644 --- a/opendrift/readers/basereader/variables.py +++ b/opendrift/readers/basereader/variables.py @@ -743,7 +743,9 @@ def get_variables_interpolated_xy(self, z = z.copy() * np.ones(x.shape) z = z.copy()[ind_covered] - logger.debug('Fetching variables from ' + self.name) + logger.debug(f'Fetching variables from {self.name} covering {len(ind_covered)} elements') + print(f'Covered elements: {len(ind_covered)}') + print(ind_covered) self.timer_start('reading') # Filter derived variables diff --git a/opendrift/readers/reader_ROMS_native.py b/opendrift/readers/reader_ROMS_native.py index 62d8e046c..dad426fab 100644 --- a/opendrift/readers/reader_ROMS_native.py +++ b/opendrift/readers/reader_ROMS_native.py @@ -437,9 +437,9 @@ def get_variables(self, requested_variables, time=None, # Avoiding the last pixel in each dimension, since there are # several grids which are shifted (rho, u, v, psi) indx = np.arange(np.max([0, indx.min()-buffer]), - np.min([indx.max()+buffer, self.lon.shape[1]-1])) + np.min([indx.max()+buffer, self.lon.shape[1]])) indy = np.arange(np.max([0, indy.min()-buffer]), - np.min([indy.max()+buffer, self.lon.shape[0]-1])) + np.min([indy.max()+buffer, self.lon.shape[0]])) # define indices ixy = (indy,indx) From c7c926b6eb9e10bfdaa25ece5bad4416c0d35939 Mon Sep 17 00:00:00 2001 From: Knut-Frode Dagestad Date: Thu, 25 Apr 2024 16:25:49 +0200 Subject: [PATCH 2/3] Removing debug comments --- opendrift/models/basemodel/environment.py | 1 - opendrift/readers/basereader/structured.py | 6 ------ opendrift/readers/basereader/variables.py | 2 -- 3 files changed, 9 deletions(-) diff --git a/opendrift/models/basemodel/environment.py b/opendrift/models/basemodel/environment.py index 550c9ceb0..2240bc32d 100644 --- a/opendrift/models/basemodel/environment.py +++ b/opendrift/models/basemodel/environment.py @@ -613,7 +613,6 @@ def get_environment(self, variables, time, lon, lat, z, profiles=None, profiles_ logger.debug('Variable group %s' % (str(variable_group))) logger.debug('----------------------------------------') missing_indices = np.array(range(len(lon))) - print(len(lon), 'LENLON') # For each reader: for reader_name in reader_group: logger.debug('Calling reader ' + reader_name) diff --git a/opendrift/readers/basereader/structured.py b/opendrift/readers/basereader/structured.py index a1ee6662a..eb051cf16 100644 --- a/opendrift/readers/basereader/structured.py +++ b/opendrift/readers/basereader/structured.py @@ -313,13 +313,7 @@ def _get_variables_interpolated_(self, variables, profiles, profiles_depth, len(self.var_block_after[blockvars_after].y), len_z, time_after)) block_after = self.var_block_after[blockvars_after] - print(len(reader_x), 'LEN-Reader-X') - print(f'Len(rx) {len(reader_x)}') - print(f'Before cover: {block_before.covers_positions(reader_x, reader_y)}') - print(f'After cover: {block_before.covers_positions(reader_x, reader_y)}') - print(block_before.y.min(), block_before.y.max(), reader_y.min(), reader_y.max(), 'BByminmax, reader_y_minmax') - print(self.ymin, self.ymax, 'reader ymin ymax') if (block_before is not None and block_before.covers_positions( reader_x, reader_y) is False) or (\ block_after is not None and block_after.covers_positions( diff --git a/opendrift/readers/basereader/variables.py b/opendrift/readers/basereader/variables.py index b14c65679..cd9fb8d91 100644 --- a/opendrift/readers/basereader/variables.py +++ b/opendrift/readers/basereader/variables.py @@ -744,8 +744,6 @@ def get_variables_interpolated_xy(self, z = z.copy()[ind_covered] logger.debug(f'Fetching variables from {self.name} covering {len(ind_covered)} elements') - print(f'Covered elements: {len(ind_covered)}') - print(ind_covered) self.timer_start('reading') # Filter derived variables From 0afb43b351a09dde5602cbc11d71e898a608e49c Mon Sep 17 00:00:00 2001 From: Knut-Frode Dagestad Date: Thu, 25 Apr 2024 17:13:14 +0200 Subject: [PATCH 3/3] Reverting un-trimming of ROMS pixels, as this was necessary --- opendrift/readers/reader_ROMS_native.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opendrift/readers/reader_ROMS_native.py b/opendrift/readers/reader_ROMS_native.py index dad426fab..62d8e046c 100644 --- a/opendrift/readers/reader_ROMS_native.py +++ b/opendrift/readers/reader_ROMS_native.py @@ -437,9 +437,9 @@ def get_variables(self, requested_variables, time=None, # Avoiding the last pixel in each dimension, since there are # several grids which are shifted (rho, u, v, psi) indx = np.arange(np.max([0, indx.min()-buffer]), - np.min([indx.max()+buffer, self.lon.shape[1]])) + np.min([indx.max()+buffer, self.lon.shape[1]-1])) indy = np.arange(np.max([0, indy.min()-buffer]), - np.min([indy.max()+buffer, self.lon.shape[0]])) + np.min([indy.max()+buffer, self.lon.shape[0]-1])) # define indices ixy = (indy,indx)