Exemplo n.º 1
0
    def test_seed_below_reader_coverage(self):
        o = OpenOil(loglevel=20)
        reader_norkyst = reader_netCDF_CF_generic.Reader(
            o.test_data_folder() +
            '14Jan2016_NorKyst_z_3d/NorKyst-800m_ZDEPTHS_his_00_3Dsubset.nc')
        o.set_config('environment:fallback:land_binary_mask', 0)
        o.set_config('environment:fallback:x_wind', 0)
        o.set_config('environment:fallback:y_wind', 0)
        o.add_reader([reader_norkyst])
        lon = 5.0
        lat = 64.0
        o.set_config('seed:droplet_diameter_min_subsea', 0.0005)
        o.set_config('seed:droplet_diameter_max_subsea', 0.005)
        o.seed_elements(lon,
                        lat,
                        z=-350,
                        time=reader_norkyst.start_time,
                        density=1000,
                        oil_type='AASGARD A 2003')
        #o.set_config('vertical_mixing:TSprofiles', True)
        o.set_config('drift:vertical_mixing', True)

        o.set_config('vertical_mixing:timestep', 1)  # s
        o.run(steps=3, time_step=300, time_step_output=300)
        z, status = o.get_property('z')
        self.assertAlmostEqual(z[-1, 0], -134.0, 1)  # After some rising
    def test_seed_above_seafloor(self):
        o = OpenOil(loglevel=30)
        reader_norkyst = reader_netCDF_CF_generic.Reader(
            o.test_data_folder() +
            '14Jan2016_NorKyst_z_3d/NorKyst-800m_ZDEPTHS_his_00_3Dsubset.nc')
        o.fallback_values['land_binary_mask'] = 0
        o.fallback_values['x_wind'] = 0
        o.fallback_values['y_wind'] = 0
        o.fallback_values['x_sea_water_velocity'] = 0
        o.fallback_values['y_sea_water_velocity'] = 0
        o.add_reader([reader_norkyst])
        lon = 4.5
        lat = 62.0
        o.set_config('seed:droplet_diameter_min_subsea', 0.0010)  # s
        o.set_config('seed:droplet_diameter_max_subsea', 0.0010)  # s
        # Seed elements 50 meters above seafloor:
        o.seed_elements(lon,
                        lat,
                        z='seafloor+50',
                        time=reader_norkyst.start_time,
                        density=1000)
        o.set_config('drift:vertical_mixing', True)

        o.set_config('vertical_mixing:timestep', 1)  # s
        o.run(steps=3, time_step=300, time_step_output=300)
        #o.plot_property('z')
        z, status = o.get_property('z')
        self.assertAlmostEqual(z[0, 0], -101.7, 1)  # Seeded at seafloor depth
        self.assertAlmostEqual(z[-1, 0], -76.9, 1)  # After some rising
Exemplo n.º 3
0
    def test_seed_below_seafloor(self):
        o = OpenOil(loglevel=20)
        reader_norkyst = reader_netCDF_CF_generic.Reader(
            o.test_data_folder() +
            '14Jan2016_NorKyst_z_3d/NorKyst-800m_ZDEPTHS_his_00_3Dsubset.nc')
        o.add_reader([reader_norkyst])
        o.set_config('environment:fallback:land_binary_mask', 0)
        o.set_config('environment:fallback:x_wind', 0)
        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', 0)
        lon = 4.5
        lat = 62.0
        o.set_config('seed:droplet_diameter_min_subsea', 0.0005)
        o.set_config('seed:droplet_diameter_max_subsea', 0.001)
        o.seed_elements(lon,
                        lat,
                        z=-5000,
                        time=reader_norkyst.start_time,
                        density=1000,
                        oil_type='GENERIC BUNKER C')
        o.set_config('drift:vertical_mixing', True)

        o.set_config('vertical_mixing:timestep', 1)  # s
        o.run(steps=3, time_step=300, time_step_output=300)
        z, status = o.get_property('z')
        self.assertAlmostEqual(z[0, 0], -147.3, 1)  # Seeded at seafloor depth
        self.assertAlmostEqual(z[-1, 0], -132.45, 1)  # After some rising
Exemplo n.º 4
0
    def test_seed_below_seafloor_deactivating(self):
        o = OpenOil(loglevel=50)
        reader_norkyst = reader_netCDF_CF_generic.Reader(
            o.test_data_folder() +
            '14Jan2016_NorKyst_z_3d/NorKyst-800m_ZDEPTHS_his_00_3Dsubset.nc')
        o.add_reader([reader_norkyst])
        o.fallback_values['land_binary_mask'] = 0
        o.fallback_values['x_wind'] = 0
        o.fallback_values['y_wind'] = 0
        o.fallback_values['x_sea_water_velocity'] = 0
        o.fallback_values['y_sea_water_velocity'] = 0
        lon = 4.5
        lat = 62.0
        o.seed_elements(lon,
                        lat,
                        z=[-5000, -100],
                        time=reader_norkyst.start_time,
                        density=1000,
                        number=2)
        o.set_config('drift:lift_to_seafloor',
                     False)  # This time we deactivate
        o.set_config('drift:vertical_mixing', True)

        o.set_config('vertical_mixing:timestep', 1)  # s
        o.set_config('input:spill:droplet_diameter_min_subsea', 0.005)
        o.set_config('input:spill:droplet_diameter_max_subsea', 0.005)
        o.run(steps=3, time_step=300, time_step_output=300)
        z, status = o.get_property('z')
        self.assertEqual(o.num_elements_total(), 2)
        self.assertEqual(o.num_elements_active(), 1)
        self.assertEqual(o.num_elements_deactivated(), 1)
        self.assertAlmostEqual(z[0, 1], -100, 1)  # Seeded at seafloor depth
        self.assertAlmostEqual(z[-1, 1], -35.7, 1)  # After some rising
Exemplo n.º 5
0
    def test_seed_below_seafloor_deactivating(self):
        o = OpenOil(loglevel=50)
        reader_norkyst = reader_netCDF_CF_generic.Reader(
            o.test_data_folder() +
            '14Jan2016_NorKyst_z_3d/NorKyst-800m_ZDEPTHS_his_00_3Dsubset.nc')
        o.add_reader([reader_norkyst])
        o.set_config('environment:fallback:land_binary_mask', 0)
        o.set_config('environment:fallback:x_wind', 0)
        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', 0)
        lon = 4.5
        lat = 62.0
        o.set_config('seed:droplet_diameter_min_subsea', 0.0005)
        o.set_config('seed:droplet_diameter_max_subsea', 0.001)
        o.seed_elements(lon,
                        lat,
                        z=[-5000, -100],
                        time=reader_norkyst.start_time,
                        density=1000,
                        number=2,
                        oil_type='AASGARD A 2003')
        o.set_config('general:seafloor_action',
                     'deactivate')  # This time we deactivate
        o.set_config('drift:vertical_mixing', True)

        o.set_config('vertical_mixing:timestep', 1)  # s
        o.run(steps=3, time_step=300, time_step_output=300)
        z, status = o.get_property('z')
        self.assertEqual(o.num_elements_total(), 2)
        self.assertEqual(o.num_elements_active(), 1)
        self.assertEqual(o.num_elements_deactivated(), 1)
        self.assertAlmostEqual(z[0, 1], -100, 1)  # Seeded at seafloor depth
        self.assertAlmostEqual(z[-1, 1], -81.4, 1)  # After some rising
