Example #1
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())
Example #2
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')
     basemap = reader_basemap_landmask.Reader(
         llcrnrlon=4.5, llcrnrlat=60.0,
         urcrnrlon=5.2, urcrnrlat=60.5,
         resolution='i', projection='merc')
     o1.add_reader([basemap, 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([basemap, 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.assertItemsEqual(o1.history['lon'][:,24].compressed(), 
                           o2.history['lon'][:,12].compressed())
     self.assertItemsEqual(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.assertItemsEqual(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())
ot.seed_elements(lon=4,
                 lat=60,
                 number=1,
                 time=ot.readers[list(ot.readers)[0]].start_time,
                 wind_drift_factor=0.033)

#%%
# Adding some horizontal diffusivity as "noise"
ot.set_config('drift:horizontal_diffusivity', 10)
ot.run(duration=timedelta(hours=12), time_step=600)

#%%
# Secondly, calculating the wind_drift_factor which reproduces the "observed" trajectory with minimal difference
drifter_lons = ot.history['lon'][0]
drifter_lats = ot.history['lat'][0]
drifter_times = ot.get_time_array()[0]
trajectory_dict = {
    'lon': drifter_lons,
    'lat': drifter_lats,
    'time': drifter_times,
    'linestyle': 'b--',
    'label': 'Synthetic drifter'
}

o = OceanDrift(loglevel=50)
o.add_readers_from_list([
    o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc',
    o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc'
],