Note
Go to the end to download the full example code
Oil budget
from datetime import timedelta
from opendrift.readers import reader_netCDF_CF_generic
from opendrift.models.openoil import OpenOil
o = OpenOil(loglevel=20, weathering_model='noaa')
# Arome
reader_arome = reader_netCDF_CF_generic.Reader(o.test_data_folder() +
'16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc')
#reader_arome = reader_netCDF_CF_generic.Reader('https://thredds.met.no/thredds/dodsC/mepslatest/meps_lagged_6_h_latest_2_5km_latest.nc')
# Norkyst
reader_norkyst = reader_netCDF_CF_generic.Reader(o.test_data_folder() +
'16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')
#reader_norkyst = reader_netCDF_CF_generic.Reader('https://thredds.met.no/thredds/dodsC/sea/norkyst800m/1h/aggregate_be')
o.add_reader([reader_norkyst, reader_arome])
#o.set_config('environment:fallback:x_wind', 9)
#o.set_config('environment:fallback:y_wind', 0)
#o.set_config('environment:fallback:x_sea_water_velocity', .7)
#o.set_config('environment:fallback:y_sea_water_velocity', .3)
#o.set_config('environment:fallback:land_binary_mask', 0)
13:59:54 INFO opendrift.models.basemodel:539: OpenDriftSimulation initialised (version 1.10.7 / v1.10.6-119-g1da5bec)
13:59:54 INFO opendrift.readers.reader_netCDF_CF_generic:92: Opening dataset: /root/project/tests/test_data/16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc
/opt/conda/envs/opendrift/lib/python3.11/site-packages/pyproj/crs/crs.py:1286: UserWarning: You will likely lose important projection information when converting to a PROJ string from another format. See: https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems
proj = self._crs.to_proj4(version=version)
13:59:55 INFO opendrift.readers.reader_netCDF_CF_generic:92: Opening dataset: /root/project/tests/test_data/16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc
/opt/conda/envs/opendrift/lib/python3.11/site-packages/pyproj/crs/crs.py:1286: UserWarning: You will likely lose important projection information when converting to a PROJ string from another format. See: https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems
proj = self._crs.to_proj4(version=version)
Seed oil elements at defined position and time
oil_type = 'IFO-380LS 2014'
oil_type = 'IFO 300'
oil_type = 'IFO-180NS 2014'
oil_type = 'GENERIC LIGHT CRUDE'
oil_type = 'GENERIC HEAVY CRUDE'
o.seed_elements(lon=4.8, lat=60.0, z=0, radius=3000, number=1000,
time=reader_arome.start_time, oil_type=oil_type)
13:59:55 INFO opendrift.models.openoil.openoil:1462: setting oil_type to: GENERIC HEAVY CRUDE
13:59:55 INFO opendrift.models.openoil.adios.dirjs:71: Querying ADIOS database for oil: GENERIC HEAVY CRUDE
13:59:55 INFO opendrift.models.openoil.openoil:1652: Using density 938.0 and viscosity 0.0010573364220196155 of oiltype GENERIC HEAVY CRUDE
Adjusting some configuration
o.set_config('processes:dispersion', True)
o.set_config('processes:evaporation', True)
o.set_config('processes:emulsification', True)
o.set_config('drift:vertical_mixing', True)
o.set_config('vertical_mixing:timestep', 20.) # seconds
Running model
o.run(duration=timedelta(hours=24), time_step=1800)
o.plot_oil_budget(show_density_viscosity=True, show_wind_and_current=True)
o.animation(color='viscosity')