Exemplo n.º 6
0
class TestModels(unittest.TestCase):
    """Tests for OpenDrift models"""
    def test_seed(self):
        """Test seeding"""
        self.o = OpenOil()
        self.fake_eddy = reader_ArtificialOceanEddy.Reader(2, 62)
        self.fake_eddy.start_time = datetime(2015, 1, 1)
        self.o.add_reader([self.fake_eddy])
        self.o.seed_elements(lon=4,
                             lat=60,
                             number=100,
                             time=self.fake_eddy.start_time)
        self.assertEqual(len(self.o.elements), 0)
        self.assertEqual(len(self.o.elements_deactivated), 0)
        self.assertEqual(len(self.o.elements_scheduled), 100)

    def test_windblow(self):
        o = WindBlow(loglevel=0)
        reader_arome = reader_netCDF_CF_generic.Reader(
            o.test_data_folder() +
            '2Feb2016_Nordic_sigma_3d/AROME_MetCoOp_00_DEF.nc_20160202_subset')
        o.add_reader([reader_arome])
        lat = 67.711251
        lon = 13.556971  # Lofoten
        o.seed_elements(lon,
                        lat,
                        radius=5000,
                        number=1000,
                        time=reader_arome.start_time)
        o.run(steps=48 * 4, time_step=900)
        self.assertAlmostEqual(o.elements.lon.max(), 17.54, 2)
Exemplo n.º 7
0
 def test_oil_mixed_to_seafloor(self):
     o = OpenOil(loglevel=30)
     norkyst = reader_netCDF_CF_generic.Reader(o.test_data_folder() + '14Jan2016_NorKyst_z_3d/NorKyst-800m_ZDEPTHS_his_00_3Dsubset.nc')
     o.add_reader(norkyst)
     o.set_config('processes:evaporation', False)
     o.set_config('environment:fallback:x_wind', 25)
     o.set_config('environment:fallback:y_wind', 0)
     o.set_config('environment:fallback:land_binary_mask', 0)
     o.set_config('environment:fallback:ocean_vertical_diffusivity', 0.9)
     o.seed_elements(lon=5.38, lat=62.77, time=norkyst.start_time,
                     number=100, radius=5000)
     o.run(end_time=norkyst.end_time)
     self.assertEqual(o.num_elements_active(), 100)
Exemplo n.º 8
0
 def test_constant_reader(self):
     o = OpenOil(loglevel=0)
     cw = reader_constant.Reader({'x_wind':5, 'y_wind': 6})
     cc = reader_constant.Reader({'x_sea_water_velocity':0, 'y_sea_water_velocity': .2})
     cs = reader_constant.Reader({'sea_water_temperature': 278})
     r = reader_netCDF_CF_generic.Reader(o.test_data_folder() +
         '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')
     o.add_reader([cw, cc, r])
     # TODO: should check why adding constant reader with
     #   sea_water_temperature gives Deprecated warning
     #o.add_reader([cw, cc, cs, r])
     o.seed_elements(lon=4, lat=60, time=r.start_time, number=5)
     o.run(steps=3)
    def test_lazy_reader_oildrift(self):
        o = OpenOil(loglevel=0)
        reader_constant_wind = \
            reader_constant.Reader({'x_wind':5, 'y_wind': 6,
                                    'sea_ice_area_fraction': 0})
        # Added ice area to prevent problems with masking
        # with older versions of netCDF library
        o.add_reader(reader_constant_wind)

        o.add_readers_from_list(reader_list, lazy=True)

        self.assertEqual(len(o._lazy_readers()), 4)
        o.seed_elements(lon=14, lat=67.85, time=datetime(2016, 2, 2, 12))
        o.run(steps=5)
        print(o)  # Debug, this fails for old libraries
        self.assertEqual(len(o._lazy_readers()), 2)
        self.assertEqual(len(o.discarded_readers), 1)
Exemplo n.º 10
0
 def test_seed_outside_coverage(self):
     """Test seeding"""
     o = OpenOil(loglevel=0)
     norkyst = reader_netCDF_CF_generic.Reader(o.test_data_folder() + '14Jan2016_NorKyst_z_3d/NorKyst-800m_ZDEPTHS_his_00_3Dsubset.nc')
     landmask = reader_global_landmask.Reader(
         extent=[4, 6, 60, 64])
     o.add_reader([landmask, norkyst])
     o.set_config('environment:fallback:x_wind', 0)
     o.set_config('environment:fallback:y_wind', 0)
     o.set_config('seed:oil_type', 'SNORRE B 2004')
     o.seed_elements(5, 63, number=5,
                     time=norkyst.start_time - 24*timedelta(hours=24))
     # Check that the oiltype is taken from config
     self.assertEqual(o.oil_name, o.get_config('seed:oil_type'))
     self.assertEqual(o.oil_name, 'SNORRE B 2004')
     with self.assertRaises(ValueError):
         o.run(steps=3, time_step=timedelta(minutes=15))
