Example #1
0
    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)
"""
Ice berg (openberg) deterministic
==================================
"""

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

from opendrift.models.openberg import OpenBerg

######################
# Initialize model
######################
steps = 60  # This is the number of forecast steps

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,
Example #3
0
    def set_model(self, model):
        if model == 'OpenOil':
            self.o = OpenOil(weathering_model='noaa', location='NORWAY')
        elif model == 'Leeway':
            self.o = Leeway()
        elif model == 'ShipDrift':
            self.o = ShipDrift()
        elif model == 'OpenBerg':
            self.o = OpenBerg()

        for con in self.config.winfo_children():
            con.destroy()
        self.con = tk.Label(self.config, text="\n\nConfiguration\n\n")
        self.con.grid(row=0, column=1, rowspan=1)
        for i, cs in enumerate(self.o._config_hashstrings()):
            tk.Label(self.config, text=cs).grid(row=i, column=1, rowspan=1)
        try:
            self.results.destroy()
        except:
            pass
        try:
            # Removing depth input boxes
            self.depthlabel.destroy()
            self.depth.destroy()
            self.seafloor.destroy()
            self.amount.destroy()
            self.amountlabel.destroy()
        except:
            pass

        print('Setting model: ' + model)
        print(self.o.list_configspec())
        sc = self.o.get_seed_config()
        print(sc)
        self.seed_input = {}
        self.seed_input_var = {}
        self.seed_input_label = {}
        self.seed_frame = tk.Frame(self.seed, bd=2,
                                   relief=tk.FLAT, padx=5, pady=0)
        self.seed_frame.grid(row=60, columnspan=8, sticky='nsew')
        # FIND
        for num, i in enumerate(sc):
            if i in ['ocean_only', 'jibeProbability']:
                continue  # workaround, should be avoided in future
            self.seed_input_label[i] = tk.Label(self.seed_frame,
                                                text=i + '\t')
            self.seed_input_label[i].grid(row=num, column=0)
            self.seed_input_var[i] = tk.StringVar()
            if type(sc[i]['options']) is list:
                self.seed_input[i] = ttk.Combobox(
                    self.seed_frame, width=50,
                    textvariable=self.seed_input_var[i],
                    values=sc[i]['options'])
                self.seed_input_var[i].set(sc[i]['default'])
            else:
                self.seed_input[i] = tk.Entry(
                    self.seed_frame, textvariable=self.seed_input_var[i],
                    width=6, justify=tk.RIGHT)
                self.seed_input[i].insert(0, sc[i]['default'])
            self.seed_input[i].grid(row=num, column=1)

        if model == 'OpenOil':  # User may be able to chose release depth
            self.depthlabel = tk.Label(self.duration, text='Spill depth [m]')
            self.depthlabel.grid(row=60, column=0)
            self.depthvar = tk.StringVar()
            self.depth = tk.Entry(self.duration, textvariable=self.depthvar,
                                  width=6, justify=tk.RIGHT)
            self.depth.grid(row=60, column=2)
            self.depth.insert(0, '0')
            self.seafloorvar = tk.IntVar()
            self.seafloor = tk.Checkbutton(self.duration, variable=self.seafloorvar,
                                           text='seafloor',
                                           command=self.seafloorbutton)
            self.seafloor.grid(row=60, column=3)

            self.amountvar = tk.StringVar()
            self.amount = tk.Entry(self.duration, textvariable=self.amountvar,
                                  width=6, justify=tk.RIGHT)
            self.amount.grid(row=60, column=4)
            self.amount.insert(0, '100')
            self.amountlabel = tk.Label(self.duration, text='m3 (per hour)')
            self.amountlabel.grid(row=60, column=5)
from datetime import datetime, timedelta
from opendrift.readers import reader_netCDF_CF_generic
from opendrift.readers import reader_current_from_track
from opendrift.models.openberg import OpenBerg

#%%
# Create observation of iceberg track
obslon = [3.1, 3.123456]
obslat = [61.1, 61.132198]
obstime = [datetime(2015, 11, 16, 0), datetime(2015, 11, 16, 6)]

#%%
# Initialize model
steps = 60   # This is the number of forecast steps
o = OpenBerg(loglevel=30)  # Basic drift model suitable for icebergs

#%%
# Preparing Readers
reader_wind = reader_netCDF_CF_generic.Reader(o.test_data_folder() +
   '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc',name='WIND')

reader_current = reader_current_from_track.Reader(
    obslon, obslat, obstime, wind_east=0, wind_north=0,
    windreader=reader_wind, wind_factor=0.018)

o.add_reader([reader_current, reader_wind])

#%%
# Seeding elements
#
Example #5
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.991, 3)
        self.assertAlmostEqual(o.history['lat'].data[0][1],62.011, 3)
Example #6
0
from datetime import datetime, timedelta
from opendrift.readers import reader_netCDF_CF_generic
from opendrift.readers import reader_current_from_track
from opendrift.models.openberg import OpenBerg

#%%
# Create observation of iceberg track
obslon = [3.1, 3.123456]
obslat = [61.1, 61.132198]
obstime = [datetime(2015, 11, 16, 0), datetime(2015, 11, 16, 6)]

#%%
# Initialize model
steps = 60  # This is the number of forecast steps
o = OpenBerg()  # Basic drift model suitable for icebergs

#%%
# Preparing Readers
reader_wind = reader_netCDF_CF_generic.Reader(
    o.test_data_folder() +
    '16Nov2015_NorKyst_z_surface/arome_subset_16Nov2015.nc',
    name='WIND')

reader_current = reader_current_from_track.Reader(obslon,
                                                  obslat,
                                                  obstime,
                                                  wind_east=0,
                                                  wind_north=0,
                                                  windreader=reader_wind,
                                                  wind_factor=0.018)