opendrift icon indicating copy to clipboard operation
opendrift copied to clipboard

Leeway model fails with unknown `environment` attribute

Open valschmidt opened this issue 11 months ago • 3 comments

I'm attempting to try the Leeway model and it is failing with an unknown environment attribute error. Here's my script:

#!/usr/bin/env python3

from opendrift.models.leeway import Leeway
from opendrift.readers import reader_netCDF_CF_generic, reader_global_landmask, reader_ROMS_native

start_lat = 42.5
start_lon = -71.0

latmin = 43.1
latmax = 43.43
lonmin = -71.2
lonmax = -68.5

L = Leeway(loglevel=20)

reader_landmask = reader_global_landmask.Reader()
#reader_landmask = reader_global_landmask.Reader(extent=[lonmin,latmin,lonmax,latmax])

gomofs = reader_ROMS_native.Reader('gomofs.t00z.20241229.fields.f003.nc')

L.add_reader([reader_landmask,gomofs])

L.seed_elements(lon=start_lon, lat=start_lat, number=100, radius=0,
                time=gomofs.start_time)

L.run(end_time = gomofs.end_time, time_step=600,outfile='gomofs_test_output.nc')

print(L)

L.plot()

And here's the last few lines of output:

16:13:36 INFO opendrift.models.basemodel:931: Using existing reader for land_binary_mask 16:13:36 INFO opendrift.models.basemodel:944: Moving 100 out of 100 points from land to water Traceback (most recent call last): File "/Users/vschmidt/scratch/opendrift/./gomofs_testing.py", line 26, in <module> L.run(end_time = gomofs.end_time, time_step=600,outfile='gomofs_test_output.nc') File "/Users/vschmidt/gitsrc/opendrift/opendrift/models/basemodel/__init__.py", line 111, in inner r = func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/vschmidt/gitsrc/opendrift/opendrift/models/basemodel/__init__.py", line 2151, in run self.state_to_buffer() # Append final status to buffer ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/vschmidt/gitsrc/opendrift/opendrift/models/basemodel/__init__.py", line 2292, in state_to_buffer for i, var in enumerate(self.environment.dtype.names): ^^^^^^^^^^^^^^^^ AttributeError: 'Leeway' object has no attribute 'environment'. Did you mean: 'plot_environment'?

valschmidt avatar Dec 30 '24 16:12 valschmidt

If you use loglevel=0 you will see some more detailed information about the cause of the problem. The missing environment is simply a consequence of something else going wrong.

I suspect it might be that your GOMOFS forcing files covers only a single timestep (from the filename), and thus cannot be used for a simulation over a time period. Though if you have several such single-timestep-files, you may make an aggregate, e.g.

gomofs = reader_ROMS_native.Reader('gomofs.t00z.20241229.fields.f*.nc')

knutfrode avatar Dec 30 '24 16:12 knutfrode

Looks like you're right!

''' 17:22:41 DEBUG opendrift.models.basemodel:1905: Finalizing environment and preparing readers for simulation coverage ([-71.0, 42.5, -71.0, 42.5]) and time (2024-12-29 03:00:00 to 2024-12-29 03:00:00) ''' I'm new to this (and the model output) and I didn't expect the start_time and end_time fields to be the same in a single file. That's probably something I should check and catch.

If I might ask a follow-up question. The output of this model is on a THREDDS server here: https://opendap.co-ops.nos.noaa.gov/thredds/catalog/NOAA/GOMOFS/MODELS/2025/01/02/catalog.html but I've not been able to figure out THREDDS API model and have just been downloading a few files to test with manually. Is there a single URL that I can give such that the OpenDrift reader will pull the data it needs for the model parameters automatically?

valschmidt avatar Jan 02 '25 21:01 valschmidt

Under the OpenDAP link of a dataset you will find a Data URL field, as e.g. in this example from HYCOM ocean model: https://tds.hycom.org/thredds/dodsC/FMRC_ESPC-D-V02_uv3z/FMRC_ESPC-D-V02_uv3z_best.ncd.html

The Data URL in this case is https://tds.hycom.org/thredds/dodsC/FMRC_ESPC-D-V02_uv3z/FMRC_ESPC-D-V02_uv3z_best.ncd

knutfrode avatar Jan 02 '25 22:01 knutfrode