Exemplo n.º 1
0
#!/usr/bin/env python
"""
Cone seeding (Tromso)
=============
"""

from datetime import timedelta
from opendrift.readers import reader_netCDF_CF_generic
from opendrift.models.openoil import OpenOil

o = OpenOil(loglevel=0)  # Set loglevel to 0 for debug information

#%%
# Using live data from Thredds
reader_arome = reader_netCDF_CF_generic.Reader('http://thredds.met.no/thredds/dodsC/meps25files/meps_det_extracted_2_5km_latest.nc')
reader_norkyst = reader_netCDF_CF_generic.Reader('http://thredds.met.no/thredds/dodsC/sea/norkyst800m/1h/aggregate_be')

o.add_reader([reader_norkyst, reader_arome])

#%%
# Seed elements along cone, e.g. ship track with
# increasing uncertainty in position
latstart = 68.988911
lonstart = 16.040701
latend = 69.991446
lonend = 17.760061
time = [reader_arome.start_time,
        reader_arome.start_time + timedelta(hours=30)]

o.seed_elements(lon=[lonstart, lonend], lat=[latstart, latend],
                radius=[100, 500], number=10000, time=time, cone=True)
Exemplo n.º 2
0
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
import numpy as np
from opendrift.models.openoil import OpenOil

number = 10000
timestep = timedelta(minutes=10)
timestep_output = timedelta(minutes=60)
duration = timedelta(hours=20)
mass_oil = 2000  # mass oil per particle
oiltype = '*GENERIC DIESEL'
#oiltype = '*GENERIC BUNKER C'

#%%
# First run, where surface oil thickness is updated
o1 = OpenOil(loglevel=20, weathering_model='noaa')
#%%
# Northwards wind, eastwards current
o1.fallback_values['land_binary_mask'] = 0
o1.fallback_values['x_wind'] = 0
o1.fallback_values['y_wind'] = 7
o1.fallback_values['sea_surface_wave_stokes_drift_x_velocity'] = 0
o1.fallback_values['sea_surface_wave_stokes_drift_y_velocity'] = .3
o1.fallback_values['x_sea_water_velocity'] = .1
o1.fallback_values['y_sea_water_velocity'] = 0
#%%
# Using Johansen droplet spectrum, which depends on oil film thickness
o1.set_config('wave_entrainment:droplet_size_distribution',
              'Johansen et al. (2015)')
o1.set_config('drift:wind_uncertainty', 2)
o1.set_config('drift:current_uncertainty', .1)
Exemplo n.º 3
0
#!/usr/bin/env python
"""
Oil in ice
==================================
"""

from datetime import datetime, timedelta
from opendrift.readers import reader_netCDF_CF_generic
from opendrift.models.openoil import OpenOil
import cmocean

o = OpenOil(loglevel=20)

#%%
# Using live data from Barents 2.5 km ocean model
o.add_readers_from_list(
    ['https://thredds.met.no/thredds/dodsC/barents25km_agg'])

#%%
# Imaginary oil spill in Hinlopen strait
o.seed_elements(lon=19.1909,
                lat=79.5986,
                radius=50,
                number=3000,
                time=datetime.utcnow() - timedelta(days=7))

#%%
# Adjusting some configuration
o.set_config('processes:dispersion', False)
o.set_config('processes:evaporation', False)
o.set_config('processes:emulsification', False)
#!/usr/bin/env python
"""
Seeding from GeoJSON string
===========================
"""

from datetime import datetime, timedelta
from opendrift.models.leeway import Leeway
from opendrift.models.openoil import OpenOil

#%%
# Polygon
#--------

