Esempio n. 1
0
    def test_reader_order(self):
        # Check that we get the same output indepenently of reader order
        o = OceanDrift(loglevel=50)
        norkyst = reader_netCDF_CF_generic.Reader(o.test_data_folder() +
            '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')
        arome = reader_netCDF_CF_generic.Reader(o.test_data_folder() +
            '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc')
        landmask = reader_global_landmask.Reader(extent = [2, 59.8, 6, 61])
        lon=4.; lat=60.

        # First run
        o.add_reader([landmask, norkyst, arome])
        o.seed_elements(lon, lat, time=norkyst.start_time)
        o.run(steps=30)
        # Second run
        # Check that we get almost identical results with other projection
        o1 = OceanDrift(loglevel=50)
        o1.add_reader([norkyst, arome, landmask])
        o1.seed_elements(lon, lat, time=norkyst.start_time)
        o1.run(steps=30)
        np.testing.assert_array_almost_equal(
            o.elements.lon, o1.elements.lon, 2)
        np.testing.assert_array_almost_equal(
            o.elements.lat, o1.elements.lat, 2)
        # Third run
        # Check that this is identical to run 1 if projection set equal
        o2 = OceanDrift(loglevel=50)
        o2.add_reader([norkyst, arome, landmask])
        o2.seed_elements(lon, lat, time=norkyst.start_time)
        o2.set_projection(landmask.proj4)
        o2.run(steps=30)
        np.testing.assert_array_almost_equal(
                o.elements.lon, o2.elements.lon, decimal=3)
Esempio n. 2
0
    def test_stranding_options(self):
        reader_osc = reader_oscillating.Reader('x_sea_water_velocity',
                                               amplitude=1,
                                               zero_time=datetime.now())

        reader_global = reader_global_landmask.Reader()

        # Three different stranding options, with
        # expected final status and position
        options = ['stranding', 'previous', 'none']
        status = ['stranded', 'active', 'active']
        lons = [12.930, 13.348, 12.444]

        for i, option in enumerate(options):
            o = OceanDrift(loglevel=00)
            o.set_config('general:coastline_action', option)
            o.add_reader([reader_osc, reader_global])
            # Adding northwards drift
            o.fallback_values['y_sea_water_velocity'] = .2
            o.seed_elements(lon=12.2,
                            lat=67.7,
                            radius=0,
                            time=reader_osc.zero_time)
            o.run(steps=28, time_step=3600 * 2)
            #o.plot()
            print('Testing stranding: %s' % option)
            if len(o.elements) == 1:
                el = o.elements
            else:
                el = o.elements_deactivated
            # o.plot ()
            self.assertEqual(o.status_categories[int(el.status)], status[i])
            self.assertIsNone(
                np.testing.assert_array_almost_equal(el.lon, lons[i], 2))
Esempio n. 3
0
    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)
Esempio n. 4
0
 def test_buffer_length_stranding(self):
     o1 = OceanDrift(loglevel=30)
     norkyst = reader_netCDF_CF_generic.Reader(o1.test_data_folder() +
         '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')
     landmask = reader_global_landmask.Reader(
         llcrnrlon=4.5, llcrnrlat=60.1,
         urcrnrlon=6.0, urcrnrlat=60.4)
     o1.add_reader([landmask])
     o1.fallback_values['x_sea_water_velocity'] = 0.8  # onshore drift
     o1.seed_elements(4.8, 60.2, radius=5000, number=100,
                     time=norkyst.start_time)
     o1.run(steps=100,
            time_step=900,
            time_step_output=3600,
            export_buffer_length=10)
     # Without buffer
     o2 = OceanDrift(loglevel=30)
     o2.add_reader([landmask])
     o2.fallback_values['x_sea_water_velocity'] = 0.8  # onshore drift
     o2.seed_elements(4.8, 60.2, radius=5000, number=100,
                     time=norkyst.start_time)
     o2.run(steps=100,
            time_step=900,
            time_step_output=3600,
            outfile='test_buffer_length_stranding.nc')
     self.assertIsNone(np.testing.assert_array_equal(
         o1.history['lon'].compressed(),
         o2.history['lon'].compressed()))
     self.assertIsNone(np.testing.assert_array_almost_equal(
         o1.history['status'].compressed(),
         o2.history['status'].compressed()))
     os.remove('test_buffer_length_stranding.nc')
