Note
Go to the end to download the full example code
Oil vertical mixing
import os
from datetime import timedelta
from opendrift.readers import reader_netCDF_CF_generic
from opendrift.models.openoil import OpenOil
o = OpenOil(loglevel=20) # Set loglevel to 0 for debug information
ncfile = 'oilmixing.nc'
import_file = False # Set to True to import previous run
if import_file is True:
o.io_import_file(ncfile)
else:
reader_arome = reader_netCDF_CF_generic.Reader('https://thredds.met.no/thredds/dodsC/mepslatest/meps_lagged_6_h_latest_2_5km_latest.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])
# Seed oil elements at defined position and time
o.seed_elements(lon=4.9, lat=62.1, z=0, radius=1000, number=2000,
time=reader_arome.start_time)
# Adjusting some configuration
#o.set_config('vertical_mixing:diffusivitymodel', 'windspeed_Sundby1983')
# Running model
o.run(end_time=reader_arome.start_time + timedelta(hours=12),
time_step=900, time_step_output=1800, outfile=ncfile)
14:04:00 INFO opendrift.models.basemodel:539: OpenDriftSimulation initialised (version 1.10.7 / v1.10.6-119-g1da5bec)
14:04:00 INFO opendrift.readers.reader_netCDF_CF_generic:92: Opening dataset: https://thredds.met.no/thredds/dodsC/mepslatest/meps_lagged_6_h_latest_2_5km_latest.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)
14:04:01 INFO opendrift.readers.reader_netCDF_CF_generic:92: Opening dataset: https://thredds.met.no/thredds/dodsC/sea/norkyst800m/1h/aggregate_be
/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)
14:04:03 INFO opendrift.models.openoil.openoil:1645: Oil type not specified, using default: GENERIC BUNKER C
14:04:03 INFO opendrift.models.openoil.openoil:1462: setting oil_type to: GENERIC BUNKER C
14:04:03 INFO opendrift.models.openoil.adios.dirjs:71: Querying ADIOS database for oil: GENERIC BUNKER C
14:04:03 INFO opendrift.models.openoil.openoil:1652: Using density 971.1 and viscosity 0.0005020658058702914 of oiltype GENERIC BUNKER C
14:04:03 INFO opendrift.models.basemodel:2591: Fallback values will be used for the following variables which have no readers:
14:04:03 INFO opendrift.models.basemodel:2594: sea_surface_wave_significant_height: 0.000000
14:04:03 INFO opendrift.models.basemodel:2594: sea_surface_wave_stokes_drift_x_velocity: 0.000000
14:04:03 INFO opendrift.models.basemodel:2594: sea_surface_wave_stokes_drift_y_velocity: 0.000000
14:04:03 INFO opendrift.models.basemodel:2594: sea_surface_wave_period_at_variance_spectral_density_maximum: 0.000000
14:04:03 INFO opendrift.models.basemodel:2594: sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment: 0.000000
14:04:03 INFO opendrift.models.basemodel:2594: sea_ice_area_fraction: 0.000000
14:04:03 INFO opendrift.models.basemodel:2594: sea_ice_x_velocity: 0.000000
14:04:03 INFO opendrift.models.basemodel:2594: sea_ice_y_velocity: 0.000000
14:04:03 INFO opendrift.models.basemodel:2594: ocean_vertical_diffusivity: 0.020000
14:04:03 INFO opendrift.models.basemodel:2594: ocean_mixed_layer_thickness: 50.000000
14:04:03 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:04:09 INFO opendrift.models.basemodel:1701: Using existing reader for land_binary_mask
14:04:09 INFO opendrift.models.basemodel:1713: All points are in ocean
14:04:09 INFO opendrift.models.openoil.openoil:646: Oil-water surface tension is 0.035282 Nm
14:04:09 INFO opendrift.models.basemodel:2882: 2023-09-01 11:00:00 - step 1 of 48 - 2000 active elements (0 deactivated)
14:04:11 INFO opendrift.models.basemodel:2882: 2023-09-01 11:15:00 - step 2 of 48 - 2000 active elements (0 deactivated)
14:04:13 INFO opendrift.models.basemodel:2882: 2023-09-01 11:30:00 - step 3 of 48 - 2000 active elements (0 deactivated)
14:04:13 INFO opendrift.models.basemodel:2882: 2023-09-01 11:45:00 - step 4 of 48 - 2000 active elements (0 deactivated)
14:04:13 INFO opendrift.models.basemodel:2882: 2023-09-01 12:00:00 - step 5 of 48 - 2000 active elements (0 deactivated)
14:04:13 INFO opendrift.models.basemodel:2882: 2023-09-01 12:15:00 - step 6 of 48 - 2000 active elements (0 deactivated)
14:04:15 INFO opendrift.models.basemodel:2882: 2023-09-01 12:30:00 - step 7 of 48 - 2000 active elements (0 deactivated)
14:04:15 INFO opendrift.models.basemodel:2882: 2023-09-01 12:45:00 - step 8 of 48 - 2000 active elements (0 deactivated)
14:04:15 INFO opendrift.models.basemodel:2882: 2023-09-01 13:00:00 - step 9 of 48 - 2000 active elements (0 deactivated)
14:04:15 INFO opendrift.models.basemodel:2882: 2023-09-01 13:15:00 - step 10 of 48 - 2000 active elements (0 deactivated)
14:04:17 INFO opendrift.models.basemodel:2882: 2023-09-01 13:30:00 - step 11 of 48 - 2000 active elements (0 deactivated)
14:04:17 INFO opendrift.models.basemodel:2882: 2023-09-01 13:45:00 - step 12 of 48 - 2000 active elements (0 deactivated)
14:04:17 INFO opendrift.models.basemodel:2882: 2023-09-01 14:00:00 - step 13 of 48 - 2000 active elements (0 deactivated)
14:04:17 INFO opendrift.models.basemodel:2882: 2023-09-01 14:15:00 - step 14 of 48 - 2000 active elements (0 deactivated)
14:04:19 INFO opendrift.models.basemodel:2882: 2023-09-01 14:30:00 - step 15 of 48 - 2000 active elements (0 deactivated)
14:04:19 INFO opendrift.models.basemodel:2882: 2023-09-01 14:45:00 - step 16 of 48 - 2000 active elements (0 deactivated)
14:04:19 INFO opendrift.models.basemodel:2882: 2023-09-01 15:00:00 - step 17 of 48 - 2000 active elements (0 deactivated)
14:04:19 INFO opendrift.models.basemodel:2882: 2023-09-01 15:15:00 - step 18 of 48 - 2000 active elements (0 deactivated)
14:04:21 INFO opendrift.models.basemodel:2882: 2023-09-01 15:30:00 - step 19 of 48 - 2000 active elements (0 deactivated)
14:04:21 INFO opendrift.models.basemodel:2882: 2023-09-01 15:45:00 - step 20 of 48 - 2000 active elements (0 deactivated)
14:04:21 INFO opendrift.models.basemodel:2882: 2023-09-01 16:00:00 - step 21 of 48 - 2000 active elements (0 deactivated)
14:04:21 INFO opendrift.models.basemodel:2882: 2023-09-01 16:15:00 - step 22 of 48 - 2000 active elements (0 deactivated)
14:04:22 INFO opendrift.models.basemodel:2882: 2023-09-01 16:30:00 - step 23 of 48 - 2000 active elements (0 deactivated)
14:04:22 INFO opendrift.models.basemodel:2882: 2023-09-01 16:45:00 - step 24 of 48 - 2000 active elements (0 deactivated)
14:04:23 INFO opendrift.models.basemodel:2882: 2023-09-01 17:00:00 - step 25 of 48 - 2000 active elements (0 deactivated)
14:04:23 INFO opendrift.models.basemodel:2882: 2023-09-01 17:15:00 - step 26 of 48 - 2000 active elements (0 deactivated)
14:04:24 INFO opendrift.models.basemodel:2882: 2023-09-01 17:30:00 - step 27 of 48 - 2000 active elements (0 deactivated)
14:04:24 INFO opendrift.models.basemodel:2882: 2023-09-01 17:45:00 - step 28 of 48 - 2000 active elements (0 deactivated)
14:04:25 INFO opendrift.models.basemodel:2882: 2023-09-01 18:00:00 - step 29 of 48 - 2000 active elements (0 deactivated)
14:04:25 INFO opendrift.models.basemodel:2882: 2023-09-01 18:15:00 - step 30 of 48 - 2000 active elements (0 deactivated)
14:04:26 INFO opendrift.models.basemodel:2882: 2023-09-01 18:30:00 - step 31 of 48 - 2000 active elements (0 deactivated)
14:04:26 INFO opendrift.models.basemodel:2882: 2023-09-01 18:45:00 - step 32 of 48 - 2000 active elements (0 deactivated)
14:04:27 INFO opendrift.models.basemodel:2882: 2023-09-01 19:00:00 - step 33 of 48 - 2000 active elements (0 deactivated)
14:04:27 INFO opendrift.models.basemodel:2882: 2023-09-01 19:15:00 - step 34 of 48 - 2000 active elements (0 deactivated)
14:04:28 INFO opendrift.models.basemodel:2882: 2023-09-01 19:30:00 - step 35 of 48 - 2000 active elements (0 deactivated)
14:04:28 INFO opendrift.models.basemodel:2882: 2023-09-01 19:45:00 - step 36 of 48 - 2000 active elements (0 deactivated)
14:04:29 INFO opendrift.models.basemodel:2882: 2023-09-01 20:00:00 - step 37 of 48 - 2000 active elements (0 deactivated)
14:04:29 INFO opendrift.models.basemodel:2882: 2023-09-01 20:15:00 - step 38 of 48 - 2000 active elements (0 deactivated)
14:04:30 INFO opendrift.models.basemodel:2882: 2023-09-01 20:30:00 - step 39 of 48 - 2000 active elements (0 deactivated)
14:04:30 INFO opendrift.models.basemodel:2882: 2023-09-01 20:45:00 - step 40 of 48 - 2000 active elements (0 deactivated)
14:04:31 INFO opendrift.models.basemodel:2882: 2023-09-01 21:00:00 - step 41 of 48 - 2000 active elements (0 deactivated)
14:04:31 INFO opendrift.models.basemodel:2882: 2023-09-01 21:15:00 - step 42 of 48 - 2000 active elements (0 deactivated)
14:04:32 INFO opendrift.models.basemodel:2882: 2023-09-01 21:30:00 - step 43 of 48 - 2000 active elements (0 deactivated)
14:04:33 INFO opendrift.models.basemodel:2882: 2023-09-01 21:45:00 - step 44 of 48 - 2000 active elements (0 deactivated)
14:04:33 INFO opendrift.models.basemodel:2882: 2023-09-01 22:00:00 - step 45 of 48 - 2000 active elements (0 deactivated)
14:04:33 INFO opendrift.models.basemodel:2882: 2023-09-01 22:15:00 - step 46 of 48 - 2000 active elements (0 deactivated)
14:04:35 INFO opendrift.models.basemodel:2882: 2023-09-01 22:30:00 - step 47 of 48 - 2000 active elements (0 deactivated)
14:04:35 INFO opendrift.models.basemodel:2882: 2023-09-01 22:45:00 - step 48 of 48 - 2000 active elements (0 deactivated)
14:04:35 INFO opendrift.export.io_netcdf:111: Wrote 25 steps to file oilmixing.nc
/opt/conda/envs/opendrift/lib/python3.11/site-packages/numpy/ma/core.py:467: RuntimeWarning: invalid value encountered in cast
fill_value = np.array(fill_value, copy=False, dtype=ndtype)
Print and plot results
print(o)
o.plot(linecolor='z', fast=True)
o.plot_property('z')
o.plot_oil_budget()
o.animation(fast=True)
o.animate_vertical_distribution()
os.remove(ncfile) # cleaning up
===========================
--------------------
Reader performance:
--------------------
https://thredds.met.no/thredds/dodsC/sea/norkyst800m/1h/aggregate_be
0:00:20.6 total
0:00:00.0 preparing
0:00:19.6 reading
0:00:00.6 interpolation
0:00:00.0 interpolation_time
0:00:00.0 masking
0:00:00.9 rotating vectors
--------------------
https://thredds.met.no/thredds/dodsC/mepslatest/meps_lagged_6_h_latest_2_5km_latest.nc
--------------------
global_landmask
0:00:00.0 total
0:00:00.0 preparing
0:00:00.0 reading
0:00:00.0 masking
--------------------
Performance:
35.7 total time
3.2 configuration
6.4 preparing main loop
6.2 making dynamical landmask
0.0 moving elements to ocean
21.2 readers
0.0 global_landmask
0.2 postprocessing
25.6 main loop
20.8 https://thredds.met.no/thredds/dodsC/sea/norkyst800m/1h/aggregate_be
3.9 updating elements
1.7 oil weathering
0.0 updating viscosities
0.0 updating densities
1.6 evaporation
0.0 emulsification
0.0 dispersion
2.0 vertical mixing
0.3 cleaning up
--------------------
===========================
Model: OpenOil (OpenDrift version 1.10.7)
2000 active Oil particles (0 deactivated, 0 scheduled)
-------------------
Environment variables:
-----
sea_floor_depth_below_sea_level
sea_water_salinity
sea_water_temperature
upward_sea_water_velocity
x_sea_water_velocity
y_sea_water_velocity
1) https://thredds.met.no/thredds/dodsC/sea/norkyst800m/1h/aggregate_be
-----
x_wind
y_wind
1) https://thredds.met.no/thredds/dodsC/sea/norkyst800m/1h/aggregate_be
2) https://thredds.met.no/thredds/dodsC/mepslatest/meps_lagged_6_h_latest_2_5km_latest.nc
-----
land_binary_mask
1) global_landmask
-----
Readers not added for the following variables:
ocean_mixed_layer_thickness
ocean_vertical_diffusivity
sea_ice_area_fraction
sea_ice_x_velocity
sea_ice_y_velocity
sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment
sea_surface_wave_period_at_variance_spectral_density_maximum
sea_surface_wave_significant_height
sea_surface_wave_stokes_drift_x_velocity
sea_surface_wave_stokes_drift_y_velocity
Time:
Start: 2023-09-01 11:00:00 UTC
Present: 2023-09-01 23:00:00 UTC
Calculation steps: 48 * 0:15:00 - total time: 12:00:00
Output steps: 25 * 0:30:00
===========================
14:04:35 WARNING opendrift.models.basemodel:3226: Plotting fast. This will make your plots less accurate.
0.158576945415655 ALPHA
14:05:06 WARNING opendrift.models.basemodel:3226: Plotting fast. This will make your plots less accurate.
/opt/conda/envs/opendrift/lib/python3.11/site-packages/cartopy/mpl/geoaxes.py:1696: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored
result = super().scatter(*args, **kwargs)
14:05:07 INFO opendrift.models.basemodel:5350: Saving animation to /root/project/docs/source/gallery/animations/example_oil_verticalmixing_0.gif...
14:05:12 INFO opendrift.models.basemodel:3848: Time to make animation: 0:00:05.785147
14:05:12 INFO opendrift.models.basemodel:5350: Saving animation to /root/project/docs/source/gallery/animations/example_oil_verticalmixing_1.gif...
14:05:17 INFO opendrift.models.oceandrift:686: Time to make animation: 0:00:05.620461


Total running time of the script: (1 minutes 21.736 seconds)