def test_stranding_3d(self): o = PelagicEggDrift(loglevel=30) reader_nordic = reader_ROMS_native.Reader( o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc' ) o.add_reader(reader_nordic) o.fallback_values['y_wind'] = 10 # Some wind for mixing o.seed_elements( lon=14.0, lat=68.15, radius=2000, number=100, time=[reader_nordic.start_time, reader_nordic.end_time], z=0) o.set_config('general:coastline_action', 'stranding') o.set_config('turbulentmixing:timestep', 120) o.max_speed = .1 o.run(end_time=reader_nordic.end_time, time_step=3600 * 6) self.assertEqual(o.status_categories[1], 'stranded') self.assertEqual(o.elements_deactivated.status.min(), 1) self.assertEqual(o.elements_deactivated.status.max(), 1) self.assertEqual(o.num_elements_scheduled(), 0) self.assertEqual(o.num_elements_active(), 79) self.assertEqual(o.num_elements_activated(), 100) self.assertEqual(o.num_elements_deactivated(), 21) self.assertEqual(o.num_elements_total(), 100)
def test_stranding_roms(self): o = PelagicEggDrift(loglevel=0) reader_arctic = reader_netCDF_CF_generic.Reader( o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Arctic20_1to5Feb_2016.nc') reader_nordic = reader_ROMS_native.Reader( o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc' ) o.add_reader(reader_arctic) o.add_reader(reader_nordic) o.fallback_values['x_sea_water_velocity'] = 1 o.seed_elements( lon=13.0, lat=68.0, radius=20000, number=100, time=[reader_arctic.start_time, reader_nordic.end_time], z=-30) o.set_config('general:coastline_action', 'previous') o.set_config('processes:turbulentmixing', False) o.max_speed = 1 o.run(end_time=reader_nordic.end_time, time_step=3600 * 36) self.assertEqual(o.num_elements_scheduled(), 0) self.assertEqual(o.num_elements_active(), 100) self.assertEqual(o.num_elements_activated(), 100) self.assertEqual(o.num_elements_deactivated(), 0) self.assertEqual(o.num_elements_total(), 100)
def test_stranding_3d(self): o = PelagicEggDrift(loglevel=30) reader_nordic = reader_ROMS_native.Reader( o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc' ) o.add_reader(reader_nordic) o.set_config('environment:fallback:y_wind', 10) # Some wind for mixing o.seed_elements( lon=14.0, lat=68.15, radius=2000, number=100, time=[reader_nordic.start_time, reader_nordic.end_time], z=0) o.set_config('general:coastline_action', 'stranding') o.set_config('vertical_mixing:timestep', 120) o.max_speed = .1 o.run(end_time=reader_nordic.end_time, time_step=3600 * 6) self.assertEqual(o.status_categories[1], 'stranded') self.assertEqual(o.elements_deactivated.status.min(), 1) self.assertEqual(o.elements_deactivated.status.max(), 1) self.assertEqual(o.num_elements_scheduled(), 0) self.assertEqual(o.num_elements_active(), 81) self.assertEqual(o.num_elements_activated(), 100) self.assertEqual(o.num_elements_deactivated(), 19) self.assertEqual(o.num_elements_total(), 100) # Check calculated trajectory lengths and speeds total_length, distances, speeds = o.get_trajectory_lengths() self.assertAlmostEqual(total_length.max(), 14978.3, 1) self.assertAlmostEqual(total_length.min(), 1225.2, 1) self.assertAlmostEqual(speeds.max(), 0.127, 1) self.assertAlmostEqual(distances.max(), 2859.0, 1)
def test_reader_boundary(self): o = PelagicEggDrift(loglevel=0) reader_nordic = reader_ROMS_native.Reader( o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc' ) reader_arctic = reader_netCDF_CF_generic.Reader( o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Arctic20_1to5Feb_2016.nc') ###################################################### # Vertical interpolation is another issue to be fixed: reader_nordic.zlevels = reader_arctic.z ###################################################### o.add_reader([reader_nordic, reader_arctic]) o.fallback_values['land_binary_mask'] = 0 o.fallback_values['x_wind'] = 10 # Some wind for mixing # Seed close to Nordic boundary o.seed_elements(lon=14.9, lat=71.1, radius=2000, number=100, time=reader_nordic.start_time, z=0) o.set_config('turbulentmixing:timestep', 20) o.set_config('drift:scheme', 'runge-kutta') o.run(steps=5, time_step=3600, time_step_output=3600) self.assertEqual(o.num_elements_active(), 100) self.assertEqual(o.num_elements_deactivated(), 0) self.assertAlmostEqual(o.elements.lat[0], 71.16, 1) #self.assertAlmostEqual(o.elements.z.min(), -41.92, 1) # With past ROMS-masking self.assertAlmostEqual(o.elements.z.min(), -40.1, 1) self.assertAlmostEqual(o.elements.z.max(), -0.01, 1) #self.assertAlmostEqual(o.elements.lon.max(), 14.949, 2) self.assertAlmostEqual(o.elements.lon.max(), 14.87, 2)
def test_reader_boundary(self): o = PelagicEggDrift(loglevel=0) reader_nordic = reader_ROMS_native.Reader( o.test_data_folder() + "2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc" ) reader_arctic = reader_netCDF_CF_generic.Reader( o.test_data_folder() + "2Feb2016_Nordic_sigma_3d/Arctic20_1to5Feb_2016.nc" ) ###################################################### # Vertical interpolation is another issue to be fixed: reader_nordic.zlevels = reader_arctic.z ###################################################### o.add_reader([reader_nordic, reader_arctic]) o.fallback_values["land_binary_mask"] = 0 o.fallback_values["x_wind"] = 10 # Some wind for mixing # Seed close to Nordic boundary o.seed_elements(lon=14.9, lat=71.1, radius=2000, number=100, time=reader_nordic.start_time, z=0) o.set_config("turbulentmixing:timestep", 20) o.set_config("turbulentmixing:verticalresolution", 1) o.set_config("drift:scheme", "runge-kutta") o.run(steps=5, time_step=3600, time_step_output=3600) self.assertEqual(o.num_elements_active(), 100) self.assertEqual(o.num_elements_deactivated(), 0) self.assertAlmostEqual(o.elements.lat[0], 71.15, 2) self.assertAlmostEqual(o.elements.z.min(), -35.0, 3) self.assertAlmostEqual(o.elements.z.max(), -0.5, 3) self.assertAlmostEqual(o.elements.lon.max(), 14.87, 2)
def test_stranding_roms(self): o = PelagicEggDrift(loglevel=0) reader_arctic = reader_netCDF_CF_generic.Reader(o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Arctic20_1to5Feb_2016.nc') reader_nordic = reader_ROMS_native.Reader(o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc') o.add_reader(reader_arctic) o.add_reader(reader_nordic) o.fallback_values['x_sea_water_velocity'] = 1 o.seed_elements(lon=13.0, lat=68.0, radius=20000, number=100, time=[reader_arctic.start_time, reader_nordic.end_time], z=-30) o.set_config('general:basemap_resolution', 'c') o.set_config('general:coastline_action', 'previous') o.set_config('processes:turbulentmixing', False) o.max_speed=1 o.run(end_time=reader_nordic.end_time, time_step=3600*36) self.assertEqual(o.num_elements_scheduled(), 0) self.assertEqual(o.num_elements_active(), 100) self.assertEqual(o.num_elements_activated(), 100) self.assertEqual(o.num_elements_deactivated(), 0) self.assertEqual(o.num_elements_total(), 100)
def test_stranding_3d(self): o = PelagicEggDrift(loglevel=30) reader_nordic = reader_ROMS_native.Reader(o.test_data_folder() + '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc') o.add_reader(reader_nordic) o.fallback_values['y_wind'] = 10 # Some wind for mixing o.seed_elements(lon=14.0, lat=68.15, radius=2000, number=100, time=[reader_nordic.start_time, reader_nordic.end_time], z=0) o.set_config('general:basemap_resolution', 'i') o.set_config('general:coastline_action', 'stranding') o.set_config('turbulentmixing:timestep', 120) o.set_config('turbulentmixing:verticalresolution', 10) o.max_speed=.1 o.run(end_time=reader_nordic.end_time, time_step=3600*6) self.assertEqual(o.status_categories[1], 'stranded') self.assertEqual(o.elements_deactivated.status.min(), 1) self.assertEqual(o.elements_deactivated.status.max(), 1) self.assertEqual(o.num_elements_scheduled(), 0) self.assertEqual(o.num_elements_active(), 88) self.assertEqual(o.num_elements_activated(), 100) self.assertEqual(o.num_elements_deactivated(), 12) self.assertEqual(o.num_elements_total(), 100)