From a3fa11b7813f162f2ea097e4833eaced1a8cd323 Mon Sep 17 00:00:00 2001 From: Knut-Frode Dagestad Date: Wed, 14 Feb 2024 08:49:42 +0100 Subject: [PATCH 1/2] Remove proj4 from docstring of reader_ROMS_native.py --- opendrift/readers/reader_ROMS_native.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/opendrift/readers/reader_ROMS_native.py b/opendrift/readers/reader_ROMS_native.py index 7766245fd..0b77cb938 100644 --- a/opendrift/readers/reader_ROMS_native.py +++ b/opendrift/readers/reader_ROMS_native.py @@ -39,9 +39,6 @@ class Reader(BaseReader, StructuredReader): :param name: Name of reader :type name: string, optional - :param proj4: PROJ.4 string describing projection of data. - :type proj4: string, optional - Example: .. code:: From b4560fe8abb9b4bcf83a34d1e23132c7f795c9e2 Mon Sep 17 00:00:00 2001 From: Knut-Frode Dagestad Date: Wed, 14 Feb 2024 14:48:59 +0100 Subject: [PATCH 2/2] [run-ex] Fixing dimension names for unprojected datasets in reader_netCDF_CF_generic. Issue warning that vectors from fakeproj datasets are not rotated --- opendrift/models/oceandrift.py | 8 +++++--- opendrift/readers/reader_netCDF_CF_generic.py | 11 +++++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/opendrift/models/oceandrift.py b/opendrift/models/oceandrift.py index b8c06796d..b91878a53 100644 --- a/opendrift/models/oceandrift.py +++ b/opendrift/models/oceandrift.py @@ -199,7 +199,7 @@ def update(self): # Optional machine learning correction self.machine_learning_correction() - def simulate_trajectories(self, outfile, trajectories, + def simulate_trajectories(self, outfile, trajectories, number=1, wind_drift_factors=None, current_drift_factors=None, time_step=None, time_step_output=None, simulation_duration=None, simulation_interval=None): @@ -208,7 +208,7 @@ def simulate_trajectories(self, outfile, trajectories, time_step_output = pd.Timedelta(time_step_output) simulation_interval = pd.Timedelta(simulation_interval) # Interpolate trajectories to output time step - trajectories = trajectories.traj.gridtime(time_step_output) + #trajectories = trajectories.traj.gridtime(time_step_output) # Find all seed combinations: position, time, wdf, cdf # Loop også over trajektorier -> origin_marker step = int(simulation_interval / time_step_output) @@ -217,11 +217,13 @@ def simulate_trajectories(self, outfile, trajectories, start_lats = trajectories.isel(time=tind).isel(trajectory=0).lat.values start_times = trajectories.time[tind] self.set_config('drift:max_age_seconds', simulation_duration.total_seconds()) + kwargs = {'wind_drift_factor': wind_drift_factors[0], + 'current_drift_factor': current_drift_factors[0]} for (lo,la,ti) in zip(start_lons, start_lats, start_times): if np.isnan(lo): continue ti = pd.Timestamp(ti.values).to_pydatetime() - self.seed_elements(lon=lo, lat=la, time=ti) + self.seed_elements(lon=lo, lat=la, time=ti, number=number, **kwargs) print(self) self.run(outfile=outfile, end_time=pd.Timestamp(start_times[-1].values).to_pydatetime()+simulation_duration) # Simulate and save to file diff --git a/opendrift/readers/reader_netCDF_CF_generic.py b/opendrift/readers/reader_netCDF_CF_generic.py index a9af53bec..ca165a7a3 100644 --- a/opendrift/readers/reader_netCDF_CF_generic.py +++ b/opendrift/readers/reader_netCDF_CF_generic.py @@ -247,12 +247,12 @@ def __init__(self, filename=None, zarr_storage_options=None, name=None, proj4=No # We load lon and lat arrays into memory lon_var = self.Dataset.variables[lon_var_name] lat_var = self.Dataset.variables[lat_var_name] + self.xname = lon_var_name + self.yname = lat_var_name if lon_var.ndim == 1: logger.debug('Lon and lat are 1D arrays - using as projection coordinates') x = lon_var.data y = lat_var.data - self.xname = lon_var_name - self.yname = lat_var_name self.dimensions['x'] = lon_var.dims[0] self.dimensions['y'] = lat_var.dims[0] if self.proj4 is None: @@ -261,11 +261,15 @@ def __init__(self, filename=None, zarr_storage_options=None, name=None, proj4=No logger.debug('Lon and lat are 2D arrays - dataset is unprojected') self.lon = lon_var.data self.lat = lat_var.data + self.dimensions['x'] = lon_var.dims[0] + self.dimensions['y'] = lat_var.dims[1] self.projected = False elif lon_var.ndim == 3: logger.debug('Lon lat are 3D arrays, reading first time') self.lon = lon_var[0,:,:].data self.lat = lat_var[0,:,:].data + self.dimensions['x'] = lon_var.dims[1] + self.dimensions['y'] = lat_var.dims[2] self.projected = False else: if self.proj4 is None: @@ -511,6 +515,9 @@ def get_variables(self, requested_variables, time=None, from opendrift.readers.basereader import vector_pairs_xy for vectorpair in vector_pairs_xy: if vectorpair[0] in self.rotate_mapping and vectorpair[0] in variables.keys(): + if self.proj.__class__.__name__ == 'fakeproj': + logger.warning('Rotation from fakeproj is not yet implemented, skipping.') + continue logger.debug(f'Rotating vector from east/north to xy orientation: {vectorpair[0:2]}') variables[vectorpair[0]], variables[vectorpair[1]] = self.rotate_vectors( lon, lat, variables[vectorpair[0]], variables[vectorpair[1]],