Esempio n. 5
0
def test_plot(tmpdir):
    print("setting up global landmask")
    reader_global = reader_global_landmask.Reader(llcrnrlon=18.64,
                                                  llcrnrlat=69.537,
                                                  urcrnrlon=19.37,
                                                  urcrnrlat=69.81)

    x = np.linspace(18.641, 19.369, 10)
    y = np.linspace(69.538, 69.80, 10)

    xx, yy = np.meshgrid(x, y)
    shp = xx.shape
    xx = xx.ravel()
    yy = yy.ravel()

    print("points:", len(xx))

    import matplotlib.pyplot as plt
    import cartopy.crs as ccrs
    import cartopy

    reader = cartopy.feature.GSHHSFeature(scale='f')

    plt.figure()
    ax = plt.axes(projection=ccrs.PlateCarree())
    c = reader_global.__on_land__(xx, yy).reshape(shp)
    # c = reader_basemap.__on_land__(xx,yy).reshape(shp)
    print(c)
    ex = [18.641, 19.369, 69.538, 69.80]
    plt.imshow(c, extent=ex, transform=ccrs.PlateCarree())
    ax.coastlines()
    # ax.set_global()
    # plt.show()
    plt.savefig('%s/cartplot.png' % tmpdir)
Esempio n. 6
0
 def test_leewayrun(self):
     """Test the expected Leeway left/right split."""
     self.lee = Leeway(loglevel=30)
     self.objectType = 50  # FISHING-VESSEL-1
     self.reader_landmask = reader_global_landmask.Reader(llcrnrlon=3,
                                                          llcrnrlat=59.8,
                                                          urcrnrlon=6,
                                                          urcrnrlat=60.5)
     self.lee.add_reader([self.reader_landmask])
     self.lee.seed_elements(lon=4.5,
                            lat=60,
                            number=100,
                            objectType=self.objectType,
                            time=datetime(2015, 1, 1))
     self.lee.fallback_values['x_wind'] = 0
     self.lee.fallback_values['y_wind'] = 10
     self.lee.fallback_values['x_sea_water_velocity'] = 0
     self.lee.fallback_values['y_sea_water_velocity'] = 0
     # Check that 7 out of 100 elements strand towards coast
     self.lee.run(steps=24, time_step=3600)
     self.assertEqual(self.lee.num_elements_scheduled(), 0)
     self.assertEqual(self.lee.num_elements_active(), 96)
     self.assertEqual(self.lee.num_elements_deactivated(), 4)  # stranded
     self.lee.export_ascii('leeway_ascii.txt')
     os.remove('leeway_ascii.txt')
 def make_OceanDrift_object(self):
     self.o = OceanDrift(loglevel=30)
     self.fake_eddy = reader_ArtificialOceanEddy.Reader(2, 62)
     self.o.use_block = False
     self.reader_landmask = reader_global_landmask.Reader(
         extent=[-1.5, 59, 7, 64])
     self.o.add_reader([self.fake_eddy, self.reader_landmask])
Esempio n. 8
0
    def test_adding_readers(self):
        o = OceanDrift()
        landmask = reader_global_landmask.Reader(
            extent=[-1.5, 7, 59, 64])
        r = reader_ROMS_native.Reader(o.test_data_folder() +
            '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc')
        o.add_reader([r, landmask])
        self.assertEqual(o.priority_list['land_binary_mask'],
                         ['roms native', 'global_landmask'])
        self.assertEqual(o.priority_list['x_sea_water_velocity'],
                         ['roms native'])
        # Switch order
        o = OceanDrift()
        o.add_reader([landmask, r])
        self.assertEqual(o.priority_list['land_binary_mask'],
                         ['global_landmask', 'roms native'])
        self.assertEqual(o.priority_list['x_sea_water_velocity'],
                         ['roms native'])

        # Test add_readers_from_list
        o = OceanDrift()
        o.add_readers_from_list(reader_list, lazy=False)
        self.assertEqual(o.priority_list['x_sea_water_velocity'],
                         ['roms native'])
        self.assertEqual(o.priority_list['x_wind'],
                         [o.test_data_folder() +
            '2Feb2016_Nordic_sigma_3d/AROME_MetCoOp_00_DEF.nc_20160202_subset'])
