コード例 #1
0
ファイル: test_physics.py プロジェクト: simonweppe/opendrift
    def test_droplet_diameters(self):
        o = OpenOil(loglevel=20)
        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)
        o.set_config(
            'environment:fallback:sea_surface_wave_period_at_variance_spectral_density_maximum',
            5.8)
        o.set_config(
            'environment:fallback:sea_surface_wave_significant_height', 3)

        o.set_config('vertical_mixing:timestep', 4)
        # Setting droplet size range for subsea blowout
        o.set_config('seed:droplet_diameter_min_subsea', 0.0005)
        o.set_config('seed:droplet_diameter_max_subsea', 0.005)
        # Setting droplet size range for wave breaking
        o.seed_elements(4, 60, number=100, time=datetime.now(), z=-100)
        o.run(duration=timedelta(hours=3), time_step=900)
        d_start = o.history['diameter'][:, 0]
        d_end = o.history['diameter'][:, -1]
        # Check initial droplet sizes (expect range 0.0005 to 0.005)
        self.assertTrue(
            d_start.min() > o.get_config('seed:droplet_diameter_min_subsea'))
        self.assertTrue(
            d_start.max() < o.get_config('seed:droplet_diameter_max_subsea'))
コード例 #2
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))
コード例 #3
0
    def test_seed_metadata_output(self):
        import warnings
        warnings.filterwarnings("ignore", category=DeprecationWarning)
        outfile = 'openoil.nc'
        a = {
            'lon': 4.8,
            'lat': 60,
            'z': -10,
            'number': 10,
            'radius': 100,
            'time': datetime(2021, 1, 22)
        }
        o = OpenOil(loglevel=50)
        o.seed_elements(lon=a['lon'],
                        lat=a['lat'],
                        z=a['z'],
                        radius=a['radius'],
                        number=a['number'],
                        time=a['time'])
        o.set_config('environment:fallback:land_binary_mask', 0)
        o.set_config('environment:fallback:x_wind', 1)
        o.set_config('environment:fallback:y_wind', 0)
        o.set_config('environment:fallback:x_sea_water_velocity', 0)
        o.set_config('environment:fallback:y_sea_water_velocity', .3)
        o.run(duration=timedelta(hours=1), time_step=1800, outfile=outfile)
        f = xr.open_dataset(outfile)
        for var in ['lon', 'lat', 'number', 'radius', 'z', 'm3_per_hour']:
            s = 'seed_' + var
            if var not in a:
                a[var] = o.get_config('seed:' + var)
            self.assertAlmostEqual(np.float(a[var]), np.float(f.attrs[s]), 3)
        self.assertEqual(str(a['time']), f.attrs['seed_time'])
        for var in [
                'seed_m3_per_hour', 'time_coverage_start', 'time_coverage_end',
                'seed_oiltype', 'simulation_time'
        ]:
            assert var in f.attrs
        f.close()
        os.remove(outfile)
        # Same for cone-seeding
        a = {
            'lon': [4.7, 4.8],
            'lat': [60, 60.1],
            'number': 10,
            'radius': [0, 100],
            'time': [datetime(2021, 1, 22, 0),
                     datetime(2021, 1, 22, 6)]
        }
        a_config = {'seafloor': True, 'm3_per_hour': 55}
        o = OpenOil(loglevel=0)
        o.set_config('environment:fallback:land_binary_mask', 0)
        o.set_config('environment:fallback:x_wind', 1)
        o.set_config('environment:fallback:y_wind', 0)
        o.set_config('environment:fallback:x_sea_water_velocity', 0)
        o.set_config('environment:fallback:y_sea_water_velocity', .3)
        o.set_config('environment:fallback:y_sea_water_velocity', .3)
        for ac in a_config:
            o.set_config('seed:' + ac, a_config[ac])
        o.seed_cone(lon=a['lon'],
                    lat=a['lat'],
                    radius=a['radius'],
                    number=a['number'],
                    time=a['time'])
        o.seed_cone(lon=a['lon'],
                    lat=a['lat'],
                    radius=a['radius'],
                    number=a['number'] + 4,
                    time=a['time'])
        o.run(duration=timedelta(hours=1), time_step=1800, outfile=outfile)
        f = xr.open_dataset(outfile)
        import geojson
        gj = geojson.loads(f.attrs['seed_geojson'])
        print(gj)
        fe = gj['features']
        for var in ['lon', 'lat', 'number', 'radius', 'm3_per_hour']:
            s = 'seed_' + var
            if var not in a:
                a[var] = o.get_config('seed:' + var)
            self.assertAlmostEqual(
                np.atleast_1d(a[var]).mean(), np.float(f.attrs[s]), 3)
            if var not in ['lon',
                           'lat']:  # Check also versus GeoJSON attribute
                geojsonvar = np.atleast_1d(fe[0]['properties'][var]).mean()
                avar = np.atleast_1d(a[var]).mean()
                self.assertEqual(avar, geojsonvar)

        self.assertEqual(fe[0]['properties']['z'], 'seafloor')
        self.assertEqual(str(a['time'][0]), f.attrs['seed_time'])
        for var in [
                'seed_m3_per_hour', 'time_coverage_start', 'time_coverage_end',
                'seed_oiltype', 'simulation_time'
        ]:
            assert var in f.attrs
        os.remove(outfile)