def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2012, 9, 15, 12, 0) mapfile = get_datafile(os.path.join(base_dir, './LongIslandSoundMap.BNA')) gnome_map = MapFromBNA(mapfile, refloat_halflife=6) # hours # # the image output renderer # global renderer # one hour timestep model = Model(start_time=start_time, duration=timedelta(hours=48), time_step=3600, map=gnome_map, uncertain=True, cache_enabled=True) netcdf_file = os.path.join(base_dir, 'script_long_island.nc') scripting.remove_netcdf(netcdf_file) print 'adding outputters' model.outputters += Renderer(mapfile, images_dir, size=(800, 600)) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a spill' spill = point_line_release_spill(num_elements=1000, start_position=(-72.419992, 41.202120, 0.0), release_time=start_time) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=500000, uncertain_factor=2) print 'adding a wind mover:' series = np.zeros((5, ), dtype=datetime_value_2d) series[0] = (start_time, (10, 45)) series[1] = (start_time + timedelta(hours=18), (10, 90)) series[2] = (start_time + timedelta(hours=30), (10, 135)) series[3] = (start_time + timedelta(hours=42), (10, 180)) series[4] = (start_time + timedelta(hours=54), (10, 225)) wind = Wind(timeseries=series, units='m/s') model.movers += WindMover(wind) print 'adding a cats mover:' curr_file = get_datafile(os.path.join(base_dir, r"./LI_tidesWAC.CUR")) tide_file = get_datafile(os.path.join(base_dir, r"./CLISShio.txt")) c_mover = CatsMover(curr_file, tide=Tide(tide_file)) model.movers += c_mover model.environment += c_mover.tide print 'viewport is:', [ o.viewport for o in model.outputters if isinstance(o, Renderer) ] return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2013, 1, 1, 1) # data starts at 1:00 instead of 0:00 model = Model(start_time=start_time, duration=timedelta(days=1), time_step=900, uncertain=False) try: mapfile = get_datafile(os.path.join(base_dir, './pearl_harbor.bna')) except HTTPError: print ('Could not download Pearl Harbor data from server - ' 'returning empty model') return model print 'adding the map' model.map = MapFromBNA(mapfile, refloat_halflife=1) # hours # # Add the outputters -- render to images, and save out as netCDF # print 'adding renderer and netcdf output' model.outputters += Renderer(mapfile, images_dir, size=(800, 600)) netcdf_output_file = os.path.join(base_dir, 'pearl_harbor_output.nc') scripting.remove_netcdf(netcdf_output_file) model.outputters += NetCDFOutput(netcdf_output_file, which_data='all') # # # # Set up the movers: # # print 'adding a random mover:' model.movers += RandomMover(diffusion_coef=10000) print 'adding a wind mover:' series = np.zeros((3, ), dtype=datetime_value_2d) series[0] = (start_time, (4, 180)) series[1] = (start_time + timedelta(hours=12), (2, 270)) series[2] = (start_time + timedelta(hours=24), (4, 180)) w_mover = WindMover(Wind(timeseries=series, units='knots')) model.movers += w_mover model.environment += w_mover.wind print 'adding a current mover:' # this is CH3D currents curr_file = os.path.join(base_dir, r"./ch3d2013.nc") topology_file = os.path.join(base_dir, r"./PearlHarborTop.dat") model.movers += GridCurrentMover(curr_file, topology_file) # # # # Add a spill (sources of elements) # # print 'adding spill' model.spills += point_line_release_spill(num_elements=1000, start_position=(-157.97064, 21.331524, 0.0), release_time=start_time) return model
def make_model(images_dir=os.path.join(base_dir, "images")): print "initializing the model" # set up the modeling environment start_time = datetime(2004, 12, 31, 13, 0) model = Model(start_time=start_time, duration=timedelta(days=3), time_step=30 * 60, uncertain=False) print "adding the map" model.map = GnomeMap() # this is a "water world -- no land anywhere" # renderere is only top-down view on 2d -- but it's something renderer = Renderer(output_dir=images_dir, size=(1024, 768), output_timestep=timedelta(hours=1)) renderer.viewport = ((-0.15, -0.35), (0.15, 0.35)) print "adding outputters" model.outputters += renderer # Also going to write the results out to a netcdf file netcdf_file = os.path.join(base_dir, "script_plume.nc") scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput( netcdf_file, which_data="most", # output most of the data associated with the elements output_timestep=timedelta(hours=2), ) print "adding Horizontal and Vertical diffusion" # Horizontal Diffusion # model.movers += RandomMover(diffusion_coef=5) # vertical diffusion (different above and below the mixed layer) model.movers += RandomVerticalMover( vertical_diffusion_coef_above_ml=5, vertical_diffusion_coef_below_ml=0.11, mixed_layer_depth=10 ) print "adding Rise Velocity" # droplets rise as a function of their density and radius model.movers += RiseVelocityMover() print "adding a circular current and eastward current" # This is .3 m/s south model.movers += PyGridCurrentMover(current=vg, default_num_method="Trapezoid", extrapolate=True) model.movers += SimpleMover(velocity=(0.0, -0.1, 0.0)) # Now to add in the TAMOC "spill" print "Adding TAMOC spill" model.spills += tamoc_spill.TamocSpill( release_time=start_time, start_position=(0, 0, 1000), num_elements=1000, end_release_time=start_time + timedelta(days=1), name="TAMOC plume", TAMOC_interval=None, # how often to re-run TAMOC ) return model
def make_model(coor, yr, month, day, period=46, dt=900 ,opt='SUNTANS', images_dir=os.getcwd()+"/images"): ''' Run multiple GNOME; yr,month,day---oil spill start time; period---oil spill simulation duration; dt--oil spill time step in second ''' print "initializing the model" base_dir=os.getcwd() #start_time = datetime(2014,8,21,0) start_time = datetime(yr,month,day,0) model = Model(start_time = start_time, duration = timedelta(hours=period), time_step =dt, uncertain = False, ) mapfile = os.path.join(base_dir, './coast.bna') print "adding the map" gnome_map = MapFromBNA(mapfile, refloat_halflife=6) # hours print "adding renderer" model.outputters += Renderer(mapfile, images_dir, size=(1800, 1600)) print "adding a wind mover from a time-series" ## this is wind wind_file=get_datafile(os.path.join(base_dir, 'wind.WND')) wind = Wind(filename=wind_file) w_mover = WindMover(wind) model.movers += w_mover print "adding a current mover:" ## this is currents curr_file = get_datafile(os.path.join(base_dir, 'current_'+opt+'.txt')) model.movers += GridCurrentMover(curr_file) #model.movers += RandomMover(1000) ## ## Add some spills (sources of elements) ## print "adding 13 points in a cluster that has some small initial separation as the source of spill" for i in range(len(coor)): xcoor,ycoor=nctools.utmToLatLng(15,coor[i][0],coor[i][1],northernHemisphere=True) model.spills += point_line_release_spill(num_elements=1, start_position = (ycoor,xcoor, 0.0), release_time = start_time, ) print "adding netcdf output" netcdf_output_file = os.path.join(base_dir,'GNOME_'+opt+'.nc') scripting.remove_netcdf(netcdf_output_file) model.outputters += NetCDFOutput(netcdf_output_file, which_data='all') return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2012, 9, 15, 12, 0) mapfile = get_datafile(os.path.join(base_dir, 'LongIslandSoundMap.BNA')) gnome_map = MapFromBNA(mapfile, refloat_halflife=6) # hours # # the image output renderer # global renderer # one hour timestep model = Model(start_time=start_time, duration=timedelta(hours=48), time_step=3600, map=gnome_map, uncertain=True, cache_enabled=True) print 'adding outputters' model.outputters += Renderer(mapfile, images_dir, size=(800, 600)) netcdf_file = os.path.join(base_dir, 'script_long_island.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a spill' spill = point_line_release_spill(num_elements=1000, start_position=(-72.419992, 41.202120, 0.0), release_time=start_time) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=500000, uncertain_factor=2) print 'adding a wind mover:' series = np.zeros((5, ), dtype=datetime_value_2d) series[0] = (start_time, (10, 45)) series[1] = (start_time + timedelta(hours=18), (10, 90)) series[2] = (start_time + timedelta(hours=30), (10, 135)) series[3] = (start_time + timedelta(hours=42), (10, 180)) series[4] = (start_time + timedelta(hours=54), (10, 225)) wind = Wind(timeseries=series, units='m/s') model.movers += WindMover(wind) print 'adding a cats mover:' curr_file = get_datafile(os.path.join(base_dir, 'LI_tidesWAC.CUR')) tide_file = get_datafile(os.path.join(base_dir, 'CLISShio.txt')) c_mover = CatsMover(curr_file, tide=Tide(tide_file)) model.movers += c_mover model.environment += c_mover.tide print 'viewport is:', [o.viewport for o in model.outputters if isinstance(o, Renderer)] return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'creating the maps' mapfile = get_datafile(os.path.join(base_dir, 'LowerMississippiMap.bna')) gnome_map = MapFromBNA(mapfile, refloat_halflife=6) # hours print 'initializing the model' start_time = datetime(2012, 9, 15, 12, 0) # default to now, rounded to the nearest hour model = Model(time_step=600, start_time=start_time, duration=timedelta(days=1), map=gnome_map, uncertain=True) print 'adding outputters' model.outputters += Renderer(mapfile, images_dir, image_size=(800, 600)) netcdf_file = os.path.join(base_dir, 'script_lower_mississippi.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=10000) print 'adding a wind mover:' series = np.zeros((5, ), dtype=datetime_value_2d) series[0] = (start_time, (2, 45)) series[1] = (start_time + timedelta(hours=18), (2, 90)) series[2] = (start_time + timedelta(hours=30), (2, 135)) series[3] = (start_time + timedelta(hours=42), (2, 180)) series[4] = (start_time + timedelta(hours=54), (2, 225)) w_mover = WindMover(Wind(timeseries=series, units='m/s')) model.movers += w_mover print 'adding a cats mover:' curr_file = get_datafile(os.path.join(base_dir, 'LMiss.CUR')) c_mover = CatsMover(curr_file) # but do need to scale (based on river stage) c_mover.scale = True c_mover.scale_refpoint = (-89.699944, 29.494558) # based on stage height 10ft (range is 0-18) c_mover.scale_value = 1.027154 model.movers += c_mover print 'adding a spill' spill = point_line_release_spill(num_elements=1000, start_position=(-89.699944, 29.494558, 0.0), release_time=start_time) model.spills += spill return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'creating the maps' mapfile = get_datafile(os.path.join(base_dir, 'LowerMississippiMap.bna')) gnome_map = MapFromBNA(mapfile, refloat_halflife=6) # hours print 'initializing the model' start_time = datetime(2012, 9, 15, 12, 0) # default to now, rounded to the nearest hour model = Model(time_step=600, start_time=start_time, duration=timedelta(days=1), map=gnome_map, uncertain=True) print 'adding outputters' model.outputters += Renderer(mapfile, images_dir, size=(800, 600)) netcdf_file = os.path.join(base_dir, 'script_lower_mississippi.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=10000) print 'adding a wind mover:' series = np.zeros((5, ), dtype=datetime_value_2d) series[0] = (start_time, (2, 45)) series[1] = (start_time + timedelta(hours=18), (2, 90)) series[2] = (start_time + timedelta(hours=30), (2, 135)) series[3] = (start_time + timedelta(hours=42), (2, 180)) series[4] = (start_time + timedelta(hours=54), (2, 225)) w_mover = WindMover(Wind(timeseries=series, units='m/s')) model.movers += w_mover print 'adding a cats mover:' curr_file = get_datafile(os.path.join(base_dir, 'LMiss.CUR')) c_mover = CatsMover(curr_file) # but do need to scale (based on river stage) c_mover.scale = True c_mover.scale_refpoint = (-89.699944, 29.494558) # based on stage height 10ft (range is 0-18) c_mover.scale_value = 1.027154 model.movers += c_mover print 'adding a spill' spill = point_line_release_spill(num_elements=1000, start_position=(-89.699944, 29.494558, 0.0), release_time=start_time) model.spills += spill return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2006, 3, 31, 20, 0) model = Model(start_time=start_time, duration=timedelta(days=3), time_step=30 * 60, uncertain=True) print 'adding the map' mapfile = get_datafile(os.path.join(base_dir, 'coastSF.bna')) model.map = MapFromBNA(mapfile, refloat_halflife=1) # seconds renderer = Renderer(mapfile, images_dir, image_size=(800, 600), draw_ontop='forecast') renderer.viewport = ((-124.5, 37.), (-120.5, 39)) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_sf_bay.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a spill' spill = point_line_release_spill( num_elements=1000, start_position=(-123.57152, 37.369436, 0.0), release_time=start_time, substance=NonWeatheringSubstance(windage_range=(0.01, .04)) #element_type=floating(windage_range=(0.01, # 0.04) # ) ) model.spills += spill # print 'adding a RandomMover:' # r_mover = gnome.movers.RandomMover(diffusion_coef=50000) # model.movers += r_mover print 'adding a grid wind mover:' wind_file = get_datafile(os.path.join(base_dir, 'WindSpeedDirSubset.nc')) topology_file = get_datafile( os.path.join(base_dir, 'WindSpeedDirSubsetTop.dat')) w_mover = GridWindMover(wind_file, topology_file) # w_mover.uncertain_time_delay = 6 # w_mover.uncertain_duration = 6 w_mover.uncertain_speed_scale = 1 w_mover.uncertain_angle_scale = 0.2 # default is .4 w_mover.wind_scale = 2 model.movers += w_mover return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2006, 3, 31, 20, 0) model = Model(start_time=start_time, duration=timedelta(days=3), time_step=30 * 60, uncertain=True) print 'adding the map' mapfile = get_datafile(os.path.join(base_dir, './coastSF.bna')) model.map = MapFromBNA(mapfile, refloat_halflife=1) # seconds renderer = Renderer(mapfile, images_dir, size=(800, 600), draw_ontop='forecast') renderer.viewport = ((-124.5, 37.), (-120.5, 39)) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_sf_bay.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a spill' spill = point_line_release_spill(num_elements=1000, start_position=(-123.57152, 37.369436, 0.0), release_time=start_time, element_type=floating(windage_range=(0.01, 0.04) ) ) model.spills += spill # print 'adding a RandomMover:' # r_mover = gnome.movers.RandomMover(diffusion_coef=50000) # model.movers += r_mover print 'adding a grid wind mover:' wind_file = get_datafile(os.path.join(base_dir, r"./WindSpeedDirSubset.nc") ) topology_file = get_datafile(os.path.join(base_dir, r"./WindSpeedDirSubsetTop.dat")) w_mover = GridWindMover(wind_file, topology_file) #w_mover.uncertain_time_delay = 6 #w_mover.uncertain_duration = 6 w_mover.uncertain_speed_scale = 1 w_mover.uncertain_angle_scale = 0.2 # default is .4 w_mover.wind_scale = 2 model.movers += w_mover return model
def make_model(images_dir=os.path.join(base_dir, "images")): print "initializing the model" start_time = datetime(2006, 3, 31, 21, 0) model = gnome.model.Model( start_time=start_time, duration=timedelta(days=3), time_step=30 * 60, uncertain=True ) # 1 day of data in file # 1/2 hr in seconds mapfile = get_datafile(os.path.join(base_dir, "./coastSF.bna")) print "adding the map" model.map = gnome.map.MapFromBNA(mapfile, refloat_halflife=1) # seconds renderer = gnome.renderer.Renderer(mapfile, images_dir, size=(800, 600)) renderer.viewport = ((-124.5, 37.0), (-120.5, 39)) print "adding outputters" model.outputters += renderer netcdf_file = os.path.join(base_dir, "script_sf_bay.nc") scripting.remove_netcdf(netcdf_file) model.outputters += gnome.netcdf_outputter.NetCDFOutput(netcdf_file, all_data=True) print "adding a spill" spill = gnome.spill.PointLineSource( num_elements=1000, start_position=(-123.57152, 37.369436, 0.0), release_time=start_time, windage_range=(0.3, 0.3), ) model.spills += spill # print 'adding a RandomMover:' # r_mover = gnome.movers.RandomMover(diffusion_coef=50000) # model.movers += r_mover # print "adding a grid wind mover:" wind_file = get_datafile(os.path.join(base_dir, r"./WindSpeedDirSubset.nc")) topology_file = get_datafile(os.path.join(base_dir, r"./WindSpeedDirSubsetTop.dat")) w_mover = gnome.movers.GridWindMover(wind_file, topology_file) # w_mover.uncertain_time_delay=6 # w_mover.uncertain_duration=6 w_mover.uncertain_speed_scale = 0.5 w_mover.set_uncertain_angle(0, "rad") # default is .4 model.movers += w_mover return model
def make_model(images_dir=os.path.join(base_dir,"images")): print "initializing the model" start_time = datetime(2013, 7, 23, 0) model = Model(start_time = start_time, duration = timedelta(hours=47), # n+1 of data in file time_step = 900, # 4 hr in seconds uncertain = False, ) mapfile = os.path.join(base_dir, './coast.bna') print "adding the map" gnome_map = MapFromBNA(mapfile, refloat_halflife=6) # hours print "adding renderer" model.outputters += Renderer(mapfile, images_dir, size=(1800, 1600)) print "adding a wind mover from a time-series" ## this is wind wind_file=get_datafile(os.path.join(base_dir, 'wind.WND')) wind = Wind(filename=wind_file) w_mover = WindMover(wind) model.movers += w_mover print "adding a current mover:" ## this is currents curr_file = get_datafile(os.path.join(base_dir, 'current.txt')) model.movers += GridCurrentMover(curr_file) ## ## Add some spills (sources of elements) ## print "adding 13 points in a cluster that has some small initial separation as the source of spill" for i in range(len(coor)): aaa=utmToLatLng(14,coor[i][0],coor[i][1],northernHemisphere=True) model.spills += point_line_release_spill(num_elements=1, start_position = (aaa[1],aaa[0], 0.0), release_time = start_time, ) print "adding netcdf output" netcdf_output_file = os.path.join(base_dir,'GNOME_output.nc') scripting.remove_netcdf(netcdf_output_file) model.outputters += NetCDFOutput(netcdf_output_file, which_data='all') return model
def make_modelF(timeStep, start_time, duration, weatheringSteps, map, uncertain, data_path, curr_path, wind_path, map_path, reFloatHalfLife, windFile, currFile, num_elements, depths, lat, lon, output_path, wind_scale, save_nc, timestep_outputs, weatherers, td, dif_coef,temp_water): print 'initializing the model:' model = Model(time_step=timeStep, start_time=start_time, duration=duration, uncertain=uncertain) print 'adding the map:' mapfile = get_datafile(os.path.join(data_path, map_path, map)) model.map = MapFromBNA(mapfile, refloat_halflife=reFloatHalfLife) print 'adding a renderer' if save_nc: scripting.remove_netcdf(output_path+'/'+'output.nc') nc_outputter = NetCDFOutput(output_path+'/'+'output.nc', which_data='standard', output_timestep=timedelta(hours=timestep_outputs)) model.outputters += nc_outputter print 'adding a wind mover:' wind_file = get_datafile(os.path.join(data_path, wind_path, windFile)) wind = GridWindMover(wind_file) # wind.wind_scale = wind_scale model.movers += wind print 'adding a current mover:' curr_file = get_datafile(os.path.join(data_path, curr_path, currFile)) model.movers += GridCurrentMover(curr_file, num_method='RK4') if td: random_mover = RandomMover(diffusion_coef=dif_coef) model.movers += random_mover print 'adding spill' model.spills += point_line_release_spill(num_elements=num_elements, start_position=(lon, lat, 0), release_time=start_time, end_release_time=start_time + duration)#, substance='AD04001', amount=9600000, units='kg') if weatherers: print 'adding weatherers' water = Water(temp_water) wind = constant_wind(0.0001, 0, 'knots') waves = Waves(wind, water) model.weatherers += Evaporation(water, wind) # model.weatherers += Emulsification(waves) model.weatherers += NaturalDispersion(waves, water) return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2004, 12, 31, 13, 0) model = Model(start_time=start_time, duration=timedelta(days=3), time_step=30 * 60, uncertain=False) print 'adding the map' model.map = GnomeMap() # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top renderer = Renderer( output_dir=images_dir, # size=(800, 600), output_timestep=timedelta(hours=1), draw_ontop='uncertain') renderer.viewport = ((-76.5, 37.), (-75.8, 38.)) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_plume.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='most', output_timestep=timedelta(hours=2)) print 'adding two spills' # Break the spill into two spills, first with the larger droplets # and second with the smaller droplets. # Split the total spill volume (100 m^3) to have most # in the larger droplet spill. # Smaller droplets start at a lower depth than larger wd = WeibullDistribution(alpha=1.8, lambda_=.00456, min_=.0002) # 200 micron min end_time = start_time + timedelta(hours=24) # spill = point_line_release_spill(num_elements=10, # amount=90, # default volume_units=m^3 # units='m^3', # start_position=(-76.126872, 37.680952, # 1700), # release_time=start_time, # end_release_time=end_time, # element_type=plume(distribution=wd, # density=600) # ) spill = subsurface_plume_spill( num_elements=10, start_position=(-76.126872, 37.680952, 1700), release_time=start_time, distribution=wd, amount=90, # default volume_units=m^3 units='m^3', end_release_time=end_time, density=600) model.spills += spill wd = WeibullDistribution(alpha=1.8, lambda_=.00456, max_=.0002) # 200 micron max spill = point_line_release_spill( num_elements=10, amount=90, units='m^3', start_position=(-76.126872, 37.680952, 1800), release_time=start_time, element_type=plume(distribution=wd, substance_name='oil_crude')) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=50000) print 'adding a RiseVelocityMover:' model.movers += RiseVelocityMover() print 'adding a RandomVerticalMover:' model.movers += RandomVerticalMover(vertical_diffusion_coef_above_ml=5, vertical_diffusion_coef_below_ml=.11, mixed_layer_depth=10) # print 'adding a wind mover:' # series = np.zeros((2, ), dtype=gnome.basic_types.datetime_value_2d) # series[0] = (start_time, (30, 90)) # series[1] = (start_time + timedelta(hours=23), (30, 90)) # wind = Wind(timeseries=series, units='knot') # # default is .4 radians # w_mover = gnome.movers.WindMover(wind, uncertain_angle_scale=0) # # model.movers += w_mover print 'adding a simple mover:' s_mover = SimpleMover(velocity=(0.0, -.3, 0.0)) model.movers += s_mover return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2014, 6, 9, 0, 0) mapfile = get_datafile(os.path.join(base_dir, 'PassamaquoddyMap.bna')) gnome_map = MapFromBNA(mapfile, refloat_halflife=1) # hours # # the image output renderer # global renderer # one hour timestep model = Model(start_time=start_time, duration=timedelta(hours=24), time_step=360, map=gnome_map, uncertain=False, cache_enabled=True) print 'adding outputters' renderer = Renderer(mapfile, images_dir, size=(800, 600), # output_timestep=timedelta(hours=1), draw_ontop='uncertain') renderer.viewport = ((-67.15, 45.), (-66.9, 45.2)) model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_passamaquoddy.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a spill' spill = point_line_release_spill(num_elements=1000, start_position=(-66.991344, 45.059316, 0.0), release_time=start_time) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=30000, uncertain_factor=2) print 'adding a wind mover:' series = np.zeros((5, ), dtype=datetime_value_2d) series[0] = (start_time, (5, 90)) series[1] = (start_time + timedelta(hours=18), (5, 180)) series[2] = (start_time + timedelta(hours=30), (5, 135)) series[3] = (start_time + timedelta(hours=42), (5, 180)) series[4] = (start_time + timedelta(hours=54), (5, 225)) wind = Wind(timeseries=series, units='m/s') model.movers += WindMover(wind) print 'adding a current mover:' curr_file = get_datafile(os.path.join(base_dir, 'PQBayCur.nc4')) topology_file = get_datafile(os.path.join(base_dir, 'PassamaquoddyTOP.dat') ) tide_file = get_datafile(os.path.join(base_dir, 'EstesHead.txt')) cc_mover = CurrentCycleMover(curr_file, topology_file, tide=Tide(tide_file)) model.movers += cc_mover model.environment += cc_mover.tide print 'viewport is:', [o.viewport for o in model.outputters if isinstance(o, Renderer)] return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(1985, 1, 1, 13, 31) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=4), time_step=7200) # mapfile = get_datafile(os.path.join(base_dir, 'ak_arctic.bna')) mapfile = get_datafile('arctic_coast3.bna') print 'adding the map' model.map = MapFromBNA(mapfile, refloat_halflife=0.0) # seconds print 'adding a spill' # for now subsurface spill stays on initial layer # - will need diffusion and rise velocity # - wind doesn't act # - start_position = (-76.126872, 37.680952, 5.0), # spill1 = point_line_release_spill(num_elements=10000, # start_position=(-163.75, # 69.75, # 0.0), # release_time=start_time) # spill1 = point_line_release_spill(num_elements=50000, start_position=(196.25, 69.75, 0.0), release_time=start_time) model.spills += spill1 # model.spills += spill2 print 'adding a wind mover:' # model.movers += constant_wind_mover(0.5, 0, units='m/s') print 'adding a current mover:' fn = ['arctic_avg2_0001_gnome.nc', 'arctic_avg2_0002_gnome.nc'] # fn = ['C:\\Users\\jay.hennen\\Documents\\Code\\pygnome\\py_gnome\\scripts\\script_TAP\\arctic_avg2_0001_gnome.nc', # 'C:\\Users\\jay.hennen\\Documents\\Code\\pygnome\\py_gnome\\scripts\\script_TAP\\arctic_avg2_0002_gnome.nc'] gt = {'node_lon': 'lon', 'node_lat': 'lat'} # fn='arctic_avg2_0001_gnome.nc' wind_method = 'Euler' method = 'RK2' print 'adding outputters' # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top renderer = Renderer(mapfile, images_dir, image_size=(1024, 768)) model.outputters += renderer netcdf_file = os.path.join(base_dir, str(model.time_step / 60) + method + '.nc') scripting.remove_netcdf(netcdf_file) print 'adding movers' model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'loading entire current data' ice_aware_curr = IceAwareCurrent.from_netCDF(filename=fn, grid_topology=gt) # env1 = get_env_from_netCDF(filename) # mov = PyCurrentMover.from_netCDF(filename) ice_aware_curr.ice_velocity.variables[0].dimension_ordering = [ 'time', 'x', 'y' ] ice_aware_wind = IceAwareWind.from_netCDF( filename=fn, ice_velocity=ice_aware_curr.ice_velocity, ice_concentration=ice_aware_curr.ice_concentration, grid=ice_aware_curr.grid) curr = GridCurrent.from_netCDF(filename=fn) # GridCurrent.is_gridded() # import pprint as pp # from gnome.utilities.orderedcollection import OrderedCollection # model.environment = OrderedCollection(dtype=Environment) # model.environment.add(ice_aware_curr) # from gnome.environment import WindTS print 'loading entire wind data' # i_c_mover = PyCurrentMover(current=ice_aware_curr) # i_c_mover = PyCurrentMover(current=ice_aware_curr, default_num_method='Euler') i_c_mover = PyCurrentMover(current=ice_aware_curr, default_num_method=method, extrapolate=True) i_w_mover = PyWindMover(wind=ice_aware_wind, default_num_method=wind_method) # ice_aware_curr.grid.node_lon = ice_aware_curr.grid.node_lon[:]-360 # ice_aware_curr.grid.build_celltree() model.movers += i_c_mover model.movers += i_w_mover print 'adding an IceAwareRandomMover:' model.movers += IceAwareRandomMover( ice_concentration=ice_aware_curr.ice_concentration, diffusion_coef=1000) # renderer.add_grid(ice_aware_curr.grid) # renderer.add_vec_prop(ice_aware_curr) # curr_file = get_datafile(os.path.join(base_dir, 'COOPSu_CREOFS24.nc')) # c_mover = GridCurrentMover(curr_file) # model.movers += c_mover # model.environment.add(WindTS.constant(10, 300)) # print('Saving') # model.environment[0].ice_velocity.variables[0].serialize() # IceVelocity.deserialize(model.environment[0].ice_velocity.serialize()) # model.save('.') # from gnome.persist.save_load import load # print('Loading') # model2 = load('./Model.zip') return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2015, 5, 14, 0, 0) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=1.75), time_step=60 * 60, uncertain=True) # mapfile = get_datafile(os.path.join(base_dir, './ak_arctic.bna')) # # print 'adding the map' # model.map = MapFromBNA(mapfile, refloat_halflife=1) # seconds # # # draw_ontop can be 'uncertain' or 'forecast' # # 'forecast' LEs are in black, and 'uncertain' are in red # # default is 'forecast' LEs draw on top # renderer = Renderer(mapfile, images_dir, size=(800, 600), # output_timestep=timedelta(hours=2), # draw_ontop='forecast') # # print 'adding outputters' # model.outputters += renderer model.outputters += WeatheringOutput() netcdf_file = os.path.join(base_dir, 'script_weatherers.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all', output_timestep=timedelta(hours=1)) print 'adding a spill' # for now subsurface spill stays on initial layer # - will need diffusion and rise velocity # - wind doesn't act # - start_position = (-76.126872, 37.680952, 5.0), end_time = start_time + timedelta(hours=24) spill = point_line_release_spill( num_elements=100, start_position=(-164.791878561, 69.6252597267, 0.0), release_time=start_time, end_release_time=end_time, amount=1000, substance='ALASKA NORTH SLOPE (MIDDLE PIPELINE)', units='bbl') # set bullwinkle to .303 to cause mass goes to zero bug at 24 hours (when continuous release ends) spill.element_type._substance._bullwinkle = .303 model.spills += spill print 'adding a RandomMover:' #model.movers += RandomMover(diffusion_coef=50000) print 'adding a wind mover:' series = np.zeros((2, ), dtype=datetime_value_2d) series[0] = (start_time, (20, 0)) series[1] = (start_time + timedelta(hours=23), (20, 0)) wind2 = Wind(timeseries=series, units='knot') w_mover = WindMover(wind) model.movers += w_mover print 'adding weatherers and cleanup options:' # define skimmer/burn cleanup options skim1_start = start_time + timedelta(hours=15.58333) skim2_start = start_time + timedelta(hours=16) units = spill.units skimmer1 = Skimmer(80, units=units, efficiency=0.36, active_start=skim1_start, active_stop=skim1_start + timedelta(hours=8)) skimmer2 = Skimmer(120, units=units, efficiency=0.2, active_start=skim2_start, active_stop=skim2_start + timedelta(hours=12)) burn_start = start_time + timedelta(hours=36) burn = Burn(1000., .1, active_start=burn_start, efficiency=.2) chem_start = start_time + timedelta(hours=24) c_disp = ChemicalDispersion(0.5, efficiency=0.4, active_start=chem_start, active_stop=chem_start + timedelta(hours=8)) model.environment += [Water(280.928), wind, waves] model.weatherers += Evaporation(water, wind) model.weatherers += Emulsification(waves) model.weatherers += NaturalDispersion(waves, water) model.weatherers += skimmer1 model.weatherers += skimmer2 model.weatherers += burn model.weatherers += c_disp return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(1985, 1, 1, 13, 31) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=4), time_step=3600) # mapfile = get_datafile(os.path.join(base_dir, 'ak_arctic.bna')) mapfile = get_datafile('arctic_coast3.bna') print 'adding the map' model.map = MapFromBNA(mapfile, refloat_halflife=0.0) # seconds print 'adding a spill' # for now subsurface spill stays on initial layer # - will need diffusion and rise velocity # - wind doesn't act # - start_position = (-76.126872, 37.680952, 5.0), # spill1 = point_line_release_spill(num_elements=10000, # start_position=(-163.75, # 69.75, # 0.0), # release_time=start_time) # spill1 = point_line_release_spill(num_elements=50000, start_position=(196.25, 69.75, 0.0), release_time=start_time) model.spills += spill1 # model.spills += spill2 print 'adding a wind mover:' # model.movers += constant_wind_mover(0.5, 0, units='m/s') print 'adding a current mover:' fn = ['arctic_avg2_0001_gnome.nc', 'arctic_avg2_0002_gnome.nc'] gt = {'node_lon': 'lon', 'node_lat': 'lat'} # fn='arctic_avg2_0001_gnome.nc' wind_method = 'Euler' method = 'Trapezoid' print 'adding outputters' # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top # renderer = Renderer(mapfile, images_dir, image_size=(1024, 768)) # model.outputters += renderer netcdf_file = os.path.join(base_dir, str(model.time_step / 60) + method + '.nc') scripting.remove_netcdf(netcdf_file) print 'adding movers' model.outputters += NetCDFOutput(netcdf_file, which_data='all') load = False print 'loading entire current data' ice_aware_curr = IceAwareCurrent.from_netCDF(filename=fn, grid_topology=gt, load_all=load) print 'loading entire wind data' ice_aware_wind = IceAwareWind.from_netCDF(filename=fn, ice_var=ice_aware_curr.ice_var, ice_conc_var=ice_aware_curr.ice_conc_var, grid=ice_aware_curr.grid, load_all=load) # i_c_mover = PyGridCurrentMover(current=ice_aware_curr) # i_c_mover = PyGridCurrentMover(current=ice_aware_curr, default_num_method='Euler') i_c_mover = PyGridCurrentMover(current=ice_aware_curr, default_num_method=method, extrapolate=True) i_w_mover = PyWindMover(wind=ice_aware_wind, default_num_method=wind_method) # ice_aware_curr.grid.node_lon = ice_aware_curr.grid.node_lon[:]-360 # ice_aware_curr.grid.build_celltree() model.movers += i_c_mover model.movers += i_w_mover print 'adding an IceAwareRandomMover:' model.movers += IceAwareRandomMover(ice_conc_var=ice_aware_curr.ice_conc_var, diffusion_coef=1000) # renderer.add_grid(ice_aware_curr.grid) # renderer.add_vec_prop(ice_aware_curr) # renderer.set_viewport(((-190.9, 60), (-72, 89))) # curr_file = get_datafile(os.path.join(base_dir, 'COOPSu_CREOFS24.nc')) # c_mover = GridCurrentMover(curr_file) # model.movers += c_mover return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(1985, 1, 1, 13, 31) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=4), time_step=7200) # mapfile = get_datafile(os.path.join(base_dir, 'ak_arctic.bna')) mapfile = get_datafile('arctic_coast3.bna') print 'adding the map' model.map = MapFromBNA(mapfile, refloat_halflife=0.0) # seconds print 'adding a spill' # for now subsurface spill stays on initial layer # - will need diffusion and rise velocity # - wind doesn't act # - start_position = (-76.126872, 37.680952, 5.0), # spill1 = point_line_release_spill(num_elements=10000, # start_position=(-163.75, # 69.75, # 0.0), # release_time=start_time) # spill1 = point_line_release_spill(num_elements=50000, start_position=(196.25, 69.75, 0.0), release_time=start_time) model.spills += spill1 # model.spills += spill2 print 'adding a wind mover:' # model.movers += constant_wind_mover(0.5, 0, units='m/s') print 'adding a current mover:' fn = ['arctic_avg2_0001_gnome.nc', 'arctic_avg2_0002_gnome.nc'] # fn = ['C:\\Users\\jay.hennen\\Documents\\Code\\pygnome\\py_gnome\\scripts\\script_TAP\\arctic_avg2_0001_gnome.nc', # 'C:\\Users\\jay.hennen\\Documents\\Code\\pygnome\\py_gnome\\scripts\\script_TAP\\arctic_avg2_0002_gnome.nc'] gt = {'node_lon': 'lon', 'node_lat': 'lat'} # fn='arctic_avg2_0001_gnome.nc' wind_method = 'Euler' method = 'RK2' print 'adding outputters' # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top renderer = Renderer(mapfile, images_dir, image_size=(1024, 768)) model.outputters += renderer netcdf_file = os.path.join(base_dir, str(model.time_step / 60) + method + '.nc') scripting.remove_netcdf(netcdf_file) print 'adding movers' model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'loading entire current data' ice_aware_curr = IceAwareCurrent.from_netCDF(filename=fn, grid_topology=gt) # env1 = get_env_from_netCDF(filename) # mov = PyCurrentMover.from_netCDF(filename) ice_aware_curr.ice_velocity.variables[0].dimension_ordering = ['time', 'x', 'y'] ice_aware_wind = IceAwareWind.from_netCDF(filename=fn, ice_velocity=ice_aware_curr.ice_velocity, ice_concentration=ice_aware_curr.ice_concentration, grid=ice_aware_curr.grid) curr = GridCurrent.from_netCDF(filename=fn) # GridCurrent.is_gridded() # import pprint as pp # from gnome.utilities.orderedcollection import OrderedCollection # model.environment = OrderedCollection(dtype=Environment) # model.environment.add(ice_aware_curr) # from gnome.environment import WindTS print 'loading entire wind data' # i_c_mover = PyCurrentMover(current=ice_aware_curr) # i_c_mover = PyCurrentMover(current=ice_aware_curr, default_num_method='Euler') i_c_mover = PyCurrentMover(current=ice_aware_curr, default_num_method=method, extrapolate=True) i_w_mover = PyWindMover(wind=ice_aware_wind, default_num_method=wind_method) # ice_aware_curr.grid.node_lon = ice_aware_curr.grid.node_lon[:]-360 # ice_aware_curr.grid.build_celltree() model.movers += i_c_mover model.movers += i_w_mover print 'adding an IceAwareRandomMover:' model.movers += IceAwareRandomMover(ice_concentration=ice_aware_curr.ice_concentration, diffusion_coef=1000) # renderer.add_grid(ice_aware_curr.grid) # renderer.add_vec_prop(ice_aware_curr) # curr_file = get_datafile(os.path.join(base_dir, 'COOPSu_CREOFS24.nc')) # c_mover = GridCurrentMover(curr_file) # model.movers += c_mover # model.environment.add(WindTS.constant(10, 300)) # print('Saving') # model.environment[0].ice_velocity.variables[0].serialize() # IceVelocity.deserialize(model.environment[0].ice_velocity.serialize()) # model.save('.') # from gnome.persist.save_load import load # print('Loading') # model2 = load('./Model.zip') return model
def make_model(images_dir=os.path.join(base_dir, 'images')): # create the maps: start_time = datetime(2013, 3, 12, 10, 0) # 15 minutes in seconds # Default to now, rounded to the nearest hour model = Model(time_step=60 * 60, start_time=start_time, duration=timedelta(days=1), uncertain=False) print 'adding outputters' renderer = Renderer(output_dir=images_dir, image_size=(800, 800), # viewport=((-70.25, 41.75), # FIXME -- why doesn't this work? # (-69.75, 42.25)), projection_class=GeoProjection) renderer.viewport = ((-70.25, 41.75), (-69.75, 42.25)) model.outputters += renderer netcdf_file = os.path.join(base_dir, 'surface_concentration.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, surface_conc='kde') shape_file = os.path.join(base_dir, 'surface_concentration') model.outputters += ShapeOutput(shape_file, surface_conc='kde') shp_file = os.path.join(base_dir, 'surface_concentration') scripting.remove_netcdf(shp_file + ".zip") model.outputters += ShapeOutput(shp_file, zip_output=False, surface_conc="kde", ) print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=100000) print 'adding a wind mover:' series = np.zeros((2, ), dtype=datetime_value_2d) series[0] = (start_time, (5, 270)) series[1] = (start_time + timedelta(hours=25), (5, 270)) w_mover = WindMover(Wind(timeseries=series, units='m/s')) model.movers += w_mover model.environment += w_mover.wind print 'adding a spill' end_time = start_time + timedelta(hours=12) spill = point_line_release_spill(num_elements=100, amount=10000, units='gal', start_position=(-70.0, 42, 0.0), release_time=start_time, end_release_time=end_time, ) model.spills += spill return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' # start_time = datetime(1985, 7, 1, 13, 30) start_time = datetime(1985, 1, 2, 0, 0) # model time-step in seconds model = Model(start_time=start_time, duration=timedelta(hours=3 * 24 + 23), time_step=15 * 60, uncertain=False) print 'adding the map' mapfile = get_datafile(os.path.join(base_dir, 'coast_SBbig.bna')) model.map = MapFromBNA(mapfile, refloat_halflife=6) # hours print 'adding outputters' renderer = Renderer(mapfile, images_dir, size=(800, 600)) renderer.viewport = ((-122, 33), (-117, 35)) model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_SB') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a spill' end_time = start_time + timedelta(hours=24) spill = point_line_release_spill(num_elements=1000, start_position=(202.294666, 71.922333, 0.0), release_time=start_time, end_release_time=end_time) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=50000) print 'adding a current mover:' # currents from ROMS Santa Barbara run, provided by UCLA curr_file = os.path.join(base_dir, 'BOEM', 'Currentfilelist.txt') print curr_file topology_file = os.path.join(base_dir, 'TopologyCurrent.DAT') model.movers += GridCurrentMover(curr_file, topology_file) # model.movers += GridCurrentMover(curr_file) print 'adding a wind mover:' # winds from the ROMS Arctic run, provided by Walter Johnson wind_file = os.path.join(base_dir, 'BOEM', 'Windfilelist.txt') print wind_file topology_file = os.path.join(base_dir, 'TopologyCurrent.DAT') model.movers += GridWindMover(wind_file, topology_file) # model.movers += GridWindMover(wind_file, topology_file) # print 'adding an ice mover:' # ice from the ROMS Arctic run, provided by Walter Johnson # ice_file = os.path.join(base_dir, 'data_gnome', 'ROMS_h2ouv', 'arctic_filelist.txt') # topology_file = os.path.join(base_dir, 'data_gnome', 'arctic_subset_newtopo2.DAT') # model.movers += IceMover(ice_file, topology_file) # model.movers += IceMover(ice_file) # print ice_file return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = "1985-01-01T13:31" model = gs.Model(start_time=start_time, duration=gs.days(2), time_step=gs.hours(1)) mapfile = gs.get_datafile(os.path.join(base_dir, 'ak_arctic.bna')) print 'adding the map' model.map = gs.MapFromBNA(mapfile, refloat_halflife=0.0) # seconds print 'adding outputters' renderer = gs.Renderer(mapfile, images_dir, image_size=(1024, 768)) renderer.set_viewport(((-165, 69), (-161.5, 70))) # model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_ice.nc') gs.remove_netcdf(netcdf_file) model.outputters += gs.NetCDFOutput(netcdf_file, which_data='all') print 'adding a spill' # For a subsurfce spill, you would need to add vertical movers: # - gs.RiseVelocityMover # - gs.RandomVerticalMover spill1 = gs.point_line_release_spill(num_elements=1000, start_position=(-163.75, 69.75, 0.0), release_time=start_time) model.spills += spill1 print 'adding the ice movers' fn = [ gs.get_datafile('arctic_avg2_0001_gnome.nc'), gs.get_datafile('arctic_avg2_0002_gnome.nc'), ] gt = {'node_lon': 'lon', 'node_lat': 'lat'} ice_aware_curr = gs.IceAwareCurrent.from_netCDF(filename=fn, grid_topology=gt) ice_aware_wind = gs.IceAwareWind.from_netCDF( filename=fn, grid=ice_aware_curr.grid, ) method = 'RK2' i_c_mover = gs.PyCurrentMover(current=ice_aware_curr, default_num_method=method) i_w_mover = gs.PyWindMover(wind=ice_aware_wind, default_num_method=method) # shifting to -360 to 0 longitude ice_aware_curr.grid.node_lon = ice_aware_curr.grid.node_lon[:] - 360 model.movers += i_c_mover model.movers += i_w_mover print 'adding an Ice RandomMover:' model.movers += IceAwareRandomMover( ice_concentration=ice_aware_curr.ice_concentration, diffusion_coef=50000) # to visualize the grid and currents # renderer.add_grid(ice_aware_curr.grid) # renderer.add_vec_prop(ice_aware_curr) return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' # set up the modeling environment start_time = datetime(2016, 9, 18, 1, 0) model = Model(start_time=start_time, duration=timedelta(days=3), time_step=30 * 60, uncertain=False) print 'adding the map' model.map = GnomeMap() # this is a "water world -- no land anywhere" # renderere is only top-down view on 2d -- but it's something renderer = Renderer( output_dir=images_dir, size=(1024, 768), output_timestep=timedelta(hours=1), ) renderer.viewport = ((-87.095, 27.595), (-87.905, 28.405)) print 'adding outputters' model.outputters += renderer # Also going to write the results out to a netcdf file netcdf_file = os.path.join(base_dir, 'gulf_tamoc.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput( netcdf_file, which_data='most', # output most of the data associated with the elements output_timestep=timedelta(hours=2)) print "adding Horizontal and Vertical diffusion" # Horizontal Diffusion model.movers += RandomMover(diffusion_coef=100000) # vertical diffusion (different above and below the mixed layer) model.movers += RandomVerticalMover( vertical_diffusion_coef_above_ml=50, vertical_diffusion_coef_below_ml=10, horizontal_diffusion_coef_above_ml=100000, horizontal_diffusion_coef_below_ml=100, mixed_layer_depth=10) print 'adding Rise Velocity' # droplets rise as a function of their density and radius model.movers += TamocRiseVelocityMover() print 'adding the 3D current mover' gc = GridCurrent.from_netCDF('HYCOM_3d.nc') model.movers += GridCurrentMover('HYCOM_3d.nc') # model.movers += SimpleMover(velocity=(0., 0, 0.)) # model.movers += constant_wind_mover(5, 315, units='knots') # Wind from a buoy w = Wind(filename='KIKT.osm') model.movers += WindMover(w) # Now to add in the TAMOC "spill" print "Adding TAMOC spill" model.spills += tamoc_spill.TamocSpill( release_time=start_time, start_position=(-87.5, 28.0, 2000), num_elements=30000, end_release_time=start_time + timedelta(days=2), name='TAMOC plume', TAMOC_interval=None, # how often to re-run TAMOC ) model.spills[0].data_sources['currents'] = gc return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2015, 5, 14, 0, 0) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=1.75), time_step=60 * 60, uncertain=True) # mapfile = get_datafile(os.path.join(base_dir, './ak_arctic.bna')) # # print 'adding the map' # model.map = MapFromBNA(mapfile, refloat_halflife=1) # seconds # # # draw_ontop can be 'uncertain' or 'forecast' # # 'forecast' LEs are in black, and 'uncertain' are in red # # default is 'forecast' LEs draw on top # renderer = Renderer(mapfile, images_dir, image_size=(800, 600), # output_timestep=timedelta(hours=2), # draw_ontop='forecast') # # print 'adding outputters' # model.outputters += renderer model.outputters += WeatheringOutput('.\\') netcdf_file = os.path.join(base_dir, 'script_weatherers.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all', output_timestep=timedelta(hours=1)) print 'adding a spill' # for now subsurface spill stays on initial layer # - will need diffusion and rise velocity # - wind doesn't act # - start_position = (-76.126872, 37.680952, 5.0), end_time = start_time + timedelta(hours=24) spill = point_line_release_spill(num_elements=100, start_position=(-164.791878561, 69.6252597267, 0.0), release_time=start_time, end_release_time=end_time, amount=1000, substance='ALASKA NORTH SLOPE (MIDDLE PIPELINE, 1997)', units='bbl') # set bullwinkle to .303 to cause mass goes to zero bug at 24 hours (when continuous release ends) spill.element_type._substance._bullwinkle = .303 model.spills += spill print 'adding a RandomMover:' # model.movers += RandomMover(diffusion_coef=50000) print 'adding a wind mover:' series = np.zeros((2,), dtype=datetime_value_2d) series[0] = (start_time, (20, 0)) series[1] = (start_time + timedelta(hours=23), (20, 0)) wind2 = Wind(timeseries=series, units='knot') w_mover = WindMover(wind) model.movers += w_mover print 'adding weatherers and cleanup options:' # define skimmer/burn cleanup options skim1_start = start_time + timedelta(hours=15.58333) skim2_start = start_time + timedelta(hours=16) units = spill.units skimmer1 = Skimmer(80, units=units, efficiency=0.36, active_start=skim1_start, active_stop=skim1_start + timedelta(hours=8)) skimmer2 = Skimmer(120, units=units, efficiency=0.2, active_start=skim2_start, active_stop=skim2_start + timedelta(hours=12)) burn_start = start_time + timedelta(hours=36) burn = Burn(1000., .1, active_start=burn_start, efficiency=.2) chem_start = start_time + timedelta(hours=24) # c_disp = ChemicalDispersion(0.5, efficiency=0.4, # active_start=chem_start, # active_stop=chem_start + timedelta(hours=8)) model.environment += [Water(280.928), wind, waves] model.weatherers += Evaporation(water, wind) model.weatherers += Emulsification(waves) model.weatherers += NaturalDispersion(waves, water) model.weatherers += skimmer1 model.weatherers += skimmer2 model.weatherers += burn # model.weatherers += c_disp return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = "1985-01-01T13:31" model = gs.Model(start_time=start_time, duration=gs.days(2), time_step=gs.hours(1)) mapfile = gs.get_datafile(os.path.join(base_dir, 'ak_arctic.bna')) print 'adding the map' model.map = gs.MapFromBNA(mapfile, refloat_halflife=0.0) # seconds print 'adding outputters' renderer = gs.Renderer(mapfile, images_dir, image_size=(1024, 768)) renderer.set_viewport(((-165, 69), (-161.5, 70))) # model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_ice.nc') gs.remove_netcdf(netcdf_file) model.outputters += gs.NetCDFOutput(netcdf_file, which_data='all') print 'adding a spill' # For a subsurfce spill, you would need to add vertical movers: # - gs.RiseVelocityMover # - gs.RandomVerticalMover spill1 = gs.point_line_release_spill(num_elements=1000, start_position=(-163.75, 69.75, 0.0), release_time=start_time) model.spills += spill1 print 'adding the ice movers' fn = [gs.get_datafile('arctic_avg2_0001_gnome.nc'), gs.get_datafile('arctic_avg2_0002_gnome.nc'), ] gt = {'node_lon': 'lon', 'node_lat': 'lat'} ice_aware_curr = gs.IceAwareCurrent.from_netCDF(filename=fn, grid_topology=gt) ice_aware_wind = gs.IceAwareWind.from_netCDF(filename=fn, grid=ice_aware_curr.grid,) method = 'RK2' i_c_mover = gs.PyCurrentMover(current=ice_aware_curr, default_num_method=method) i_w_mover = gs.PyWindMover(wind=ice_aware_wind, default_num_method=method) # shifting to -360 to 0 longitude ice_aware_curr.grid.node_lon = ice_aware_curr.grid.node_lon[:] - 360 model.movers += i_c_mover model.movers += i_w_mover print 'adding an Ice RandomMover:' model.movers += IceAwareRandomMover(ice_concentration=ice_aware_curr.ice_concentration, diffusion_coef=50000) # to visualize the grid and currents # renderer.add_grid(ice_aware_curr.grid) # renderer.add_vec_prop(ice_aware_curr) return model
def make_model(images_dir=os.path.join(base_dir, 'images')): # create the maps: print 'creating the maps' mapfile = get_datafile(os.path.join(base_dir, './MassBayMap.bna')) gnome_map = MapFromBNA(mapfile, refloat_halflife=1) # hours renderer = Renderer(mapfile, images_dir, size=(800, 800), projection_class=GeoProjection) print 'initializing the model' start_time = datetime(2013, 3, 12, 10, 0) # 15 minutes in seconds # Default to now, rounded to the nearest hour model = Model(time_step=900, start_time=start_time, duration=timedelta(days=1), map=gnome_map, uncertain=False) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_boston.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=100000) print 'adding a wind mover:' series = np.zeros((2, ), dtype=datetime_value_2d) series[0] = (start_time, (5, 180)) series[1] = (start_time + timedelta(hours=18), (5, 180)) w_mover = WindMover(Wind(timeseries=series, units='m/s')) model.movers += w_mover model.environment += w_mover.wind print 'adding a cats shio mover:' curr_file = get_datafile(os.path.join(base_dir, r"./EbbTides.cur")) tide_file = get_datafile(os.path.join(base_dir, r"./EbbTidesShio.txt")) c_mover = CatsMover(curr_file, tide=Tide(tide_file)) # this is the value in the file (default) c_mover.scale_refpoint = (-70.8875, 42.321333) c_mover.scale = True c_mover.scale_value = -1 model.movers += c_mover # TODO: cannot add this till environment base class is created model.environment += c_mover.tide print 'adding a cats ossm mover:' #ossm_file = get_datafile(os.path.join(base_dir, # r"./MerrimackMassCoastOSSM.txt")) curr_file = get_datafile(os.path.join(base_dir, r"./MerrimackMassCoast.cur")) tide_file = get_datafile(os.path.join(base_dir, r"./MerrimackMassCoastOSSM.txt")) c_mover = CatsMover(curr_file, tide=Tide(tide_file)) # but do need to scale (based on river stage) c_mover.scale = True c_mover.scale_refpoint = (-70.65, 42.58333) c_mover.scale_value = 1. model.movers += c_mover model.environment += c_mover.tide print 'adding a cats mover:' curr_file = get_datafile(os.path.join(base_dir, r"MassBaySewage.cur")) c_mover = CatsMover(curr_file) # but do need to scale (based on river stage) c_mover.scale = True c_mover.scale_refpoint = (-70.78333, 42.39333) # the scale factor is 0 if user inputs no sewage outfall effects c_mover.scale_value = .04 model.movers += c_mover # print "adding a component mover:" # component_file1 = os.path.join( base_dir, r"./WAC10msNW.cur") # component_file2 = os.path.join( base_dir, r"./WAC10msSW.cur") print 'adding a spill' end_time = start_time + timedelta(hours=12) spill = point_line_release_spill(num_elements=1000, start_position=(-70.911432, 42.369142, 0.0), release_time=start_time, end_release_time=end_time) model.spills += spill return model
def make_model(images_dir=os.path.join(base_dir, "images")): print "initializing the model" start_time = datetime(1985, 1, 1, 13, 31) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=4), time_step=3600) mapfile = get_datafile(os.path.join(base_dir, "ak_arctic.bna")) print "adding the map" model.map = MapFromBNA(mapfile, refloat_halflife=0.0) # seconds print "adding outputters" # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top # renderer = Renderer(mapfile, images_dir, image_size=(1024, 768)) # model.outputters += renderer netcdf_file = os.path.join(base_dir, "script_ice.nc") scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data="all") print "adding a spill" # for now subsurface spill stays on initial layer # - will need diffusion and rise velocity # - wind doesn't act # - start_position = (-76.126872, 37.680952, 5.0), spill1 = point_line_release_spill(num_elements=10000, start_position=(-163.75, 69.75, 0.0), release_time=start_time) # # spill2 = point_line_release_spill(num_elements=5000, # start_position=(-163.75, # 69.5, # 0.0), # release_time=start_time) model.spills += spill1 # model.spills += spill2 print "adding a RandomMover:" model.movers += RandomMover(diffusion_coef=1000) print "adding a wind mover:" # model.movers += constant_wind_mover(0.5, 0, units='m/s') print "adding a current mover:" fn = [get_datafile("arctic_avg2_0001_gnome.nc"), get_datafile("arctic_avg2_0002_gnome.nc")] gt = {"node_lon": "lon", "node_lat": "lat"} ice_aware_curr = IceAwareCurrent.from_netCDF(filename=fn, grid_topology=gt) ice_aware_wind = IceAwareWind.from_netCDF(filename=fn, grid=ice_aware_curr.grid) method = "Trapezoid" # i_c_mover = PyGridCurrentMover(current=ice_aware_curr) # i_c_mover = PyGridCurrentMover(current=ice_aware_curr, default_num_method='Euler') i_c_mover = PyGridCurrentMover(current=ice_aware_curr, default_num_method=method) i_w_mover = PyWindMover(wind=ice_aware_wind, default_num_method=method) ice_aware_curr.grid.node_lon = ice_aware_curr.grid.node_lon[:] - 360 # ice_aware_curr.grid.build_celltree() model.movers += i_c_mover model.movers += i_w_mover # renderer.add_grid(ice_aware_curr.grid) # renderer.add_vec_prop(ice_aware_curr) # renderer.set_viewport(((-190.9, 60), (-72, 89))) # curr_file = get_datafile(os.path.join(base_dir, 'COOPSu_CREOFS24.nc')) # c_mover = GridCurrentMover(curr_file) # model.movers += c_mover return model
def make_model(images_dir=os.path.join(base_dir, 'images')): # create the maps: print 'creating the maps' mapfile = get_datafile(os.path.join(base_dir, './DelawareRiverMap.bna')) gnome_map = MapFromBNA(mapfile, refloat_halflife=1) # hours renderer = Renderer(mapfile, images_dir, size=(800, 800), projection_class=GeoProjection) print 'initializing the model' start_time = datetime(2012, 8, 20, 13, 0) # 15 minutes in seconds # Default to now, rounded to the nearest hour model = Model(time_step=900, start_time=start_time, duration=timedelta(days=1), map=gnome_map, uncertain=False) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_delaware_bay.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=100000) print 'adding a wind mover:' series = np.zeros((2, ), dtype=datetime_value_2d) series[0] = (start_time, (5, 270)) series[1] = (start_time + timedelta(hours=18), (5, 270)) wind_file = get_datafile(os.path.join(base_dir, r"ConstantWind.WND")) # wind = Wind(filename=wind_file) wind = Wind(timeseries=series, units='m/s') w_mover = WindMover(wind) #w_mover = WindMover(Wind(timeseries=series, units='knots')) model.movers += w_mover print 'adding a cats shio mover:' curr_file = get_datafile(os.path.join(base_dir, r"./FloodTides.cur")) tide_file = get_datafile(os.path.join(base_dir, r"./FloodTidesShio.txt")) c_mover = CatsMover(curr_file, tide=Tide(tide_file)) # this is the value in the file (default) c_mover.scale_refpoint = (-75.081667,38.7995) c_mover.scale = True c_mover.scale_value = 1 model.movers += c_mover # TODO: cannot add this till environment base class is created model.environment += c_mover.tide print 'adding a cats mover:' curr_file = get_datafile(os.path.join(base_dir, r"./Offshore.cur")) c_mover = CatsMover(curr_file) # but do need to scale (based on river stage) c_mover.scale = True c_mover.scale_refpoint = (-74.7483333,38.898333) c_mover.scale_value = .03 model.movers += c_mover # # pat1Angle 315; pat1Speed 30; pat1SpeedUnits knots; pat1ScaleToValue 0.314426 # these are from windows they don't match Mac values... # pat2Angle 225; pat2Speed 30; pat2SpeedUnits knots; pat2ScaleToValue 0.032882 # scaleBy WindStress print 'adding a component mover:' curr_file1 = get_datafile(os.path.join(base_dir, r"NW30ktwinds.cur")) curr_file2 = get_datafile(os.path.join(base_dir, r"SW30ktwinds.cur")) comp_mover = ComponentMover(curr_file1, curr_file2, wind) #todo: following is not working when model is saved out - fix #comp_mover = ComponentMover(curr_file1, curr_file2, Wind(timeseries=series, units='m/s')) #comp_mover = ComponentMover(curr_file1, curr_file2, wind=Wind(filename=wind_file)) comp_mover.ref_point = (-75.263166,39.1428333) comp_mover.pat1_angle = 315 comp_mover.pat1_speed = 30 comp_mover.pat1_speed_units = 1 #comp_mover.pat1ScaleToValue = .314426 comp_mover.pat1_scale_to_value = .502035 comp_mover.pat2_angle = 225 comp_mover.pat2_speed = 30 comp_mover.pat2_speed_units = 1 #comp_mover.pat2ScaleToValue = .032882 comp_mover.pat2_scale_to_value = .021869 model.movers += comp_mover print 'adding a spill' end_time = start_time + timedelta(hours=12) spill = point_line_release_spill(num_elements=1000, start_position=(-75.262319, 39.142987, 0.0), release_time=start_time) #end_release_time=end_time) model.spills += spill return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(1985, 1, 1, 13, 31) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=4), time_step=3600*2) mapfile = get_datafile(os.path.join(base_dir, 'arctic_coast3.bna')) print 'adding the map' model.map = MapFromBNA(mapfile, refloat_halflife=0.0) # seconds # model.map = GnomeMap() print 'adding outputters' # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top # renderer = Renderer(mapfile, images_dir, image_size=(1024, 768)) # model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_old_TAPa.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a spill' # for now subsurface spill stays on initial layer # - will need diffusion and rise velocity # - wind doesn't act # - start_position = (-76.126872, 37.680952, 5.0), spill1 = point_line_release_spill(num_elements=10000, start_position=(196.25, 69.75, 0.0), release_time=start_time) # # spill2 = point_line_release_spill(num_elements=5000, # start_position=(-163.75, # 69.5, # 0.0), # release_time=start_time) model.spills += spill1 # model.spills += spill2 print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=1000) print 'adding a wind mover:' # winds from the ROMS Arctic run, provided by Walter Johnson wind_file = os.path.join(base_dir, 'arctic_filelist.txt') print wind_file topology_file = os.path.join(base_dir, 'arctic_subset_newtopo2.DAT') model.movers += IceWindMover(wind_file, topology_file) # model.movers += GridWindMover(wind_file, topology_file) # model.movers += GridWindMover(wind_file, topology_file) print 'adding an ice mover:' # ice from the ROMS Arctic run, provided by Walter Johnson ice_file = os.path.join(base_dir, 'arctic_filelist.txt') topology_file = os.path.join(base_dir, 'arctic_subset_newtopo2.DAT') model.movers += IceMover(ice_file, topology_file) # model.movers += IceMover(ice_file) print ice_file print 'adding a current mover:' # # fn = ['N:\\Users\\Dylan.Righi\\OutBox\\ArcticROMS\\arctic_avg2_0001_gnome.nc', # 'N:\\Users\\Dylan.Righi\\OutBox\\ArcticROMS\\arctic_avg2_0002_gnome.nc'] # # gt = {'node_lon':'lon', # 'node_lat':'lat'} # # fn='arctic_avg2_0001_gnome.nc' # # ice_aware_curr = IceAwareCurrent.from_netCDF(filename=fn, # grid_topology=gt) # ice_aware_wind = IceAwareWind.from_netCDF(filename=fn, # grid = ice_aware_curr.grid,) # method = 'Trapezoid' # # # i_c_mover = PyGridCurrentMover(current=ice_aware_curr) # # i_c_mover = PyGridCurrentMover(current=ice_aware_curr, default_num_method='Euler') # i_c_mover = PyGridCurrentMover(current=ice_aware_curr, default_num_method=method) # i_w_mover = PyWindMover(wind = ice_aware_wind, default_num_method=method) # # ice_aware_curr.grid.node_lon = ice_aware_curr.grid.node_lon[:]-360 # # ice_aware_curr.grid.build_celltree() # model.movers += i_c_mover # model.movers += i_w_mover # renderer.add_grid(ice_aware_curr.grid) # renderer.add_vec_prop(ice_aware_curr) # renderer.set_viewport(((-190.9, 60), (-72, 89))) # curr_file = get_datafile(os.path.join(base_dir, 'COOPSu_CREOFS24.nc')) # c_mover = GridCurrentMover(curr_file) # model.movers += c_mover model.save('.') return model
def make_model(images_dir=os.path.join(base_dir, 'images')): # create the maps: start_time = datetime(2013, 3, 12, 10, 0) # 15 minutes in seconds # Default to now, rounded to the nearest hour model = Model(time_step=60 * 60, start_time=start_time, duration=timedelta(days=1), uncertain=False) print 'adding outputters' renderer = Renderer( output_dir=images_dir, image_size=(800, 800), # viewport=((-70.25, 41.75), # FIXME -- why doesn't this work? # (-69.75, 42.25)), projection_class=GeoProjection) renderer.viewport = ((-70.25, 41.75), (-69.75, 42.25)) model.outputters += renderer netcdf_file = os.path.join(base_dir, 'surface_concentration.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, surface_conc='kde') shape_file = os.path.join(base_dir, 'surface_concentration') model.outputters += ShapeOutput(shape_file, surface_conc='kde') shp_file = os.path.join(base_dir, 'surface_concentration') scripting.remove_netcdf(shp_file + ".zip") model.outputters += ShapeOutput( shp_file, zip_output=False, surface_conc="kde", ) print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=100000) print 'adding a wind mover:' series = np.zeros((2, ), dtype=datetime_value_2d) series[0] = (start_time, (5, 270)) series[1] = (start_time + timedelta(hours=25), (5, 270)) w_mover = WindMover(Wind(timeseries=series, units='m/s')) model.movers += w_mover model.environment += w_mover.wind print 'adding a spill' end_time = start_time + timedelta(hours=12) spill = point_line_release_spill( num_elements=100, amount=10000, units='gal', start_position=(-70.0, 42, 0.0), release_time=start_time, end_release_time=end_time, ) model.spills += spill return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2004, 12, 31, 13, 0) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=1), time_step=30 * 60, uncertain=True) mapfile = get_datafile(os.path.join(base_dir, 'ChesapeakeBay.bna')) print 'adding the map' model.map = MapFromBNA(mapfile, refloat_halflife=1) # seconds # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top renderer = Renderer(mapfile, images_dir, size=(800, 600), output_timestep=timedelta(hours=2), draw_ontop='forecast') # set the viewport to zoom in on the map: renderer.viewport = ((-76.5, 37.), (-75.8, 38.)) # add the raster map, so we can see it... # note: this is really slow, so only use for diagnostics # renderer.raster_map = model.map print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_chesapeake_bay.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all', output_timestep=timedelta(hours=2)) print 'adding a spill' # for now subsurface spill stays on initial layer # - will need diffusion and rise velocity # - wind doesn't act # - start_position = (-76.126872, 37.680952, 5.0), spill = point_line_release_spill(num_elements=1000, start_position=(-76.126872, 37.680952, 0.0), release_time=start_time) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=50000) print 'adding a wind mover:' series = np.zeros((2, ), dtype=datetime_value_2d) series[0] = (start_time, (30, 0)) series[1] = (start_time + timedelta(hours=23), (30, 0)) wind = Wind(timeseries=series, units='knot') # default is .4 radians w_mover = WindMover(wind, uncertain_angle_scale=0) w_mover.extrapolate=True model.movers += w_mover print 'adding a current mover:' curr_file = get_datafile(os.path.join(base_dir, 'ChesapeakeBay.nc')) topology_file = get_datafile(os.path.join(base_dir, 'ChesapeakeBay.dat')) # uncertain_time_delay in hours c_mover = GridCurrentMover(curr_file, topology_file, uncertain_time_delay=3) c_mover.uncertain_along = 0 # default is .5 # c_mover.uncertain_cross = 0 # default is .25 model.movers += c_mover return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' # set up the modeling environment start_time = datetime(2016, 9, 18, 1, 0) model = Model(start_time=start_time, duration=timedelta(days=3), time_step=30 * 60, uncertain=False) print 'adding the map' model.map = GnomeMap() # this is a "water world -- no land anywhere" # renderere is only top-down view on 2d -- but it's something renderer = Renderer(output_dir=images_dir, size=(1024, 768), output_timestep=timedelta(hours=1), ) renderer.viewport = ((-87.095, 27.595), (-87.905, 28.405)) print 'adding outputters' model.outputters += renderer # Also going to write the results out to a netcdf file netcdf_file = os.path.join(base_dir, 'gulf_tamoc.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='most', # output most of the data associated with the elements output_timestep=timedelta(hours=2)) print "adding Horizontal and Vertical diffusion" # Horizontal Diffusion model.movers += RandomMover(diffusion_coef=100000) # vertical diffusion (different above and below the mixed layer) model.movers += RandomVerticalMover(vertical_diffusion_coef_above_ml=50, vertical_diffusion_coef_below_ml=10, horizontal_diffusion_coef_above_ml=100000, horizontal_diffusion_coef_below_ml=100, mixed_layer_depth=10) print 'adding Rise Velocity' # droplets rise as a function of their density and radius model.movers += TamocRiseVelocityMover() print 'adding the 3D current mover' gc = GridCurrent.from_netCDF('HYCOM_3d.nc') model.movers += GridCurrentMover('HYCOM_3d.nc') # model.movers += SimpleMover(velocity=(0., 0, 0.)) # model.movers += constant_wind_mover(5, 315, units='knots') # Wind from a buoy w = Wind(filename='KIKT.osm') model.movers += WindMover(w) # Now to add in the TAMOC "spill" print "Adding TAMOC spill" model.spills += tamoc_spill.TamocSpill(release_time=start_time, start_position=(-87.5, 28.0, 2000), num_elements=30000, end_release_time=start_time + timedelta(days=2), name='TAMOC plume', TAMOC_interval=None, # how often to re-run TAMOC ) model.spills[0].data_sources['currents'] = gc return model
def make_model(images_dir=os.path.join(base_dir, 'images')): # create the maps: print 'creating the maps' mapfile = get_datafile(os.path.join(base_dir, 'SanJuanMap.bna')) gnome_map = MapFromBNA(mapfile, refloat_halflife=1, raster_size=1024 * 1024) renderer = Renderer(mapfile, images_dir, image_size=(800, 800), projection_class=GeoProjection) renderer.viewport = ((-66.24, 18.39), (-66.1, 18.55)) print 'initializing the model' start_time = datetime(2014, 9, 3, 13, 0) # 15 minutes in seconds # Default to now, rounded to the nearest hour model = Model(time_step=900, start_time=start_time, duration=timedelta(days=1), map=gnome_map, uncertain=False) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_san_juan.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=100000) print 'adding a wind mover:' series = np.zeros((2, ), dtype=datetime_value_2d) series[0] = (start_time, (0, 270)) series[1] = (start_time + timedelta(hours=18), (0, 270)) wind = Wind(timeseries=series, units='m/s') w_mover = WindMover(wind) wind.extrapolation_is_allowed = True model.movers += w_mover print 'adding a cats shio mover:' # need to add the scale_factor for the tide heights file curr_file = get_datafile(os.path.join(base_dir, 'EbbTides.cur')) tide_file = get_datafile(os.path.join(base_dir, 'EbbTidesShioHt.txt')) c_mover = CatsMover(curr_file, tide=Tide(tide_file, scale_factor=.15)) # this is the value in the file (default) c_mover.scale_refpoint = (-66.116667, 18.458333) c_mover.scale = True c_mover.scale_value = 1.0 # c_mover.tide.scale_factor = 0.15 model.movers += c_mover print 'adding a cats mover:' curr_file = get_datafile(os.path.join(base_dir, 'Offshore.cur')) c_mover = CatsMover(curr_file) # this is the value in the file (default) # c_mover.scale_refpoint = (-66.082836, 18.469334) c_mover.scale_refpoint = (-66.084333333, 18.46966667) c_mover.scale = True c_mover.scale_value = 0.1 model.movers += c_mover print 'adding a spill' end_time = start_time + timedelta(hours=12) spill = point_line_release_spill( num_elements=1000, release_time=start_time, start_position=(-66.16374, 18.468054, 0.0), # start_position=(-66.129099, # 18.465332, 0.0), # end_release_time=end_time, ) model.spills += spill return model
def make_model(): """ Set up a GNOME simulation that uses TAMOC Set up a spill scenario in GNOME that uses TAMOC to simulate a subsurface blowout and then pass the TAMOC solution to GNOME for the far-field particle tracking """ # Set up the directory structure for the model base_dir, images_dir, outfiles_dir = set_directory_structure() # Set up the modeling environment print '\n-- Initializing the Model --' start_time = "2019-06-01T12:00" model = gs.Model(start_time=start_time, duration=gs.days(3), time_step=gs.minutes(30), uncertain=False) # Add a map print '\n-- Adding a Map --' model.map = gs.GnomeMap() # Add image output print '\n-- Adding Image Outputters --' renderer = gs.Renderer(output_dir=images_dir, image_size=(1024, 768), output_timestep=gs.hours(1), viewport=((-0.15, -0.35), (0.15, 0.35))) model.outputters += renderer # Add NetCDF output print '\n-- Adding NetCDF Outputter --' if not os.path.exists(outfiles_dir): os.mkdir(outfiles_dir) netcdf_file = os.path.join(outfiles_dir, 'script_tamoc.nc') gs.remove_netcdf(netcdf_file) file_writer = gs.NetCDFOutput(netcdf_file, which_data='all', output_timestep=gs.hours(2)) model.outputters += file_writer # Add a spill object print '\n-- Adding a Point Spill --' end_release_time = model.start_time + gs.hours(12) point_source = ts.TamocSpill(num_elements=100, start_position=(0.0, 0.0, 1000.), release_duration=gs.hours(24), release_time=start_time, substance='AD01554', release_rate=20000., units='bbl/day', gor=500., d0=0.5, phi_0=-np.pi / 2., theta_0=0., windage_range=(0.01, 0.04), windage_persist=900, name='Oil Well Blowout') model.spills += point_source # Create an ocean environment water, wind, waves = base_environment(water_temp=273.15 + 21., wind_speed=5., wind_dir=225.) # Add a uniform current in the easterly direction print '\n-- Adding Currents --' uniform_current = gs.SimpleMover(velocity=(0.1, 0.0, 0.)) model.movers += uniform_current # Add a wind mover wind_mover = gs.WindMover(wind) model.movers += wind_mover # Add particle diffusion...note, units are in cm^2/s print '\n-- Adding Particle Diffusion --' particle_diffusion = gs.RandomMover3D( horizontal_diffusion_coef_above_ml=100000., horizontal_diffusion_coef_below_ml=10000., vertical_diffusion_coef_above_ml=100., vertical_diffusion_coef_below_ml=10., mixed_layer_depth=15.) model.movers += particle_diffusion # Add rise velocity for droplets print '\n-- Adding Particle Rise Velocity --' # fixme: we do have code for rise velocity: # gnome.movers.RiseVelocityMover # let's test that later slip_velocity = gs.SimpleMover(velocity=(0.0, 0.0, -0.1)) model.movers += slip_velocity # Add dissolution print '\n-- Adding Weathering --' evaporation = Evaporation(water=water, wind=wind) model.weatherers += evaporation dissolution = Dissolution(waves=waves, wind=wind) model.weatherers += dissolution return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' # set up the modeling environment start_time = datetime(2004, 12, 31, 13, 0) model = Model(start_time=start_time, duration=timedelta(days=3), time_step=30 * 60, uncertain=False) print 'adding the map' model.map = GnomeMap() # this is a "water world -- no land anywhere" # renderere is only top-down view on 2d -- but it's something renderer = Renderer( output_dir=images_dir, size=(1024, 768), output_timestep=timedelta(hours=1), ) renderer.viewport = ((-.15, -.35), (.15, .35)) print 'adding outputters' model.outputters += renderer # Also going to write the results out to a netcdf file netcdf_file = os.path.join(base_dir, 'script_plume.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput( netcdf_file, which_data='most', # output most of the data associated with the elements output_timestep=timedelta(hours=2)) print "adding Horizontal and Vertical diffusion" # Horizontal Diffusion # model.movers += RandomMover(diffusion_coef=5) # vertical diffusion (different above and below the mixed layer) model.movers += RandomVerticalMover(vertical_diffusion_coef_above_ml=5, vertical_diffusion_coef_below_ml=.11, mixed_layer_depth=10) print 'adding Rise Velocity' # droplets rise as a function of their density and radius model.movers += RiseVelocityMover() print 'adding a circular current and eastward current' # This is .3 m/s south model.movers += PyCurrentMover(current=vg, default_num_method='Trapezoid', extrapolate=True) model.movers += SimpleMover(velocity=(0., -0.1, 0.)) # Now to add in the TAMOC "spill" print "Adding TAMOC spill" model.spills += tamoc_spill.TamocSpill( release_time=start_time, start_position=(0, 0, 1000), num_elements=1000, end_release_time=start_time + timedelta(days=1), name='TAMOC plume', TAMOC_interval=None, # how often to re-run TAMOC ) return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2013, 2, 13, 9, 0) # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=2), time_step=30 * 60, uncertain=False) print 'adding the map' mapfile = get_datafile(os.path.join(base_dir, 'GuamMap.bna')) model.map = MapFromBNA(mapfile, refloat_halflife=6) # hours print 'adding outputters' renderer = Renderer(mapfile, images_dir, image_size=(800, 600)) renderer.viewport = ((144.6, 13.4), (144.7, 13.5)) model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_guam.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a spill' end_time = start_time + timedelta(hours=6) spill = point_line_release_spill(num_elements=10, start_position=(144.664166, 13.441944, 0.0), release_time=start_time, end_release_time=end_time) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=50000) print 'adding a wind mover:' series = np.zeros((4, ), dtype=datetime_value_2d) series[0] = (start_time, (5, 135)) series[1] = (start_time + timedelta(hours=23), (5, 135)) series[2] = (start_time + timedelta(hours=25), (5, 0)) series[3] = (start_time + timedelta(hours=48), (5, 0)) wind = Wind(timeseries=series, units='knot') w_mover = WindMover(wind) model.movers += w_mover model.environment += w_mover.wind print 'adding a cats mover:' curr_file = get_datafile(os.path.join(base_dir, 'OutsideWAC.cur')) c_mover = CatsMover(curr_file) c_mover.scale = True c_mover.scale_refpoint = (144.601, 13.42) c_mover.scale_value = .15 model.movers += c_mover print 'adding a cats shio mover:' curr_file = get_datafile(os.path.join(base_dir, 'WACFloodTide.cur')) tide_file = get_datafile(os.path.join(base_dir, 'WACFTideShioHts.txt')) c_mover = CatsMover(curr_file, tide=Tide(tide_file)) # this is different from the value in the file! c_mover.scale_refpoint = (144.621667, 13.45) c_mover.scale = True c_mover.scale_value = 1 # will need the fScaleFactor for heights files # c_mover.time_dep.scale_factor = 1.1864 c_mover.tide.scale_factor = 1.1864 model.movers += c_mover model.environment += c_mover.tide return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2004, 12, 31, 13, 0) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=1), time_step=30 * 60, uncertain=True) mapfile = get_datafile(os.path.join(base_dir, 'ChesapeakeBay.bna')) print 'adding the map' model.map = MapFromBNA(mapfile, refloat_halflife=1) # seconds # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top renderer = Renderer(mapfile, images_dir, image_size=(800, 600), output_timestep=timedelta(hours=2), draw_ontop='forecast') # set the viewport to zoom in on the map: renderer.viewport = ((-76.5, 37.), (-75.8, 38.)) # add the raster map, so we can see it... # note: this is really slow, so only use for diagnostics # renderer.raster_map = model.map print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_chesapeake_bay.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all', output_timestep=timedelta(hours=2)) print 'adding a spill' # for now subsurface spill stays on initial layer # - will need diffusion and rise velocity # - wind doesn't act # - start_position = (-76.126872, 37.680952, 5.0), spill = point_line_release_spill(num_elements=1000, start_position=(-76.126872, 37.680952, 0.0), release_time=start_time) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=50000) print 'adding a wind mover:' series = np.zeros((2, ), dtype=datetime_value_2d) series[0] = (start_time, (30, 0)) series[1] = (start_time + timedelta(hours=23), (30, 0)) wind = Wind(timeseries=series, units='knot') # default is .4 radians w_mover = WindMover(wind, uncertain_angle_scale=0) wind.extrapolation_is_allowed = True model.movers += w_mover print 'adding a current mover:' curr_file = get_datafile(os.path.join(base_dir, 'ChesapeakeBay.nc')) topology_file = get_datafile(os.path.join(base_dir, 'ChesapeakeBay.dat')) # uncertain_time_delay in hours c_mover = GridCurrentMover(curr_file, topology_file, uncertain_time_delay=3) c_mover.uncertain_along = 0 # default is .5 # c_mover.uncertain_cross = 0 # default is .25 model.movers += c_mover return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(1985, 1, 1, 13, 31) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(days=4), time_step=3600 * 2) # mapfile = get_datafile(os.path.join(base_dir, 'ak_arctic.bna')) mapfile = get_datafile('arctic_coast3.bna') print 'adding the map' model.map = MapFromBNA(mapfile, refloat_halflife=0.0) # seconds print 'adding a spill' # for now subsurface spill stays on initial layer # - will need diffusion and rise velocity # - wind doesn't act # - start_position = (-76.126872, 37.680952, 5.0), # spill1 = point_line_release_spill(num_elements=10000, # start_position=(-163.75, # 69.75, # 0.0), # release_time=start_time) # spill1 = point_line_release_spill(num_elements=100, start_position=(196.25, 69.75, 0.0), release_time=start_time) model.spills += spill1 # model.spills += spill2 print 'adding a wind mover:' # model.movers += constant_wind_mover(0.5, 0, units='m/s') print 'adding a current mover:' fn = ['arctic_avg2_0001_gnome.nc', 'arctic_avg2_0002_gnome.nc'] gt = {'node_lon': 'lon', 'node_lat': 'lat'} # fn='arctic_avg2_0001_gnome.nc' wind_method = 'Euler' method = 'Trapezoid' print 'adding outputters' # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top # renderer = Renderer(mapfile, images_dir, image_size=(1024, 768)) # model.outputters += renderer netcdf_file = os.path.join(base_dir, str(model.time_step / 60) + method + '.nc') scripting.remove_netcdf(netcdf_file) print 'adding movers' model.outputters += NetCDFOutput(netcdf_file, which_data='all') ice_aware_curr = IceAwareCurrent.from_netCDF(filename=fn, grid_topology=gt) ice_aware_wind = IceAwareWind.from_netCDF( filename=fn, ice_var=ice_aware_curr.ice_var, ice_conc_var=ice_aware_curr.ice_conc_var, grid=ice_aware_curr.grid, ) # i_c_mover = PyGridCurrentMover(current=ice_aware_curr) # i_c_mover = PyGridCurrentMover(current=ice_aware_curr, default_num_method='Euler') i_c_mover = PyGridCurrentMover(current=ice_aware_curr, default_num_method=method) i_w_mover = PyWindMover(wind=ice_aware_wind, default_num_method=wind_method) # ice_aware_curr.grid.node_lon = ice_aware_curr.grid.node_lon[:]-360 # ice_aware_curr.grid.build_celltree() model.movers += i_c_mover model.movers += i_w_mover print 'adding an IceAwareRandomMover:' model.movers += IceAwareRandomMover( ice_conc_var=ice_aware_curr.ice_conc_var, diffusion_coef=1000) # renderer.add_grid(ice_aware_curr.grid) # renderer.add_vec_prop(ice_aware_curr) # renderer.set_viewport(((-190.9, 60), (-72, 89))) # curr_file = get_datafile(os.path.join(base_dir, 'COOPSu_CREOFS24.nc')) # c_mover = GridCurrentMover(curr_file) # model.movers += c_mover return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2004, 12, 31, 13, 0) model = gnome.model.Model(start_time=start_time, duration=timedelta(days=1), time_step=30 * 60, uncertain=True) # 1 day of data in file # 1/2 hr in seconds mapfile = get_datafile(os.path.join(base_dir, './ChesapeakeBay.bna' )) print 'adding the map' model.map = gnome.map.MapFromBNA(mapfile, refloat_halflife=1) # seconds # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top renderer = gnome.renderer.Renderer(mapfile, images_dir, size=(800, 600), output_timestep=timedelta(hours=2), draw_ontop='uncertain' ) renderer.viewport = ((-76.5, 37.), (-75.8, 38.)) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_chesapeake_bay.nc') scripting.remove_netcdf(netcdf_file) model.outputters += \ gnome.netcdf_outputter.NetCDFOutput(netcdf_file, all_data=True, output_timestep=timedelta(hours=2)) print 'adding a spill' # for now subsurface spill stays on initial layer - will need diffusion and rise velocity - wind doesn't act spill = gnome.spill.PointLineSource(num_elements=1000, start_position=(-76.126872, 37.680952, 0.0), release_time=start_time) # start_position = (-76.126872, 37.680952, 5.0), model.spills += spill print 'adding a RandomMover:' r_mover = gnome.movers.RandomMover(diffusion_coef=50000) model.movers += r_mover print 'adding a wind mover:' series = np.zeros((2, ), dtype=gnome.basic_types.datetime_value_2d) series[0] = (start_time, (30, 0)) series[1] = (start_time + timedelta(hours=23), (30, 0)) wind = Wind(timeseries=series, units='knot') w_mover = gnome.movers.WindMover(wind, uncertain_angle_scale=0) # default is .4 radians model.movers += w_mover print 'adding a current mover:' curr_file = get_datafile(os.path.join(base_dir, r"./ChesapeakeBay.nc")) topology_file = get_datafile(os.path.join(base_dir, r"./ChesapeakeBay.dat")) c_mover = gnome.movers.GridCurrentMover(curr_file, topology_file, uncertain_time_delay = 3) # uncertain_time_delay in hours c_mover.uncertain_along = 0 # default is .5 #c_mover.uncertain_cross = 0 # default is .25 model.movers += c_mover return model
def make_model(images_dir=os.path.join(base_dir, 'images')): # create the maps: print 'creating the maps' mapfile = get_datafile(os.path.join(base_dir, 'DelawareRiverMap.bna')) gnome_map = MapFromBNA(mapfile, refloat_halflife=1) # hours renderer = Renderer(mapfile, images_dir, image_size=(800, 800), projection_class=GeoProjection) print 'initializing the model' start_time = datetime(2012, 8, 20, 13, 0) # 15 minutes in seconds # Default to now, rounded to the nearest hour model = Model(time_step=900, start_time=start_time, duration=timedelta(days=1), map=gnome_map, uncertain=False) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_delaware_bay.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=100000) print 'adding a wind mover:' # wind_file = get_datafile(os.path.join(base_dir, 'ConstantWind.WND')) # wind = Wind(filename=wind_file) series = np.zeros((2, ), dtype=datetime_value_2d) series[0] = (start_time, (5, 270)) series[1] = (start_time + timedelta(hours=25), (5, 270)) wind = Wind(timeseries=series, units='m/s') # w_mover = WindMover(Wind(timeseries=series, units='knots')) w_mover = WindMover(wind) model.movers += w_mover print 'adding a cats shio mover:' curr_file = get_datafile(os.path.join(base_dir, 'FloodTides.cur')) tide_file = get_datafile(os.path.join(base_dir, 'FloodTidesShio.txt')) c_mover = CatsMover(curr_file, tide=Tide(tide_file)) # this is the value in the file (default) c_mover.scale_refpoint = (-75.081667, 38.7995) c_mover.scale = True c_mover.scale_value = 1 model.movers += c_mover # TODO: cannot add this till environment base class is created model.environment += c_mover.tide print 'adding a cats mover:' curr_file = get_datafile(os.path.join(base_dir, 'Offshore.cur')) c_mover = CatsMover(curr_file) # but do need to scale (based on river stage) c_mover.scale = True c_mover.scale_refpoint = (-74.7483333, 38.898333) c_mover.scale_value = .03 model.movers += c_mover # # these are from windows they don't match Mac values... # pat1Angle 315; # pat1Speed 30; pat1SpeedUnits knots; # pat1ScaleToValue 0.314426 # # pat2Angle 225; # pat2Speed 30; pat2SpeedUnits knots; # pat2ScaleToValue 0.032882 # scaleBy WindStress print 'adding a component mover:' # if only using one current pattern # comp_mover = ComponentMover(curr_file1, None, wind) # # todo: following is not working when model is saved out - fix # comp_mover = ComponentMover(curr_file1, curr_file2, # Wind(timeseries=series, units='m/s')) # comp_mover = ComponentMover(curr_file1, curr_file2, # wind=Wind(filename=wind_file)) curr_file1 = get_datafile(os.path.join(base_dir, 'NW30ktwinds.cur')) curr_file2 = get_datafile(os.path.join(base_dir, 'SW30ktwinds.cur')) comp_mover = ComponentMover(curr_file1, curr_file2, wind) comp_mover.scale_refpoint = (-75.263166, 39.1428333) comp_mover.pat1_angle = 315 comp_mover.pat1_speed = 30 comp_mover.pat1_speed_units = 1 # comp_mover.pat1ScaleToValue = .314426 comp_mover.pat1_scale_to_value = .502035 comp_mover.pat2_angle = 225 comp_mover.pat2_speed = 30 comp_mover.pat2_speed_units = 1 # comp_mover.pat2ScaleToValue = .032882 comp_mover.pat2_scale_to_value = .021869 model.movers += comp_mover print 'adding a spill' end_time = start_time + timedelta(hours=12) spill = point_line_release_spill(num_elements=1000, release_time=start_time, # end_release_time=end_time, start_position=(-75.262319, 39.142987, 0.0), ) model.spills += spill return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2004, 12, 31, 13, 0) model = Model(start_time=start_time, duration=timedelta(days=3), time_step=30 * 60, uncertain=False) print 'adding the map' model.map = GnomeMap() # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top renderer = Renderer(images_dir=images_dir, #size=(800, 600), output_timestep=timedelta(hours=1), draw_ontop='uncertain') renderer.viewport = ((-76.5, 37.), (-75.8, 38.)) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_plume.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='most', output_timestep=timedelta(hours=2)) print 'adding two spills' # Break the spill into two spills, first with the larger droplets # and second with the smaller droplets. # Split the total spill volume (100 m^3) to have most # in the larger droplet spill. # Smaller droplets start at a lower depth than larger wd = WeibullDistribution(alpha=1.8, lambda_=.00456, min_=.0002) # 200 micron min end_time = start_time + timedelta(hours=24) spill = point_line_release_spill(num_elements=1000, volume=90, # default volume_units=m^3 start_position=(-76.126872, 37.680952, 1700), release_time=start_time, end_release_time=end_time, element_type=plume(distribution=wd)) model.spills += spill wd = WeibullDistribution(alpha=1.8, lambda_=.00456, max_=.0002) # 200 micron max spill = point_line_release_spill(num_elements=1000, volume=10, start_position=(-76.126872, 37.680952, 1800), release_time=start_time, element_type=plume(distribution=wd)) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=50000) print 'adding a RiseVelocityMover:' model.movers += RiseVelocityMover() print 'adding a RandomVerticalMover:' model.movers += RandomVerticalMover(vertical_diffusion_coef_above_ml=5, vertical_diffusion_coef_below_ml=.11, mixed_layer_depth=10) # print 'adding a wind mover:' # series = np.zeros((2, ), dtype=gnome.basic_types.datetime_value_2d) # series[0] = (start_time, (30, 90)) # series[1] = (start_time + timedelta(hours=23), (30, 90)) # wind = Wind(timeseries=series, units='knot') # # default is .4 radians # w_mover = gnome.movers.WindMover(wind, uncertain_angle_scale=0) # # model.movers += w_mover print 'adding a simple mover:' s_mover = SimpleMover(velocity=(0.0, -.1, 0.0)) model.movers += s_mover return model
def make_model(images_dir=os.path.join(base_dir, "images")): print "initializing the model" start_time = datetime(2012, 9, 15, 12, 0) mapfile = get_datafile(os.path.join(base_dir, "./LongIslandSoundMap.BNA")) gnome_map = gnome.map.MapFromBNA(mapfile, refloat_halflife=6) # hours # # the image output renderer # global renderer renderer = gnome.renderer.Renderer(mapfile, images_dir, size=(800, 600)) # renderer.viewport = ((-72.75, 41.1),(-72.34, 41.3)) model = gnome.model.Model( # one hour in seconds start_time=start_time, duration=timedelta(hours=48), time_step=3600, map=gnome_map, uncertain=True, cache_enabled=True, ) print "adding outputters" model.outputters += renderer netcdf_file = os.path.join(base_dir, "script_long_island.nc") scripting.remove_netcdf(netcdf_file) model.outputters += gnome.netcdf_outputter.NetCDFOutput(netcdf_file, all_data=True) print "adding a spill" spill = gnome.spill.PointLineSource( num_elements=1000, start_position=(-72.419992, 41.202120, 0.0), release_time=start_time ) model.spills += spill print "adding a RandomMover:" r_mover = gnome.movers.RandomMover(diffusion_coef=500000) model.movers += r_mover print "adding a wind mover:" series = np.zeros((5,), dtype=gnome.basic_types.datetime_value_2d) series[0] = (start_time, (10, 45)) series[1] = (start_time + timedelta(hours=18), (10, 90)) series[2] = (start_time + timedelta(hours=30), (10, 135)) series[3] = (start_time + timedelta(hours=42), (10, 180)) series[4] = (start_time + timedelta(hours=54), (10, 225)) wind = Wind(timeseries=series, units="m/s") w_mover = gnome.movers.WindMover(wind) model.movers += w_mover print "adding a cats mover:" curr_file = get_datafile(os.path.join(base_dir, r"./LI_tidesWAC.CUR")) tide_file = get_datafile(os.path.join(base_dir, r"./CLISShio.txt")) c_mover = gnome.movers.CatsMover(curr_file, tide=Tide(tide_file)) model.movers += c_mover model.environment += c_mover.tide print "viewport is:", renderer.viewport return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' # set up the modeling environment start_time = datetime(2016, 9, 23, 0, 0) model = Model(start_time=start_time, duration=timedelta(days=2), time_step=30 * 60, uncertain=False) print 'adding the map' model.map = GnomeMap() # this is a "water world -- no land anywhere" # renderere is only top-down view on 2d -- but it's something renderer = Renderer(output_dir=images_dir, image_size=(1024, 768), output_timestep=timedelta(hours=1), ) renderer.viewport = ((196.14, 71.89), (196.18, 71.93)) print 'adding outputters' model.outputters += renderer # Also going to write the results out to a netcdf file netcdf_file = os.path.join(base_dir, 'script_arctic_plume.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='most', # output most of the data associated with the elements output_timestep=timedelta(hours=2)) print "adding Horizontal and Vertical diffusion" # Horizontal Diffusion model.movers += RandomMover(diffusion_coef=500) # vertical diffusion (different above and below the mixed layer) model.movers += RandomVerticalMover(vertical_diffusion_coef_above_ml=5, vertical_diffusion_coef_below_ml=.11, mixed_layer_depth=10) print 'adding Rise Velocity' # droplets rise as a function of their density and radius model.movers += TamocRiseVelocityMover() print 'adding a circular current and eastward current' fn = 'hycom_glb_regp17_2016092300_subset.nc' fn_ice = 'hycom-cice_ARCu0.08_046_2016092300_subset.nc' iconc = IceConcentration.from_netCDF(filename=fn_ice) ivel = IceVelocity.from_netCDF(filename=fn_ice, grid = iconc.grid) ic = IceAwareCurrent.from_netCDF(ice_concentration = iconc, ice_velocity= ivel, filename=fn) model.movers += PyCurrentMover(current = ic) model.movers += SimpleMover(velocity=(0., 0., 0.)) model.movers += constant_wind_mover(20, 315, units='knots') # Now to add in the TAMOC "spill" print "Adding TAMOC spill" model.spills += tamoc_spill.TamocSpill(release_time=start_time, start_position=(196.16, 71.91, 40.0), num_elements=1000, end_release_time=start_time + timedelta(days=1), name='TAMOC plume', TAMOC_interval=None, # how often to re-run TAMOC ) model.spills[0].data_sources['currents'] = ic return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2012, 10, 25, 0, 1) # start_time = datetime(2015, 12, 18, 06, 01) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(hours=2), time_step=900) mapfile = get_datafile(os.path.join(base_dir, 'nyharbor.bna')) print 'adding the map' '''TODO: sort out MapFromBna's map_bounds parameter... it does nothing right now, and the spill is out of bounds''' model.map = MapFromBNA(mapfile, refloat_halflife=0.0) # seconds # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top renderer = Renderer(mapfile, images_dir, image_size=(1024, 768)) # renderer.viewport = ((-73.5, 40.5), (-73.1, 40.75)) # renderer.viewport = ((-122.9, 45.6), (-122.6, 46.0)) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_ny_plume.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding two spills' # Break the spill into two spills, first with the larger droplets # and second with the smaller droplets. # Split the total spill volume (100 m^3) to have most # in the larger droplet spill. # Smaller droplets start at a lower depth than larger end_time = start_time + model.duration # wd = WeibullDistribution(alpha=1.8, # lambda_=.00456, # min_=.0002) # 200 micron min # # spill = subsurface_plume_spill(num_elements=10, # start_position=(-74.15, # 40.5, # 7.2), # release_time=start_time, # distribution=wd, # amount=90, # default volume_units=m^3 # units='m^3', # end_release_time=end_time, # density=600) # # model.spills += spill # wd = WeibullDistribution(alpha=1.8, # lambda_=.00456, # max_=.0002) # 200 micron max wd = UniformDistribution(low=.0002, high=.0002) spill = point_line_release_spill(num_elements=10, amount=90, units='m^3', start_position=(-74.15, 40.5, 7.2), release_time=start_time, element_type=plume(distribution=wd, substance_name='ALASKA NORTH SLOPE (MIDDLE PIPELINE)') ) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=50000) print 'adding a RiseVelocityMover:' model.movers += RiseVelocityMover() print 'adding a RandomVerticalMover:' # model.movers += RandomVerticalMover(vertical_diffusion_coef_above_ml=5, # vertical_diffusion_coef_below_ml=.11, # mixed_layer_depth=10) url = ('http://geoport.whoi.edu/thredds/dodsC/clay/usgs/users/jcwarner/Projects/Sandy/triple_nest/00_dir_NYB05.ncml') gc = GridCurrent.from_netCDF(url) u_mover = PyGridCurrentMover(gc, default_num_method='Trapezoid') model.movers += u_mover # print 'adding a wind mover:' # series = np.zeros((2, ), dtype=gnome.basic_types.datetime_value_2d) # series[0] = (start_time, (30, 90)) # series[1] = (start_time + timedelta(hours=23), (30, 90)) # wind = Wind(timeseries=series, units='knot') # # default is .4 radians # w_mover = gnome.movers.WindMover(wind, uncertain_angle_scale=0) # # model.movers += w_mover print 'adding a simple mover:' # s_mover = SimpleMover(velocity=(0.0, -.3, 0.0)) # model.movers += s_mover return model
def make_model(images_dir=os.path.join(base_dir, 'images')): # create the maps: print 'creating the maps' mapfile = gs.get_datafile(os.path.join(base_dir, './MassBayMap.bna')) gnome_map = gs.MapFromBNA( mapfile, refloat_halflife=1, # hours raster_size=2048 * 2048 # about 4 MB ) renderer = gs.Renderer(mapfile, images_dir, image_size=(800, 800), projection_class=GeoProjection) print 'initializing the model' # start_time = datetime(2013, 3, 12, 10, 0) start_time = "2013-03-12T10:00" # 15 minutes in seconds # Default to now, rounded to the nearest hour model = gs.Model(time_step=gs.minutes(15), start_time=start_time, duration=gs.days(1), map=gnome_map, uncertain=True) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_boston.nc') gs.remove_netcdf(netcdf_file) model.outputters += gs.NetCDFOutput(netcdf_file, which_data='all') model.outputters += gs.KMZOutput( os.path.join(base_dir, 'script_boston.kmz')) print 'adding a RandomMover:' model.movers += gs.RandomMover(diffusion_coef=100000) print 'adding a wind mover:' # series = np.zeros((2, ), dtype=datetime_value_2d) # series[0] = (start_time, (5, 180)) # series[1] = (start_time + timedelta(hours=25), (5, 180)) # w_mover = WindMover(Wind(timeseries=series, units='m/s')) # model.movers += w_mover # model.environment += w_mover.wind w_mover = gs.constant_wind_mover(5, 180, units='m/s') model.movers += w_mover print 'adding a cats shio mover:' curr_file = gs.get_datafile(os.path.join(base_dir, r"./EbbTides.cur")) tide_file = gs.get_datafile(os.path.join(base_dir, r"./EbbTidesShio.txt")) c_mover = gs.CatsMover(curr_file, tide=gs.Tide(tide_file)) # this is the value in the file (default) c_mover.scale_refpoint = (-70.8875, 42.321333) c_mover.scale = True c_mover.scale_value = -1 model.movers += c_mover # TODO: cannot add this till environment base class is created # model.environment += c_mover.tide print 'adding a cats ossm mover:' # ossm_file = get_datafile(os.path.join(base_dir, # r"./MerrimackMassCoastOSSM.txt")) curr_file = gs.get_datafile( os.path.join(base_dir, "MerrimackMassCoast.cur")) tide_file = gs.get_datafile( os.path.join(base_dir, "MerrimackMassCoastOSSM.txt")) c_mover = gs.CatsMover(curr_file, tide=gs.Tide(tide_file)) # but do need to scale (based on river stage) c_mover.scale = True c_mover.scale_refpoint = (-70.65, 42.58333) c_mover.scale_value = 1. model.movers += c_mover model.environment += c_mover.tide print 'adding a cats mover:' curr_file = gs.get_datafile(os.path.join(base_dir, "MassBaySewage.cur")) c_mover = gs.CatsMover(curr_file) # but do need to scale (based on river stage) c_mover.scale = True c_mover.scale_refpoint = (-70.78333, 42.39333) # the scale factor is 0 if user inputs no sewage outfall effects c_mover.scale_value = .04 model.movers += c_mover # pat1Angle 315; # pat1Speed 19.44; pat1SpeedUnits knots; # pat1ScaleToValue 0.138855 # # pat2Angle 225; # pat2Speed 19.44; pat2SpeedUnits knots; # pat2ScaleToValue 0.05121 # # scaleBy WindStress print "adding a component mover:" component_file1 = gs.get_datafile(os.path.join(base_dir, "WAC10msNW.cur")) component_file2 = gs.get_datafile(os.path.join(base_dir, "WAC10msSW.cur")) comp_mover = gs.ComponentMover(component_file1, component_file2, w_mover.wind) # todo: callback did not work correctly below - fix! # comp_mover = ComponentMover(component_file1, # component_file2, # Wind(timeseries=series, units='m/s')) comp_mover.scale_refpoint = (-70.855, 42.275) comp_mover.pat1_angle = 315 comp_mover.pat1_speed = 19.44 comp_mover.pat1_speed_units = 1 comp_mover.pat1ScaleToValue = .138855 comp_mover.pat2_angle = 225 comp_mover.pat2_speed = 19.44 comp_mover.pat2_speed_units = 1 comp_mover.pat2ScaleToValue = .05121 model.movers += comp_mover print 'adding a spill' end_time = gs.asdatetime(start_time) + gs.hours(12) spill = gs.point_line_release_spill(num_elements=100, start_position=(-70.911432, 42.369142, 0.0), release_time=start_time, end_release_time=end_time) model.spills += spill return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print('get contiguous') kml_file = os.path.join(base_dir, 'contigua.kml') with open(kml_file) as f: contiguous = parser.parse(f).getroot().Document coordinates = contiguous.Placemark.LineString.coordinates.text.split(' ') cont_coord = [] for x in coordinates: x = x.split(',') if len(x) > 1 and float(x[1]) > -12 and float(x[1]) < -3: cont_coord.append([float(x[0]), float(x[1])]) print('initializing the model') start_time = datetime(2022, 1, 22, 12, 0) mapfile = get_datafile(os.path.join(base_dir, './brazil-coast.BNA')) gnome_map = MapFromBNA(mapfile, refloat_halflife=6) # hours duration = timedelta(days=1) timestep = timedelta(minutes=5) end_time = start_time + duration steps = duration.total_seconds() / timestep.total_seconds() print("Total step: %.4i " % (steps)) # one hour timestep model = Model(start_time=start_time, duration=duration, time_step=timestep, map=gnome_map, uncertain=False, cache_enabled=False) oil_name = 'GENERIC MEDIUM CRUDE' wd = UniformDistribution(low=.0002, high=.0002) subs = GnomeOil(oil_name, initializers=plume_initializers(distribution=wd)) #model.spills += point_line_release_spill(release_time=start_time, start_position=(-35.153, -8.999, 0.0), num_elements=1000, end_release_time=end_time, substance= subs, units='kg') #model.spills += point_line_release_spill(release_time=start_time, start_position=(-35.176, -9.135, 0.0), num_elements=1000, end_release_time=end_time, substance= subs, units='kg') #model.spills += point_line_release_spill(release_time=start_time, start_position=(-35.062, -9.112, 0.0), num_elements=1000, end_release_time=end_time, substance= subs, units='kg') #model.spills += point_line_release_spill(release_time=start_time, start_position=(-34.994, -9.248, 0.0), num_elements=1000, end_release_time=end_time, substance= subs, units='kg') for idx in range(0, len(cont_coord)): model.spills += point_line_release_spill( num_elements=500, start_position=(cont_coord[idx][0], cont_coord[idx][1], 0.0), release_time=start_time, end_release_time=start_time + timedelta(days=1), amount=500, substance=subs, units='kg') #shp_file = os.path.join(base_dir, 'surface_concentration') #scripting.remove_netcdf(shp_file + ".zip") #model.outputters += ShapeOutput(shp_file, # zip_output=False, # surface_conc="kde", # ) print('adding movers:') print('adding a RandomMover:') model.movers += RandomMover(diffusion_coef=10000) print('adding a current mover:') # # this is HYCOM currents curr_file = get_datafile(os.path.join(base_dir, 'currents.nc')) model.movers += GridCurrentMover(curr_file, num_method='Euler') print('adding a grid wind mover:') wind_file = get_datafile(os.path.join(base_dir, 'wind.nc')) #topology_file = get_datafile(os.path.join(base_dir, 'WindSpeedDirSubsetTop.dat')) #w_mover = GridWindMover(wind_file, topology_file) w_mover = GridWindMover(wind_file) w_mover.uncertain_speed_scale = 1 w_mover.uncertain_angle_scale = 0.2 # default is .4 w_mover.wind_scale = 2 model.movers += w_mover print('adding outputters') renderer = Renderer(mapfile, images_dir, image_size=(900, 600), output_timestep=timestep, draw_ontop='forecast') #set the viewport to zoom in on the map: #renderer.viewport = ((-37, -11), (-34, -8)) #alagoas renderer.viewport = ((-36, -10), (-30, 5)) model.outputters += renderer netcdf_file = os.path.join(base_dir, 'contigua.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='standard', surface_conc='kde') return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' # set up the modeling environment start_time = datetime(2016, 9, 23, 0, 0) model = Model(start_time=start_time, duration=timedelta(days=2), time_step=30 * 60, uncertain=False) print 'adding the map' model.map = GnomeMap() # this is a "water world -- no land anywhere" # renderere is only top-down view on 2d -- but it's something renderer = Renderer(output_dir=images_dir, image_size=(1024, 768), output_timestep=timedelta(hours=1), ) renderer.viewport = ((196.14, 71.89), (196.18, 71.93)) print 'adding outputters' model.outputters += renderer # Also going to write the results out to a netcdf file netcdf_file = os.path.join(base_dir, 'script_arctic_plume.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='most', # output most of the data associated with the elements output_timestep=timedelta(hours=2)) print "adding Horizontal and Vertical diffusion" # Horizontal Diffusion model.movers += RandomMover(diffusion_coef=500) # vertical diffusion (different above and below the mixed layer) model.movers += RandomMover3D(vertical_diffusion_coef_above_ml=5, vertical_diffusion_coef_below_ml=.11, mixed_layer_depth=10) print 'adding Rise Velocity' # droplets rise as a function of their density and radius model.movers += TamocRiseVelocityMover() print 'adding a circular current and eastward current' fn = 'hycom_glb_regp17_2016092300_subset.nc' fn_ice = 'hycom-cice_ARCu0.08_046_2016092300_subset.nc' iconc = IceConcentration.from_netCDF(filename=fn_ice) ivel = IceVelocity.from_netCDF(filename=fn_ice, grid = iconc.grid) ic = IceAwareCurrent.from_netCDF(ice_concentration = iconc, ice_velocity= ivel, filename=fn) model.movers += PyCurrentMover(current = ic) model.movers += SimpleMover(velocity=(0., 0., 0.)) model.movers += constant_wind_mover(20, 315, units='knots') # Now to add in the TAMOC "spill" print "Adding TAMOC spill" model.spills += tamoc_spill.TamocSpill(release_time=start_time, start_position=(196.16, 71.91, 40.0), num_elements=1000, end_release_time=start_time + timedelta(days=1), name='TAMOC plume', TAMOC_interval=None, # how often to re-run TAMOC ) model.spills[0].data_sources['currents'] = ic return model
def make_model(images_dir=os.path.join(base_dir, 'images')): # create the maps: print 'creating the maps' mapfile = gs.get_datafile(os.path.join(base_dir, './MassBayMap.bna')) gnome_map = gs.MapFromBNA(mapfile, refloat_halflife=1, # hours raster_size=2048 * 2048 # about 4 MB ) renderer = gs.Renderer(mapfile, images_dir, image_size=(800, 800), projection_class=GeoProjection) print 'initializing the model' # start_time = datetime(2013, 3, 12, 10, 0) start_time = "2013-03-12T10:00" # 15 minutes in seconds # Default to now, rounded to the nearest hour model = gs.Model(time_step=gs.minute(15), start_time=start_time, duration=gs.days(1), map=gnome_map, uncertain=True) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_boston.nc') gs.remove_netcdf(netcdf_file) model.outputters += gs.NetCDFOutput(netcdf_file, which_data='all') model.outputters += gs.KMZOutput(os.path.join(base_dir, 'script_boston.kmz')) print 'adding a RandomMover:' model.movers += gs.RandomMover(diffusion_coef=100000) print 'adding a wind mover:' # series = np.zeros((2, ), dtype=datetime_value_2d) # series[0] = (start_time, (5, 180)) # series[1] = (start_time + timedelta(hours=25), (5, 180)) # w_mover = WindMover(Wind(timeseries=series, units='m/s')) # model.movers += w_mover # model.environment += w_mover.wind w_mover = gs.constant_wind_mover(5, 180, units='m/s') model.movers += w_mover print 'adding a cats shio mover:' curr_file = gs.get_datafile(os.path.join(base_dir, r"./EbbTides.cur")) tide_file = gs.get_datafile(os.path.join(base_dir, r"./EbbTidesShio.txt")) c_mover = gs.CatsMover(curr_file, tide=gs.Tide(tide_file)) # this is the value in the file (default) c_mover.scale_refpoint = (-70.8875, 42.321333) c_mover.scale = True c_mover.scale_value = -1 model.movers += c_mover # TODO: cannot add this till environment base class is created # model.environment += c_mover.tide print 'adding a cats ossm mover:' # ossm_file = get_datafile(os.path.join(base_dir, # r"./MerrimackMassCoastOSSM.txt")) curr_file = gs.get_datafile(os.path.join(base_dir, "MerrimackMassCoast.cur")) tide_file = gs.get_datafile(os.path.join(base_dir, "MerrimackMassCoastOSSM.txt")) c_mover = gs.CatsMover(curr_file, tide=gs.Tide(tide_file)) # but do need to scale (based on river stage) c_mover.scale = True c_mover.scale_refpoint = (-70.65, 42.58333) c_mover.scale_value = 1. model.movers += c_mover model.environment += c_mover.tide print 'adding a cats mover:' curr_file = gs.get_datafile(os.path.join(base_dir, "MassBaySewage.cur")) c_mover = gs.CatsMover(curr_file) # but do need to scale (based on river stage) c_mover.scale = True c_mover.scale_refpoint = (-70.78333, 42.39333) # the scale factor is 0 if user inputs no sewage outfall effects c_mover.scale_value = .04 model.movers += c_mover # pat1Angle 315; # pat1Speed 19.44; pat1SpeedUnits knots; # pat1ScaleToValue 0.138855 # # pat2Angle 225; # pat2Speed 19.44; pat2SpeedUnits knots; # pat2ScaleToValue 0.05121 # # scaleBy WindStress print "adding a component mover:" component_file1 = gs.get_datafile(os.path.join(base_dir, "WAC10msNW.cur")) component_file2 = gs.get_datafile(os.path.join(base_dir, "WAC10msSW.cur")) comp_mover = gs.ComponentMover(component_file1, component_file2, w_mover.wind) # todo: callback did not work correctly below - fix! # comp_mover = ComponentMover(component_file1, # component_file2, # Wind(timeseries=series, units='m/s')) comp_mover.scale_refpoint = (-70.855, 42.275) comp_mover.pat1_angle = 315 comp_mover.pat1_speed = 19.44 comp_mover.pat1_speed_units = 1 comp_mover.pat1ScaleToValue = .138855 comp_mover.pat2_angle = 225 comp_mover.pat2_speed = 19.44 comp_mover.pat2_speed_units = 1 comp_mover.pat2ScaleToValue = .05121 model.movers += comp_mover print 'adding a spill' end_time = gs.asdatetime(start_time) + hours(12) spill = point_line_release_spill(num_elements=100, start_position=(-70.911432, 42.369142, 0.0), release_time=start_time, end_release_time=end_time) model.spills += spill return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' start_time = datetime(2012, 10, 25, 0, 1) # start_time = datetime(2015, 12, 18, 06, 01) # 1 day of data in file # 1/2 hr in seconds model = Model(start_time=start_time, duration=timedelta(hours=2), time_step=900) mapfile = get_datafile(os.path.join(base_dir, 'nyharbor.bna')) print 'adding the map' '''TODO: sort out MapFromBna's map_bounds parameter... it does nothing right now, and the spill is out of bounds''' model.map = MapFromBNA(mapfile, refloat_halflife=0.0) # seconds # draw_ontop can be 'uncertain' or 'forecast' # 'forecast' LEs are in black, and 'uncertain' are in red # default is 'forecast' LEs draw on top renderer = Renderer(mapfile, images_dir, image_size=(1024, 768)) # renderer.viewport = ((-73.5, 40.5), (-73.1, 40.75)) # renderer.viewport = ((-122.9, 45.6), (-122.6, 46.0)) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_ny_plume.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding two spills' # Break the spill into two spills, first with the larger droplets # and second with the smaller droplets. # Split the total spill volume (100 m^3) to have most # in the larger droplet spill. # Smaller droplets start at a lower depth than larger end_time = start_time + model.duration # wd = WeibullDistribution(alpha=1.8, # lambda_=.00456, # min_=.0002) # 200 micron min # # spill = subsurface_plume_spill(num_elements=10, # start_position=(-74.15, # 40.5, # 7.2), # release_time=start_time, # distribution=wd, # amount=90, # default volume_units=m^3 # units='m^3', # end_release_time=end_time, # density=600) # # model.spills += spill # wd = WeibullDistribution(alpha=1.8, # lambda_=.00456, # max_=.0002) # 200 micron max oil_name = 'ALASKA NORTH SLOPE (MIDDLE PIPELINE, 1997)' wd = UniformDistribution(low=.0002, high=.0002) spill = point_line_release_spill(num_elements=10, amount=90, units='m^3', start_position=(-74.15, 40.5, 7.2), release_time=start_time, substance = GnomeOil(oil_name,initializers=plume_initializers(distribution=wd)) #element_type=plume(distribution=wd, #substance_name='ALASKA NORTH SLOPE (MIDDLE PIPELINE, 1997)') ) model.spills += spill print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=50000) print 'adding a RiseVelocityMover:' model.movers += RiseVelocityMover() print 'adding a RandomMover3D:' # model.movers += RandomMover3D(vertical_diffusion_coef_above_ml=5, # vertical_diffusion_coef_below_ml=.11, # mixed_layer_depth=10) # the url is broken, update and include the following four lines # url = ('http://geoport.whoi.edu/thredds/dodsC/clay/usgs/users/jcwarner/Projects/Sandy/triple_nest/00_dir_NYB05.ncml') # gc = GridCurrent.from_netCDF(url) # u_mover = PyCurrentMover(gc, default_num_method='RK2') # model.movers += u_mover # print 'adding a wind mover:' # series = np.zeros((2, ), dtype=gnome.basic_types.datetime_value_2d) # series[0] = (start_time, (30, 90)) # series[1] = (start_time + timedelta(hours=23), (30, 90)) # wind = Wind(timeseries=series, units='knot') # # default is .4 radians # w_mover = gnome.movers.WindMover(wind, uncertain_angle_scale=0) # # model.movers += w_mover print 'adding a simple mover:' # s_mover = SimpleMover(velocity=(0.0, -.3, 0.0)) # model.movers += s_mover return model
def make_model(images_dir=os.path.join(base_dir, 'images')): print 'initializing the model' # data starts at 1:00 instead of 0:00 start_time = datetime(2013, 1, 1, 1) model = Model(start_time=start_time, duration=timedelta(days=1), time_step=900, uncertain=False) try: mapfile = get_datafile(os.path.join(base_dir, 'pearl_harbor.bna')) except HTTPError: print( 'Could not download Pearl Harbor data from server - ' 'returning empty model') return model print 'adding the map' model.map = MapFromBNA(mapfile, refloat_halflife=1) # hours # # Add the outputters -- render to images, and save out as netCDF # print 'adding renderer and netcdf output' model.outputters += Renderer(mapfile, images_dir, size=(800, 600)) netcdf_output_file = os.path.join(base_dir, 'pearl_harbor_output.nc') scripting.remove_netcdf(netcdf_output_file) model.outputters += NetCDFOutput(netcdf_output_file, which_data='all') # # # # Set up the movers: # # print 'adding a random mover:' model.movers += RandomMover(diffusion_coef=10000) print 'adding a wind mover:' series = np.zeros((3, ), dtype=datetime_value_2d) series[0] = (start_time, (4, 180)) series[1] = (start_time + timedelta(hours=12), (2, 270)) series[2] = (start_time + timedelta(hours=24), (4, 180)) w_mover = WindMover(Wind(timeseries=series, units='knots')) model.movers += w_mover model.environment += w_mover.wind print 'adding a current mover:' # this is CH3D currents curr_file = os.path.join(base_dir, 'ch3d2013.nc') topology_file = os.path.join(base_dir, 'PearlHarborTop.dat') model.movers += GridCurrentMover(curr_file, topology_file) # # # # Add a spill (sources of elements) # # print 'adding spill' model.spills += point_line_release_spill(num_elements=1000, start_position=(-157.97064, 21.331524, 0.0), release_time=start_time) return model
def make_model(images_dir=os.path.join(base_dir, 'images')): # create the maps: print 'creating the maps' mapfile = get_datafile(os.path.join(base_dir, 'SanJuanMap.bna')) gnome_map = MapFromBNA(mapfile, refloat_halflife=1, raster_size=1024 * 1024) renderer = Renderer(mapfile, images_dir, size=(800, 800), projection_class=GeoProjection) renderer.viewport = ((-66.24, 18.39), (-66.1, 18.55)) print 'initializing the model' start_time = datetime(2014, 9, 3, 13, 0) # 15 minutes in seconds # Default to now, rounded to the nearest hour model = Model(time_step=900, start_time=start_time, duration=timedelta(days=1), map=gnome_map, uncertain=False) print 'adding outputters' model.outputters += renderer netcdf_file = os.path.join(base_dir, 'script_san_juan.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='all') print 'adding a RandomMover:' model.movers += RandomMover(diffusion_coef=100000) print 'adding a wind mover:' series = np.zeros((2, ), dtype=datetime_value_2d) series[0] = (start_time, (0, 270)) series[1] = (start_time + timedelta(hours=18), (0, 270)) wind = Wind(timeseries=series, units='m/s') w_mover = WindMover(wind) model.movers += w_mover print 'adding a cats shio mover:' # need to add the scale_factor for the tide heights file curr_file = get_datafile(os.path.join(base_dir, 'EbbTides.cur')) tide_file = get_datafile(os.path.join(base_dir, 'EbbTidesShioHt.txt')) c_mover = CatsMover(curr_file, tide=Tide(tide_file, scale_factor=.15)) # this is the value in the file (default) c_mover.scale_refpoint = (-66.116667, 18.458333) c_mover.scale = True c_mover.scale_value = 1.0 # c_mover.tide.scale_factor = 0.15 model.movers += c_mover print 'adding a cats mover:' curr_file = get_datafile(os.path.join(base_dir, 'Offshore.cur')) c_mover = CatsMover(curr_file) # this is the value in the file (default) # c_mover.scale_refpoint = (-66.082836, 18.469334) c_mover.scale_refpoint = (-66.084333333, 18.46966667) c_mover.scale = True c_mover.scale_value = 0.1 model.movers += c_mover print 'adding a spill' end_time = start_time + timedelta(hours=12) spill = point_line_release_spill(num_elements=1000, release_time=start_time, start_position=(-66.16374, 18.468054, 0.0), # start_position=(-66.129099, # 18.465332, 0.0), # end_release_time=end_time, ) model.spills += spill return model
def make_model(images_dir=os.path.join(base_dir, 'images2')): print('initializing the model') start_time = datetime(int(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3]), int(sys.argv[4]), int(sys.argv[5])) mapfile = get_datafile(os.path.join(base_dir, './brazil-coast.bna')) gnome_map = MapFromBNA(mapfile, refloat_halflife=6) # hours # # the image output renderer # global renderer #duration = timedelta(minutes=5) #timestep = timedelta(minutes=5) duration = timedelta(minutes=5) timestep = timedelta(minutes=5) endtime = start_time + duration steps = duration.total_seconds() / timestep.total_seconds() print("Total step: %.4i " % (steps)) model = Model(start_time=start_time, duration=duration, time_step=timestep, map=gnome_map, uncertain=False, cache_enabled=False) oil_name = 'GENERIC MEDIUM CRUDE' wd = UniformDistribution(low=.0002, high=.0002) subs = GnomeOil(oil_name, initializers=plume_initializers(distribution=wd)) #print 'adding a spill' #spill = point_line_release_spill(num_elements=122, # start_position=(-35.14, # -9.40, 0.0), # release_time=start_time) #model.spills += spill #spill2 = spatial_release_spill(-35.14,-9.40, 0.0, start_time) #model.spills += spill2 #print 'load nc' #netcdf_file = os.path.join(base_dir, 'maceio.nc') #relnc = InitElemsFromFile(netcdf_file,release_time=start_time) #relnc = InitElemsFromFile(netcdf_file,index=5) #spillnc = Spill(release=relnc) #print spillnc.release.num_elements #print spillnc.release.name #print spillnc.substance #print relnc._init_data['age'] #print relnc.release_time #model.spills += spillnc #model._load_spill_data() #for sc in model.spills.items(): # sc.prepare_for_model_run() #print(relnc.num_elements) #print(relnc.num_released) # add particles - it works print('adding particles') # Persistent oil spill in contiguous zone border if int(sys.argv[6]) == 1: release = release_from_splot_data(start_time, 'contiguous.txt') print("Adding new particles") model.spills += Spill(release=release, substance=subs) # Particles from previows simulation step try: f = open('step.txt') f.close() release2 = release_from_splot_data(start_time, 'step.txt') model.spills += Spill(release=release2, substance=subs) except IOError: print('No previous step, using only contiguous.txt') #assert rel.num_elements == exp_num_elems #assert len(rel.start_position) == exp_num_elems #cumsum = np.cumsum(exp) #for ix in xrange(len(cumsum) - 1): # assert np.all(rel.start_position[cumsum[ix]] == # rel.start_position[cumsum[ix]:cumsum[ix + 1]]) #assert np.all(rel.start_position[0] == rel.start_position[:cumsum[0]]) #spnc = Spill(release=None) #spnc.release = relnc print('adding a RandomMover:') #model.movers += RandomMover(diffusion_coef=10000, uncertain_factor=2) model.movers += RandomMover(diffusion_coef=10000) print('adding a current mover:') # # this is HYCOM currents curr_file = get_datafile(os.path.join(base_dir, 'corrente15a28de09.nc')) model.movers += GridCurrentMover(curr_file, num_method='Euler') print('adding a grid wind mover:') wind_file = get_datafile(os.path.join(base_dir, 'vento15a28de09.nc')) #topology_file = get_datafile(os.path.join(base_dir, 'WindSpeedDirSubsetTop.dat')) #w_mover = GridWindMover(wind_file, topology_file) w_mover = GridWindMover(wind_file) w_mover.uncertain_speed_scale = 1 w_mover.uncertain_angle_scale = 0.2 # default is .4 w_mover.wind_scale = 2 model.movers += w_mover print('adding outputters') renderer = Renderer(mapfile, images_dir, image_size=(900, 600), output_timestep=timestep, draw_ontop='forecast') #set the viewport to zoom in on the map: #renderer.viewport = ((-37, -11), (-34, -8)) #alagoas renderer.viewport = ((-55, -34), (-30, 5)) #1/4 N alagoas model.outputters += renderer netcdf_file = os.path.join(base_dir, 'step.nc') scripting.remove_netcdf(netcdf_file) model.outputters += NetCDFOutput(netcdf_file, which_data='standard', surface_conc='kde') return model