Skip to content

Commit 30c5d0e

Browse files
authored
Merge pull request #1661 from knutfrode/dev
[run-ex] Made fix and added test for export_variables. Thx to vincent…
2 parents a1ed227 + 9bcdeac commit 30c5d0e

3 files changed

Lines changed: 22 additions & 9 deletions

File tree

opendrift/models/basemodel/__init__.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1892,10 +1892,19 @@ def run(self,
18921892
# Forward simulation, start time has been set when seeding
18931893
self.time = self.start_time
18941894

1895-
# Add the output variables which are always required
1895+
# Find variables and element properties for which previous value shall be stored
1896+
environment_previous = [vn for vn, v in self.required_variables.items()
1897+
if v.get('store_previous', False) is True]
1898+
elements_previous = [vn for vn, v in self.elements.variables.items()
1899+
if v.get('store_previous', False) is True]
1900+
1901+
# Add the output variables which are always required,
1902+
# as well as variables for which previous value is stored
18961903
if export_variables is not None:
18971904
export_variables = list(
1898-
set(export_variables + ['lon', 'lat', 'status']))
1905+
set(export_variables + ['lon', 'lat', 'status'] +
1906+
environment_previous + elements_previous))
1907+
18991908
self.export_variables = export_variables
19001909

19011910
# Create Xarray Dataset to hold result
@@ -1977,11 +1986,6 @@ def run(self,
19771986

19781987

19791988
# Make Xarray datasets to store environment variables and element properties from previous time step
1980-
environment_previous = [vn for vn, v in self.required_variables.items()
1981-
if v.get('store_previous', False) is True]
1982-
elements_previous = [vn for vn, v in self.elements.variables.items()
1983-
if v.get('store_previous', False) is True]
1984-
19851989
if len(environment_previous) > 0:
19861990
self._environment_previous = self.result[[*environment_previous]].isel(time=0, drop=True).copy(deep=True)
19871991
if len(elements_previous) > 0:

tests/models/test_io.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@
3535
need_fastparquet = pytest.mark.skipif(has_fastparquet == False,
3636
reason = 'fastparquet must be installed to use fastparquet writer')
3737

38+
def test_export_variables():
39+
o = OceanDrift(loglevel=50)
40+
o.set_config('drift:vertical_advection', True) # Needs previous value of sea_surface_height
41+
o.set_config('general:use_auto_landmask', False)
42+
o.set_config('environment:constant:land_binary_mask', 0)
43+
o.seed_elements(lon=3, lat=60, time=datetime.now())
44+
o.run(steps=2, export_variables=['z'])
45+
assert 'sea_surface_height' in o.result.var()
46+
assert 'land_binary_mask' not in o.result.var()
47+
3848
def test_custom_result(tmpdir):
3949
"""Adding custom data to self.result during self.prepare_run()"""
4050

tests/models/test_run.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ def test_config_suggestion(self):
155155
self.assertTrue('Did you mean' in str(e))
156156

157157
def test_config_seed(self):
158-
#o = Leeway(loglevel=20)
159158
o = OceanDrift(loglevel=20)
160159
o.list_configspec()
161160

@@ -350,7 +349,7 @@ def test_vertical_mixing(self):
350349
time=norkyst.start_time)
351350

352351
o1.run(steps=20, time_step=300, time_step_output=1800,
353-
export_buffer_length=10, outfile='verticalmixing.nc')
352+
outfile='verticalmixing.nc')
354353
self.assertAlmostEqual(o1.result.z.min().values, -42.60, 1)
355354
self.assertAlmostEqual(o1.result.z.max().values, 0.0, 1)
356355
os.remove('verticalmixing.nc')

0 commit comments

Comments
 (0)