o = OpenOil(loglevel=50)
o.seed_from_geojson("""{
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [4.0, 60.0], [4.5, 60.0], [4.7, 60.1],
            [4.2, 60.1], [4.0, 60.0]
          ]
        ]
      },
      "properties": {
        "time": "2020-11-06T12:30:00Z",
        "number": 1000,
        "oiltype": "DVALIN 2020",
        "m3_per_hour": 50
Exemplo n.º 5
0
def test_seed_metadata_output():
    import warnings
    warnings.filterwarnings("ignore", category=DeprecationWarning)
    outfile = 'openoil.nc'
    a = {
        'lon': 4.8,
        'lat': 60,
        'z': -10,
        'number': 10,
        'radius': 100,
        'time': datetime(2021, 1, 22)
    }
    o = OpenOil(loglevel=50)
    o.seed_elements(lon=a['lon'],
                    lat=a['lat'],
                    z=a['z'],
                    radius=a['radius'],
                    number=a['number'],
                    time=a['time'])
    o.set_config('environment:fallback:land_binary_mask', 0)
    o.set_config('environment:fallback:x_wind', 1)
    o.set_config('environment:fallback:y_wind', 0)
    o.set_config('environment:fallback:x_sea_water_velocity', 0)
    o.set_config('environment:fallback:y_sea_water_velocity', .3)
    o.run(duration=timedelta(hours=1), time_step=1800, outfile=outfile)
    f = xr.open_dataset(outfile)
    for var in ['lon', 'lat', 'number', 'radius', 'z', 'm3_per_hour']:
        s = 'seed_' + var
        if var not in a:
            a[var] = o.get_config('seed:' + var)
        np.testing.assert_almost_equal(float(a[var]), float(f.attrs[s]), 3)
    assert str(a['time']) == f.attrs['seed_time']
    for var in [
            'seed_m3_per_hour', 'time_coverage_start', 'time_coverage_end',
            'seed_oiltype', 'simulation_time'
    ]:
        assert var in f.attrs
    f.close()
    os.remove(outfile)
    # Same for cone-seeding
    a = {
        'lon': [4.7, 4.8],
        'lat': [60, 60.1],
        'number': 10,
        'radius': [0, 100],
        'time': [datetime(2021, 1, 22, 0),
                 datetime(2021, 1, 22, 6)]
    }
    a_config = {'seafloor': True, 'm3_per_hour': 55}
    o = OpenOil(loglevel=0)
    o.set_config('environment:fallback:land_binary_mask', 0)
    o.set_config('environment:fallback:x_wind', 1)
    o.set_config('environment:fallback:y_wind', 0)
    o.set_config('environment:fallback:x_sea_water_velocity', 0)
    o.set_config('environment:fallback:y_sea_water_velocity', .3)
    o.set_config('environment:fallback:y_sea_water_velocity', .3)
    for ac in a_config:
        o.set_config('seed:' + ac, a_config[ac])
    o.seed_cone(lon=a['lon'],
                lat=a['lat'],
                radius=a['radius'],
                number=a['number'],
                time=a['time'])
    o.seed_cone(lon=a['lon'],
                lat=a['lat'],
                radius=a['radius'],
                number=a['number'] + 4,
                time=a['time'])
    o.run(duration=timedelta(hours=1), time_step=1800, outfile=outfile)
    f = xr.open_dataset(outfile)
    import geojson
    gj = geojson.loads(f.attrs['seed_geojson'])
    print(gj)
    fe = gj['features']
    for var in ['lon', 'lat', 'number', 'radius', 'm3_per_hour']:
        s = 'seed_' + var
        if var not in a:
            a[var] = o.get_config('seed:' + var)
        np.testing.assert_almost_equal(
            np.atleast_1d(a[var]).mean(), float(f.attrs[s]), 3)
        if var not in ['lon', 'lat']:  # Check also versus GeoJSON attribute
            geojsonvar = np.atleast_1d(fe[0]['properties'][var]).mean()
            avar = np.atleast_1d(a[var]).mean()
            assert avar == geojsonvar

    assert fe[0]['properties']['z'] == 'seafloor'
    assert str(a['time'][0]) == f.attrs['seed_time']
    for var in [
            'seed_m3_per_hour', 'time_coverage_start', 'time_coverage_end',
            'seed_oiltype', 'simulation_time'
    ]:
        assert var in f.attrs
    os.remove(outfile)
Exemplo n.º 6
0
except:
    print('    unknown')
print('------------------------------------------------')
print('\n')

print('Test 1: generation of landmask instance at full resolution')
print('  54.0 seconds on reference machine.')
start_time = datetime.now()
reader_landmask = reader_global_landmask.Reader(extent=[5, 5.5, 59.8, 60.3])
time_spent = datetime.now() - start_time
print('%6.1f seconds on this machine' % time_spent.total_seconds())

print('------------------------------------------------')
print('Test 2: Reading from netCDF file')
print('  0.05 seconds on reference machine.')
o = OpenOil(loglevel=50)  # Quiet
reader_arctic = reader_netCDF_CF_generic.Reader(
    o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Arctic20_1to5Feb_2016.nc')
x = reader_arctic.x[10:12]
y = reader_arctic.y[10:12]
z = np.array([-20, -10])
variables = [
    'sea_surface_elevation', 'sea_ice_area_fraction',
    'barotropic_sea_water_x_velocity', 'y_sea_water_velocity',
    'sea_floor_depth_below_sea_level', 'sea_water_salinity',
    'x_sea_water_velocity', 'barotropic_sea_water_y_velocity',
    'sea_water_temperature', 'sea_ice_thickness'
]
reader_arctic.buffer = 1000  # read all
reader_arctic.verticalbuffer = 1000  # read all
start_time = datetime.now()