Esempio n. 9
0
 def test_output_time_step(self):
     o1 = OceanDrift(loglevel=30)
     norkyst = reader_netCDF_CF_generic.Reader(o1.test_data_folder() +
         '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')
     landmask = reader_global_landmask.Reader(
         llcrnrlon=4.5, llcrnrlat=60.0,
         urcrnrlon=5.2, urcrnrlat=60.5)
     o1.add_reader([landmask, norkyst])
     o1.seed_elements(4.96, 60.1, radius=3000, number=100,
                     time=norkyst.start_time)
     o1.run(duration=timedelta(hours=12),
                time_step=timedelta(minutes=30),
                time_step_output=timedelta(minutes=30),
                outfile='test_time_step30.nc')
     # Check length of time array and output array
     time = o1.get_time_array()[0]
     self.assertEqual(o1.history.shape[1], len(time))
     self.assertEqual(o1.start_time, time[0])
     self.assertEqual(o1.time, time[-1])
     # Second run, with larger output time step
     o2 = OceanDrift(loglevel=30)
     o2.add_reader([landmask, norkyst])
     o2.seed_elements(4.96, 60.1, radius=3000, number=100,
                     time=norkyst.start_time)
     o2.run(duration=timedelta(hours=12),
                time_step=timedelta(minutes=30),
                time_step_output=timedelta(minutes=60),
                outfile='test_time_step60.nc')
     self.assertEqual(o1.history.shape, (100,25))
     self.assertEqual(o2.history.shape, (100,13))
     # Check that start and end conditions (longitudes) are idential
     self.assertIsNone(np.testing.assert_array_equal(
         o1.history['lon'][:,24].compressed(),
         o2.history['lon'][:,12].compressed()))
     self.assertIsNone(np.testing.assert_array_equal(
         o1.history['lon'][:,0].compressed(),
         o2.history['lon'][:,0].compressed()))
     # Check that also run imported from file is identical
     o1i = OceanDrift(loglevel=20)
     o1i.io_import_file('test_time_step30.nc')
     o2i = OceanDrift(loglevel=20)
     o2i.io_import_file('test_time_step60.nc')
     os.remove('test_time_step30.nc')
     os.remove('test_time_step60.nc')
     self.assertIsNone(np.testing.assert_array_equal(
         o2i.history['lon'][:,12].compressed(),
         o2.history['lon'][:,12].compressed()))
     # Check number of activated elements
     self.assertEqual(o1.num_elements_total(), o2.num_elements_total())
     self.assertEqual(o1.num_elements_total(), o1i.num_elements_total())
     self.assertEqual(o1.num_elements_total(), o2i.num_elements_total())
     # Check number of deactivated elements
     self.assertEqual(o1.num_elements_deactivated(),
                      o2.num_elements_deactivated())
     self.assertEqual(o1.num_elements_deactivated(),
                      o1i.num_elements_deactivated())
     self.assertEqual(o1.num_elements_deactivated(),
                      o2i.num_elements_deactivated())
Esempio n. 10
0
def test_reader_landmask_generate_extent():
    import os, tempfile

    tmpdir = os.path.join(tempfile.gettempdir(), 'landmask')
    mmapf = os.path.join(tmpdir, 'mask.dat')

    if os.path.exists(mmapf): os.unlink(mmapf)

    reader_global_landmask.Reader(extent=[4, 55, 11, 65])

    assert os.path.exists(mmapf)
