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,
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 #
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)
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)