def __init__(self, pkg, num_dim): super(ClawRunData, self).__init__() self.add_attribute('pkg', pkg) self.add_attribute('num_dim', num_dim) self.add_attribute('data_list', []) self.add_attribute('xclawcmd', None) # Always need the basic clawpack data object self.add_data(ClawInputData(num_dim), 'clawdata') # Add package specific data objects if pkg.lower() in ['classic', 'classicclaw']: self.xclawcmd = 'xclaw' elif pkg.lower() in ['amrclaw', 'amr']: import clawpack.amrclaw.data as amrclaw self.xclawcmd = 'xamr' self.add_data(ClawInputData(num_dim), 'clawdata') self.add_data(amrclaw.AmrclawInputData(self.clawdata), 'amrdata') self.add_data(amrclaw.RegionData(num_dim=num_dim), 'regiondata') self.add_data(amrclaw.GaugeData(num_dim=num_dim), 'gaugedata') elif pkg.lower() in ['geoclaw']: import clawpack.amrclaw.data as amrclaw import clawpack.geoclaw.data as geoclaw self.xclawcmd = 'xgeoclaw' # Required data set for basic run parameters: self.add_data(amrclaw.AmrclawInputData(self.clawdata), 'amrdata') self.add_data(amrclaw.RegionData(num_dim=num_dim), 'regiondata') self.add_data(amrclaw.GaugeData(num_dim=num_dim), 'gaugedata') self.add_data(geoclaw.GeoClawData(), ('geo_data')) self.add_data(geoclaw.TopographyData(), 'topo_data') self.add_data(geoclaw.DTopoData(), 'dtopo_data') self.add_data(geoclaw.RefinementData(), 'refinement_data') self.add_data(geoclaw.FixedGridData(), 'fixed_grid_data') self.add_data(geoclaw.QinitData(), 'qinit_data') self.add_data(geoclaw.FGmaxData(), 'fgmax_data') # can remove try-except after PR clawpack/geoclaw#80 is merged try: self.add_data(geoclaw.SurgeData(), 'surge_data') self.add_data(geoclaw.FrictionData(), 'friction_data') except: pass else: raise AttributeError("Unrecognized Clawpack pkg = %s" % pkg)
def setplot(plotdata): r"""Setplot function for surge plotting""" plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' fig_num_counter = surge.figure_counter() # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.data')) amrdata = amrclaw.AmrclawInputData(clawdata) amrdata.read(os.path.join(plotdata.outdir, 'amr.data')) physics = geodata.GeoClawData() physics.read(os.path.join(plotdata.outdir, 'geoclaw.data')) surge_data = geodata.SurgeData() surge_data.read(os.path.join(plotdata.outdir, 'surge.data')) friction_data = geodata.FrictionData() friction_data.read(os.path.join(plotdata.outdir, 'friction.data')) # Load storm track track = surge.track_data(os.path.join(plotdata.outdir, 'fort.track')) # Calculate landfall time, off by a day, maybe leap year issue? landfall_dt = datetime.datetime(2008, 9, 13, 7) - datetime.datetime( 2008, 1, 1, 0) landfall = (landfall_dt.days - 1.0) * 24.0 * 60**2 + landfall_dt.seconds # Set afteraxes function surge_afteraxes = lambda cd: surge.surge_afteraxes( cd, track, landfall, plot_direction=False) # Color limits surface_range = 5.0 speed_range = 3.0 eta = physics.sea_level if not isinstance(eta, list): eta = [eta] surface_limits = [eta[0] - surface_range, eta[0] + surface_range] # surface_contours = numpy.linspace(-surface_range, surface_range,11) surface_contours = [ -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5 ] surface_ticks = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5] surface_labels = [str(value) for value in surface_ticks] speed_limits = [0.0, speed_range] speed_contours = numpy.linspace(0.0, speed_range, 13) speed_ticks = [0, 1, 2, 3] speed_labels = [str(value) for value in speed_ticks] wind_limits = [0, 64] # wind_limits = [-0.002,0.002] pressure_limits = [935, 1013] friction_bounds = [0.01, 0.04] # vorticity_limits = [-1.e-2,1.e-2] # def pcolor_afteraxes(current_data): # surge_afteraxes(current_data) # surge.gauge_locations(current_data,gaugenos=[6]) def contour_afteraxes(current_data): surge_afteraxes(current_data) def add_custom_colorbar_ticks_to_axes(axes, item_name, ticks, tick_labels=None): axes.plotitem_dict[item_name].colorbar_ticks = ticks axes.plotitem_dict[item_name].colorbar_tick_labels = tick_labels # ========================================================================== # ========================================================================== # Plot specifications # ========================================================================== # ========================================================================== # ======================================================================== # Entire Gulf # ======================================================================== gulf_xlimits = [clawdata.lower[0], clawdata.upper[0]] gulf_ylimits = [clawdata.lower[1], clawdata.upper[1]] gulf_shrink = 0.9 def gulf_after_axes(cd): if article: plt.subplots_adjust(left=0.08, bottom=0.04, right=0.97, top=0.96) else: plt.subplots_adjust(left=0.05, bottom=0.07, right=1.00, top=0.93) surge_afteraxes(cd) # # Surface # plotfigure = plotdata.new_plotfigure(name='Surface - Entire Domain', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes surge.add_surface_elevation(plotaxes, plot_type='contourf', contours=surface_contours, shrink=gulf_shrink) surge.add_land(plotaxes, topo_min=-10.0, topo_max=5.0) # surge.add_bathy_contours(plotaxes) if article: plotaxes.plotitem_dict['surface'].add_colorbar = False else: add_custom_colorbar_ticks_to_axes(plotaxes, 'surface', surface_ticks, surface_labels) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [ 1, 1, 1, 1, 1, 1, 1, 1 ] # # Water Speed # plotfigure = plotdata.new_plotfigure(name='Currents - Entire Domain', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes # Speed surge.add_speed(plotaxes, plot_type='contourf', contours=speed_contours, shrink=gulf_shrink) if article: plotaxes.plotitem_dict['speed'].add_colorbar = False else: add_custom_colorbar_ticks_to_axes(plotaxes, 'speed', speed_ticks, speed_labels) # Land surge.add_land(plotaxes) surge.add_bathy_contours(plotaxes) # # Friction field # plotfigure = plotdata.new_plotfigure(name='Friction', figno=fig_num_counter.get_counter()) plotfigure.show = friction_data.variable_friction and True def friction_after_axes(cd): plt.subplots_adjust(left=0.08, bottom=0.04, right=0.97, top=0.96) plt.title(r"Manning's $n$ Coefficient") # surge_afteraxes(cd) plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits # plotaxes.title = "Manning's N Coefficient" plotaxes.afteraxes = friction_after_axes plotaxes.scaled = True surge.add_friction(plotaxes, bounds=friction_bounds, shrink=0.9) plotaxes.plotitem_dict['friction'].amr_patchedges_show = [ 0, 0, 0, 0, 0, 0, 0 ] plotaxes.plotitem_dict['friction'].colorbar_label = "$n$" # ======================================================================== # LaTex Shelf # ======================================================================== latex_xlimits = [-97.5, -88.5] latex_ylimits = [27.5, 30.5] latex_shrink = 1.0 def latex_after_axes(cd): if article: plt.subplots_adjust(left=0.07, bottom=0.14, right=1.0, top=0.86) # else: # plt.subplots_adjust(right=1.0) surge_afteraxes(cd) # # Surface # plotfigure = plotdata.new_plotfigure(name='Surface - LaTex Shelf', figno=fig_num_counter.get_counter()) plotfigure.show = True if article: plotfigure.kwargs = {'figsize': (8, 2.7)} #, 'facecolor':'none'} else: plotfigure.kwargs = {'figsize': (9, 2.7)} #, 'facecolor':'none'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = latex_xlimits plotaxes.ylimits = latex_ylimits plotaxes.afteraxes = latex_after_axes surge.add_surface_elevation(plotaxes, plot_type='contourf', contours=surface_contours, shrink=latex_shrink) if article: plotaxes.plotitem_dict['surface'].add_colorbar = False # plotaxes.afteraxes = lambda cd: article_latex_after_axes(cd, landfall) else: add_custom_colorbar_ticks_to_axes( plotaxes, 'surface', [-5, -2.5, 0, 2.5, 5.0], ["-5.0", "-2.5", " 0", " 2.5", " 5.0"]) # plotaxes.plotitem_dict['surface'].contour_cmap = plt.get_cmap('OrRd') # surge.add_surface_elevation(plotaxes,plot_type='contour') surge.add_land(plotaxes) # plotaxes.plotitem_dict['surface'].amr_patchedges_show = [1,1,1,0,0,0,0] plotaxes.plotitem_dict['surface'].amr_patchedges_show = [ 0, 0, 0, 0, 0, 0, 0 ] # plotaxes.plotitem_dict['land'].amr_patchedges_show = [1,1,1,0,0,0,0] plotaxes.plotitem_dict['land'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] # Plot using jet and 0.0 to 5.0 to match figgen generated ADCIRC results # plotaxes.plotitem_dict['surface'].pcolor_cmin = 0.0 # plotaxes.plotitem_dict['surface'].pcolor_cmax = 5.0 # plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('jet') # # Water Speed # plotfigure = plotdata.new_plotfigure(name='Currents - LaTex Shelf', figno=fig_num_counter.get_counter()) plotfigure.show = True if article: plotfigure.kwargs = {'figsize': (8, 2.7)} #, 'facecolor':'none'} else: plotfigure.kwargs = {'figsize': (9, 2.7)} #, 'facecolor':'none'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = latex_xlimits plotaxes.ylimits = latex_ylimits plotaxes.afteraxes = latex_after_axes surge.add_speed(plotaxes, plot_type='contourf', contours=speed_contours, shrink=latex_shrink) if article: plotaxes.plotitem_dict['speed'].add_colorbar = False else: add_custom_colorbar_ticks_to_axes(plotaxes, 'speed', speed_ticks, speed_labels) # surge.add_surface_elevation(plotaxes,plot_type='contour') surge.add_land(plotaxes) # plotaxes.plotitem_dict['speed'].amr_patchedges_show = [1,1,0,0,0,0,0] # plotaxes.plotitem_dict['land'].amr_patchedges_show = [1,1,1,0,0,0,0] plotaxes.plotitem_dict['speed'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] plotaxes.plotitem_dict['land'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] # ======================================================================== # Houston/Galveston # ======================================================================== houston_xlimits = [-(95.0 + 26.0 / 60.0), -(94.0 + 25.0 / 60.0)] houston_ylimits = [29.1, 29.0 + 55.0 / 60.0] houston_shrink = 0.9 def houston_after_axes(cd): if article: plt.subplots_adjust(left=0.05, bottom=0.07, right=0.99, top=0.92) else: plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) # surge.gauge_locations(cd) # # Surface Elevations # plotfigure = plotdata.new_plotfigure(name='Surface - Houston/Galveston', figno=fig_num_counter.get_counter()) plotfigure.show = True # if article: # plotfigure.kwargs['figsize'] = # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = houston_xlimits plotaxes.ylimits = houston_ylimits plotaxes.afteraxes = houston_after_axes surge.add_surface_elevation(plotaxes, plot_type='contourf', contours=surface_contours, shrink=houston_shrink) if article: plotaxes.plotitem_dict['surface'].add_colorbar = False else: add_custom_colorbar_ticks_to_axes(plotaxes, 'surface', surface_ticks, surface_labels) surge.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [ 0, 0, 0, 0, 0, 0, 0 ] plotaxes.plotitem_dict['land'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] # surge.add_bathy_contours(plotaxes) # Plot using jet and 0.0 to 5.0 to match figgen generated ADCIRC results # plotaxes.plotitem_dict['surface'].pcolor_cmin = 0.0 # plotaxes.plotitem_dict['surface'].pcolor_cmax = 5.0 # plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('jet') # # Water Speed # plotfigure = plotdata.new_plotfigure(name='Currents - Houston/Galveston', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = houston_xlimits plotaxes.ylimits = houston_ylimits plotaxes.afteraxes = houston_after_axes surge.add_speed(plotaxes, plot_type='contourf', contours=speed_contours, shrink=houston_shrink) if article: plotaxes.plotitem_dict['speed'].add_colorbar = False else: add_custom_colorbar_ticks_to_axes(plotaxes, 'speed', speed_ticks, speed_labels) surge.add_land(plotaxes) # surge.add_bathy_contours(plotaxes) # plotaxes.plotitem_dict['speed'].amr_patchedges_show = [1,1,1,1,1,1,1,1] # plotaxes.plotitem_dict['land'].amr_patchedges_show = [1,1,1,1,1,1,1,1] plotaxes.plotitem_dict['speed'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] plotaxes.plotitem_dict['land'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] # ========================== # Hurricane Forcing fields # ========================== # Pressure field plotfigure = plotdata.new_plotfigure(name='Pressure', figno=fig_num_counter.get_counter()) plotfigure.show = surge_data.pressure_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.title = "Pressure Field" plotaxes.afteraxes = gulf_after_axes plotaxes.scaled = True surge.add_pressure(plotaxes, bounds=pressure_limits, shrink=gulf_shrink) surge.add_land(plotaxes) # Wind field plotfigure = plotdata.new_plotfigure(name='Wind Speed', figno=fig_num_counter.get_counter()) plotfigure.show = surge_data.wind_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.title = "Wind Field" plotaxes.afteraxes = gulf_after_axes plotaxes.scaled = True surge.add_wind(plotaxes, bounds=wind_limits, plot_type='pcolor', shrink=gulf_shrink) surge.add_land(plotaxes) # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ type='each_gauge') plotfigure.show = True plotfigure.clf_each_gauge = True # plotfigure.kwargs['figsize'] = (16,10) def gauge_after_axes(cd): if cd.gaugeno in [1, 2, 3, 4]: axes = plt.gca() # Add Kennedy gauge data kennedy_gauge = kennedy_gauges[gauge_name_trans[cd.gaugeno]] axes.plot(kennedy_gauge['t'] - seconds2days(date2seconds(gauge_landfall[0])), kennedy_gauge['mean_water'] + kennedy_gauge['depth'], 'k-', label='Gauge Data') # Add GeoClaw gauge data geoclaw_gauge = cd.gaugesoln axes.plot(seconds2days(geoclaw_gauge.t - date2seconds(gauge_landfall[1])), geoclaw_gauge.q[3, :] + gauge_surface_offset[0], 'b--', label="GeoClaw") # Add ADCIRC gauge data ADCIRC_gauge = ADCIRC_gauges[kennedy_gauge['gauge_no']] axes.plot(seconds2days(ADCIRC_gauge[:, 0] - gauge_landfall[2]), ADCIRC_gauge[:, 1] + gauge_surface_offset[1], 'r-.', label="ADCIRC") # Fix up plot axes.set_title('Station %s' % cd.gaugeno) axes.set_xlabel('Days relative to landfall') axes.set_ylabel('Surface (m)') axes.set_xlim([-2, 1]) axes.set_ylim([-1, 5]) axes.set_xticks([-2, -1, 0, 1]) axes.set_xticklabels([r"$-2$", r"$-1$", r"$0$", r"$1$"]) axes.grid(True) axes.legend() plt.hold(False) # surge.gauge_afteraxes(cd) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-2, 1] # plotaxes.xlabel = "Days from landfall" # plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [-1, 5] plotaxes.title = 'Surface' plotaxes.afteraxes = gauge_after_axes # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # ===================== # Gauge Location Plot # ===================== gauge_xlimits = [-95.5, -94] gauge_ylimits = [29.0, 30.0] gauge_location_shrink = 0.75 def gauge_after_axes(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) surge.gauge_locations(cd, gaugenos=[1, 2, 3, 4]) plt.title("Gauge Locations") plotfigure = plotdata.new_plotfigure(name='Gauge Locations', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = gauge_xlimits plotaxes.ylimits = gauge_ylimits plotaxes.afteraxes = gauge_after_axes surge.add_surface_elevation(plotaxes, plot_type='contourf', contours=surface_contours, shrink=gauge_location_shrink) # surge.add_surface_elevation(plotaxes, plot_type="contourf") add_custom_colorbar_ticks_to_axes(plotaxes, 'surface', surface_ticks, surface_labels) surge.add_land(plotaxes) # plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0,0,0,0,0,0,0] # plotaxes.plotitem_dict['surface'].add_colorbar = False # plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('jet') # plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('gist_yarg') # plotaxes.plotitem_dict['surface'].pcolor_cmin = 0.0 # plotaxes.plotitem_dict['surface'].pcolor_cmax = 5.0 plotaxes.plotitem_dict['surface'].amr_patchedges_show = [ 0, 0, 0, 0, 0, 0, 0 ] plotaxes.plotitem_dict['land'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] # ============================================================== # Debugging Plots, only really work if using interactive plots # ============================================================== # # Water Velocity Components # plotfigure = plotdata.new_plotfigure( name='Velocity Components - Entire Domain', figno=fig_num_counter.get_counter()) plotfigure.show = False # X-Component plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = "subplot(121)" plotaxes.title = 'Velocity, X-Component' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = surge.water_u plotitem.pcolor_cmap = colormaps.make_colormap({ 1.0: 'r', 0.5: 'w', 0.0: 'b' }) plotitem.pcolor_cmin = -speed_limits[1] plotitem.pcolor_cmax = speed_limits[1] plotitem.colorbar_shrink = gulf_shrink plotitem.add_colorbar = True plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [1, 1, 1] surge.add_land(plotaxes) # Y-Component plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = "subplot(122)" plotaxes.title = 'Velocity, Y-Component' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = surge.water_v plotitem.pcolor_cmap = colormaps.make_colormap({ 1.0: 'r', 0.5: 'w', 0.0: 'b' }) plotitem.pcolor_cmin = -speed_limits[1] plotitem.pcolor_cmax = speed_limits[1] plotitem.colorbar_shrink = gulf_shrink plotitem.add_colorbar = True plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [1, 1, 1] surge.add_land(plotaxes) # # Depth # plotfigure = plotdata.new_plotfigure(name='Depth - Entire Domain', figno=fig_num_counter.get_counter()) plotfigure.show = False # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'depth' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes plotitem = plotaxes.new_plotitem(plot_type='2d_imshow') plotitem.plot_var = 0 plotitem.imshow_cmap = colormaps.make_colormap({ 1.0: 'r', 0.5: 'w', 0.0: 'b' }) plotitem.imshow_cmin = 0 plotitem.imshow_cmax = 100 plotitem.colorbar_shrink = gulf_shrink plotitem.add_colorbar = True plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [1, 1, 1, 1, 1, 1, 1, 1, 1] # Surge field plotfigure = plotdata.new_plotfigure(name='Surge Field', figno=fig_num_counter.get_counter()) plotfigure.show = ((surge_data.wind_forcing or surge_data.pressure_forcing) and False) plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.title = "Storm Surge Source Term S" plotaxes.afteraxes = gulf_after_axes plotaxes.scaled = True plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = surge.pressure_field + 1 plotitem.pcolor_cmap = plt.get_cmap('PuBu') plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = 1e-3 plotitem.add_colorbar = True plotitem.colorbar_shrink = gulf_shrink plotitem.colorbar_label = "Source Strength" plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [1, 1, 1, 1, 1, 0, 0] surge.add_land(plotaxes) plotfigure = plotdata.new_plotfigure(name='Friction/Coriolis Source', figno=fig_num_counter.get_counter()) plotfigure.show = False plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.title = "Friction/Coriolis Source" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = surge.pressure_field + 2 plotitem.pcolor_cmap = plt.get_cmap('PuBu') plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = 1e-3 plotitem.add_colorbar = True plotitem.colorbar_shrink = gulf_shrink plotitem.colorbar_label = "Source Strength" plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [1, 1, 1, 1, 1, 0, 0] surge.add_land(plotaxes) #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: if article: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = [54, 60, 66, 72, 78, 84] # list of frames to print plotdata.print_gaugenos = [1, 2, 3, 4] # list of gauges to print plotdata.print_fignos = [4, 5, 6, 7, 10, 3, 300] # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = False # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? else: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_gaugenos = [1, 2, 3, 4] # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? return plotdata
def setplot(plotdata): r"""Setplot function for surge plotting""" plotdata.clearfigures() # clear any old figures,axes,items data fig_num_counter = surge.plot.figure_counter() # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.data')) amrdata = amrclaw.AmrclawInputData(clawdata) amrdata.read(os.path.join(plotdata.outdir, 'amr.data')) physics = geodata.GeoClawData() physics.read(os.path.join(plotdata.outdir, 'geoclaw.data')) surge_data = surge.data.SurgeData() surge_data.read(os.path.join(plotdata.outdir, 'surge.data')) friction_data = surge.data.FrictionData() friction_data.read(os.path.join(plotdata.outdir, 'friction.data')) # Load storm track track = surge.plot.track_data(os.path.join(plotdata.outdir, 'fort.track')) # Calculate landfall time, off by a day, maybe leap year issue? landfall_dt = datetime.datetime(2013, 10, 5, 0) - datetime.datetime( 2013, 1, 1, 0) landfall = (landfall_dt.days - 1.0) * 24.0 * 60**2 + landfall_dt.seconds # Set afteraxes function surge_afteraxes = lambda cd: surge.plot.surge_afteraxes( cd, track, landfall, plot_direction=False) # Color limits surface_range = 5.0 speed_range = 3.0 eta = physics.sea_level if not isinstance(eta, list): eta = [eta] surface_limits = [eta[0] - surface_range, eta[0] + surface_range] # surface_contours = numpy.linspace(-surface_range, surface_range,11) surface_contours = [ -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5 ] surface_ticks = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5] surface_labels = [str(value) for value in surface_ticks] speed_limits = [0.0, speed_range] speed_contours = numpy.linspace(0.0, speed_range, 13) speed_ticks = [0, 1, 2, 3] speed_labels = [str(value) for value in speed_ticks] wind_limits = [0, 64] # wind_limits = [-0.002,0.002] pressure_limits = [935, 1013] friction_bounds = [0.01, 0.04] # vorticity_limits = [-1.e-2,1.e-2] # def pcolor_afteraxes(current_data): # surge_afteraxes(current_data) # surge.plot.gauge_locations(current_data,gaugenos=[6]) def contour_afteraxes(current_data): surge_afteraxes(current_data) def add_custom_colorbar_ticks_to_axes(axes, item_name, ticks, tick_labels=None): axes.plotitem_dict[item_name].colorbar_ticks = ticks axes.plotitem_dict[item_name].colorbar_tick_labels = tick_labels # ========================================================================== # ========================================================================== # Plot specifications # ========================================================================== # ========================================================================== # ======================================================================== # Entire Gulf # ======================================================================== gulf_xlimits = [clawdata.lower[0], clawdata.upper[0]] gulf_ylimits = [clawdata.lower[1], clawdata.upper[1]] gulf_shrink = 0.9 def gulf_after_axes(cd): plt.subplots_adjust(left=0.08, bottom=0.04, right=0.97, top=0.96) surge_afteraxes(cd) # # Surface # plotfigure = plotdata.new_plotfigure(name='Surface - Entire Domain', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes surge.plot.add_surface_elevation(plotaxes, plot_type='contourf', contours=surface_contours, shrink=gulf_shrink) surge.plot.add_land(plotaxes, topo_min=-10.0, topo_max=5.0) # surge.plot.add_bathy_contours(plotaxes) if article: plotaxes.plotitem_dict['surface'].add_colorbar = False else: add_custom_colorbar_ticks_to_axes(plotaxes, 'surface', surface_ticks, surface_labels) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [ 1, 1, 1, 1, 1, 1, 1, 1 ] # # Water Speed # plotfigure = plotdata.new_plotfigure(name='Currents - Entire Domain', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes # Speed surge.plot.add_speed(plotaxes, plot_type='contourf', contours=speed_contours, shrink=gulf_shrink) if article: plotaxes.plotitem_dict['speed'].add_colorbar = False else: add_custom_colorbar_ticks_to_axes(plotaxes, 'speed', speed_ticks, speed_labels) # Land surge.plot.add_land(plotaxes) surge.plot.add_bathy_contours(plotaxes) # # Friction field # plotfigure = plotdata.new_plotfigure(name='Friction', figno=fig_num_counter.get_counter()) plotfigure.show = friction_data.variable_friction and True def friction_after_axes(cd): plt.subplots_adjust(left=0.08, bottom=0.04, right=0.97, top=0.96) plt.title(r"Manning's $n$ Coefficient") # surge_afteraxes(cd) plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits # plotaxes.title = "Manning's N Coefficient" plotaxes.afteraxes = friction_after_axes plotaxes.scaled = True surge.plot.add_friction(plotaxes, bounds=friction_bounds, shrink=0.9) plotaxes.plotitem_dict['friction'].amr_patchedges_show = [ 0, 0, 0, 0, 0, 0, 0 ] plotaxes.plotitem_dict['friction'].colorbar_label = "$n$" # ======================================================================== # LaTex Shelf # ======================================================================== latex_xlimits = [-97.5, -88.5] latex_ylimits = [27.5, 30.5] latex_shrink = 1.0 def latex_after_axes(cd): if article: plt.subplots_adjust(left=0.07, bottom=0.14, right=1.0, top=0.86) else: plt.subplots_adjust(right=1.0) surge_afteraxes(cd) # # Surface # plotfigure = plotdata.new_plotfigure(name='Surface - LaTex Shelf', figno=fig_num_counter.get_counter()) plotfigure.show = True if article: plotfigure.kwargs = {'figsize': (8, 2.7), 'facecolor': 'none'} else: plotfigure.kwargs = {'figsize': (9, 2.7), 'facecolor': 'none'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = latex_xlimits plotaxes.ylimits = latex_ylimits plotaxes.afteraxes = latex_after_axes surge.plot.add_surface_elevation(plotaxes, plot_type='contourf', contours=surface_contours, shrink=latex_shrink) if article: plotaxes.plotitem_dict['surface'].add_colorbar = False # plotaxes.afteraxes = lambda cd: article_latex_after_axes(cd, landfall) else: add_custom_colorbar_ticks_to_axes( plotaxes, 'surface', [-5, -2.5, 0, 2.5, 5.0], ["-5.0", "-2.5", " 0", " 2.5", " 5.0"]) # plotaxes.plotitem_dict['surface'].contour_cmap = plt.get_cmap('OrRd') # surge.plot.add_surface_elevation(plotaxes,plot_type='contour') surge.plot.add_land(plotaxes) # plotaxes.plotitem_dict['surface'].amr_patchedges_show = [1,1,1,0,0,0,0] plotaxes.plotitem_dict['surface'].amr_patchedges_show = [ 0, 0, 0, 0, 0, 0, 0 ] # plotaxes.plotitem_dict['land'].amr_patchedges_show = [1,1,1,0,0,0,0] plotaxes.plotitem_dict['land'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] # Plot using jet and 0.0 to 5.0 to match figgen generated ADCIRC results # plotaxes.plotitem_dict['surface'].pcolor_cmin = 0.0 # plotaxes.plotitem_dict['surface'].pcolor_cmax = 5.0 # plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('jet') # # Water Speed # plotfigure = plotdata.new_plotfigure(name='Currents - LaTex Shelf', figno=fig_num_counter.get_counter()) plotfigure.show = True if article: plotfigure.kwargs = {'figsize': (8, 2.7), 'facecolor': 'none'} else: plotfigure.kwargs = {'figsize': (9, 2.7), 'facecolor': 'none'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = latex_xlimits plotaxes.ylimits = latex_ylimits plotaxes.afteraxes = latex_after_axes surge.plot.add_speed(plotaxes, plot_type='contourf', contours=speed_contours, shrink=latex_shrink) if article: plotaxes.plotitem_dict['speed'].add_colorbar = False else: add_custom_colorbar_ticks_to_axes(plotaxes, 'speed', speed_ticks, speed_labels) # surge.plot.add_surface_elevation(plotaxes,plot_type='contour') surge.plot.add_land(plotaxes) # plotaxes.plotitem_dict['speed'].amr_patchedges_show = [1,1,0,0,0,0,0] # plotaxes.plotitem_dict['land'].amr_patchedges_show = [1,1,1,0,0,0,0] plotaxes.plotitem_dict['speed'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] plotaxes.plotitem_dict['land'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] # ========================== # Hurricane Forcing fields # ========================== # Pressure field plotfigure = plotdata.new_plotfigure(name='Pressure', figno=fig_num_counter.get_counter()) plotfigure.show = surge_data.pressure_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.title = "Pressure Field" plotaxes.afteraxes = gulf_after_axes plotaxes.scaled = True surge.plot.add_pressure(plotaxes, bounds=pressure_limits, shrink=gulf_shrink) surge.plot.add_land(plotaxes) # Wind field plotfigure = plotdata.new_plotfigure(name='Wind Speed', figno=fig_num_counter.get_counter()) plotfigure.show = surge_data.wind_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.title = "Wind Field" plotaxes.afteraxes = gulf_after_axes plotaxes.scaled = True surge.plot.add_wind(plotaxes, bounds=wind_limits, plot_type='pcolor', shrink=gulf_shrink) surge.plot.add_land(plotaxes) # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ type='each_gauge') plotfigure.show = True plotfigure.clf_each_gauge = True plotfigure.kwargs['figsize'] = (16, 10) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-2, 1] # plotaxes.xlabel = "Days from landfall" # plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [-1, 5] plotaxes.title = 'Surface' # plotaxes.afteraxes = gauge_after_axes # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # ===================== # Gauge Location Plot # ===================== gauge_xlimits = [-95.5, -94] gauge_ylimits = [29.0, 30.0] gauge_location_shrink = 0.75 def gauge_after_axes(cd): # plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) surge.plot.gauge_locations(cd, gaugenos=[1, 2, 3, 4]) plt.title("Gauge Locations") plotfigure = plotdata.new_plotfigure(name='Gauge Locations', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = gauge_xlimits plotaxes.ylimits = gauge_ylimits plotaxes.afteraxes = gauge_after_axes surge.plot.add_surface_elevation(plotaxes, plot_type='contourf', contours=surface_contours, shrink=gauge_location_shrink) # surge.plot.add_surface_elevation(plotaxes, plot_type="contourf") add_custom_colorbar_ticks_to_axes(plotaxes, 'surface', surface_ticks, surface_labels) surge.plot.add_land(plotaxes) # plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0,0,0,0,0,0,0] # plotaxes.plotitem_dict['surface'].add_colorbar = False # plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('jet') # plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('gist_yarg') # plotaxes.plotitem_dict['surface'].pcolor_cmin = 0.0 # plotaxes.plotitem_dict['surface'].pcolor_cmax = 5.0 plotaxes.plotitem_dict['surface'].amr_patchedges_show = [ 0, 0, 0, 0, 0, 0, 0 ] plotaxes.plotitem_dict['land'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: if article: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = [54, 60, 66, 72, 78, 84] # list of frames to print plotdata.print_gaugenos = [1, 2, 3, 4] # list of gauges to print plotdata.print_fignos = [4, 5, 6, 7, 10, 3, 300] # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = False # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? else: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_gaugenos = [1, 2, 3, 4] # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? return plotdata
def setplot(plotdata): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of clawpack.visclaw.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps, geoplot from numpy import linspace plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' #plotdata.format = 'ascii' # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.data')) ocean_xlimits = [clawdata.lower[0], clawdata.upper[0]] ocean_ylimits = [clawdata.lower[1], clawdata.upper[1]] amrdata = amrclaw.AmrclawInputData(clawdata) amrdata.read(os.path.join(plotdata.outdir, 'amr.data')) physics = geodata.GeoClawData() physics.read(os.path.join(plotdata.outdir, 'geoclaw.data')) surge_data = geodata.SurgeData() surge_data.read(os.path.join(plotdata.outdir, 'surge.data')) probdata = clawutil.ClawData() #probdata.read('setprob.data', force=True) #theta_island = probdata.theta_island # To plot gauge locations on pcolor or contour plot, use this as # an afteraxis function: def addgauges(current_data): from clawpack.visclaw import gaugetools gaugetools.plot_gauge_locations(current_data.plotdata, \ gaugenos='all', format_string='ko', add_labels=True) def mynewafteraxes(current_data): addgauges(current_data) bigfont(current_data) #----------------------------------------- # Some global KML settings #----------------------------------------- #plotdata.kml_publish = 'http://math.boisestate.edu/~calhoun/visclaw/GoogleEarth/kmz/' #public html plotdata.kml_publish = None plotdata.kml_name = "NYC Asteroid" # name appears in Google Earth display only plotdata.kml_index_fname = "NYC_Asteroid" # name for .kmz and .kml files ["_GoogleEarth"] # specify beginning of slider time. if not used, assumes Jan. 1 1970 plotdata.kml_starttime = [2115, 4, 29, 7, 32, 0] # Asteroid hits at 1:32AM, 4/29/2115 (UTC) plotdata.kml_tz_offset = 6 # off set to UTC # for todays date as the default use kml_cmin = -0.005 #colorbar min and max kml_cmax = 0.005 kml_dpi = 400 # only used if individual figures dpi not set kml_cmap = geoplot.googleearth_lightblue # kml_cmap = geoplot.googleearth_darkblue # kml_cmap = geoplot.googleearth_transparent # kml_cmap = geoplot.googleearth_white def kml_colorbar(filename): #cmin = -0.01 #cmax = 0.01 geoplot.kml_build_colorbar(filename, kml_cmap, kml_cmin, kml_cmax) #----------------------------------------- # Figure for pcolor plot for surface #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='pcolor', figno=0) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True #plotaxes.afteraxes = addgauges # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.show = True #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth #plotitem.plot_var = 0/1/2 or plot that entry into q instead of a function plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -.8 plotitem.pcolor_cmax = .8 plotitem.add_colorbar = True plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [0, 0, 0] # Land plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = geoplot.land plotitem.show = True # plotitem.pcolor_cmap = colormaps.all_white # to print better in B&W plotitem.pcolor_cmap = geoplot.land_colors #plotitem.pcolor_cmap = geoplot.googleearth_transparent plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [0, 0, 0, 0, 0] #plotitem.patchedges_show = 1 plotitem.amr_patchedges_show = [0, 0, 0] #plotaxes.xlimits = [-85,-55] #plotaxes.ylimits = [25,45] plotaxes.xlimits = ocean_xlimits plotaxes.ylimits = ocean_ylimits #plotaxes.xlimits = [-75,-70] #plotaxes.ylimits = [38,43] # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = True plotitem.plot_var = geoplot.topo #plotitem.contour_levels = [-500,-250,-100, -50, 0, 50] plotitem.contour_levels = linspace(-1000, -400, 3) plotitem.amr_contour_colors = ['g'] # color on each level #plotitem.kwargs = {'linestyles':'dashed','linewidths':2,'colors' : 'red' } plotitem.kwargs = { 'linestyles': 'dashed', 'linewidths': 1, 'colors': 'magenta' } plotitem.amr_contour_show = [1, 1, 1] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 #----------------------------------------------------------- # Figure for KML files - Sea Surface Height #---------------------------------------------------------- #plotfigure = plotdata.new_plotfigure(name='Sea Surface',figno=1) #plotfigure.show = True #plotfigure.use_for_kml = True #plotfigure.kml_use_for_initial_view = True # These overide any values set in the plotitems below #plotfigure.kml_xlimits = [-80,-55] #plotfigure.kml_ylimits = [25, 45] # Resolution #plotfigure.kml_dpi = 300 #plotfigure.kml_tile_images = False def kml_colorbar_transparent(filename): #cmin = -0.01 #cmax = 0.01 geoplot.kml_build_colorbar(filename, geoplot.googleearth_transparent, kml_cmin, kml_cmax) #plotfigure.kml_colorbar = kml_colorbar_transparent # Set up for axes in this figure: #plotaxes = plotfigure.new_plotaxes('kml') #plotaxes.scaled = True # Water #plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.show = True #plotitem.plot_var = geoplot.surface_or_depth #plotitem.pcolor_cmap = geoplot.googleearth_transparent #plotitem.pcolor_cmin = kml_cmin #plotitem.pcolor_cmax = kml_cmax #plotitem.amr_celledges_show = [0,0,0] #plotitem.patchedges_show = 0 #plotfigure.kml_colorbar = kml_colorbar #----------------------------------------- # Figure for speeds #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Speeds', figno=10) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Speed' plotaxes.scaled = True #def fixup(current_data): # import pylab # addgauges(current_data) # t = current_data.t # t = t / 3600. # hours # pylab.title('Speed at %4.2f hours' % t, fontsize=20) # pylab.xticks(fontsize=15) # pylab.yticks(fontsize=15) #plotaxes.afteraxes = fixup def speed(current_data): from pylab import where, sqrt q = current_data.q h = q[0, :] dry_tol = 0.001 u = q[1, :] # this is just to initialize v = q[2, :] # to correct size s = 0 * q[2, :] # to correct size nq = len(q[1, :]) [n, m] = h.shape for ii in range(0, n): for jj in range(0, m): if h[ii, jj] > dry_tol: u[ii, jj] = q[1, ii, jj] / h[ii, jj] v[ii, jj] = q[2, ii, jj] / h[ii, jj] s[ii, jj] = sqrt(u[ii, jj] * u[ii, jj] + v[ii, jj] * v[ii, jj]) else: u[ii, jj] = 0. v[ii, jj] = 0. s[ii, jj] = 0 #print("max of u = " + str(max(u))) #u = where(h>dry_tol, q[1,:]/h, 0.) #v = where(h>dry_tol, q[2,:]/h, 0.) #s = sqrt(u**2 + v**2) #s = sqrt(u*2+v*v) #try not dividing or using where return s # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.show = False plotitem.plot_var = speed plotitem.pcolor_cmap = geoplot.tsunami_colormap #plotitem.pcolor_cmap = \ # colormaps.make_colormap({0:[1,1,1],0.5:[0.5,0.5,1],1:[1,0.3,0.3]}) plotitem.pcolor_cmin = 0. plotitem.pcolor_cmax = .10 plotitem.add_colorbar = True plotitem.amr_celledges_show = [0, 0, 0] #plotitem.patchedges_show = 1 plotitem.amr_patchedges_show = [0, 0, 0] # Land plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = geoplot.land plotitem.pcolor_cmap = geoplot.land_colors plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [0, 0, 0] plotitem.patchedges_show = 0 plotaxes.xlimits = ocean_xlimits plotaxes.ylimits = ocean_ylimits #----------------------------------------- # Figure for zoom around NYC #----------------------------------------- zoomWanted = True if zoomWanted: plotfigure = plotdata.new_plotfigure(name='Zoom1', figno=7) # add another figure #plotfigure.use_for_kml = True #plotfigure.kml_use_for_initial_view = False # These overide any values set in the plotitems below #plotfigure.kml_xlimits = [-74.5, -73.5] #plotfigure.kml_ylimits = [40.4,40.9] # Resolution #plotfigure.kml_dpi = 300 #plotfigure.kml_tile_images = True #plotfigure.kml_colorbar = kml_colorbar # defined above # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('zoom on nyc') plotaxes.title = 'Surface elevation' plotaxes.scaled = True manhattan_island = -73.5 xisland, yisland = latlong(1600e3, manhattan_island, 40., Rearth) #plotaxes.xlimits = [xisland-0.6, xisland+0.6] #plotaxes.xlimits = [manhattan_island-1, manhattan_island+1] #plotaxes.ylimits = [40.15,41.5] plotaxes.xlimits = [-74.5, -72.5] # really zoom in on lower manhattan] plotaxes.ylimits = [40.25, 41.5] plotaxes.afteraxes = addgauges def bigfont(current_data): import pylab t = current_data.t pylab.title("Surface at t = %8.1f" % t, fontsize=20) pylab.xticks(fontsize=15) pylab.yticks(fontsize=15) #plotaxes.afteraxes = bigfont #plotaxes.afteraxes = mynewafteraxes # after axes functions mess with GE plots # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.show = False #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth #plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmap = kml_cmap #plotitem.pcolor_cmin = kml_cmin # same as above #plotitem.pcolor_cmax = kml_cmax plotitem.pcolor_cmin = -.2 plotitem.pcolor_cmax = .2 plotitem.add_colorbar = True plotitem.amr_celledges_show = [0, 0, 0] plotitem.patchedges_show = 0 # Land plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.show = False plotitem.plot_var = geoplot.land # plotitem.pcolor_cmap = colormaps.all_white # to print better in B&W plotitem.pcolor_cmap = geoplot.land_colors plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [0, 0, 0, 0, 0] plotitem.patchedges_show = 0 # contour lines: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = False plotitem.plot_var = geoplot.surface plotitem.contour_levels = [-0.8, -0.4, 0.4, 0.8] plotitem.amr_contour_colors = ['k'] # color on each level plotitem.kwargs = {'linewidths': 1} plotitem.amr_contour_show = [0, 0, 0, 1, 1] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = linspace(-30, -10, 3) plotitem.amr_contour_colors = ['m'] # color on each level plotitem.kwargs = {'linestyles': 'dashed', 'linewidths': 1} plotitem.amr_contour_show = [1, 1, 1] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ type='each_gauge') plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() #plotaxes.xlimits = [0000, 6500] #plotaxes.ylimits = [-.10, .15] plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Surface' # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # Plot topo as green curve: #plotitem = plotaxes.new_plotitem(plot_type='1d_plot') def gaugetopo(current_data): q = current_data.q h = q[0, :] eta = q[3, :] topo = eta - h return topo def gaugedpress(current_data): q = current_data.q #dpress = (q[4,:] - 101300)/101300 dpress = q[4, :] # already output as relative: dp/amb_pr return dpress def gs(current_data): q = current_data.q # different than speed function because q is function of time, not # x,y at the gauges. from numpy import where, sqrt h = q[0, :] #print('shape of h ' + str(h.shape)) dry_tol = 0.001 u = where(h > dry_tol, q[1, :] / h, 0.) v = where(h > dry_tol, q[2, :] / h, 0.) ssq = sqrt(u * u + v * v) #s = sqrt(u**2 + v**2) s = sqrt(ssq) return ssq #plotitem.plot_var = gaugetopo #plotitem.plotstyle = 'g-' # Plot relative delta pressure as red curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = gaugedpress plotitem.plotstyle = 'r-' # add speed to this plot since cant get new one going plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = gs plotitem.plotstyle = 'g-' def add_zeroline(current_data): from pylab import plot, legend t = current_data.t # legend(('surface','topography','dp'),loc='lower left') legend(('surface', 'dp', 'speed'), loc='upper right') #plot(t, 0*t, 'k') plotaxes.afteraxes = add_zeroline # ------------------------------- # Figure for speed at gauges #-------------------------------- # plotfigure = plotdata.new_plotfigure(name='Speed at gauges', figno=310, \ # type='each_gauge') # # # # Set up for axes in this figure: # plotaxes = plotfigure.new_plotaxes() # plotaxes.xlimits = 'auto' # plotaxes.ylimits = 'auto' # #plotaxes.xlimits = [0000, 7000] # #plotaxes.ylimits = 'auto' # plotaxes.title = 'Speed' # # # Plot surface as blue curve: # plotitem = plotaxes.new_plotitem(plot_type='1d_plot') # #plotitem.plot_var = speed # plotitem.plot_var = gs #gauge_speed # plotitem.plotstyle = 'b-' # # plotfigure.show = True # #----------------------------------------- # Figure for bathy alone #----------------------------------------- def bathy(current_data): return current_data.aux[0, :, :] plotfigure = plotdata.new_plotfigure(name='bathymetry', figno=3) plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Bathymetry' plotaxes.scaled = True plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = bathy plotitem.pcolor_cmin = -3000.00 plotitem.pcolor_cmax = 500 plotitem.add_colorbar = True plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = linspace(-2000, 2000, 21) plotitem.amr_contour_colors = ['k'] # color on each level #plotitem.contour_levels = [-1000 -500,-250,-100, -5, 5] #----------------------------------------- # Figure for grids alone #----------------------------------------- #plotfigure = plotdata.new_plotfigure(name='grids', figno=2) #plotfigure.show = False # Set up for axes in this figure: #plotaxes = plotfigure.new_plotaxes() #plotaxes.xlimits = [0,1] #plotaxes.ylimits = [0,1] #plotaxes.title = 'grids' #plotaxes.scaled = True # Set up for item on these axes: #plotitem = plotaxes.new_plotitem(plot_type='2d_patch') #plotitem.amr_patch_bgcolor = ['#ffeeee', '#eeeeff', '#eeffee'] #plotitem.amr_celledges_show = [0,0,0] #plotitem.amr_patchedges_show = [0,0,0] def normalized_pressure(current_data): pressure_index = 6 #7 in fortran, but python is 0 based return current_data.aux[ pressure_index, :, :] / surge_data.ambient_pressure # Pressure field plotfigure = plotdata.new_plotfigure(name='Pressure', figno=33) plotfigure.show = True plotaxes = plotfigure.new_plotaxes('normalized_pressure') plotaxes.xlimits = ocean_xlimits plotaxes.ylimits = ocean_ylimits plotaxes.title = 'Pressure Field' plotaxes.scaled = True plotaxes.afteraxes = addgauges pressure_limits = [.99, 1.10] #pressure_limits = [.999*surge_data.ambient_pressure / 100.0, # 1.001 * surge_data.ambient_pressure / 100.0] #pressure_limits = [-.000001*surge_data.ambient_pressure, # .000001 * surge_data.ambient_pressure] surgeplot.add_pressure(plotaxes, bounds=pressure_limits) surgeplot.add_land(plotaxes) #plotitem = plotaxes.new_plotitem(plot_type='2d_patch') plotitem = plotaxes.plotitem_dict['pressure'] plotitem.show = False plotitem.plot_var = normalized_pressure plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [0, 0, 0] plotaxes.plotitem_dict['land'].amr_celledges_show = [0, 0, 0] plotaxes.plotitem_dict['land'].amr_patchedges_show = [0, 0, 0] #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via clawpack.visclaw.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print #plotdata.print_framenos = [30,50,70] # list of frames to print #plotdata.print_framenos = [1] # list of frames to print plotdata.print_gaugenos = 'all' # list of gauges to print #plotdata.print_fignos = [0,7,10,33,300] # list of figures to print #plotdata.print_fignos = [0,7,10,300] # list of figures to print plotdata.print_fignos = [0, 300] # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.kml = False return plotdata
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ import os import numpy as np import matplotlib.pyplot as plt from clawpack.visclaw import geoplot, gaugetools, colormaps import clawpack.clawutil.data as clawutil import clawpack.amrclaw.data as amrclaw import clawpack.geoclaw.data import clawpack.geoclaw.multilayer.plot as ml_plot if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() from numpy import linspace plotdata.clearfigures() # clear any old figures,axes,items data plotdata.save_frames = False # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.data')) amrdata = amrclaw.AmrclawInputData(clawdata) amrdata.read(os.path.join(plotdata.outdir, 'amr.data')) geodata = clawpack.geoclaw.data.GeoClawData() geodata.read(os.path.join(plotdata.outdir, 'geoclaw.data')) multilayer_data = clawpack.geoclaw.data.MultilayerData() multilayer_data.read(os.path.join(plotdata.outdir, 'multilayer.data')) # To plot gauge locations on pcolor or contour plot, use this as # an afteraxis function: def addgauges(current_data): from clawpack.visclaw import gaugetools gaugetools.plot_gauge_locations(current_data.plotdata, \ gaugenos='all', format_string='ko', add_labels=True) # ======================================================================== # Generic helper functions # ======================================================================== def pcolor_afteraxes(current_data): # bathy_ref_lines(current_data) gauge_locations(current_data) def contour_afteraxes(current_data): # gauge_locations(current_data) # m_to_km_labels() plt.hold(True) pos = -80.0 * (23e3 / 180) + 500e3 - 5e3 plt.plot([pos, pos], [-300e3, 300e3], 'b', [pos - 5e3, pos - 5e3], [-300e3, 300e3], 'y') plt.hold(False) wind_contours(current_data) bathy_ref_lines(current_data) def profile_afteraxes(current_data): pass def gauge_locations(current_data, gaugenos='all'): plt.hold(True) gaugetools.plot_gauge_locations(current_data.plotdata, \ gaugenos=gaugenos, format_string='kx', add_labels=True) plt.hold(False) # ======================================================================== # Axis limits # xlimits = [amrdata.xlower,amrdata.xupper] xlimits = [-100.0, 100.0] # ylimits = [amrdata.ylower,amrdata.yupper] ylimits = [-100.0, 100.0] eta = [multilayer_data.eta[0], multilayer_data.eta[1]] top_surface_limits = [eta[0] - 10, eta[0] + 10] internal_surface_limits = [eta[1] - 5, eta[1] + 5] depth_limits = [0.0, 0.4] top_speed_limits = [0.0, 0.1] internal_speed_limits = [0.0, 0.03] # ======================================================================== # Surface Elevations # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) plotfigure.show = True plotfigure.kwargs = {'figsize': (14, 4)} # Top surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Top Surface' plotaxes.axescmd = 'subplot(1,2,1)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits ml_plot.add_inundation(plotaxes, 1, bounds=depth_limits) ml_plot.add_surface_elevation(plotaxes, 1, bounds=top_surface_limits) ml_plot.add_land(plotaxes, 1) # Bottom surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Internal Surface' plotaxes.axescmd = 'subplot(1,2,2)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits ml_plot.add_inundation(plotaxes, 2, bounds=depth_limits) ml_plot.add_surface_elevation(plotaxes, 2, bounds=internal_surface_limits) ml_plot.add_colorbar = True ml_plot.add_land(plotaxes, 2) # ======================================================================== # Figure for cross section # ======================================================================== plotfigure = plotdata.new_plotfigure(name='cross-section', figno=4) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.title = 'Cross section at y=0' ml_plot.add_cross_section(plotaxes, 1) ml_plot.add_cross_section(plotaxes, 2) ml_plot.add_land_cross_section(plotaxes) # ======================================================================== # Water Speed # ======================================================================== plotfigure = plotdata.new_plotfigure(name='speed', figno=1) plotfigure.show = False plotfigure.kwargs = {'figsize': (14, 4)} # Top layer speed plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents - Top Layer' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(1,2,1)' ml_plot.add_speed(plotaxes, 1, bounds=top_speed_limits) ml_plot.add_land(plotaxes, 1) # Bottom layer speed plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents - Bottom Layer' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(1,2,2)' ml_plot.add_speed(plotaxes, 2, bounds=internal_speed_limits) ml_plot.add_land(plotaxes, 2) # Individual components plotfigure = plotdata.new_plotfigure(name='speed_components', figno=401) plotfigure.show = False plotfigure.kwargs = {'figsize': (14, 14)} # Top layer plotaxes = plotfigure.new_plotaxes() plotaxes.title = "X-Velocity - Top Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,1)' ml_plot.add_x_velocity(plotaxes, 1) ml_plot.add_land(plotaxes, 1) plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Y-Velocity - Top Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,2)' ml_plot.add_y_velocity(plotaxes, 1) ml_plot.add_land(plotaxes, 1) # Bottom layer plotaxes = plotfigure.new_plotaxes() plotaxes.title = "X-Velocity - Bottom Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,3)' ml_plot.add_x_velocity(plotaxes, 2) ml_plot.add_land(plotaxes, 2) plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Y-Velocity - Bottom Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,4)' ml_plot.add_y_velocity(plotaxes, 2) ml_plot.add_land(plotaxes, 2) #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface at gauges', figno=300, \ type='each_gauge') plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Surface' # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # Plot topo as green curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False def gaugetopo(current_data): q = current_data.q h = q[0, :] eta = q[3, :] topo = eta - h return topo plotitem.plot_var = gaugetopo plotitem.plotstyle = 'g-' def add_zeroline(current_data): from pylab import plot, legend, xticks, floor, axis, xlabel t = current_data.t gaugeno = current_data.gaugeno if gaugeno == 32412: try: plot(TG32412[:, 0], TG32412[:, 1], 'r') legend(['GeoClaw', 'Obs'], loc='lower right') except: pass axis((0, t.max(), -0.3, 0.3)) plot(t, 0 * t, 'k') n = int(floor(t.max() / 3600.) + 2) xticks([3600 * i for i in range(n)], ['%i' % i for i in range(n)]) xlabel('time (hours)') #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata): r"""Setplot function for surge plotting""" plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'ascii' # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.data')) amrdata = amrclaw.AmrclawInputData(clawdata) amrdata.read(os.path.join(plotdata.outdir, 'amr.data')) physics = geodata.GeoClawData() physics.read(os.path.join(plotdata.outdir, 'geoclaw.data')) surge_data = surgedata.SurgeData() surge_data.read(os.path.join(plotdata.outdir, 'surge.data')) friction_data = surgedata.FrictionData() friction_data.read(os.path.join(plotdata.outdir, 'friction.data')) # Load storm track track = surgeplot.track_data(os.path.join(plotdata.outdir, 'fort.track')) # Calculate landfall time, off by a day, maybe leap year issue? landfall_dt = datetime.datetime(2008, 9, 13, 7) - datetime.datetime( 2008, 1, 1, 0) landfall = (landfall_dt.days - 1.0) * 24.0 * 60**2 + landfall_dt.seconds # Color limits surface_range = 5.0 speed_range = 3.0 eta = physics.sea_level if not isinstance(eta, list): eta = [eta] surface_limits = [eta[0] - surface_range, eta[0] + surface_range] # surface_contours = numpy.linspace(-surface_range, surface_range,11) surface_contours = [ -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5 ] speed_limits = [0.0, speed_range] speed_contours = numpy.linspace(0.0, speed_range, 13) wind_limits = [0, 64] # wind_limits = [-0.002,0.002] pressure_limits = [935, 1013] friction_bounds = [0.01, 0.04] # vorticity_limits = [-1.e-2,1.e-2] # ========================================================================== # ========================================================================== # Plot specifications # ========================================================================== # ========================================================================== #----------------------------------------- # Some global kml flags #----------------------------------------- plotdata.kml_name = "Ike" plotdata.kml_starttime = [2008, 9, 3, 15, 0, 0] # Time of event in UTC [None] plotdata.kml_tz_offset = 5 # Time zone offset (in hours) of event. [None] plotdata.kml_index_fname = "Ike" # name for .kmz and .kml files ["_GoogleEarth"] # Set to path where KMZ files will be stored; KML file will then # link to this path. # plotdata.kml_publish = 'http://www.domain.edu/path/to/kmz/files' # ======================================================================== # Entire Gulf # ======================================================================== gulf_xlimits = [clawdata.lower[0], clawdata.upper[0]] gulf_ylimits = [clawdata.lower[1], clawdata.upper[1]] gulf_shrink = 1.0 # -------------------------- # Surface - entire gulf # -------------------------- plotfigure = plotdata.new_plotfigure(name='Surface - Entire Domain', figno=0) plotfigure.show = True plotfigure.use_for_kml = True plotfigure.kml_use_for_initial_view = True # These override axes limits set below in plotitems plotfigure.kml_xlimits = gulf_xlimits plotfigure.kml_ylimits = gulf_ylimits # Resolution - needs to be set carefully for the transparent colormap rcl = 40 plotfigure.kml_dpi = rcl * 2 plotfigure.kml_figsize = [11.6, 9.6] plotfigure.kml_tile_images = False # Tile images for faster loading. Requires GDAL [False] plotaxes = plotfigure.new_plotaxes() plotitem = plotaxes.new_plotitem(name='surface', plot_type='2d_pcolor') plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.googleearth_transparent plotitem.pcolor_cmin = -surface_range plotitem.pcolor_cmax = surface_range def kml_colorbar(filename): cmin = -surface_range cmax = surface_range geoplot.kml_build_colorbar(filename, geoplot.googleearth_transparent, cmin, cmax) plotfigure.kml_colorbar = kml_colorbar # -------------------------- # Water Speed - entire gulf # -------------------------- plotfigure = plotdata.new_plotfigure(name='Currents - Entire Domain', figno=1) plotfigure.show = True plotfigure.use_for_kml = True plotfigure.kml_use_for_initial_view = False # These override axes limits set below in plotitems plotfigure.kml_xlimits = gulf_xlimits plotfigure.kml_ylimits = gulf_ylimits plotfigure.kml_figsize = [11.6, 9.6] plotfigure.kml_dpi = 80 # size not so important with contourf plotfigure.kml_tile_images = False # Tile images for faster loading. Requires GDAL [False] # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotitem = plotaxes.new_plotitem(name='surface', plot_type='2d_contourf') plotitem.plot_var = geoplot.surface_or_depth plotitem.contour_levels = speed_contours plotitem.fill_cmin = min(speed_contours) plotitem.fill_cmax = max(speed_contours) cmap = plt.get_cmap('OrRd') cmap._rgba_under = (0.0, 0.0, 0.0, 0.0) plotitem.fill_cmap = cmap def cbar_speeds(filename): cmin = min(speed_contours) cmax = max(speed_contours) geoplot.kml_build_colorbar(filename, cmap, cmin, cmax) plotfigure.kml_colorbar = cbar_speeds # ======================================================================== # Houston/Galveston # ======================================================================== houston_xlimits = [-(95.0 + 26.0 / 60.0), -(94.0 + 25.0 / 60.0)] houston_ylimits = [29.1, 29.0 + 55.0 / 60.0] houston_shrink = 0.9 #No need to worry about fitting the plot exactly if we are not using # the transparent colormap with pcolor. #num_cells = [116, 96] #dx = (gulf_xlimits[1] - float(gulf_xlimits[0]))/num_cells[0] # = 0.25 #dy = (gulf_ylimits[1] - float(gulf_ylimits[0]))/num_cells[1] # = 0.25 #houston_xlimits = [gulf_xlimits[0] + 14*dx, gulf_xlimits[0] + 21*dx] # [-95.25, -94.5] #houston_ylimits = [gulf_ylimits[0] + 82*dy, gulf_ylimits[0] + 88*dy] # [-95.25, -94.5] #figsize = [(21-14)*dx,(88-82)*dy] # relative to [11.6, 9.6] occupied by larger grid figsize = [ houston_xlimits[1] - houston_xlimits[0], houston_ylimits[1] - houston_ylimits[0] ] dpi = 400 # -------------------------------------- # Surface Elevations - Houston/Galveston # -------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface - Houston/Galveston', figno=2) plotfigure.show = True plotfigure.use_for_kml = True plotfigure.kml_xlimits = houston_xlimits plotfigure.kml_ylimits = houston_ylimits plotfigure.kml_dpi = dpi # data is not more resolve than this plotfigure.kml_figsize = figsize plotfigure.kml_tile_images = False # pcolor for water. plotaxes = plotfigure.new_plotaxes() plotitem = plotaxes.new_plotitem(name='surface', plot_type='2d_contourf') plotitem.contour_levels = surface_contours plotitem.fill_cmin = min(surface_contours) plotitem.fill_cmax = max(surface_contours) # what is the colormap used here? #plotfigure.kml_colorbar = cbar_houston # -------------------------------- # Water Speed - Houston/Galveston # -------------------------------- plotfigure = plotdata.new_plotfigure(name='Currents - Houston/Galveston', figno=3) plotfigure.show = True plotfigure.use_for_kml = True # These override axes limits set below in plotitems plotfigure.kml_xlimits = houston_xlimits plotfigure.kml_ylimits = houston_ylimits plotfigure.kml_figsize = figsize plotfigure.kml_dpi = dpi # data is not more resolve than this plotfigure.kml_tile_images = False # Tile images for faster loading. Requires GDAL [False] # Water plotaxes = plotfigure.new_plotaxes() plotitem = plotaxes.new_plotitem(name='surface', plot_type='2d_contourf') plotitem.plot_var = geoplot.surface_or_depth plotitem.contour_levels = speed_contours plotitem.fill_cmin = min(speed_contours) plotitem.fill_cmax = max(speed_contours) cmap = plt.get_cmap('OrRd') cmap._rgba_under = (0.0, 0.0, 0.0, 0.0) plotitem.fill_cmap = cmap # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ type='each_gauge') plotfigure.show = True plotfigure.clf_each_gauge = True # plotfigure.kwargs['figsize'] = (16,10) def gauge_after_axes(cd): if cd.gaugeno in [1, 2, 3, 4]: axes = plt.gca() # # Add Kennedy gauge data # kennedy_gauge = kennedy_gauges[gauge_name_trans[cd.gaugeno]] # axes.plot(kennedy_gauge['t'] - seconds2days(date2seconds(gauge_landfall[0])), # kennedy_gauge['mean_water'] + kennedy_gauge['depth'], 'k-', # label='Gauge Data') # Add GeoClaw gauge data geoclaw_gauge = cd.gaugesoln axes.plot(seconds2days(geoclaw_gauge.t - date2seconds(gauge_landfall[1])), geoclaw_gauge.q[3, :] + gauge_surface_offset[0], 'b--', label="GeoClaw") # Add ADCIRC gauge data # ADCIRC_gauge = ADCIRC_gauges[kennedy_gauge['gauge_no']] # axes.plot(seconds2days(ADCIRC_gauge[:,0] - gauge_landfall[2]), # ADCIRC_gauge[:,1] + gauge_surface_offset[1], 'r-.', label="ADCIRC") # Fix up plot axes.set_title('Station %s' % cd.gaugeno) axes.set_xlabel('Days relative to landfall') axes.set_ylabel('Surface (m)') axes.set_xlim([-2, 1]) axes.set_ylim([-1, 5]) axes.set_xticks([-2, -1, 0, 1]) axes.set_xticklabels([r"$-2$", r"$-1$", r"$0$", r"$1$"]) axes.grid(True) axes.legend() plt.hold(False) surgeplot.gauge_afteraxes(cd) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-2, 1] #plotaxes.xlabel = "Days from landfall" #plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [-1, 5] plotaxes.title = 'Surface' plotaxes.afteraxes = gauge_after_axes # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = [0, 1, 2, 3] # list of figures to print plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.html = False # create html files of plots? plotdata.latex = False # create latex file of plots? plotdata.kml = True return plotdata
def setplot(plotdata, bathy_location=0.15, bathy_angle=0.0, bathy_left=-1.0, bathy_right=-0.2): """Setup the plotting data objects. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. returns plotdata object """ import os import numpy as np import matplotlib.pyplot as plt from clawpack.visclaw import geoplot, gaugetools import clawpack.clawutil.data as clawutil import clawpack.amrclaw.data as amrclaw import clawpack.geoclaw.data import clawpack.geoclaw.multilayer.plot as ml_plot # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.data')) amrdata = amrclaw.AmrclawInputData(clawdata) amrdata.read(os.path.join(plotdata.outdir, 'amr.data')) geodata = clawpack.geoclaw.data.GeoClawData() geodata.read(os.path.join(plotdata.outdir, 'geoclaw.data')) multilayer_data = clawpack.geoclaw.data.MultilayerData() multilayer_data.read(os.path.join(plotdata.outdir, 'multilayer.data')) def transform_c2p(x, y, x0, y0, theta): return ((x + x0) * np.cos(theta) - (y + y0) * np.sin(theta), (x + x0) * np.sin(theta) + (y + y0) * np.cos(theta)) def transform_p2c(x, y, x0, y0, theta): return (x * np.cos(theta) + y * np.sin(theta) - x0, -x * np.sin(theta) + y * np.cos(theta) - y0) # Setup bathymetry reference lines with open(os.path.join(plotdata.outdir, "bathy_geometry.data"), 'r') as bathy_geometry_file: bathy_location = float(bathy_geometry_file.readline()) bathy_angle = float(bathy_geometry_file.readline()) x = [0.0, 0.0] y = [0.0, 1.0] x1, y1 = transform_c2p(x[0], y[0], bathy_location, 0.0, bathy_angle) x2, y2 = transform_c2p(x[1], y[1], bathy_location, 0.0, bathy_angle) if abs(x1 - x2) < 10**-3: x = [x1, x1] y = [clawdata.lower[1], clawdata.upper[1]] else: m = (y1 - y2) / (x1 - x2) x[0] = (clawdata.lower[1] - y1) / m + x1 y[0] = clawdata.lower[1] x[1] = (clawdata.upper[1] - y1) / m + x1 y[1] = clawdata.upper[1] ref_lines = [((x[0], y[0]), (x[1], y[1]))] plotdata.clearfigures() plotdata.save_frames = False # ======================================================================== # Generic helper functions # ======================================================================== def pcolor_afteraxes(current_data): bathy_ref_lines(current_data) gauge_locations(current_data) def contour_afteraxes(current_data): # gauge_locations(current_data) # m_to_km_labels() plt.hold(True) pos = -80.0 * (23e3 / 180) + 500e3 - 5e3 plt.plot([pos, pos], [-300e3, 300e3], 'b', [pos - 5e3, pos - 5e3], [-300e3, 300e3], 'y') plt.hold(False) wind_contours(current_data) bathy_ref_lines(current_data) def profile_afteraxes(current_data): pass def bathy_ref_lines(current_data): plt.hold(True) for ref_line in ref_lines: x1 = ref_line[0][0] y1 = ref_line[0][1] x2 = ref_line[1][0] y2 = ref_line[1][1] plt.plot([x1, x2], [y1, y2], 'y--', linewidth=1) plt.hold(False) def gauge_locations(current_data, gaugenos='all'): plt.hold(True) gaugetools.plot_gauge_locations(current_data.plotdata, \ gaugenos=gaugenos, format_string='kx', add_labels=True) plt.hold(False) # ======================================================================== # Axis limits #xlimits = [amrdata.xlower,amrdata.xupper] xlimits = [-0.5, 0.5] #ylimits = [amrdata.ylower,amrdata.yupper] ylimits = [-0.5, 0.5] eta = [multilayer_data.eta[0], multilayer_data.eta[1]] top_surface_limits = [eta[0] - 0.03, eta[0] + 0.03] internal_surface_limits = [eta[1] - 0.015, eta[1] + 0.015] # top_surface_limits = [eta[0]-0.3,eta[0]+0.3] # internal_surface_limits = [eta[1]-0.15,eta[1]+0.15] top_speed_limits = [0.0, 0.1] internal_speed_limits = [0.0, 0.03] # Single layer test limits # top_surface_limits = [eta[0]-2.5,eta[0]+2.5] # top_speed_limits = [0.0,6.0] # ======================================================================== # Surface Elevations # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) plotfigure.show = True plotfigure.kwargs = {'figsize': (14, 4)} # Top surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Top Surface' plotaxes.axescmd = 'subplot(1,2,1)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = pcolor_afteraxes ml_plot.add_surface_elevation(plotaxes, 1, bounds=top_surface_limits) # ml_plot.add_surface_elevation(plotaxes,1,bounds=[-0.06,0.06]) # ml_plot.add_surface_elevation(plotaxes,1) ml_plot.add_land(plotaxes) # Bottom surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Internal Surface' plotaxes.axescmd = 'subplot(1,2,2)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = pcolor_afteraxes # ml_plot.add_surface_elevation(plotaxes,2,bounds=[-300-0.5,-300+0.5]) ml_plot.add_surface_elevation(plotaxes, 2, bounds=internal_surface_limits) # ml_plot.add_surface_elevation(plotaxes,2) ml_plot.add_land(plotaxes) # ======================================================================== # Depths # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Depths', figno=42) plotfigure.show = False plotfigure.kwargs = {'figsize': (14, 4)} # Top surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Top Layer Depth' plotaxes.axescmd = 'subplot(1,2,1)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = pcolor_afteraxes ml_plot.add_layer_depth(plotaxes, 1, bounds=[-0.1, 1.1]) ml_plot.add_land(plotaxes) # Bottom surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Bottom Layer Depth' plotaxes.axescmd = 'subplot(1,2,2)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = pcolor_afteraxes ml_plot.add_layer_depth(plotaxes, 2, bounds=[-0.1, 0.7]) ml_plot.add_land(plotaxes) # ======================================================================== # Water Speed # ======================================================================== plotfigure = plotdata.new_plotfigure(name='speed', figno=1) plotfigure.show = True plotfigure.kwargs = {'figsize': (14, 4)} # Top layer speed plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents - Top Layer' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(1,2,1)' plotaxes.afteraxes = pcolor_afteraxes # add_speed(plotaxes,1,bounds=[0.00,0.2]) ml_plot.add_speed(plotaxes, 1, bounds=top_speed_limits) # add_speed(plotaxes,1) ml_plot.add_land(plotaxes) # Bottom layer speed plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents - Bottom Layer' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(1,2,2)' plotaxes.afteraxes = pcolor_afteraxes # add_speed(plotaxes,2,bounds=[0.0,1e-10]) ml_plot.add_speed(plotaxes, 2, bounds=internal_speed_limits) # add_speed(plotaxes,2) ml_plot.add_land(plotaxes) # Individual components plotfigure = plotdata.new_plotfigure(name='speed_components', figno=401) plotfigure.show = False plotfigure.kwargs = {'figsize': (14, 14)} # Top layer plotaxes = plotfigure.new_plotaxes() plotaxes.title = "X-Velocity - Top Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,1)' plotaxes.afteraxes = pcolor_afteraxes # add_x_velocity(plotaxes,1,bounds=[-1e-10,1e-10]) ml_plot.add_x_velocity(plotaxes, 1) ml_plot.add_land(plotaxes) plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Y-Velocity - Top Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,2)' plotaxes.afteraxes = pcolor_afteraxes # add_y_velocity(plotaxes,1,bounds=[-0.000125,0.000125]) ml_plot.add_y_velocity(plotaxes, 1) ml_plot.add_land(plotaxes) # Bottom layer plotaxes = plotfigure.new_plotaxes() plotaxes.title = "X-Velocity - Bottom Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,3)' plotaxes.afteraxes = pcolor_afteraxes # add_x_velocity(plotaxes,2,bounds=[-1e-10,1e-10]) ml_plot.add_x_velocity(plotaxes, 2) ml_plot.add_land(plotaxes) plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Y-Velocity - Bottom Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,4)' plotaxes.afteraxes = pcolor_afteraxes # add_y_velocity(plotaxes,2,bounds=[-0.8e-6,.8e-6]) ml_plot.add_y_velocity(plotaxes, 2) ml_plot.add_land(plotaxes) # ======================================================================== # Profile Plots # ======================================================================== plotfigure = plotdata.new_plotfigure(name='profile', figno=4) plotfigure.show = False # Top surface plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = xlimits plotaxes.ylimits = [-2000, 20] plotaxes.title = "Profile of depth" plotaxes.afteraxes = profile_afteraxes slice_index = 30 # Internal surface def bathy_profile(current_data): return current_data.x[:, slice_index], b(current_data)[:, slice_index] def lower_surface(current_data): if multilayer_data.init_type == 2: return current_data.x[:, slice_index], eta2(current_data)[:, slice_index] elif multilayer_data.init_type == 6: return current_data.y[slice_index, :], eta2(current_data)[ slice_index, :] def upper_surface(current_data): if multilayer_data.init_type == 2: return current_data.x[:, slice_index], eta1(current_data)[:, slice_index] elif multilayer_data.init_type == 6: return current_data.y[slice_index, :], eta1(current_data)[ slice_index, :] def top_speed(current_data): if multilayer_data.init_type == 2: return current_data.x[:, slice_index], water_u1( current_data)[:, slice_index] elif multilayer_data.init_type == 6: return current_data.y[slice_index, :], water_u1(current_data)[ slice_index, :] def bottom_speed(current_data): if multilayer_data.init_type == 2: return current_data.x[:, slice_index], water_u2( current_data)[:, slice_index] elif multilayer_data.init_type == 6: return current_data.y[slice_index, :], water_u2(current_data)[ slice_index, :] # Bathy plotitem = plotaxes.new_plotitem(plot_type='1d_from_2d_data') plotitem.map_2d_to_1d = bathy_profile plotitem.plot_var = 0 plotitem.amr_plotstyle = ['-', '+', 'x'] plotitem.color = 'k' plotitem.show = True # Internal Interface plotitem = plotaxes.new_plotitem(plot_type='1d_from_2d_data') plotitem.map_2d_to_1d = lower_surface plotitem.plot_var = 7 plotitem.amr_plotstyle = ['-', '+', 'x'] plotitem.color = 'b' plotitem.show = True # Upper Interface plotitem = plotaxes.new_plotitem(plot_type='1d_from_2d_data') plotitem.map_2d_to_1d = upper_surface plotitem.plot_var = 6 plotitem.amr_plotstyle = ['-', '+', 'x'] plotitem.color = (0.2, 0.8, 1.0) plotitem.show = True # ======================================================================== # Combined Profile Plot # ======================================================================== # add_combined_profile_plot(plotdata,0.25,direction='y',figno=120) # add_combined_profile_plot(plotdata,0.8,direction='y',figno=121) # # add_velocities_profile_plot(plotdata,0.25,direction='y',figno=130) # add_velocities_profile_plot(plotdata,0.8,direction='y',figno=131) # ======================================================================== # Bathy Profile # ======================================================================== plotfigure = plotdata.new_plotfigure(name='bathy_profile', figno=20) plotfigure.show = False plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = xlimits plotaxes.title = "Bathymetry Profile" plotaxes.scaled = 'equal' plotitem = plotaxes.new_plotitem(plot_type='2d_imshow') plotitem.plot_var = ml_plot.b plotitem.imshow_cmin = -4000 plotitem.imshow_cmax = 10 plotitem.add_colorbar = True plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [1, 1, 1] plotitem.show = True # ======================================================================== # Figures for momentum # ======================================================================== plotfigure = plotdata.new_plotfigure(name='x-momentum', figno=13) plotfigure.show = False # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'X-Velocity' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = pcolor_afteraxes # Water # plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') # # plotitem.plot_var = geoplot.surface # plotitem.plot_var = water_u # plotitem.pcolor_cmap = colormaps.make_colormap({1.0:'r',0.5:'w',0.0:'b'}) # # plotitem.pcolor_cmin = -1.e-10 # # plotitem.pcolor_cmax = 1.e-10 # # plotitem.pcolor_cmin = -2.5 # -3.0 # # plotitem.pcolor_cmax = 2.5 # 3.0 # plotitem.add_colorbar = True # plotitem.amr_celledges_show = [0,0,0] # plotitem.amr_patchedges_show = [1,1,1] # Land plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.show = True plotitem.plot_var = geoplot.land plotitem.pcolor_cmap = geoplot.land_colors plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = 80.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [1, 1, 1] plotfigure = plotdata.new_plotfigure(name='y-momentum', figno=14) plotfigure.show = False # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Y-Velocity' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = pcolor_afteraxes # Water # plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') # # plotitem.plot_var = geoplot.surface # plotitem.plot_var = water_v # plotitem.pcolor_cmap = colormaps.make_colormap({1.0:'r',0.5:'w',0.0:'b'}) # # plotitem.pcolor_cmin = -1.e-10 # # plotitem.pcolor_cmax = 1.e-10 # # plotitem.pcolor_cmin = -2.5 # -3.0 # # plotitem.pcolor_cmax = 2.5 # 3.0 # plotitem.add_colorbar = True # plotitem.amr_celledges_show = [0,0,0] # plotitem.amr_patchedges_show = [1,1,1] # Land ml_plot.add_land(plotaxes) # ======================================================================== # Contour plot for surface # ======================================================================== plotfigure = plotdata.new_plotfigure(name='contour_surface', figno=15) plotfigure.show = False plotfigure.kwargs = {'figsize': (14, 4)} # Set up for axes in this figure: # Top Surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Top Surface' plotaxes.axescmd = 'subplot(1,2,1)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = contour_afteraxes ml_plot.add_surface_elevation(plotaxes, plot_type='contour', surface=1, bounds=[-2.5, -1.5, -0.5, 0.5, 1.5, 2.5]) ml_plot.add_land(plotaxes, plot_type='contour') # Internal Surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Internal Surface' plotaxes.axescmd = 'subplot(1,2,2)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = contour_afteraxes ml_plot.add_surface_elevation(plotaxes, plot_type='contour', surface=2, bounds=[-2.5, -1.5, -0.5, 0.5, 1.5, 2.5]) ml_plot.add_land(plotaxes, plot_type='contour') # ======================================================================== # Contour plot for speed # ======================================================================== plotfigure = plotdata.new_plotfigure(name='contour_speed', figno=16) plotfigure.show = False plotfigure.kwargs = {'figsize': (14, 4)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Current' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = contour_afteraxes # Surface plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = ml_plot.water_speed_depth_ave plotitem.kwargs = {'linewidths': 1} # plotitem.contour_levels = [1.0,2.0,3.0,4.0,5.0,6.0] plotitem.contour_levels = [0.5, 1.5, 3, 4.5, 6.0] plotitem.amr_contour_show = [1, 1, 1] plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [1, 1, 1] plotitem.amr_contour_colors = 'k' # plotitem.amr_contour_colors = ['r','k','b'] # color on each level # plotitem.amr_grid_bgcolor = ['#ffeeee', '#eeeeff', '#eeffee'] plotitem.show = True # Land plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = geoplot.land plotitem.contour_nlevels = 40 plotitem.contour_min = 0.0 plotitem.contour_max = 100.0 plotitem.amr_contour_colors = ['g'] # color on each level plotitem.amr_patch_bgcolor = ['#ffeeee', '#eeeeff', '#eeffee'] plotitem.amr_celledges_show = 0 plotitem.amr_patchedges_show = 0 plotitem.show = True # ======================================================================== # Vorticity Plot # ======================================================================== # plotfigure = plotdata.new_plotfigure(name='vorticity',figno=17) # plotfigure.show = False # plotaxes = plotfigure.new_plotaxes() # plotaxes.title = "Vorticity" # plotaxes.scaled = True # plotaxes.xlimits = xlimits # plotaxes.ylimits = ylimits # plotaxes.afteraxes = pcolor_afteraxes # # # Vorticity # plotitem = plotaxes.new_plotitem(plot_type='2d_imshow') # plotitem.plot_var = 9 # plotitem.imshow_cmap = plt.get_cmap('PRGn') # # plotitem.pcolor_cmap = plt.get_cmap('PuBu') # # plotitem.pcolor_cmin = 0.0 # # plotitem.pcolor_cmax = 6.0 # plotitem.imshow_cmin = -1.e-2 # plotitem.imshow_cmax = 1.e-2 # plotitem.add_colorbar = True # plotitem.amr_celledges_show = [0,0,0] # plotitem.amr_patchedges_show = [1] # # # Land # plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') # plotitem.plot_var = geoplot.land # plotitem.pcolor_cmap = geoplot.land_colors # plotitem.pcolor_cmin = 0.0 # plotitem.pcolor_cmax = 80.0 # plotitem.add_colorbar = False # plotitem.amr_celledges_show = [0,0,0] # ======================================================================== # Figures for gauges # ======================================================================== def plot_regression_gauges(cd, plot_var=(3, 7)): import clawpack.pyclaw.gauges as gauges import numpy fig = plt.gcf() gauge = gauges.GaugeSolution(cd.gaugeno, path="./regression_data") for (i, n) in enumerate(plot_var): fig.axes[i].plot(gauge.t, gauge.q[n, :], 'k-') # Top plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ type='each_gauge') plotfigure.show = True plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0.0, 1.0] # plotaxes.ylimits = top_surface_limits plotaxes.title = 'Top Surface' plotaxes.axescmd = "subplot(1, 2, 1)" # Plot surfaces: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'ro' # Bottom plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0.0, 1.0] plotaxes.title = 'Bottom Surface' plotaxes.axescmd = "subplot(1, 2, 2)" plotaxes.afteraxes = plot_regression_gauges plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 7 plotitem.plotstyle = 'ro' # Plot topo as green curve: # plotitem = plotaxes.new_plotitem(plot_type='1d_plot') # plotitem.plot_var = geoplot.gaugetopo # plotitem.plotstyle = 'g+' #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.latex = False # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? return plotdata
def setplot(plotdata): r"""Setplot function for surge plotting""" if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' fig_num_counter = surgeplot.figure_counter() # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir,'claw.data')) amrdata = amrclaw.AmrclawInputData(clawdata) amrdata.read(os.path.join(plotdata.outdir,'amr.data')) physics = geodata.GeoClawData() physics.read(os.path.join(plotdata.outdir,'geoclaw.data')) surge_data = geodata.SurgeData() surge_data.read(os.path.join(plotdata.outdir,'surge.data')) friction_data = geodata.FrictionData() friction_data.read(os.path.join(plotdata.outdir,'friction.data')) # Load storm track track = surgeplot.track_data(os.path.join(plotdata.outdir,'fort.track')) # Calculate landfall time, off by a day, maybe leap year issue? landfall_dt = datetime.datetime(2008, 8, 1, 12) - datetime.datetime(2008,1,1,0) landfall = landfall_dt.days * 24.0 * 60**2 + landfall_dt.seconds # Set afteraxes function surge_afteraxes = lambda cd: surgeplot.surge_afteraxes(cd, track, landfall, plot_direction=False) # Limits for plots full_xlimits = [clawdata.lower[0], clawdata.upper[0]] full_ylimits = [clawdata.lower[1], clawdata.upper[1]] # Color limits surface_range = 1.0 speed_range = 2.0 xlimits = full_xlimits ylimits = full_ylimits eta = physics.sea_level if not isinstance(eta,list): eta = [eta] surface_limits = [eta[0]-surface_range,eta[0]+surface_range] speed_limits = [0.0,speed_range] wind_limits = [0,55] pressure_limits = [966,1013] ref_lines = [] # ========================================================================== # Generic helper functions # ========================================================================== def pcolor_afteraxes(current_data): surge_afteraxes(current_data) # surgeplot.gauge_locations(current_data) def contour_afteraxes(current_data): surge_afteraxes(current_data) def bathy_ref_lines(current_data): pass # plt.hold(True) # y = [amrdata.ylower,amrdata.yupper] # for ref_line in ref_lines: # plt.plot([ref_line,ref_line],y,'y--') # plt.hold(False) # ========================================================================== # ========================================================================== # Plot specifications # ========================================================================== # ========================================================================== # ======================================================================== # Surface Elevations - Entire Domain # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = pcolor_afteraxes surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes,topo_min=-10.0,topo_max=5.0) # ======================================================================== # Water Speed - Entire Domain # ======================================================================== plotfigure = plotdata.new_plotfigure(name='speed', figno=1) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = pcolor_afteraxes # Speed surgeplot.add_speed(plotaxes,bounds=speed_limits) # Land surgeplot.add_land(plotaxes) # ======================================================================== # Hurricane forcing - Entire Domain # ======================================================================== # Pressure field plotfigure = plotdata.new_plotfigure(name='Pressure', figno=2) plotfigure.show = surge_data.pressure_forcing plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = full_xlimits plotaxes.ylimits = full_ylimits plotaxes.title = "Pressure Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_pressure(plotaxes,bounds=pressure_limits) # add_pressure(plotaxes) surgeplot.add_land(plotaxes) # Wind field plotfigure = plotdata.new_plotfigure(name='Wind Speed',figno=4) plotfigure.show = surge_data.wind_forcing plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = full_xlimits plotaxes.ylimits = full_ylimits plotaxes.title = "Wind Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_wind(plotaxes,bounds=wind_limits,plot_type='imshow') # add_wind(plotaxes,bounds=wind_limits,plot_type='contour') # add_wind(plotaxes,bounds=wind_limits,plot_type='quiver') surgeplot.add_land(plotaxes) # Wind field components plotfigure = plotdata.new_plotfigure(name='Wind Components',figno=5) plotfigure.show = surge_data.wind_forcing and False plotfigure.kwargs = {'figsize':(16,6)} plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = "subplot(121)" plotaxes.xlimits = full_xlimits plotaxes.ylimits = full_ylimits plotaxes.title = "X-Component of Wind Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True plotitem = plotaxes.new_plotitem(plot_type='2d_imshow') plotitem.plot_var = surgeplot.wind_x plotitem.imshow_cmap = colormaps.make_colormap({1.0:'r',0.5:'w',0.0:'b'}) plotitem.imshow_cmin = -wind_limits[1] plotitem.imshow_cmax = wind_limits[1] plotitem.add_colorbar = True plotitem.amr_celledges_show = [0,0,0] plotitem.amr_patchedges_show = [1,1,1] plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = "subplot(122)" plotaxes.xlimits = full_xlimits plotaxes.ylimits = full_ylimits plotaxes.title = "Y-Component of Wind Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True plotitem = plotaxes.new_plotitem(plot_type='2d_imshow') plotitem.plot_var = surgeplot.wind_y plotitem.imshow_cmap = colormaps.make_colormap({1.0:'r',0.5:'w',0.0:'b'}) plotitem.imshow_cmin = -wind_limits[1] plotitem.imshow_cmax = wind_limits[1] plotitem.add_colorbar = True plotitem.amr_celledges_show = [0,0,0] plotitem.amr_patchedges_show = [1,1,1] # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ type='each_gauge') plotfigure.show = True plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() # plotaxes.xlimits = [0.0,amrdata.tfinal] # plotaxes.ylimits = [0,150.0] plotaxes.ylimits = surface_limits plotaxes.title = 'Surface' plotaxes.afteraxes = surgeplot.gauge_afteraxes # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'r-' # ================= # Plot bathymetry # ================= plotfigure = plotdata.new_plotfigure(name='Bathymetry', figno=301) plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = full_xlimits plotaxes.ylimits = full_ylimits plotaxes.title = "Bathymetry" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True plotitem = plotaxes.new_plotitem(plot_type="2d_pcolor") plotitem.plot_var = geoplot.topo # plotitem.pcolor_cmap = geoplot.seafloor_colormap plotitem.pcolor_cmin = -3000.0 plotitem.pcolor_cmax = 300.0 plotitem.add_colorbar = True surgeplot.add_land(plotaxes) #----------------------------------------- # Figures for gauges #----------------------------------------- # plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ # type='each_gauge') # plotfigure.clf_each_gauge = True # # # Set up for axes in this figure: # plotaxes = plotfigure.new_plotaxes() # plotaxes.xlimits = 'auto' # plotaxes.ylimits = 'auto' # plotaxes.title = 'Surface' # # # Plot surface as blue curve: # plotitem = plotaxes.new_plotitem(plot_type='1d_plot') # plotitem.plot_var = 3 # plotitem.plotstyle = 'b-' # # # Plot topo as green curve: # plotitem = plotaxes.new_plotitem(plot_type='1d_plot') # plotitem.show = False # # def gaugetopo(current_data): # q = current_data.q # h = q[0,:] # eta = q[3,:] # topo = eta - h # return topo # # plotitem.plot_var = gaugetopo # plotitem.plotstyle = 'g-' # # def add_zeroline(current_data): # from pylab import plot, legend, xticks, floor # t = current_data.t # #legend(('surface','topography'),loc='lower left') # plot(t, 0*t, 'k') # n = int(floor(t.max()/3600.) + 2) # xticks([3600*i for i in range(n)]) # # plotaxes.afteraxes = add_zeroline #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print # plotdata.print_framenos = [45,46,47,48] plotdata.print_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? return plotdata
def setplot(plotdata): r"""Setplot function for surge plotting""" plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' fig_num_counter = surge.figure_counter() # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.data')) amrdata = amrclaw.AmrclawInputData(clawdata) amrdata.read(os.path.join(plotdata.outdir, 'amr.data')) physics = geodata.GeoClawData() physics.read(os.path.join(plotdata.outdir, 'geoclaw.data')) surge_data = geodata.SurgeData() surge_data.read(os.path.join(plotdata.outdir, 'surge.data')) friction_data = geodata.FrictionData() friction_data.read(os.path.join(plotdata.outdir, 'friction.data')) # Load storm track track = surge.track_data(os.path.join(plotdata.outdir, 'fort.track')) # Calculate landfall time, off by a day, maybe leap year issue? if storm_num == 1: # Storm 1 landfall_dt = datetime.datetime(1997, 11, 15, 3) - datetime.datetime( 1997, 1, 1, 0) elif storm_num == 2: # Storm 2 landfall_dt = datetime.datetime(2008, 12, 17, 0) - datetime.datetime( 2008, 1, 1, 0) landfall = (landfall_dt.days) * 24.0 * 60**2 + landfall_dt.seconds # Set afteraxes function surge_afteraxes = lambda cd: surge.surge_afteraxes( cd, track, landfall, plot_direction=False) # Color limits surface_range = 5.0 speed_range = 3.0 eta = physics.sea_level if not isinstance(eta, list): eta = [eta] surface_limits = [-5.0, 5.0] # surface_contours = numpy.linspace(-surface_range, surface_range,11) surface_contours = [ -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5 ] surface_ticks = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5] surface_labels = [str(value) for value in surface_ticks] speed_limits = [0.0, speed_range] speed_contours = numpy.linspace(0.0, speed_range, 13) speed_ticks = [0, 1, 2, 3] speed_labels = [str(value) for value in speed_ticks] # wind_limits = [0,64] wind_limits = [0, 50] # wind_limits = [-0.002,0.002] pressure_limits = [935, 1013] friction_bounds = [0.01, 0.04] # vorticity_limits = [-1.e-2,1.e-2] # def pcolor_afteraxes(current_data): # surge_afteraxes(current_data) # surge.gauge_locations(current_data,gaugenos=[6]) def afteraxes(current_data): surge_afteraxes(current_data) def add_custom_colorbar_ticks_to_axes(axes, item_name, ticks, tick_labels=None): axes.plotitem_dict[item_name].colorbar_ticks = ticks axes.plotitem_dict[item_name].colorbar_tick_labels = tick_labels # ========================================================================== # ========================================================================== # Plot specifications # ========================================================================== # ========================================================================== regions = { "Full Domain (Grids)": [[clawdata.lower[0], clawdata.upper[0]], [clawdata.lower[1], clawdata.upper[1]], [1, 1, 1, 1, 1, 1, 1]], "Mumbai Regio (Grids)": [[70, 75], [17, 22], [1, 1, 1, 1, 1, 1, 1]], "Mumbai (Grids)": [[72.6, 73.15], [18.80, 19.25], [1, 1, 1, 1, 1, 1, 1]], "Full Domain (No Grids)": [[clawdata.lower[0], clawdata.upper[0]], [clawdata.lower[1], clawdata.upper[1]], [0, 0, 0, 0, 0, 0, 0]], "Mumbai Region (No Grids)": [[70, 75], [17, 22], [0, 0, 0, 0, 0, 0, 0]], "Mumbai (No Grids)": [[72.6, 73.15], [18.80, 19.25], [0, 0, 0, 0, 0, 0, 0]] } full_xlimits = regions['Full Domain (Grids)'][0] full_ylimits = regions['Full Domain (Grids)'][1] for (name, region_data) in regions.iteritems(): # # Surface # plotfigure = plotdata.new_plotfigure( name='Surface - %s' % name, figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = region_data[0] plotaxes.ylimits = region_data[1] plotaxes.afteraxes = afteraxes surge.add_surface_elevation(plotaxes, plot_type='pcolor', bounds=surface_limits) # surge.add_surface_elevation(plotaxes, plot_type='contourf', # contours=surface_contours) surge.add_land(plotaxes, topo_min=-10.0, topo_max=5.0) surge.add_bathy_contours(plotaxes) if article: plotaxes.plotitem_dict['surface'].add_colorbar = False else: add_custom_colorbar_ticks_to_axes(plotaxes, 'surface', surface_ticks, surface_labels) plotaxes.plotitem_dict['land'].amr_patchedges_show = region_data[2] plotaxes.plotitem_dict['surface'].amr_patchedges_show = region_data[2] # # Water Speed # plotfigure = plotdata.new_plotfigure( name='Currents - %s' % name, figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = region_data[0] plotaxes.ylimits = region_data[1] plotaxes.afteraxes = afteraxes # Speed surge.add_speed(plotaxes, plot_type='pcolor', bounds=speed_limits) # surge.add_speed(plotaxes, plot_type='contourf', contours=speed_contours) if article: plotaxes.plotitem_dict['speed'].add_colorbar = False else: add_custom_colorbar_ticks_to_axes(plotaxes, 'speed', speed_ticks, speed_labels) # Land surge.add_land(plotaxes, topo_min=-10.0, topo_max=5.0) plotaxes.plotitem_dict['speed'].amr_patchedges_show = region_data[2] plotaxes.plotitem_dict['land'].amr_patchedges_show = region_data[2] # # Friction field # plotfigure = plotdata.new_plotfigure(name='Friction', figno=fig_num_counter.get_counter()) plotfigure.show = friction_data.variable_friction and False def friction_after_axes(cd): plt.subplots_adjust(left=0.08, bottom=0.04, right=0.97, top=0.96) plt.title(r"Manning's $n$ Coefficient") # surge_afteraxes(cd) plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = full_xlimits plotaxes.ylimits = full_ylimits # plotaxes.title = "Manning's N Coefficient" plotaxes.afteraxes = friction_after_axes plotaxes.scaled = True surge.add_friction(plotaxes, bounds=friction_bounds) plotaxes.plotitem_dict['friction'].amr_patchedges_show = [ 0, 0, 0, 0, 0, 0, 0 ] plotaxes.plotitem_dict['friction'].colorbar_label = "$n$" # ========================== # Hurricane Forcing fields # ========================== grids = [[0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1]] label = ["(No Grids)", "(Grids)"] for i in xrange(2): # Pressure field plotfigure = plotdata.new_plotfigure( name='Pressure %s' % label[i], figno=fig_num_counter.get_counter()) plotfigure.show = surge_data.pressure_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = full_xlimits plotaxes.ylimits = full_ylimits plotaxes.title = "Pressure Field" plotaxes.afteraxes = afteraxes plotaxes.scaled = True surge.add_pressure(plotaxes, bounds=pressure_limits) surge.add_land(plotaxes) plotaxes.plotitem_dict['pressure'].amr_patchedges_show = grids[i] plotaxes.plotitem_dict['land'].amr_patchedges_show = grids[i] # Wind field plotfigure = plotdata.new_plotfigure( name='Wind Speed %s' % label[i], figno=fig_num_counter.get_counter()) plotfigure.show = surge_data.wind_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = full_xlimits plotaxes.ylimits = full_ylimits plotaxes.title = "Wind Field" plotaxes.afteraxes = afteraxes plotaxes.scaled = True surge.add_wind(plotaxes, bounds=wind_limits, plot_type='pcolor') surge.add_land(plotaxes) plotaxes.plotitem_dict['wind'].amr_patchedges_show = grids[i] plotaxes.plotitem_dict['land'].amr_patchedges_show = grids[i] # ===================== # Gauge Location Plot # ===================== gauge_xlimits = regions["Mumbai (Grids)"][0] gauge_ylimits = regions["Mumbai (Grids)"][1] # gauge_location_shrink = 0.75 def gauge_after_axes(cd): # plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) # import pdb; pdb.set_trace() surge.gauge_locations(cd, gaugenos=[1, 2, 3]) plt.title("Gauge Locations") plotfigure = plotdata.new_plotfigure(name='Gauge Locations', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = gauge_xlimits plotaxes.ylimits = gauge_ylimits plotaxes.afteraxes = gauge_after_axes surge.add_surface_elevation(plotaxes, plot_type='pcolor', bounds=surface_limits) # surge.plot.add_surface_elevation(plotaxes, plot_type="contourf") add_custom_colorbar_ticks_to_axes(plotaxes, 'surface', surface_ticks, surface_labels) surge.add_land(plotaxes) # plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0,0,0,0,0,0,0] # plotaxes.plotitem_dict['surface'].add_colorbar = False # plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('jet') # plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('gist_yarg') # plotaxes.plotitem_dict['surface'].pcolor_cmin = 0.0 # plotaxes.plotitem_dict['surface'].pcolor_cmax = 5.0 plotaxes.plotitem_dict['surface'].amr_patchedges_show = [ 0, 0, 0, 0, 0, 0, 0 ] plotaxes.plotitem_dict['land'].amr_patchedges_show = [0, 0, 0, 0, 0, 0, 0] # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ type='each_gauge') plotfigure.show = True plotfigure.clf_each_gauge = True # plotfigure.kwargs['figsize'] = (16,10) def gauge_after_axes(cd): if cd.gaugeno in [1, 2, 3]: axes = plt.gca() # Add GeoClaw gauge data geoclaw_gauge = cd.gaugesoln axes.plot( seconds2days(geoclaw_gauge.t - date2seconds(gauge_landfall[1])), geoclaw_gauge.q[3, :], 'b--') # Fix up plot axes.set_title('Station %s' % cd.gaugeno) axes.set_xlabel('Days relative to landfall') axes.set_ylabel('Surface (m)') axes.set_xlim([-2, 1]) axes.set_ylim([-1, 5]) axes.set_xticks([-2, -1, 0, 1]) axes.set_xticklabels([r"$-2$", r"$-1$", r"$0$", r"$1$"]) axes.grid(True) axes.legend() plt.hold(False) # surge.gauge_afteraxes(cd) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-2, 1] # plotaxes.xlabel = "Days from landfall" # plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [-1, 5] plotaxes.title = 'Surface' plotaxes.afteraxes = gauge_after_axes # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: if article: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = [54, 60, 66, 72, 78, 84] # list of frames to print plotdata.print_gaugenos = [1, 2, 3] # list of gauges to print plotdata.print_fignos = [4, 5, 6, 7, 10, 3, 300] # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = False # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? else: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_gaugenos = [1, 2, 3] # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? return plotdata
def setplot(plotdata): r"""Setplot function for surge plotting""" plotdata.clearfigures() # clear any old figures,axes,items data fig_num_counter = surge.plot.figure_counter() # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read('claw.data') amrdata = amrclaw.AmrclawInputData(clawdata) amrdata.read(os.path.join(plotdata.outdir,'amrclaw.data')) physics = geodata.GeoClawData() physics.read(os.path.join(plotdata.outdir,'geoclaw.data')) surge_data = surge.data.SurgeData() surge_data.read(os.path.join(plotdata.outdir,'surge.data')) friction_data = surge.data.FrictionData() friction_data.read(os.path.join(plotdata.outdir,'friction.data')) # Load storm track track = surge.plot.track_data(os.path.join(plotdata.outdir,'fort.track')) # Calculate landfall time, off by a day, maybe leap year issue? landfall_dt = datetime.datetime(2008,9,13,7) - datetime.datetime(2008,1,1,0) landfall = (landfall_dt.days - 1.0) * 24.0 * 60**2 + landfall_dt.seconds # Set afteraxes function surge_afteraxes = lambda cd: surge.plot.surge_afteraxes(cd, track, landfall, plot_direction=False) # Color limits surface_range = 5.0 speed_range = 3.0 eta = physics.sea_level if not isinstance(eta,list): eta = [eta] surface_limits = [eta[0]-surface_range,eta[0]+surface_range] speed_limits = [0.0,speed_range] wind_limits = [0,64] # wind_limits = [-0.002,0.002] pressure_limits = [935,1013] friction_bounds = [0.01,0.04] # vorticity_limits = [-1.e-2,1.e-2] # def pcolor_afteraxes(current_data): # surge_afteraxes(current_data) # surge.plot.gauge_locations(current_data,gaugenos=[6]) def contour_afteraxes(current_data): surge_afteraxes(current_data) # ========================================================================== # ========================================================================== # Plot specifications # ========================================================================== # ========================================================================== # ======================================================================== # Entire Gulf # ======================================================================== gulf_xlimits = [clawdata.lower[0],clawdata.upper[0]] gulf_ylimits = [clawdata.lower[1],clawdata.upper[1]] gulf_shrink = 1.0 def gulf_after_axes(cd): plt.subplots_adjust(left=0.08, bottom=0.04, right=0.97, top=0.96) surge_afteraxes(cd) # # Surface # plotfigure = plotdata.new_plotfigure(name='Surface - Entire Domain', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes surge.plot.add_surface_elevation(plotaxes,bounds=surface_limits,shrink=gulf_shrink) surge.plot.add_land(plotaxes,topo_min=-10.0,topo_max=5.0) surge.plot.add_bathy_contours(plotaxes) # # Water Speed # plotfigure = plotdata.new_plotfigure(name='Currents - Entire Domain', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes # Speed surge.plot.add_speed(plotaxes,bounds=speed_limits,shrink=gulf_shrink) # Land surge.plot.add_land(plotaxes) surge.plot.add_bathy_contours(plotaxes) # # Water Velocity Components # plotfigure = plotdata.new_plotfigure(name='Velocity Components - Entire Domain', figno=fig_num_counter.get_counter()) plotfigure.show = False # X-Component plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = "subplot(121)" plotaxes.title = 'Velocity, X-Component' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = surge.plot.water_u plotitem.pcolor_cmap = colormaps.make_colormap({1.0:'r',0.5:'w',0.0:'b'}) plotitem.pcolor_cmin = -speed_limits[1] plotitem.pcolor_cmax = speed_limits[1] plotitem.colorbar_shrink = gulf_shrink plotitem.add_colorbar = True plotitem.amr_celledges_show = [0,0,0] plotitem.amr_patchedges_show = [1,1,1] surge.plot.add_land(plotaxes) # Y-Component plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = "subplot(122)" plotaxes.title = 'Velocity, Y-Component' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = surge.plot.water_v plotitem.pcolor_cmap = colormaps.make_colormap({1.0:'r',0.5:'w',0.0:'b'}) plotitem.pcolor_cmin = -speed_limits[1] plotitem.pcolor_cmax = speed_limits[1] plotitem.colorbar_shrink = gulf_shrink plotitem.add_colorbar = True plotitem.amr_celledges_show = [0,0,0] plotitem.amr_patchedges_show = [1,1,1] surge.plot.add_land(plotaxes) # # Depth # plotfigure = plotdata.new_plotfigure(name='Depth - Entire Domain', figno=fig_num_counter.get_counter()) plotfigure.show = False # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'depth' plotaxes.scaled = True plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.afteraxes = gulf_after_axes plotitem = plotaxes.new_plotitem(plot_type='2d_imshow') plotitem.plot_var = 0 plotitem.imshow_cmap = colormaps.make_colormap({1.0:'r',0.5:'w',0.0:'b'}) plotitem.imshow_cmin = 0 plotitem.imshow_cmax = 100 plotitem.colorbar_shrink = gulf_shrink plotitem.add_colorbar = True plotitem.amr_celledges_show = [0,0,0] plotitem.amr_patchedges_show = [1,1,1,1,1,1,1,1,1] # # Hurricane forcing # # Pressure field plotfigure = plotdata.new_plotfigure(name='Pressure', figno=fig_num_counter.get_counter()) plotfigure.show = surge_data.pressure_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.title = "Pressure Field" plotaxes.afteraxes = gulf_after_axes plotaxes.scaled = True surge.plot.add_pressure(plotaxes, bounds=pressure_limits, shrink=gulf_shrink) # add_pressure(plotaxes) surge.plot.add_land(plotaxes) # Wind field plotfigure = plotdata.new_plotfigure(name='Wind Speed', figno=fig_num_counter.get_counter()) plotfigure.show = surge_data.wind_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.title = "Wind Field" plotaxes.afteraxes = gulf_after_axes plotaxes.scaled = True surge.plot.add_wind(plotaxes, bounds=wind_limits, plot_type='imshow', shrink=gulf_shrink) # add_wind(plotaxes,bounds=wind_limits,plot_type='contour') # add_wind(plotaxes,bounds=wind_limits,plot_type='quiver') surge.plot.add_land(plotaxes) # Surge field plotfigure = plotdata.new_plotfigure(name='Surge Field', figno=fig_num_counter.get_counter()) plotfigure.show = ((surge_data.wind_forcing or surge_data.pressure_forcing) and False) plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.title = "Storm Surge Source Term S" plotaxes.afteraxes = gulf_after_axes plotaxes.scaled = True plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = surge.plot.pressure_field + 1 plotitem.pcolor_cmap = plt.get_cmap('PuBu') plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = 1e-3 plotitem.add_colorbar = True plotitem.colorbar_shrink = gulf_shrink plotitem.colorbar_label = "Source Strength" plotitem.amr_celledges_show = [0,0,0] plotitem.amr_patchedges_show = [1,1,1,1,1,0,0] surge.plot.add_land(plotaxes) plotfigure = plotdata.new_plotfigure(name='Friction/Coriolis Source', figno=fig_num_counter.get_counter()) plotfigure.show = False plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits plotaxes.title = "Friction/Coriolis Source" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = surge.plot.pressure_field + 2 plotitem.pcolor_cmap = plt.get_cmap('PuBu') plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = 1e-3 plotitem.add_colorbar = True plotitem.colorbar_shrink = gulf_shrink plotitem.colorbar_label = "Source Strength" plotitem.amr_celledges_show = [0,0,0] plotitem.amr_patchedges_show = [1,1,1,1,1,0,0] surge.plot.add_land(plotaxes) # # Friction field # plotfigure = plotdata.new_plotfigure(name='Friction', figno=fig_num_counter.get_counter()) plotfigure.show = friction_data.variable_friction and True def friction_after_axes(cd): plt.subplots_adjust(left=0.08, bottom=0.04, right=0.97, top=0.96) plt.title(r"Manning's $n$ Coefficient") # surge_afteraxes(cd) plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = gulf_xlimits plotaxes.ylimits = gulf_ylimits # plotaxes.title = "Manning's N Coefficient" plotaxes.afteraxes = friction_after_axes plotaxes.scaled = True surge.plot.add_friction(plotaxes,bounds=friction_bounds,shrink=0.9) plotaxes.plotitem_dict['friction'].amr_patchedges_show = [0,0,0,0,0,0,0] plotaxes.plotitem_dict['friction'].colorbar_label = "" # ======================================================================== # LaTex Shelf # ======================================================================== latex_xlimits = [-97.5,-88.5] latex_ylimits = [27.5,30.5] latex_shrink = 1.0 def latex_after_axes(cd): plt.subplots_adjust(right=1.0) surge_afteraxes(cd) # # Surface # plotfigure = plotdata.new_plotfigure(name='Surface - LaTex Shelf', figno=fig_num_counter.get_counter()) plotfigure.show = True plotfigure.kwargs = {'figsize':(9,2.7)}#, 'facecolor':} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = latex_xlimits plotaxes.ylimits = latex_ylimits plotaxes.afteraxes = latex_after_axes surge.plot.add_surface_elevation(plotaxes,bounds=surface_limits,shrink=latex_shrink) # surge.plot.add_surface_elevation(plotaxes,plot_type='contour') surge.plot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [1,1,1,0,0,0,0] plotaxes.plotitem_dict['land'].amr_patchedges_show = [1,1,1,0,0,0,0] # Plot using jet and 0.0 to 5.0 to match figgen generated ADCIRC results plotaxes.plotitem_dict['surface'].pcolor_cmin = 0.0 plotaxes.plotitem_dict['surface'].pcolor_cmax = 5.0 plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('jet') # # Water Speed # plotfigure = plotdata.new_plotfigure(name='Currents - LaTex Shelf', figno=fig_num_counter.get_counter()) plotfigure.show = True plotfigure.kwargs = {'figsize':(9,2.7), 'facecolor':'none'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = latex_xlimits plotaxes.ylimits = latex_ylimits plotaxes.afteraxes = latex_after_axes surge.plot.add_speed(plotaxes,bounds=speed_limits,shrink=latex_shrink) # surge.plot.add_surface_elevation(plotaxes,plot_type='contour') surge.plot.add_land(plotaxes) plotaxes.plotitem_dict['speed'].amr_patchedges_show = [1,1,1,0,0,0,0] plotaxes.plotitem_dict['land'].amr_patchedges_show = [1,1,1,0,0,0,0] # ======================================================================== # Houston/Galveston # ======================================================================== houston_xlimits = [-(95.0 + 26.0 / 60.0), -(94.0 + 25.0 / 60.0)] houston_ylimits = [29.1, 29.0 + 55.0 / 60.0] houston_shrink = 0.9 def houston_after_axes(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) # surge.plot.gauge_locations(cd) # # Surface Elevations # plotfigure = plotdata.new_plotfigure(name='Surface - Houston/Galveston', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = houston_xlimits plotaxes.ylimits = houston_ylimits plotaxes.afteraxes = houston_after_axes surge.plot.add_surface_elevation(plotaxes,bounds=surface_limits,shrink=houston_shrink) surge.plot.add_land(plotaxes) # surge.plot.add_bathy_contours(plotaxes) # Plot using jet and 0.0 to 5.0 to match figgen generated ADCIRC results plotaxes.plotitem_dict['surface'].pcolor_cmin = 0.0 plotaxes.plotitem_dict['surface'].pcolor_cmax = 5.0 plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('jet') # # Water Speed # plotfigure = plotdata.new_plotfigure(name='Currents - Houston/Galveston', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = houston_xlimits plotaxes.ylimits = houston_ylimits plotaxes.afteraxes = houston_after_axes surge.plot.add_speed(plotaxes,bounds=speed_limits,shrink=houston_shrink) surge.plot.add_land(plotaxes) # surge.plot.add_bathy_contours(plotaxes) plotaxes.plotitem_dict['speed'].amr_patchedges_show = [1,1,1,1,1,1,1,1] plotaxes.plotitem_dict['land'].amr_patchedges_show = [1,1,1,1,1,1,1,1] # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ type='each_gauge') plotfigure.show = True plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() # try: # plotaxes.xlimits = [clawdata.t0,clawdata.tfinal] # except: # pass # plotaxes.ylimits = [0,150.0] plotaxes.ylimits = 'auto' plotaxes.title = 'Surface' plotaxes.afteraxes = surge.plot.gauge_afteraxes # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # ===================== # Gauge Location Plot # ===================== gauge_xlimits = [-95.5, -94.0] gauge_ylimits = [29.0, 30.0] houston_shrink = 0.9 def gauge_after_axes(cd): # plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) surge.plot.gauge_locations(cd) plt.title("Gauge Locations") plotfigure = plotdata.new_plotfigure(name='Gauge Locations', figno=fig_num_counter.get_counter()) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = gauge_xlimits plotaxes.ylimits = gauge_ylimits plotaxes.afteraxes = gauge_after_axes surge.plot.add_surface_elevation(plotaxes) surge.plot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0,0,0,0,0,0,0] plotaxes.plotitem_dict['surface'].add_colorbar = False plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('jet') # plotaxes.plotitem_dict['surface'].pcolor_cmap = plt.get_cmap('gist_yarg') plotaxes.plotitem_dict['surface'].pcolor_cmin = 0.0 plotaxes.plotitem_dict['surface'].pcolor_cmax = 5.0 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0,0,0,0,0,0,0] #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? return plotdata