Esempio n. 11
0
def test_reader_landmask_generate():
    import os, tempfile

    tmpdir = os.path.join(tempfile.gettempdir(), 'landmask')
    mmapf = os.path.join(tmpdir, 'mask.dat')

    if os.path.exists(mmapf): os.unlink(mmapf)

    r = reader_global_landmask.Reader()

    if r.mask_type == 0:
        assert os.path.exists(mmapf)
Esempio n. 12
0
def test_basemap_global_matches(test_data):
    reader_global = reader_global_landmask.Reader()
    reader_basemap = reader_basemap_landmask.Reader(llcrnrlon=4,
                                                    llcrnrlat=59,
                                                    urcrnrlon=18,
                                                    urcrnrlat=68.1,
                                                    resolution='i',
                                                    projection='merc')

    reader_nordic = reader_ROMS_native.Reader(
        test_data +
        '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc')

    land = (np.array([15.]), np.array([65.6]))
    ocean = (np.array([5.]), np.array([65.6]))

    # basemap
    ob = OceanDrift(loglevel=00)
    ob.add_reader([reader_nordic, reader_basemap])

    en, en_prof, missing = ob.get_environment(['land_binary_mask'],
                                              reader_nordic.start_time,
                                              land[0], land[1], np.array([0]),
                                              None)

    assert en.land_binary_mask == np.array([True])

    en, en_prof, missing = ob.get_environment(['land_binary_mask'],
                                              reader_nordic.start_time,
                                              ocean[0], ocean[1],
                                              np.array([0]), None)

    assert en.land_binary_mask == np.array([False])
    assert len(ob.readers) == 2

    # global landmask
    oc = OceanDrift(loglevel=00)
    oc.add_reader([reader_nordic, reader_global])
    en, en_prof, missing = oc.get_environment(['land_binary_mask'],
                                              reader_nordic.start_time,
                                              land[0], land[1], np.array([0]),
                                              None)

    assert en.land_binary_mask == np.array([True])

    en, en_prof, missing = oc.get_environment(['land_binary_mask'],
                                              reader_nordic.start_time,
                                              ocean[0], ocean[1],
                                              np.array([0]), None)

    assert en.land_binary_mask == np.array([False])
    assert len(
        oc.readers) == 2  # make sure opendrift doesn't add default basemap
Esempio n. 13
0
    def test_interact_coastline_global(self):
        reader_global = reader_global_landmask.Reader()

        o = OceanDrift(loglevel=00)
        o.add_reader(reader_global)
        o.set_config('general:coastline_action', 'previous')
        o.set_config('general:use_basemap_landmask', False)
        o.fallback_values['x_sea_water_velocity'] = .7
        o.seed_elements(lon=5, lat=60.49, time=datetime.now())
        o.run(time_step=3600, steps=30)
        lons = o.history['lon'][0]
        self.assertAlmostEqual(lons[0], 5, 2)
        self.assertAlmostEqual(lons[-2], 5.092, 2)
        self.assertAlmostEqual(lons[-1], 5.092, 2)