13:59:55 INFO opendrift.models.basemodel:2591: Fallback values will be used for the following variables which have no readers:
13:59:55 INFO opendrift.models.basemodel:2594: upward_sea_water_velocity: 0.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_surface_wave_significant_height: 0.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_surface_wave_stokes_drift_x_velocity: 0.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_surface_wave_stokes_drift_y_velocity: 0.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_surface_wave_period_at_variance_spectral_density_maximum: 0.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment: 0.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_ice_area_fraction: 0.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_ice_x_velocity: 0.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_ice_y_velocity: 0.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_water_temperature: 10.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_water_salinity: 34.000000
13:59:55 INFO opendrift.models.basemodel:2594: sea_floor_depth_below_sea_level: 10000.000000
13:59:55 INFO opendrift.models.basemodel:2594: ocean_vertical_diffusivity: 0.020000
13:59:55 INFO opendrift.models.basemodel:2594: ocean_mixed_layer_thickness: 50.000000
13:59:55 INFO opendrift.models.basemodel:2753: Adding a dynamical landmask with max. priority based on assumed maximum speed of 1.3 m/s. Adding a customised landmask may be faster...
14:00:00 INFO opendrift.models.basemodel:1701: Using existing reader for land_binary_mask
14:00:00 INFO opendrift.models.basemodel:1713: All points are in ocean
14:00:00 INFO opendrift.models.openoil.openoil:646: Oil-water surface tension is 0.033960 Nm
14:00:00 INFO opendrift.models.basemodel:2882: 2015-11-16 00:00:00 - step 1 of 48 - 1000 active elements (0 deactivated)
14:00:01 INFO opendrift.models.basemodel:2882: 2015-11-16 00:30:00 - step 2 of 48 - 1000 active elements (0 deactivated)
14:00:01 INFO opendrift.models.basemodel:2882: 2015-11-16 01:00:00 - step 3 of 48 - 1000 active elements (0 deactivated)
14:00:01 INFO opendrift.models.basemodel:2882: 2015-11-16 01:30:00 - step 4 of 48 - 1000 active elements (0 deactivated)
14:00:01 INFO opendrift.models.basemodel:2882: 2015-11-16 02:00:00 - step 5 of 48 - 1000 active elements (0 deactivated)
14:00:01 INFO opendrift.models.basemodel:2882: 2015-11-16 02:30:00 - step 6 of 48 - 1000 active elements (0 deactivated)
14:00:01 INFO opendrift.models.basemodel:2882: 2015-11-16 03:00:00 - step 7 of 48 - 1000 active elements (0 deactivated)
14:00:01 INFO opendrift.models.basemodel:2882: 2015-11-16 03:30:00 - step 8 of 48 - 1000 active elements (0 deactivated)
14:00:02 INFO opendrift.models.basemodel:2882: 2015-11-16 04:00:00 - step 9 of 48 - 1000 active elements (0 deactivated)
14:00:02 INFO opendrift.models.basemodel:2882: 2015-11-16 04:30:00 - step 10 of 48 - 1000 active elements (0 deactivated)
14:00:02 INFO opendrift.models.basemodel:2882: 2015-11-16 05:00:00 - step 11 of 48 - 1000 active elements (0 deactivated)
14:00:02 INFO opendrift.models.basemodel:2882: 2015-11-16 05:30:00 - step 12 of 48 - 1000 active elements (0 deactivated)
14:00:02 INFO opendrift.models.basemodel:2882: 2015-11-16 06:00:00 - step 13 of 48 - 1000 active elements (0 deactivated)
14:00:02 INFO opendrift.models.basemodel:2882: 2015-11-16 06:30:00 - step 14 of 48 - 1000 active elements (0 deactivated)
14:00:02 INFO opendrift.models.basemodel:2882: 2015-11-16 07:00:00 - step 15 of 48 - 1000 active elements (0 deactivated)
14:00:02 INFO opendrift.models.basemodel:2882: 2015-11-16 07:30:00 - step 16 of 48 - 1000 active elements (0 deactivated)
14:00:03 INFO opendrift.models.basemodel:2882: 2015-11-16 08:00:00 - step 17 of 48 - 1000 active elements (0 deactivated)
14:00:03 INFO opendrift.models.basemodel:2882: 2015-11-16 08:30:00 - step 18 of 48 - 1000 active elements (0 deactivated)
14:00:03 INFO opendrift.models.basemodel:2882: 2015-11-16 09:00:00 - step 19 of 48 - 1000 active elements (0 deactivated)
14:00:03 INFO opendrift.models.basemodel:2882: 2015-11-16 09:30:00 - step 20 of 48 - 1000 active elements (0 deactivated)
14:00:03 INFO opendrift.models.basemodel:2882: 2015-11-16 10:00:00 - step 21 of 48 - 1000 active elements (0 deactivated)
14:00:03 INFO opendrift.models.basemodel:2882: 2015-11-16 10:30:00 - step 22 of 48 - 1000 active elements (0 deactivated)
14:00:03 WARNING opendrift.readers.basereader.structured:286: Data block from /root/project/tests/test_data/16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc not large enough to cover element positions within timestep. Buffer size (4) must be increased. See `Variables.set_buffer_size`.
/root/project/opendrift/readers/interpolation/interpolators.py:17: RuntimeWarning: overflow encountered in cast
data[mask] = np.finfo(np.float64).min
14:00:03 INFO opendrift.models.basemodel:2882: 2015-11-16 11:00:00 - step 23 of 48 - 1000 active elements (0 deactivated)
14:00:03 INFO opendrift.models.basemodel:2882: 2015-11-16 11:30:00 - step 24 of 48 - 1000 active elements (0 deactivated)
14:00:04 INFO opendrift.models.basemodel:2882: 2015-11-16 12:00:00 - step 25 of 48 - 1000 active elements (0 deactivated)
14:00:04 INFO opendrift.models.basemodel:2882: 2015-11-16 12:30:00 - step 26 of 48 - 1000 active elements (0 deactivated)
14:00:04 INFO opendrift.models.basemodel:2882: 2015-11-16 13:00:00 - step 27 of 48 - 1000 active elements (0 deactivated)
14:00:04 INFO opendrift.models.basemodel:2882: 2015-11-16 13:30:00 - step 28 of 48 - 1000 active elements (0 deactivated)
14:00:04 INFO opendrift.models.basemodel:2882: 2015-11-16 14:00:00 - step 29 of 48 - 1000 active elements (0 deactivated)
14:00:04 INFO opendrift.models.basemodel:2882: 2015-11-16 14:30:00 - step 30 of 48 - 1000 active elements (0 deactivated)
14:00:04 INFO opendrift.models.basemodel:2882: 2015-11-16 15:00:00 - step 31 of 48 - 1000 active elements (0 deactivated)
14:00:04 INFO opendrift.models.basemodel:2882: 2015-11-16 15:30:00 - step 32 of 48 - 999 active elements (1 deactivated)
14:00:05 INFO opendrift.models.basemodel:2882: 2015-11-16 16:00:00 - step 33 of 48 - 999 active elements (1 deactivated)
14:00:05 INFO opendrift.models.basemodel:2882: 2015-11-16 16:30:00 - step 34 of 48 - 996 active elements (4 deactivated)
14:00:05 INFO opendrift.models.basemodel:2882: 2015-11-16 17:00:00 - step 35 of 48 - 992 active elements (8 deactivated)
14:00:05 INFO opendrift.models.basemodel:2882: 2015-11-16 17:30:00 - step 36 of 48 - 991 active elements (9 deactivated)
14:00:05 INFO opendrift.models.basemodel:2882: 2015-11-16 18:00:00 - step 37 of 48 - 990 active elements (10 deactivated)
14:00:05 INFO opendrift.models.basemodel:2882: 2015-11-16 18:30:00 - step 38 of 48 - 990 active elements (10 deactivated)
14:00:05 INFO opendrift.models.basemodel:2882: 2015-11-16 19:00:00 - step 39 of 48 - 986 active elements (14 deactivated)
14:00:05 INFO opendrift.models.basemodel:2882: 2015-11-16 19:30:00 - step 40 of 48 - 972 active elements (28 deactivated)
14:00:06 INFO opendrift.models.basemodel:2882: 2015-11-16 20:00:00 - step 41 of 48 - 941 active elements (59 deactivated)
14:00:06 INFO opendrift.models.basemodel:2882: 2015-11-16 20:30:00 - step 42 of 48 - 912 active elements (88 deactivated)
14:00:06 INFO opendrift.models.basemodel:2882: 2015-11-16 21:00:00 - step 43 of 48 - 877 active elements (123 deactivated)
14:00:06 INFO opendrift.models.basemodel:2882: 2015-11-16 21:30:00 - step 44 of 48 - 840 active elements (160 deactivated)
14:00:06 INFO opendrift.models.basemodel:2882: 2015-11-16 22:00:00 - step 45 of 48 - 795 active elements (205 deactivated)
14:00:06 INFO opendrift.models.basemodel:2882: 2015-11-16 22:30:00 - step 46 of 48 - 746 active elements (254 deactivated)
14:00:06 INFO opendrift.models.basemodel:2882: 2015-11-16 23:00:00 - step 47 of 48 - 688 active elements (312 deactivated)
14:00:06 INFO opendrift.models.basemodel:2882: 2015-11-16 23:30:00 - step 48 of 48 - 619 active elements (381 deactivated)
14:00:28 INFO opendrift.models.basemodel:5350: Saving animation to /root/project/docs/source/gallery/animations/example_oil_budget_0.gif...
14:02:36 INFO opendrift.models.basemodel:3848: Time to make animation: 0:02:28.769999

Total running time of the script: (2 minutes 42.045 seconds)