From e4393356b4d126eca6524986320c3f41c44dd8c6 Mon Sep 17 00:00:00 2001 From: student34 Date: Fri, 31 May 2024 10:36:26 +0200 Subject: [PATCH 1/3] Combined changes to avoid pointers issues --- opendrift/readers/operators/readerops.py | 30 ++++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/opendrift/readers/operators/readerops.py b/opendrift/readers/operators/readerops.py index e7a6b3ac5..518a89331 100644 --- a/opendrift/readers/operators/readerops.py +++ b/opendrift/readers/operators/readerops.py @@ -1,6 +1,8 @@ from types import LambdaType from ..basereader import BaseReader import numpy as np +import matplotlib.pyplot as plt +import pyproj def none_or_cmp(a, b, cmp): if a is None: @@ -50,41 +52,41 @@ def covers_positions(self, lon, lat): def covers_time(self, time): return self.a.covers_time(time) and self.b.covers_time(time) - def get_variables_interpolated(self, variables, **kwargs): + def get_variables_interpolated(self, variables, shape = None, profiles=None, profiles_depth=None,time=None,lon=None, lat=None, z=None,rotate_to_proj=None): assert set(variables).issubset(self.variables), f"{variables} is not subset of {self.variables}" - env_a, env_profiles_a = self.a.get_variables_interpolated(variables, **kwargs) - env_b, env_profiles_b = self.b.get_variables_interpolated(variables, **kwargs) - + env_a, env_profiles_a = self.a.get_variables_interpolated(variables, time=time,lon=lon, lat=lat, z=z) + env_b, env_profiles_b = self.b.get_variables_interpolated(variables,time=time,lon=lon, lat=lat, z=z) variables = [ var for var in env_a.keys() if var not in ['x', 'y', 'z', 'time'] ] - #Making disctinction between easy functions or more complex ones that need some external parameters + #Making disctinction between easy functions or more complex ones that need some external parameters + env_c = {} for var in variables: + print(var) if self.op_type == "easy": env_a[var] = self.op(env_a[var], env_b[var]) elif self.op_type == "combine_gaussian": - lon = kwargs['lon'] - lat = kwargs['lat'] lon_center, lat_center = self.b.lon, self.b.lat std = self.external_params - env_a[var] = self.op(env_a[var], env_b[var], lon, lat, lon_center, lat_center, std) + env_c[var] = self.op(env_a[var], env_b[var], lon, lat, lon_center, lat_center, std) else: raise ValueError('Op_type not recognised. You should verify the definition of the Reader operator you are using.') + #Profile + env_profiles_c = None if env_profiles_a is not None: + env_profiles_c = {} variables = [ var for var in env_profiles_a.keys() if var not in ['x', 'y', 'z', 'time'] ] for var in variables: - env_profiles_a[var] = self.op(env_profiles_a[var], env_profiles_b[var]) + env_profiles_c[var] = self.op(env_profiles_c[var], env_profiles_c[var]) - return env_a, env_profiles_a + return env_c, env_profiles_c def get_variables(self, requested_variables, time=None, x=None, y=None, z=None): pm1 = self.a.pixel_size() pm2 = self.b.pixel_size() - - print(pm1, pm2) if pm1 == None and pm2 == None: raise Exception("Neither {} or {} in {} have pixel_size well defined. Plot is not possible.") elif pm1 == None: @@ -96,16 +98,14 @@ def get_variables(self, requested_variables, time=None, delta_x = pm/111000 delta_y = pm/ 111000 * np.abs(np.cos(np.radians(np.mean(y)))) - x = np.arange(np.min(x), np.max(x), delta_x) y = np.arange(np.min(y), np.max(y), delta_y) - X, Y = np.meshgrid(x, y) shape = X.shape X = X.flatten() Y = Y.flatten() - variables, _ = self.get_variables_interpolated(requested_variables, lon = X, lat = Y, time = time, z = z) + variables, _ = self.get_variables_interpolated(requested_variables, shape = shape, lon = X, lat = Y, time = time, z = z) for key in variables.keys(): variables[key] = np.reshape(variables[key], shape) variables['x'] = x From 5568fa59fa0ff5e1ebd42a4f41350654a611517b Mon Sep 17 00:00:00 2001 From: student34 Date: Fri, 31 May 2024 10:39:13 +0200 Subject: [PATCH 2/3] Some more issue --- opendrift/readers/operators/readerops.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opendrift/readers/operators/readerops.py b/opendrift/readers/operators/readerops.py index 518a89331..9bb73195d 100644 --- a/opendrift/readers/operators/readerops.py +++ b/opendrift/readers/operators/readerops.py @@ -52,7 +52,7 @@ def covers_positions(self, lon, lat): def covers_time(self, time): return self.a.covers_time(time) and self.b.covers_time(time) - def get_variables_interpolated(self, variables, shape = None, profiles=None, profiles_depth=None,time=None,lon=None, lat=None, z=None,rotate_to_proj=None): + def get_variables_interpolated(self, variables, profiles=None, profiles_depth=None,time=None,lon=None, lat=None, z=None,rotate_to_proj=None): assert set(variables).issubset(self.variables), f"{variables} is not subset of {self.variables}" env_a, env_profiles_a = self.a.get_variables_interpolated(variables, time=time,lon=lon, lat=lat, z=z) @@ -105,7 +105,7 @@ def get_variables(self, requested_variables, time=None, X = X.flatten() Y = Y.flatten() - variables, _ = self.get_variables_interpolated(requested_variables, shape = shape, lon = X, lat = Y, time = time, z = z) + variables, _ = self.get_variables_interpolated(requested_variables, lon = X, lat = Y, time = time, z = z) for key in variables.keys(): variables[key] = np.reshape(variables[key], shape) variables['x'] = x From 8baed1e8d2c0aff65a2d12795f235300e248a0b1 Mon Sep 17 00:00:00 2001 From: student34 Date: Fri, 31 May 2024 11:03:53 +0200 Subject: [PATCH 3/3] Some more changes --- opendrift/readers/operators/readerops.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/opendrift/readers/operators/readerops.py b/opendrift/readers/operators/readerops.py index 9bb73195d..26a06a508 100644 --- a/opendrift/readers/operators/readerops.py +++ b/opendrift/readers/operators/readerops.py @@ -62,9 +62,8 @@ def get_variables_interpolated(self, variables, profiles=None, profiles_depth=No #Making disctinction between easy functions or more complex ones that need some external parameters env_c = {} for var in variables: - print(var) if self.op_type == "easy": - env_a[var] = self.op(env_a[var], env_b[var]) + env_c[var] = self.op(env_a[var], env_b[var]) elif self.op_type == "combine_gaussian": lon_center, lat_center = self.b.lon, self.b.lat std = self.external_params