Exemplo n.º 11
0
class TestModels(unittest.TestCase):
    """Tests for OpenDrift models"""

    def test_seed(self):
        """Test seeding"""
        self.o = OpenOil()
        self.fake_eddy = reader_ArtificialOceanEddy.Reader(2, 62)
        self.fake_eddy.start_time = datetime(2015, 1, 1)
        self.o.add_reader([self.fake_eddy])
        self.o.seed_elements(lon=4, lat=60, number=100,
                             time=self.fake_eddy.start_time)
        self.assertEqual(len(self.o.elements), 0)
        self.assertEqual(len(self.o.elements_deactivated), 0)
        self.assertEqual(len(self.o.elements_scheduled), 100)

    def test_windblow(self):
        o = WindBlow(loglevel=0)
        reader_arome = reader_netCDF_CF_generic.Reader(o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/AROME_MetCoOp_00_DEF.nc_20160202_subset')
        o.add_reader([reader_arome])
        lat = 67.711251; lon = 13.556971  # Lofoten
        o.seed_elements(lon, lat, radius=5000, number=1000,
                        time=reader_arome.start_time)
        o.run(steps=48*4, time_step=900)
        self.assertAlmostEqual(o.elements.lon.max(), 17.54, 2)
Exemplo n.º 12
0
#reader_hycom = reader_netCDF_CF_generic.Reader('http://tds.hycom.org/thredds/dodsC/GLBu0.08/expt_19.1/2010/3hrly')
#print(reader_hycom0)
reader_globcurrent = reader_netCDF_CF_generic.Reader('http://tds0.ifremer.fr/thredds/dodsC/CLS-L4-CUREUL_HS-ALT_SUM-V02.0_FULL_TIME_SERIE')  # Total

reader_oceanwind = reader_netCDF_CF_generic.Reader('http://tds0.ifremer.fr/thredds/dodsC/CERSAT-GLO-CLIM_WIND_L4-OBS_FULL_TIME_SERIE')
#print(reader_oceanwind)

# XXX: not-relevant
# For longer simulations, it is better to pre-generate a landmask:
# Landmask
reader_landmask = reader_global_landmask.Reader(
                    llcrnrlon=-94, llcrnrlat=20,
                    urcrnrlon=-80, urcrnrlat=32)

# Add readers
o.add_reader([reader_landmask, reader_globcurrent, reader_oceanwind])

# Seed some particles
lon = -88.387161; lat = 28.736669  # Macondo location
starttime = datetime(2010, 4, 21, 6, 0, 0)  # 4 hours after explosion
time = [starttime, starttime + timedelta(hours=24*40)]
o.seed_elements(lon, lat, radius=0, number=5000, time=time)

# Run model
print(o)
o.run(duration=timedelta(days=40),
      time_step=timedelta(hours=3),
      time_step_output=timedelta(days=1))

# Print and plot results
print(o)
Exemplo n.º 13
0
    '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc')