Esempio n. 14
0
def test_MFDataset():
    reader_landmask = reader_global_landmask.Reader(llcrnrlon=13.5,
                                                    llcrnrlat=67.1,
                                                    urcrnrlon=14.6,
                                                    urcrnrlat=67.7)

    o = OceanDrift3D(loglevel=0)
    nordicMF = reader_ROMS_native.Reader(
        o.test_data_folder() +
        '2Feb2016_Nordic_sigma_3d/Nordic_subset_day*.nc')
    nordicMF_all = reader_ROMS_native.Reader(
        o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Nordic_subset.nc')
    lon = 14.0
    lat = 67.3
    #nordic3d = reader_ROMS_native.Reader(o.test_data_folder() +
    #    '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc')
    #o.add_reader(nordic3d)  # Slightly different results
    # Subset is made with ncks, and should give identical result
    # e0=0, e1=20, x0=40, x1=70
    # ncks -d eta_rho,0,$e1 -d eta_psi,0,$e1 -d eta_v,0,$e1 -d eta_u,0,$e1 -d xi_rho,$x0,$x1 -d xi_psi,$x0,$x1 -d xi_v,$x0,$x1 -d xi_u,$x0,$x1 Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc Nordic_subset.nc -O --fl_fmt=netcdf4_classic
    # ncks -O -d ocean_time,0 Nordic_subset.nc Nordic_subset_day1.nc
    o.add_reader([reader_landmask, nordicMF_all])
    o.seed_elements(lon,
                    lat,
                    number=100,
                    radius=5000,
                    time=nordicMF_all.start_time)
    o.run(steps=48, time_step=3600)

    # Same run, with multi-file dataset
    o2 = OceanDrift3D(loglevel=30)
    o2.add_reader([reader_landmask, nordicMF])
    o2.seed_elements(lon,
                     lat,
                     number=100,
                     radius=5000,
                     time=nordicMF_all.start_time)
    o2.run(steps=48, time_step=3600)

    #o.plot(filename='o1.png', background='sea_floor_depth_below_sea_level')
    #o2.plot(filename='o2.png', background='sea_floor_depth_below_sea_level')

    assert o.num_elements_active() == 33
    assert o2.num_elements_active() == 33
    assert o.num_elements_deactivated() == 67
    assert o2.num_elements_deactivated() == 67
    assert o.elements.lon[0] == o2.elements.lon[0]
Esempio n. 15
0
 def test_seed_outside_coverage(self):
     """Test seeding"""
     o = OpenOil3D(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(
         llcrnrlon=4, llcrnrlat=60, urcrnrlon=6, urcrnrlat=64)
     o.add_reader([landmask, norkyst])
     o.fallback_values['x_wind'] = 0
     o.fallback_values['y_wind'] = 0
     o.set_config('seed:oil_type', 'SNORRE B')
     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')
     with self.assertRaises(ValueError):
         o.run(steps=3, time_step=timedelta(minutes=15))
Esempio n. 16
0
    def test_stranding_options(self):
        reader_osc = reader_oscillating.Reader('x_sea_water_velocity',
                                               amplitude=.5,
                                               period_seconds=3600 * 6,
                                               zero_time=datetime.now())

        reader_global = reader_global_landmask.Reader()

        # Three different stranding options, with
        # expected final status and position
        options = ['stranding', 'previous', 'none']
        status = ['stranded', 'active', 'active']
        lons_backward = [16.157, 16.087, 16.167]
        lons_forward = [16.198, 16.115, 16.167]

        for i, option in enumerate(options):
            for direction in ['forward', 'backward']:
                if direction == 'forward':
                    lons = lons_forward
                    time_step = 900
                else:
                    lons = lons_backward
                    time_step = -900
                o = OceanDrift(loglevel=50)
                o.set_config('general:coastline_action', option)
                o.add_reader([reader_osc, reader_global])
                # Adding northwards drift
                o.set_config('environment:constant:y_sea_water_velocity', .1)
                #o.seed_elements(lon=13.35, lat=68.0, radius=0,
                o.seed_elements(lon=16.12,
                                lat=68.5,
                                radius=0,
                                time=reader_osc.zero_time)
                o.run(duration=timedelta(hours=22), time_step=time_step)
                #o.animation()
                #o.plot ()
                print('Testing stranding: %s, %s' % (option, direction))
                if len(o.elements) == 1:
                    el = o.elements
                else:
                    el = o.elements_deactivated
                self.assertEqual(o.status_categories[int(el.status)],
                                 status[i])
                self.assertIsNone(
                    np.testing.assert_array_almost_equal(el.lon, lons[i], 3))
Esempio n. 17
0
def test_performance_global(benchmark):
    print("setting up global landmask")
    reader_global = reader_global_landmask.Reader(
        extent=[18.64, 69.537, 19.37, 69.81])

    x = np.linspace(18.641, 19.369, 100)
    y = np.linspace(69.538, 69.80, 100)

    xx, yy = np.meshgrid(x, y)
    xx = xx.ravel()
    yy = yy.ravel()

    print("points:", len(xx))

    # warmup
    reader_global.__on_land__(xx, yy)

    benchmark(reader_global.__on_land__, xx, yy)
Esempio n. 18
0
def test_global_array(test_data):
    reader_global = reader_global_landmask.Reader()

    reader_nordic = reader_ROMS_native.Reader(test_data +
        '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc')

    lon = np.array([15., 5.])
    lat = np.array([65.6, 65.6])

    # global
    oc = OceanDrift(loglevel = 00)
    oc.add_reader ([reader_nordic, reader_global])
    en, en_prof, missing = oc.get_environment (['land_binary_mask'],
            reader_nordic.start_time,
            lon, lat, np.array([0, 0]), None)

    np.testing.assert_array_equal(en.land_binary_mask, np.array([True, False]))
    assert len(oc.readers) == 2 # make sure opendrift doesn't add default basemap
Esempio n. 19
0
def test_leewayrun(tmpdir):
    """Test the expected Leeway left/right split."""
    lee = Leeway(loglevel=30)
    objectType = 50  # FISHING-VESSEL-1
    reader_landmask = reader_global_landmask.Reader(extent=[ 3, 59.8, 6, 60.5 ])
    lee.add_reader([reader_landmask])
    lee.seed_elements(lon=4.5, lat=60, number=100,
                            objectType=objectType,
                            time=datetime(2015, 1, 1))
    lee.fallback_values['x_wind'] = 0
    lee.fallback_values['y_wind'] = 10
    lee.fallback_values['x_sea_water_velocity'] = 0
    lee.fallback_values['y_sea_water_velocity'] = 0
    # Check that 7 out of 100 elements strand towards coast
    lee.run(steps=24, time_step=3600)
    assert lee.num_elements_scheduled() == 0
    assert lee.num_elements_active() == 96
    assert lee.num_elements_deactivated() == 4  # stranded
    lee.export_ascii(tmpdir + '/leeway_ascii.txt')
Esempio n. 20
0
def test_dateline():
    mask = reader_global_landmask.Reader()

    x = np.linspace(-180, 180, 100)
    y = np.linspace(-90, 90, 100)

    xx, yy = np.meshgrid(x, y)
    xx, yy = xx.ravel(), yy.ravel()
    mm = mask.__on_land__(xx, yy)

    # Offset
    x2 = np.linspace(180, 540, 100)
    y2 = np.linspace(-90, 90, 100)

    xx, yy = np.meshgrid(x2, y2)
    xx, yy = xx.ravel(), yy.ravel()
    MM = mask.__on_land__(xx, yy)

    np.testing.assert_array_equal(mm, MM)
Esempio n. 21
0
def test_leewayrun(tmpdir, test_data):
    """Test the expected Leeway left/right split."""
    lee = Leeway(loglevel=20)
    object_type = 50  # FISHING-VESSEL-1
    reader_landmask = reader_global_landmask.Reader(extent=[ 3, 59.8, 6, 60.5 ])
    lee.add_reader([reader_landmask])
    lee.seed_cone(lon=[4.5, 4.7], lat=[60.1, 60], number=100,
                  object_type=object_type,
                  time=[datetime(2015, 1, 1, 0), datetime(2015, 1, 1, 6)])
    lee.set_config('environment:fallback:x_wind', 0)
    lee.set_config('environment:fallback:y_wind', 10)
    lee.set_config('environment:fallback:x_sea_water_velocity', 0)
    lee.set_config('environment:fallback:y_sea_water_velocity', 0)
    # Check that 10 out of 100 elements strand towards coast
    lee.run(steps=24, time_step=3600)
    assert lee.num_elements_scheduled() == 0
    assert lee.num_elements_active() == 88
    assert lee.num_elements_deactivated() == 12  # stranded

    asciif = tmpdir + '/leeway_ascii.txt'
    lee.export_ascii(asciif)
    asciitarget = test_data + "/generated/test_leewayrun_export_ascii.txt"
    import filecmp
    assert filecmp.cmp(asciif, asciitarget)
Esempio n. 22
0
o = Leeway(loglevel=20)  # 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')

#%%
# Making customised, full resolution landmask
reader_landmask = reader_global_landmask.Reader(
                    extent=[5.5, 6.65, 61.05, 61.21])

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

#%%
# Seed elements
lat = 61.117594; lon = 6.55
#time = [reader_arome.start_time,
#        reader_arome.start_time + timedelta(hours=5)]
time = reader_arome.start_time
objType = 1  # 1: Person-in-water (PIW), unknown state (mean values)
o.seed_elements(lon, lat, radius=50, number=5000, time=time, objectType=objType)

#%%
# Running model for 66 hours, using small time step due to high resolution coastline
o.run(duration=timedelta(hours=12), time_step=300, time_step_output=3600)
Esempio n. 23
0
def test_landmask_global():
    reader_global = reader_global_landmask.Reader(extent=[4, 55, 11, 65])

    assert reader_global.__on_land__(np.array([10]), np.array([60])) == [True]
    assert reader_global.__on_land__(np.array([5]), np.array([60])) == [False]
Esempio n. 24
0
# Arome
#reader_arome = reader_netCDF_CF_generic.Reader('http://thredds.met.no/thredds/dodsC/meps25files/meps_det_extracted_2_5km_latest.nc')
reader_arome = reader_netCDF_CF_generic.Reader(
    lw.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(
    lw.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')

# Landmask
reader_landmask = reader_global_landmask.Reader(llcrnrlon=3.3,
                                                llcrnrlat=59.5,
                                                urcrnrlon=5.5,
                                                urcrnrlat=62.5)

#lw.add_reader([reader_norkyst, reader_arome, reader_landmask])
# Adding readers succesively, and specifying which variables they
# shall provide. This way, order of adding readers does not matter,
# except for small rounding differences due to different projection
lw.add_reader(reader_norkyst,
              variables=['x_sea_water_velocity', 'y_sea_water_velocity'])
lw.add_reader(reader_arome, variables=['x_wind', 'y_wind'])
lw.add_reader(reader_landmask, variables=['land_binary_mask'])
lw.fallback_values['x_sea_water_velocity'] = 0
lw.fallback_values['y_sea_water_velocity'] = 0

# Seeding some particles
lon = 4.5
from opendrift.readers import reader_global_landmask
from opendrift.readers import reader_landmask_custom
from opendrift.models.oceandrift import OceanDrift

###############################
# MODEL
###############################
o = OceanDrift(loglevel=0)  # Set loglevel to 0 for debug information
###############################
# READERS
###############################
# Creating and adding reader using a native SCHISM netcdf output file
# SCHISM reader
# Landmask - (uses cartopy+rasterized GHSS shorelines)
reader_landmask = reader_global_landmask.Reader(llcrnrlon=171.5,
                                                llcrnrlat=-43.5,
                                                urcrnrlon=177.0,
                                                urcrnrlat=-38.0)

reader_custom = reader_landmask_custom.Reader(
    polygon_file=
    '/home/simon/Documents/GitHub/opendrift/examples/schism_marl_edit.shore')
# reader_custom.plot() # check reader was correctly loaded, close figure to continue

# NZTM proj4 string found at https://spatialreference.org/ref/epsg/nzgd2000-new-zealand-transverse-mercator-2000/
proj4str_nztm = '+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs'
schism_native = reader_schism_native.Reader(
    filename=
    'https://thredds.met.no/thredds/dodsC/metusers/knutfd/thredds/netcdf_unstructured_samples/schism_marl20080101_00z_3D.nc',
    proj4=proj4str_nztm,
    use_3d=True)
o = OpenBerg()  # Basic drift model suitable for icebergs

############################################
# Preparing Readers
############################################

reader_current = reader_netCDF_CF_generic.Reader(
    o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')

reader_wind = reader_netCDF_CF_generic.Reader(
    o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc')

reader_landmask = reader_global_landmask.Reader(llcrnrlon=2.9,
                                                llcrnrlat=59.7,
                                                urcrnrlon=4.9,
                                                urcrnrlat=61.5)
o.add_reader([reader_current, reader_wind, reader_landmask])

#######################
# Seeding elements
#######################

# Icebergs are moved with the ocean current as per Barker et al (2004),
# in addition to a fraction of the wind speed (wind_drift_factor).
# This factor depends on the properties of the elements.
# Default empirical values are:
# - Wind drift fraction: 0.018 (1.8 %) (Garret 1985)
# - Iceberg size: 	Keel dept = 60m
#					Waterline length = 90.5m
Esempio n. 27
0
from opendrift.readers import reader_netCDF_CF_generic
from opendrift.models.leeway import Leeway

o = Leeway(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')

# Making customised, full resolution landmask
reader_landmask = reader_global_landmask.Reader(
                    llcrnrlon=5.5, llcrnrlat=61.05,
                    urcrnrlon=6.65, urcrnrlat=61.21)

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

# Seed elements
lat = 61.117594; lon = 6.55
#time = [reader_arome.start_time,
#        reader_arome.start_time + timedelta(hours=5)]
time = reader_arome.start_time
objType = 1  # 1: Person-in-water (PIW), unknown state (mean values)
o.seed_elements(lon, lat, radius=50, number=5000, time=time, objectType=objType)

# Running model for 66 hours
o.run(steps=66*12, time_step=300)
Esempio n. 28
0
import os

from opendrift.readers import reader_global_landmask
from opendrift.readers import reader_netCDF_CF_generic

from opendrift.models.oceandrift import OceanDrift

ncfile = 'backandforth.nc'

o = OceanDrift(loglevel=0)  # Set loglevel to 0 for debug information
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')

reader_landmask = reader_global_landmask.Reader(llcrnrlon=3, llcrnrlat=59,
                urcrnrlon=6, urcrnrlat=62)

o.add_reader([reader_norkyst, reader_landmask])

################
# Forward run
################
# Seeding some particles
lon = 4.2; lat = 60.1;
time = reader_norkyst.start_time
o.seed_elements(lon, lat, radius=1000, number=100, time=time)

o.run(steps=50*4, time_step=900, outfile=ncfile)

# Print and plot results
print(o)
"""

import numpy as np
from datetime import datetime, timedelta

from opendrift.readers import reader_global_landmask
from opendrift.readers import reader_double_gyre
from opendrift.readers import reader_ArtificialOceanEddy
from opendrift.models.oceandrift import OceanDrift

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

fake_eddy = reader_ArtificialOceanEddy.Reader(2, 62)

reader_landmask = reader_global_landmask.Reader(llcrnrlon=-1.5,
                                                llcrnrlat=59,
                                                urcrnrlon=7,
                                                urcrnrlat=64)

lon = 2.0
lat = 63.0
# Close to Station M

runs = []
leg = []
i = 0
for scheme in ['euler', 'runge-kutta', 'runge-kutta4']:
    for time_step in [1800, 3600 * 3]:
        leg.append(scheme + ', T=%.1fh' % (time_step / 3600.))
        print(leg[-1])
        o = OceanDrift(loglevel=50)
        o.fallback_values['land_binary_mask'] = 0
Esempio n. 30
0
"""

from opendrift.readers import reader_global_landmask
from opendrift.readers import reader_netCDF_CF_generic
from opendrift.models.oceandrift import OceanDrift

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

reader_norkyst = reader_netCDF_CF_generic.Reader(
    o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')
time = reader_norkyst.start_time
reader_norkyst.interpolation = 'linearND'

reader_landmask = reader_global_landmask.Reader(llcrnrlon=4,
                                                llcrnrlat=59.9,
                                                urcrnrlon=5.5,
                                                urcrnrlat=61.5)

o.add_reader([reader_norkyst, reader_landmask])
lon = 4.5
lat = 60.0

#%%
# First run, with Euler scheme:
o.set_config('drift:scheme', 'euler')
o.seed_elements(lon, lat, radius=0, number=1, time=time)
o.run(steps=66 * 2, time_step=1800)

#%%
# Second run, with Runge-Kutta scheme:
o2 = OceanDrift(loglevel=20)  # Set loglevel to 0 for debug information