# Norkyst
reader_norkyst = reader_netCDF_CF_generic.Reader(
    o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')

# Landmask (Basemap)
reader_basemap = reader_basemap_landmask.Reader(llcrnrlon=3.0,
                                                llcrnrlat=60.4,
                                                urcrnrlon=6,
                                                urcrnrlat=61.8,
                                                resolution='h',
                                                projection='merc')

o.add_reader([reader_basemap, reader_norkyst, reader_arome])

############################################################
# Seed oil particles within contour detected from satellite
############################################################
o.seed_from_gml(
    o.test_data_folder() +
    'radarsat_oil_satellite_observation/RS2_20151116_002619_0127_SCNB_HH_SGF_433012_9730_12182143_Oil.gml',
    num_elements=2000)
############################################################
# Additional continous point release, lasting 24 hours
############################################################
o.seed_elements(3.8,
                60.9,
                radius=0,
                number=1000,
Exemplo n.º 14
0
class TestModels(unittest.TestCase):
    """Tests for OpenDrift models"""

    def test_seed(self):
        """Test seeding"""
        self.o = OpenOil()
        self.fake_eddy = reader_ArtificialOceanEddy.Reader(2, 62)
        self.fake_eddy.start_time = datetime(2015, 1, 1)
        self.o.add_reader([self.fake_eddy])
        self.o.seed_elements(lon=4, lat=60, number=100,
                             time=self.fake_eddy.start_time)
        self.assertEqual(len(self.o.elements), 0)
        self.assertEqual(len(self.o.elements_deactivated), 0)
        self.assertEqual(len(self.o.elements_scheduled), 100)

    def test_windblow(self):
        o = WindBlow(loglevel=30)
        reader_arome = reader_netCDF_CF_generic.Reader(o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/AROME_MetCoOp_00_DEF.nc_20160202_subset')
        o.add_reader([reader_arome])
        lat = 67.711251; lon = 13.556971  # Lofoten
        o.seed_elements(lon, lat, radius=5000, number=1000,
                        time=reader_arome.start_time)
        o.run(steps=24, time_step=3600)
        self.assertAlmostEqual(o.elements.lon.max(), 16.167, 2)

    def test_shipdrift(self):
        """Sintef case study"""
        s = ShipDrift(loglevel=50)
        c = reader_constant.Reader({
            'sea_surface_wave_significant_height': 5,
            'sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment': 11,
            'x_wind': 14.14213562,
            'y_wind': -14.14213562,
            'x_sea_water_velocity': 0.05656854249,
            'y_sea_water_velocity': -0.05656854249})
        s.fallback_values['land_binary_mask'] = 0
        s.add_reader(c)
        s.seed_elements(lon=2, lat=60, time=datetime.now(), number=1,
                        length=80, beam=14, height=25, draft=5)
        s.run(time_step=600, duration=timedelta(hours=4))
        self.assertAlmostEqual(s.elements.lon, 2.25267706)
        self.assertAlmostEqual(s.elements.lat, 59.87694775)

    def test_shipdrift_backwards(self):
        """Case above, reversed"""
        s = ShipDrift(loglevel=50)
        c = reader_constant.Reader({
            'sea_surface_wave_significant_height': 5,
            'sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment': 11,
            'x_wind': 14.14213562,
            'y_wind': -14.14213562,
            'x_sea_water_velocity': 0.05656854249,
            'y_sea_water_velocity': -0.05656854249})
        s.fallback_values['land_binary_mask'] = 0
        s.add_reader(c)
        s.seed_elements(lon=2.25267706, lat=59.87694775,
                        time=datetime.now(), number=1,
                        length=80, beam=14, height=25, draft=5)
        s.run(time_step=-600, duration=timedelta(hours=4))
        self.assertAlmostEqual(s.elements.lon, 2.0, 3)
        self.assertAlmostEqual(s.elements.lat, 60, 3)
Exemplo n.º 15
0
class TestModels(unittest.TestCase):
    """Tests for OpenDrift models"""

    def test_seed(self):
        """Test seeding"""
        self.o = OpenOil()
        self.fake_eddy = reader_ArtificialOceanEddy.Reader(2, 62)
        self.fake_eddy.start_time = datetime(2015, 1, 1)
        self.o.add_reader([self.fake_eddy])
        self.o.seed_elements(lon=4, lat=60, number=100,
                             time=self.fake_eddy.start_time)
        self.assertEqual(len(self.o.elements), 0)
        self.assertEqual(len(self.o.elements_deactivated), 0)
        self.assertEqual(len(self.o.elements_scheduled), 100)

    def test_windblow(self):
        o = WindBlow(loglevel=30)
        reader_arome = reader_netCDF_CF_generic.Reader(o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/AROME_MetCoOp_00_DEF.nc_20160202_subset')
        o.add_reader([reader_arome])
        lat = 67.711251; lon = 13.556971  # Lofoten
        o.seed_elements(lon, lat, radius=5000, number=1000,
                        time=reader_arome.start_time)
        o.run(steps=24, time_step=3600)
        self.assertAlmostEqual(o.elements.lon.max(), 16.167, 2)

    def test_shipdrift(self):
        """Sintef case study"""
        s = ShipDrift(loglevel=50)
        c = reader_constant.Reader({
            'sea_surface_wave_significant_height': 5,
            'sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment': 11,
            'x_wind': 14.14213562,
            'y_wind': -14.14213562,
            'x_sea_water_velocity': 0.05656854249,
            'y_sea_water_velocity': -0.05656854249})
        s.fallback_values['land_binary_mask'] = 0
        s.add_reader(c)
        s.seed_elements(lon=2, lat=60, time=datetime.now(), number=1,
                        length=80, beam=14, height=25, draft=5)
        s.run(time_step=600, duration=timedelta(hours=4))
        self.assertIsNone(np.testing.assert_array_almost_equal(
            s.elements.lon, 2.25267706))
        self.assertIsNone(np.testing.assert_array_almost_equal(
            s.elements.lat, 59.87694775))

    def test_shipdrift_backwards(self):
        """Case above, reversed"""
        s = ShipDrift(loglevel=50)
        c = reader_constant.Reader({
            'sea_surface_wave_significant_height': 5,
            'sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment': 11,
            'x_wind': 14.14213562,
            'y_wind': -14.14213562,
            'x_sea_water_velocity': 0.05656854249,
            'y_sea_water_velocity': -0.05656854249})
        s.fallback_values['land_binary_mask'] = 0
        s.add_reader(c)
        s.seed_elements(lon=2.25267706, lat=59.87694775,
                        time=datetime.now(), number=1,
                        length=80, beam=14, height=25, draft=5)
        s.run(time_step=-600, duration=timedelta(hours=4))
        self.assertIsNone(np.testing.assert_array_almost_equal(
                s.elements.lon, 2.0, 3))
        self.assertIsNone(np.testing.assert_array_almost_equal(
                s.elements.lat, 60, 3))

    def test_wind_drift_shear(self):
        """Testing PlastDrift model, with wind-induced current shear"""
        o = PlastDrift(loglevel=30)
        o.fallback_values['x_wind'] = 10
        o.fallback_values['y_wind'] = 0
        o.fallback_values['land_binary_mask'] = 0
        o.seed_elements(lat=60, lon=5, time=datetime.now(),
                        number=3,
                        z = np.array([0, -0.05, -.1]))
        o.run(duration=timedelta(hours=10))
        self.assertIsNone(np.testing.assert_array_almost_equal(
                            o.elements.lon,
                          [5.013484,5.03395595,5.01149002]))
        self.assertAlmostEqual(o.elements.lat[0], o.elements.lat[2])
Exemplo n.º 16
0
reader_oceanwind = reader_netCDF_CF_generic.Reader(
    'http://tds0.ifremer.fr/thredds/dodsC/CERSAT-GLO-CLIM_WIND_L4-OBS_FULL_TIME_SERIE'
)
#print(reader_oceanwind)

# For longer simulations, it is better to pre-generate a basemap:
# Landmask (Basemap)
reader_basemap = reader_basemap_landmask.Reader(llcrnrlon=-94,
                                                llcrnrlat=20,
                                                urcrnrlon=-80,
                                                urcrnrlat=32,
                                                resolution='i')

# Add readers
#o.add_reader([reader_basemap, reader_hycom, reader_oceanwind])
o.add_reader([reader_basemap, reader_globcurrent, reader_oceanwind])

# Seed some particles
lon = -88.387161
lat = 28.736669  # Macondo location
starttime = datetime(2010, 4, 21, 6, 0, 0)  # 4 hours after explosion
time = [starttime, starttime + timedelta(hours=24 * 40)]
o.seed_elements(lon, lat, radius=0, number=5000, time=time)

# Run model
print(o)
o.run(duration=timedelta(days=40),
      time_step=timedelta(hours=3),
      time_step_output=timedelta(days=1))

# Print and plot results
Exemplo n.º 17
0
from datetime import datetime, timedelta

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

o = OpenOil(loglevel=0)
o.max_speed = 1

# Nordc4
reader_arctic = reader_netCDF_CF_generic.Reader(
    o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Arctic20_1to5Feb_2016.nc')
reader_arctic.interpolation = 'linearND'

#o.add_reader([reader_basemap, reader_arctic])
#o.add_reader([reader_arctic, reader_basemap])
o.add_reader([reader_arctic])

# Seeding some particles
lon = 26.4
lat = 77.3
# Spitzbergen

#time = datetime(2015, 9, 22, 6, 0, 0)
#time = [reader_nordic4.start_time,
#        reader_nordic4.start_time + timedelta(hours=30)]
time = reader_arctic.start_time

# Seed oil elements at defined position and time
o.seed_elements(lon, lat, radius=7000, number=3000, time=time)
o.fallback_values['y_wind'] = 4  # Adding some northwards wind
Exemplo n.º 18
0

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

# Gulf of Mexico 1/12 degree
reader_nemo = reader_NEMO_native.Reader(o.test_data_folder() +
                                        '01Jan2006_GulfofMexico_z_3d/NATL3-JREF2.3_y2006m01_gridTuv.nc')

# Landmask (Basemap)
#reader_basemap = reader_basemap_landmask.Reader(
#                     llcrnrlon=-98.19, llcrnrlat=17.51,
#                     urcrnrlon=-78.86, urcrnrlat=30.50, resolution='i')

# Add readers
#o.add_reader([reader_basemap, reader_nemo])
o.add_reader([reader_nemo])

# Particles perdido area 
lon = -95.64; lat = 24.67  

simulation_days=30
starttime = datetime(2006, 1, 1)  
time = [starttime, starttime + timedelta(hours=24*simulation_days)]
o.seed_elements(lon, lat, radius=10, number=400, time=time, z=-1.50) 

# Run model
o.run(duration=timedelta(days=simulation_days),
      time_step=timedelta(hours=6),
      time_step_output=timedelta(hours=12))

# Plot results
Exemplo n.º 19
0
from datetime import datetime

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

# Arome
reader_arome = reader_netCDF_CF_generic.Reader(o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc')

# Norkyst
reader_norkyst = reader_netCDF_CF_generic.Reader(o.test_data_folder() + 
    '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')

o.add_reader([reader_norkyst, reader_arome])
o.set_config('processes:evaporation', False)

############################################################
# Seed oil particles within contour detected from satellite
############################################################
o.seed_from_gml(o.test_data_folder() + 'radarsat_oil_satellite_observation/RS2_20151116_002619_0127_SCNB_HH_SGF_433012_9730_12182143_Oil.gml', num_elements=2000)
############################################################
# Additional continous point release, lasting 24 hours
############################################################
o.seed_elements(3.8, 60.9, radius=0, number=1000,
                time=[datetime(2015,11,16,8), datetime(2015,11,17,8)]) 
############################################################
# Additional cone release (e.g. from moving ship)
############################################################
o.seed_elements([3.6, 4.4], [61.5, 61.2], radius=[1000, 10000],
Exemplo n.º 20
0
env, prof = b.interpolate(x,
                          y,
                          z,
                          variables,
                          profiles=['sea_water_temperature'],
                          profiles_depth=[-30, 0])
time_spent = datetime.now() - start_time
print('%6.1f seconds on this machine' % time_spent.total_seconds())

print('--------------------------------------------------------')
print('Test 4: Vertical mixing with 50 elements and 7200 cycles (CPU-heavy)')
print('  10.0 seconds on reference machine.')
reader_arctic.buffer = 10
reader_arctic.verticalbuffer = 1
o = OpenOil(loglevel=50)  # Quiet
o.add_reader(reader_arctic)
o.set_config('environment:fallback:x_wind', 10)
o.set_config('environment:fallback:y_wind', 0)
o.set_config('vertical_mixing:timestep', 1)
o.seed_elements(lon=15,
                lat=72,
                number=50,
                radius=10000,
                time=reader_arctic.start_time)
start_time = datetime.now()
o.run(steps=2)
time_spent = datetime.now() - start_time
print('%6.1f seconds on this machine' % time_spent.total_seconds())

print('--------------------------------------------------------')
print(
Exemplo n.º 21
0
from datetime import datetime, timedelta

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

o = OpenOil(loglevel=0)
o.max_speed = 1

# Nordc4
reader_arctic = reader_netCDF_CF_generic.Reader(o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Arctic20_1to5Feb_2016.nc')
reader_arctic.interpolation = 'linearND'

#o.add_reader([reader_basemap, reader_arctic])
#o.add_reader([reader_arctic, reader_basemap])
o.add_reader([reader_arctic])

# Seeding some particles
lon = 26.4; lat = 77.3;  # Spitzbergen

#time = datetime(2015, 9, 22, 6, 0, 0)
#time = [reader_nordic4.start_time,
#        reader_nordic4.start_time + timedelta(hours=30)]
time = reader_arctic.start_time

# Seed oil elements at defined position and time
o.seed_elements(lon, lat, radius=7000, number=3000, time=time)
o.fallback_values['y_wind'] = 4  # Adding some northwards wind

print o
Exemplo n.º 22
0
    '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc')
#reader_arome = reader_netCDF_CF_generic.Reader('http://thredds.met.no/thredds/dodsC/meps25files/meps_det_extracted_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('http://thredds.met.no/thredds/dodsC/sea/norkyst800m/1h/aggregate_be')

# Landmask
reader_landmask = reader_global_landmask.Reader(llcrnrlon=3,
                                                llcrnrlat=59.5,
                                                urcrnrlon=7,
                                                urcrnrlat=62)

o.add_reader([reader_landmask, reader_norkyst, reader_arome])

# Seeding some particles
lon = 4.2
lat = 60.0
# Outside Bergen
time = [reader_arome.start_time, reader_arome.start_time + timedelta(hours=30)]

# Seed oil elements at defined position and time
o.seed_elements(lon, lat, radius=50, number=5000, time=time)

# Adjusting some configuration
o.set_config('processes:dispersion', False)
o.set_config('processes:evaporation', False)
o.set_config('processes:emulsification', False)
o.set_config('drift:current_uncertainty', .1)
# Using constand wind and current
#o.set_config('environment:fallback:x_wind', 7)
#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)

# Arome atmospheric model
reader_arome = reader_netCDF_CF_generic.Reader(
    o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc')
# Norkyst ocean model
reader_norkyst = reader_netCDF_CF_generic.Reader(
    o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')

o.add_reader([reader_arome, reader_norkyst])

#%%
# Seeding some oil particles
oil_type = 'MARTIN LINGE CRUDE 2016'
o.seed_elements(lon=4.88,
                lat=60.1,
                z=0,
                radius=3000,
                number=500,
                time=reader_norkyst.start_time,
                oil_type=oil_type)

#%%
# Adjusting some configuration
o.set_config('processes:dispersion', False)
Exemplo n.º 24
0
# Arome
#reader_arome = reader_netCDF_CF_generic.Reader('http://thredds.met.no/thredds/dodsC/arome25/arome_metcoop_default2_5km_latest.nc')
reader_arome = reader_netCDF_CF_generic.Reader(o.test_data_folder() + '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc')

# Norkyst
#reader_norkyst = reader_netCDF_CF_generic.Reader('http://thredds.met.no/thredds/dodsC/sea/norkyst800m/1h/aggregate_be')
reader_norkyst = reader_netCDF_CF_generic.Reader(o.test_data_folder() + '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')

# Landmask (Basemap)
reader_basemap = reader_basemap_landmask.Reader(
                    llcrnrlon=4, llcrnrlat=59.8,
                    urcrnrlon=6, urcrnrlat=61,
                    resolution='h', projection='merc')

o.add_reader([reader_basemap, reader_norkyst, reader_arome])

# Seeding some particles
lon = 4.6; lat = 60.0; # Outside Bergen
#lon = 6.73; lat = 62.78; # Outside Trondheim

time = None
#time = datetime(2015, 9, 22, 6, 0, 0)
time = [reader_arome.start_time,
        reader_arome.start_time + timedelta(hours=30)]
#time = reader_arome.start_time

# Seed oil elements at defined position and time
o.seed_elements(lon, lat, radius=50, number=3000, time=time,
                wind_drift_factor=.02)
Exemplo n.º 25
0
#print reader_hycom0
#reader_globcurrent = reader_netCDF_CF_generic.Reader('http://tds0.ifremer.fr/thredds/dodsC/CLS-L4-CUREUL_HS-ALT_SUM-V01.0_FULL_TIME_SERIE')  # Total

reader_oceanwind = reader_netCDF_CF_generic.Reader(
    'http://www.ncdc.noaa.gov/thredds/dodsC/oceanwinds6hr')
#print reader_oceanwind

# Landmask (Basemap)
reader_basemap = reader_basemap_landmask.Reader(llcrnrlon=-94,
                                                llcrnrlat=20,
                                                urcrnrlon=-80,
                                                urcrnrlat=32,
                                                resolution='i')

# Add readers
o.add_reader([reader_basemap, reader_hycom, reader_oceanwind])
#o.add_reader([reader_basemap, reader_globcurrent, reader_oceanwind])

# Seed some particles
lon = -88.387161
lat = 28.736669  # Macondo location
starttime = datetime(2010, 4, 21, 6, 0, 0)  # 4 hours after explosion
time = [starttime, starttime + timedelta(hours=24 * 40)]
o.seed_elements(lon, lat, radius=0, number=5000, time=time)

# Run model
print o
o.run(duration=timedelta(days=40),
      time_step=timedelta(hours=3),
      time_step_output=timedelta(days=1))
Exemplo n.º 26
0
o = OpenOil(loglevel=0)  # Set loglevel to 0 for debug information

reader_hycom = reader_netCDF_CF_generic.Reader('http://tds.hycom.org/thredds/dodsC/GLBu0.08/expt_19.1/2010/3hrly')
#print reader_hycom0
#reader_globcurrent = reader_netCDF_CF_generic.Reader('http://tds0.ifremer.fr/thredds/dodsC/CLS-L4-CUREUL_HS-ALT_SUM-V01.0_FULL_TIME_SERIE')  # Total

reader_oceanwind = reader_netCDF_CF_generic.Reader('http://www.ncdc.noaa.gov/thredds/dodsC/oceanwinds6hr')
#print reader_oceanwind

# Landmask (Basemap)
reader_basemap = reader_basemap_landmask.Reader(
                    llcrnrlon=-94, llcrnrlat=20,
                    urcrnrlon=-80, urcrnrlat=32, resolution='i')

# Add readers
o.add_reader([reader_basemap, reader_hycom, reader_oceanwind])
#o.add_reader([reader_basemap, reader_globcurrent, reader_oceanwind])

# Seed some particles
lon = -88.387161; lat = 28.736669  # Macondo location
starttime = datetime(2010, 4, 21, 6, 0, 0)  # 4 hours after explosion
time = [starttime, starttime + timedelta(hours=24*40)]
o.seed_elements(lon, lat, radius=0, number=5000, time=time)

# Run model
print o
o.run(duration=timedelta(days=40),
      time_step=timedelta(hours=3),
      time_step_output=timedelta(days=1))

# Print and plot results
Exemplo n.º 27
0
class TestModels(unittest.TestCase):
    """Tests for OpenDrift models"""
    def test_seed(self):
        """Test seeding"""
        self.o = OpenOil()
        self.fake_eddy = reader_ArtificialOceanEddy.Reader(2, 62)
        self.fake_eddy.start_time = datetime(2015, 1, 1)
        self.o.add_reader([self.fake_eddy])
        self.o.seed_elements(lon=4,
                             lat=60,
                             number=100,
                             time=self.fake_eddy.start_time)
        self.assertEqual(len(self.o.elements), 0)
        self.assertEqual(len(self.o.elements_deactivated), 0)
        self.assertEqual(len(self.o.elements_scheduled), 100)

    def test_windblow(self):
        o = WindBlow(loglevel=0)
        reader_arome = reader_netCDF_CF_generic.Reader(
            o.test_data_folder() +
            '2Feb2016_Nordic_sigma_3d/AROME_MetCoOp_00_DEF.nc_20160202_subset')
        o.add_reader([reader_arome])
        lat = 67.711251
        lon = 13.556971  # Lofoten
        o.seed_elements(lon,
                        lat,
                        radius=5000,
                        number=1000,
                        time=reader_arome.start_time)
        o.run(steps=24, time_step=3600)
        self.assertAlmostEqual(o.elements.lon.max(), 16.167, 2)

    def test_shipdrift(self):
        """Sintef case study"""
        s = ShipDrift(loglevel=50)
        s.set_config('drift:current_uncertainty', 0)
        s.set_config('drift:wind_uncertainty', 0)
        c = reader_constant.Reader({
            'sea_surface_wave_significant_height':
            5,
            'sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment':
            11,
            'x_wind':
            14.14213562,
            'y_wind':
            -14.14213562,
            'x_sea_water_velocity':
            0.05656854249,
            'y_sea_water_velocity':
            -0.05656854249
        })
        s.set_config('environment:fallback:land_binary_mask', 0)
        s.add_reader(c)
        s.list_configspec('seed')
        s.set_config('seed:orientation', 'left')
        s.seed_elements(lon=2,
                        lat=60,
                        time=datetime.now(),
                        number=3,
                        length=80,
                        beam=14,
                        height=25,
                        draft=5)
        s.run(time_step=600, duration=timedelta(hours=4))
        self.assertIsNone(
            np.testing.assert_array_almost_equal(s.elements.lon, 2.252, 3))
        self.assertIsNone(
            np.testing.assert_array_almost_equal(s.elements.lat, 59.876, 3))

    def test_shipdrift_defaults(self):
        s = ShipDrift(loglevel=0)
        #s.list_configspec()
        s.set_config('environment:fallback:land_binary_mask', 0)
        c = reader_constant.Reader({
            'sea_surface_wave_significant_height':
            5,
            'sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment':
            11,
            'x_wind':
            14.14213562,
            'y_wind':
            -14.14213562,
            'x_sea_water_velocity':
            0.05656854249,
            'y_sea_water_velocity':
            -0.05656854249
        })
        s.add_reader(c)
        s.set_config('seed:height', 14)
        s.seed_elements(lon=2, lat=60, time=datetime.now(), number=1)
        s.run(duration=timedelta(hours=4))
        #self.assertAlmostEqual(s.elements.lon.max(), 2.1273, 3)  # Without setting config
        self.assertAlmostEqual(s.elements.lon.max(), 2.1990, 3)

    def test_shipdrift_backwards(self):
        """Case above, reversed"""
        s = ShipDrift(loglevel=50)
        c = reader_constant.Reader({
            'sea_surface_wave_significant_height':
            5,
            'sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment':
            11,
            'x_wind':
            14.14213562,
            'y_wind':
            -14.14213562,
            'x_sea_water_velocity':
            0.05656854249,
            'y_sea_water_velocity':
            -0.05656854249
        })
        s.set_config('environment:fallback:land_binary_mask', 0)
        s.add_reader(c)
        s.seed_elements(lon=2.25267706,
                        lat=59.87694775,
                        time=datetime.now(),
                        number=1,
                        length=80,
                        beam=14,
                        height=25,
                        draft=5)
        s.run(time_step=-600, duration=timedelta(hours=4))
        self.assertIsNone(
            np.testing.assert_array_almost_equal(s.elements.lon, 2.0, 3))
        self.assertIsNone(
            np.testing.assert_array_almost_equal(s.elements.lat, 60, 3))

    def test_wind_drift_shear(self):
        """Testing PlastDrift model, with wind-induced current shear"""
        o = PlastDrift(loglevel=30)
        o.set_config('environment:fallback:x_wind', 10)
        o.set_config('environment:fallback:y_wind', 0)
        o.set_config('environment:fallback:land_binary_mask', 0)
        o.seed_elements(lat=60,
                        lon=5,
                        time=datetime.now(),
                        number=3,
                        z=np.array([0, -0.05, -.1]))
        o.run(duration=timedelta(hours=10))
        self.assertIsNone(
            np.testing.assert_array_almost_equal(
                o.elements.lon, [5.011935, 5.01738, 5.011235]))
        #[5.013484,5.03395595,5.01149002]))  # With old seed_elements
        self.assertAlmostEqual(o.elements.lat[0], o.elements.lat[2], 3)

    def test_openberg(self):
        """Check if weighting array is set correctly
        and if model returns expected positions"""
        o = OpenBerg()
        o.set_config('drift:current_uncertainty', 0)
        o.set_config('drift:wind_uncertainty', 0)

        reader_current = reader_netCDF_CF_generic.Reader(
            o.test_data_folder() +
            '14Jan2016_NorKyst_z_3d/NorKyst-800m_ZDEPTHS_his_00_3Dsubset.nc')

        reader_landmask = reader_global_landmask.Reader()

        o.add_reader([reader_current, reader_landmask])
        o.seed_elements(4., 62., time=reader_current.start_time)
        o.run(steps=1)

        arr = [
            0.16072658, 0.16466097, 0.17384121, 0.17325179, 0.1715925,
            0.15592695
        ]

        for indx in range(len(arr)):
            self.assertAlmostEqual(o.uw_weighting[indx], arr[indx], 8)

        self.assertAlmostEqual(o.history['lon'].data[0][1], 3.9921231, 3)
        self.assertAlmostEqual(o.history['lat'].data[0][1], 62.0108299, 3)

    def test_oil_in_ice(self):
        """ Testing ice-in-oil transport with
        different values of sea ice concentration as defined by Nordam et al. 2019"""

        c = [0.2, 0.5, 0.8]
        lon = 24
        lat = 81

        # Distances calculated with fallback_values and Nordam's equation
        distances = {'0.2': 21.2914, '0.5': 15.1405, '0.8': 7.2}

        geod = pyproj.Geod(ellps='WGS84')

        for i in c:
            o = OpenOil(loglevel=50)
            o.set_config('environment:fallback:x_wind', 0)  # zonal wind
            o.set_config('environment:fallback:y_wind', 4)  # meridional wind

            o.set_config('environment:fallback:x_sea_water_velocity',
                         0)  # eastward current
            o.set_config('environment:fallback:y_sea_water_velocity',
                         .4)  # meridional current

            o.set_config('environment:fallback:sea_ice_x_velocity',
                         0)  # zonal ice velocity
            o.set_config('environment:fallback:sea_ice_y_velocity',
                         .2)  # meridional ice velocity

            o.set_config(
                'environment:fallback:sea_surface_wave_stokes_drift_y_velocity',
                0.1)  # meridional Stokes drif

            o.set_config('processes:dispersion', False)
            o.set_config('processes:evaporation', False)
            o.set_config('processes:emulsification', False)
            o.set_config('drift:stokes_drift', True)
            o.set_config('processes:update_oilfilm_thickness', False)
            o.set_config('drift:current_uncertainty', 0)
            o.set_config('drift:wind_uncertainty', 0)

            o.set_config('environment:fallback:sea_ice_area_fraction', i)

            o.seed_elements(lon,
                            lat,
                            radius=1,
                            number=10,
                            time=datetime.now(),
                            wind_drift_factor=0.03)

            o.run(duration=timedelta(hours=10))

            latf = o.history['lat'][0][-1]
            lonf = o.history['lon'][0][-1]

            azimuth1, azimuth2, dist = geod.inv(lon, lat, lonf, latf)

            self.assertAlmostEqual(distances[str(i)], dist / 1000, 2)

    def test_larvalfish(self):
        o = LarvalFish()
Exemplo n.º 28
0
class TestModels(unittest.TestCase):
    """Tests for OpenDrift models"""
    def test_seed(self):
        """Test seeding"""
        self.o = OpenOil()
        self.fake_eddy = reader_ArtificialOceanEddy.Reader(2, 62)
        self.fake_eddy.start_time = datetime(2015, 1, 1)
        self.o.add_reader([self.fake_eddy])
        self.o.seed_elements(lon=4,
                             lat=60,
                             number=100,
                             time=self.fake_eddy.start_time)
        self.assertEqual(len(self.o.elements), 0)
        self.assertEqual(len(self.o.elements_deactivated), 0)
        self.assertEqual(len(self.o.elements_scheduled), 100)

    def test_windblow(self):
        o = WindBlow(loglevel=0)
        reader_arome = reader_netCDF_CF_generic.Reader(
            o.test_data_folder() +
            '2Feb2016_Nordic_sigma_3d/AROME_MetCoOp_00_DEF.nc_20160202_subset')
        o.add_reader([reader_arome])
        lat = 67.711251
        lon = 13.556971  # Lofoten
        o.seed_elements(lon,
                        lat,
                        radius=5000,
                        number=1000,
                        time=reader_arome.start_time)
        o.run(steps=24, time_step=3600)
        self.assertAlmostEqual(o.elements.lon.max(), 16.167, 2)

    def test_shipdrift(self):
        """Sintef case study"""
        s = ShipDrift(loglevel=50)
        s.set_config('drift:current_uncertainty', 0)
        s.set_config('drift:wind_uncertainty', 0)
        c = reader_constant.Reader({
            'sea_surface_wave_significant_height':
            5,
            'sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment':
            11,
            'x_wind':
            14.14213562,
            'y_wind':
            -14.14213562,
            'x_sea_water_velocity':
            0.05656854249,
            'y_sea_water_velocity':
            -0.05656854249
        })
        s.fallback_values['land_binary_mask'] = 0
        s.add_reader(c)
        s.seed_elements(lon=2,
                        lat=60,
                        time=datetime.now(),
                        number=1,
                        length=80,
                        beam=14,
                        height=25,
                        draft=5)
        s.run(time_step=600, duration=timedelta(hours=4))
        self.assertIsNone(
            np.testing.assert_array_almost_equal(s.elements.lon, 2.25267706))
        self.assertIsNone(
            np.testing.assert_array_almost_equal(s.elements.lat, 59.87694775))

    def test_shipdrift_backwards(self):
        """Case above, reversed"""
        s = ShipDrift(loglevel=50)
        c = reader_constant.Reader({
            'sea_surface_wave_significant_height':
            5,
            'sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment':
            11,
            'x_wind':
            14.14213562,
            'y_wind':
            -14.14213562,
            'x_sea_water_velocity':
            0.05656854249,
            'y_sea_water_velocity':
            -0.05656854249
        })
        s.fallback_values['land_binary_mask'] = 0
        s.add_reader(c)
        s.seed_elements(lon=2.25267706,
                        lat=59.87694775,
                        time=datetime.now(),
                        number=1,
                        length=80,
                        beam=14,
                        height=25,
                        draft=5)
        s.run(time_step=-600, duration=timedelta(hours=4))
        self.assertIsNone(
            np.testing.assert_array_almost_equal(s.elements.lon, 2.0, 3))
        self.assertIsNone(
            np.testing.assert_array_almost_equal(s.elements.lat, 60, 3))

    def test_wind_drift_shear(self):
        """Testing PlastDrift model, with wind-induced current shear"""
        o = PlastDrift(loglevel=30)
        o.fallback_values['x_wind'] = 10
        o.fallback_values['y_wind'] = 0
        o.fallback_values['land_binary_mask'] = 0
        o.seed_elements(lat=60,
                        lon=5,
                        time=datetime.now(),
                        number=3,
                        z=np.array([0, -0.05, -.1]))
        o.run(duration=timedelta(hours=10))
        self.assertIsNone(
            np.testing.assert_array_almost_equal(
                o.elements.lon, [5.013484, 5.03395595, 5.01149002]))
        self.assertAlmostEqual(o.elements.lat[0], o.elements.lat[2])

    def test_openberg(self):
        """Check if weighting array is set correctly
        and if model returns expected positions"""
        o = OpenBerg(loglevel=50)

        reader_current = reader_netCDF_CF_generic.Reader(
            o.test_data_folder() +
            '14Jan2016_NorKyst_z_3d/NorKyst-800m_ZDEPTHS_his_00_3Dsubset.nc')

        reader_basemap = reader_basemap_landmask.Reader(llcrnrlon=3.,
                                                        llcrnrlat=60.,
                                                        urcrnrlon=5.,
                                                        urcrnrlat=63.5,
                                                        resolution='c',
                                                        projection='gall')
        # reader_basemap = reader_basemap_landmask.Reader(llcrnrlon=-1.5, llcrnrlat=59, urcrnrlon=7, urcrnrlat=64, resolution='c')

        o.add_reader([reader_current, reader_basemap])
        o.seed_elements(4., 62., time=reader_current.start_time)
        o.run(steps=1)

        arr = [
            0.16072658, 0.16466097, 0.17384121, 0.17325179, 0.1715925,
            0.15592695
        ]

        for indx in range(len(arr)):
            self.assertAlmostEqual(o.uw_weighting[indx], arr[indx], 8)

        self.assertAlmostEqual(o.history['lon'].data[0][1], 3.9921231, 3)
        self.assertAlmostEqual(o.history['lat'].data[0][1], 62.0108299, 3)
Exemplo n.º 29
0
# HYCOM
#reader_hycom = reader_netCDF_CF_generic.Reader('http://tds.hycom.org/thredds/dodsC/GLBu0.08/expt_19.1/2010/3hrly')
#print reader_hycom

reader_globcurrent = reader_netCDF_CF_generic.Reader('http://tds0.ifremer.fr/thredds/dodsC/CLS-L4-CUREUL_HS-ALT_SUM-V02.0_FULL_TIME_SERIE')

# Landmask (Basemap)
reader_basemap = reader_basemap_landmask.Reader(llcrnrlon=100, llcrnrlat=5,
                    urcrnrlon=120, urcrnrlat=15, resolution='h')

# OceanWind
try:
    reader_oceanwind = reader_netCDF_CF_generic.Reader(
        'http://www.ncdc.noaa.gov/thredds/dodsC/oceanwinds6hr')
    print reader_oceanwind
    o.add_reader([reader_globcurrent, reader_oceanwind, reader_basemap])
except:
    o.add_reader([reader_globcurrent, reader_basemap])


# Seed some particles
lat=10.228248; lon=106.973337
lat=10.0; lon=107.8
time = datetime(2010, 3, 23, 6, 0, 0)
o.seed_elements(lon, lat, radius=1000, number=1000, time=time)

# Run model
print o
o.run(duration=timedelta(days=10),
      time_step=timedelta(minutes=15),
      time_step_output=timedelta(hours=3))
Exemplo n.º 30
0
from datetime import datetime, timedelta
from opendrift.readers import reader_netCDF_CF_generic
from opendrift.models.openoil import OpenOil

o = OpenOil(loglevel=20, weathering_model='noaa')

print(o.oiltypes)  # Print available oil types

#%% Add forcing date
# Arome atmospheric model
reader_arome = reader_netCDF_CF_generic.Reader(o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc')
# Norkyst ocean model
reader_norkyst = reader_netCDF_CF_generic.Reader(o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')
o.add_reader([reader_norkyst, reader_arome])

#%%
# Seeding some particles
time = reader_arome.start_time
oil_type = 'GULLFAKS, EXXON'
oil_type = 'ARABIAN MEDIUM, API'
oil_type = 'ALGERIAN CONDENSATE'
o.seed_elements(lon=4.9, lat=60.1, radius=3000, number=2000,
                time=time, z=0, oil_type=oil_type)

#%%
# Adjusting some configuration
o.set_config('processes:evaporation',  True)
o.set_config('processes:emulsification',  True)
o.set_config('drift:vertical_mixing',  True)
===================
"""

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

# Norkyst
reader_norkyst = reader_netCDF_CF_generic.Reader(
    o.test_data_folder() +
    '14Jan2016_NorKyst_z_3d/NorKyst-800m_ZDEPTHS_his_00_3Dsubset.nc')
#reader_norkyst = reader_netCDF_CF_generic.Reader('https://thredds.met.no/thredds/dodsC/sea/norkyst800m/1h/aggregate_be')

o.add_reader([reader_norkyst])
o.set_config('environment:fallback:x_wind', 3)
o.set_config('environment:fallback:y_wind', 7)
o.set_config('drift:vertical_mixing', True)

#%%
# Seeding some particles
time = [
    reader_norkyst.start_time, reader_norkyst.start_time + timedelta(hours=1)
]
o.seed_elements(lon=4.5,
                lat=62.0,
                z='seafloor',
                radius=0,
                number=3000,
                time=time,