def setplot(plotdata=None): """""" if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() # clear any old figures,axes,items data plotdata.clearfigures() plotdata.format = 'ascii' # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.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')) # Set afteraxes function def surge_afteraxes(cd): surgeplot.surge_afteraxes(cd, track, plot_direction=False, kwargs={"markersize": 4}) # Color limits surface_limits = [-4.0, 4.0] speed_limits = [0.0, 3.0] wind_limits = [0, 64] pressure_limits = [935, 1013] friction_bounds = [0.01, 0.04] ''' surface_limits = [-2.0, 2.0] speed_limits = [0.0, 3.0] wind_limits = [0, 70] pressure_limits = [990, 1010] friction_bounds = [0.01, 0.04] ''' def friction_after_axes(cd): plt.title(r"Manning's $n$ Coefficient") # ========================================================================== # Plot specifications # ========================================================================== # surface region regions = { "Gulf": { "xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (6.4, 3.2) }, "LaTex Shelf": { "xlimits": (-94.5, -86), "ylimits": (27, 32), "figsize": (10, 5) } } for (name, region_dict) in regions.items(): # Surface Figure plotfigure = plotdata.new_plotfigure(name="Surface - %s" % name) plotfigure.kwargs = {"figsize": region_dict['figsize']} plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Surface" plotaxes.xlimits = region_dict["xlimits"] plotaxes.ylimits = region_dict["ylimits"] plotaxes.afteraxes = surge_afteraxes surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # Speed Figure plotfigure = plotdata.new_plotfigure(name="Currents - %s" % name) plotfigure.kwargs = {"figsize": region_dict['figsize']} plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Currents" plotaxes.xlimits = region_dict["xlimits"] plotaxes.ylimits = region_dict["ylimits"] plotaxes.afteraxes = surge_afteraxes surgeplot.add_speed(plotaxes, bounds=speed_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['speed'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # # Friction field # plotfigure = plotdata.new_plotfigure(name='Friction') plotfigure.show = friction_data.variable_friction and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Gulf']['xlimits'] plotaxes.ylimits = regions['Gulf']['ylimits'] # plotaxes.title = "Manning's N Coefficient" plotaxes.afteraxes = friction_after_axes plotaxes.scaled = True surgeplot.add_friction(plotaxes, bounds=friction_bounds, shrink=0.9) plotaxes.plotitem_dict['friction'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['friction'].colorbar_label = "$n$" # # Hurricane Forcing fields # # Pressure field plotfigure = plotdata.new_plotfigure(name='Pressure') plotfigure.show = surge_data.pressure_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Gulf']['xlimits'] plotaxes.ylimits = regions['Gulf']['ylimits'] plotaxes.title = "Pressure Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_pressure(plotaxes, bounds=pressure_limits) surgeplot.add_land(plotaxes) # Wind field plotfigure = plotdata.new_plotfigure(name='Wind Speed') plotfigure.show = surge_data.wind_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Gulf']['xlimits'] plotaxes.ylimits = regions['Gulf']['ylimits'] plotaxes.title = "Wind Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_wind(plotaxes, bounds=wind_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['wind'].amr_patchedges_show = [0] * 10 # added # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Gauge Surfaces', 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 = [-2, 1] # plotaxes.xlabel = "Days from landfall" # plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [-1.0, 2.5] plotaxes.title = 'Surface' def gauge_afteraxes(cd): axes = plt.gca() surgeplot.plot_landfall_gauge(cd.gaugesoln, axes) gauge_id = ['8770822', '8768094', '8764227', '8761305', '8760922'] gauge_title = [ 'Texas Point, Sabine Pass, TX', 'Calcasieu Pass, LA', 'LAWMA, Amerada Pass, LA', 'Shell Beach, LA', 'Pilots Station East, S.W. Pass, LA' ] if (cd.gaugeno < 6): realData = util.fetch_noaa_tide_data(gauge_id[cd.gaugeno - 1], datetime.datetime(2019, 7, 10, hour=12), datetime.datetime(2019, 7, 16, hour=12), datum='MLLW') values = realData[1] - realData[2] times = [] for time in realData[0]: times.append( (time - numpy.datetime64("2019-07-13T15:00")).astype(float) / 1440) plt.plot(times, values, color='orange', label='real') axes.set_title('Gauge %s: %s' % (cd.gaugeno, gauge_title[cd.gaugeno - 1])) # i for i in gauge_title axes.set_xlabel('Days relative to landfall') axes.set_ylabel('Surface (m)') axes.set_xlim([-2, 1]) axes.set_ylim([-1.0, 2.5]) axes.set_xticks([-2, -1, 0, 1]) axes.set_xticklabels([r"$-2$", r"$-1$", r"$0$", r"$1$"]) axes.grid(True) plotaxes.afteraxes = 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 # # All gauges def gauge_location_afteraxes(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) gaugetools.plot_gauge_locations(cd.plotdata, gaugenos='all', format_string='ko', add_labels=True) plotfigure = plotdata.new_plotfigure(name="Gauge Location") plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge Locations' plotaxes.scaled = True plotaxes.xlimits = [-95, -88.5] plotaxes.ylimits = [28, 31] plotaxes.afteraxes = gauge_location_afteraxes surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # Gauge 01: Texas Point, Sabine Pass, TX [8770822] def gauge_location_afteraxes1(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) gaugetools.plot_gauge_locations(cd.plotdata, gaugenos=[1], format_string='ko', add_labels=True) plotfigure = plotdata.new_plotfigure(name="Gauge 01") plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 01 Location' plotaxes.scaled = True plotaxes.xlimits = [-93.84 - 0.2, -93.84 + 0.2] plotaxes.ylimits = [29.69 - 0.2, 29.69 + 0.2] plotaxes.afteraxes = gauge_location_afteraxes1 surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # Gauge 02: Calcasieu Pass, LA [8768094] def gauge_location_afteraxes2(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) gaugetools.plot_gauge_locations(cd.plotdata, gaugenos=[2], format_string='ko', add_labels=True) plotfigure = plotdata.new_plotfigure(name="Gauge 02") plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 02 Location' plotaxes.scaled = True plotaxes.xlimits = [-93.34 - 0.2, -93.34 + 0.2] plotaxes.ylimits = [29.77 - 0.2, 29.77 + 0.2] plotaxes.afteraxes = gauge_location_afteraxes2 surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # Gauge 03: LAWMA, Amerada Pass, LA [8764227] def gauge_location_afteraxes3(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) gaugetools.plot_gauge_locations(cd.plotdata, gaugenos=[3], format_string='ko', add_labels=True) plotfigure = plotdata.new_plotfigure(name="Gauge 03") plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 03 Location' plotaxes.scaled = True plotaxes.xlimits = [-91.34 - 0.2, -91.34 + 0.2] plotaxes.ylimits = [29.45 - 0.2, 29.45 + 0.2] plotaxes.afteraxes = gauge_location_afteraxes3 surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # Gauge 04: Shell Beach, LA [8761305] def gauge_location_afteraxes4(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) gaugetools.plot_gauge_locations(cd.plotdata, gaugenos=[4], format_string='ko', add_labels=True) plotfigure = plotdata.new_plotfigure(name="Gauge 04") plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 04 Location' plotaxes.scaled = True plotaxes.xlimits = [-89.67 - 0.2, -89.67 + 0.2] plotaxes.ylimits = [29.87 - 0.2, 29.87 + 0.2] plotaxes.afteraxes = gauge_location_afteraxes4 surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # Gauge 05: Pilots Station East, S.W. Pass, LA [8760922] def gauge_location_afteraxes5(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) gaugetools.plot_gauge_locations(cd.plotdata, gaugenos=[5], format_string='ko', add_labels=True) plotfigure = plotdata.new_plotfigure(name="Gauge 05") plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 05 Location' plotaxes.scaled = True plotaxes.xlimits = [-89.41 - 0.2, -89.41 + 0.2] plotaxes.ylimits = [28.93 - 0.2, 28.93 + 0.2] plotaxes.afteraxes = gauge_location_afteraxes5 surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # ----------------------------------------- # 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 = [1, 2, 3, 4, 5] # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? 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 # parallel plotting 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 = -.1 plotitem.pcolor_cmax = .1 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, 1000, 11) plotitem.amr_contour_colors = ['g'] # color on each level #plotitem.kwargs = {'linestyles':'dashed','linewidths':2,'colors' : 'red' } plotitem.kwargs = { 'linestyles': 'dashed', 'linewidths': 2, '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.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 = .02 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 = True #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.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 = True 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 = True 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': 2} 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 = True plotitem.plot_var = geoplot.topo plotitem.contour_levels = linspace(-40, 40, 3) plotitem.amr_contour_colors = ['m'] # color on each level plotitem.kwargs = {'linestyles': 'dashed', 'linewidths': 2} 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, 6100] 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.01] #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 = True 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 = [0, 1] #'all' # 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.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, 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 as geodata import clawpack.geoclaw.multilayer.data as ml_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 = geodata.GeoClawData() geodata.read(os.path.join(plotdata.outdir, 'geoclaw.data')) # surge_data = surge.data.SurgeData() # surge_data.read(os.path.join(plotdata.outdir,'surge.data')) multilayer_data = ml_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 # ======================================================================== # 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' # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 6 plotitem.plotstyle = 'b-' # Bottom plotfigure = plotdata.new_plotfigure(name='Bottom Surface Gauge', 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 = internal_surface_limits plotaxes.title = 'Bottom Surface' # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 7 plotitem.plotstyle = 'b-' # 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""" if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data # plotdata.format = 'binary' plotdata.format = 'ascii' # Load data from output claw_data = clawdata.ClawInputData(2) claw_data.read(os.path.join(plotdata.outdir, 'claw.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')) # Set afteraxes function surge_afteraxes = lambda cd: surgeplot.surge_afteraxes( cd, track, plot_direction=False) # Color limits surface_range = 4.5 speed_range = 1.0 # speed_range = 1.e-2 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] friction_bounds = [0.01, 0.04] vorticity_limits = [-1.e-2, 1.e-2] land_bounds = [-10, 50] # ========================================================================== # Plot specifications # ========================================================================== # Limits for plots regions = { 'Full Domain': { "xlimits": [claw_data.lower[0], claw_data.upper[0]], "ylimits": [claw_data.lower[1], claw_data.upper[1]], "shrink": 1.0, "figsize": [6.4, 4.8] }, 'Mumbai Region': { "xlimits": [70, 75], "ylimits": [17, 22], "shrink": 1.0, "figsize": [6.4, 4.8] }, 'Mumbai': { "xlimits": [72.6, 73.15], "ylimits": [18.80, 19.25], "shrink": 1.0, "figsize": [6.4, 4.8] } } def gauge_location_afteraxes(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) gaugetools.plot_gauge_locations(cd.plotdata, gaugenos='all', format_string='ko', add_labels=True) for (name, region_dict) in regions.items(): # ======================================================================== # Surface Elevations # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface - %s' % name) plotfigure.show = True #plotfigure = plotdata.new_plotfigure(name="Gauge Locations") #plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = region_dict['xlimits'] plotaxes.ylimits = region_dict['ylimits'] plotaxes.afteraxes = surge_afteraxes plotaxes.afteraxes = gauge_location_afteraxes surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits, shrink=region_dict['shrink']) surgeplot.add_land(plotaxes, bounds=land_bounds) plotaxes.plotitem_dict['land'].amr_patchedges_show = [1, 0, 0] plotaxes.plotitem_dict['surface'].amr_patchedges_show = [1, 0, 0] # ======================================================================== # Water Speed # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Currents - %s' % name) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = region_dict['xlimits'] plotaxes.ylimits = region_dict['ylimits'] plotaxes.afteraxes = surge_afteraxes surgeplot.add_speed(plotaxes, bounds=speed_limits, shrink=region_dict['shrink']) surgeplot.add_land(plotaxes, bounds=land_bounds) # ======================================================================== # Hurricane forcing - Entire Atlantic # ======================================================================== # Friction field plotfigure = plotdata.new_plotfigure(name='Friction') plotfigure.show = False plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Full Domain']['xlimits'] plotaxes.ylimits = regions['Full Domain']['ylimits'] plotaxes.title = "Manning's N Coefficients" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_friction(plotaxes, bounds=friction_bounds) # Pressure field plotfigure = plotdata.new_plotfigure(name='Pressure') plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Full Domain']['xlimits'] plotaxes.ylimits = regions['Full Domain']['ylimits'] plotaxes.title = "Pressure Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_pressure(plotaxes, bounds=pressure_limits) surgeplot.add_land(plotaxes, bounds=[-10, 500]) # Wind field plotfigure = plotdata.new_plotfigure(name='Wind Speed') plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Full Domain']['xlimits'] plotaxes.ylimits = regions['Full Domain']['ylimits'] plotaxes.title = "Wind Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_wind(plotaxes, bounds=wind_limits, plot_type='imshow') surgeplot.add_land(plotaxes, bounds=[-10, 500]) # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ type='each_gauge') plotfigure.show = True plotfigure.clf_each_gauge = True def gauge_afteraxes(cd): axes = plt.gca() surgeplot.plot_landfall_gauge(cd.gaugesoln, axes) # Fix up plot - in particular fix time labels axes.set_title('Station %s' % cd.gaugeno) axes.set_xlabel('Days relative to landfall') axes.set_ylabel('Surface (m)') axes.set_xlim([0, 6]) axes.set_xticks([0, 1, 2, 3, 4, 5, 6]) axes.set_xticklabels( [r"$0$", r"$1$", r"$2$", r"$3$", r"$4$", r"$5$", r"$6$"]) #axes.set_ylim([-1, 5]) axes.grid(True) # def gauge_afteraxes(cd): # station_id, station_name = stations[cd.gaugeno-1] # seconds_rel_landfall, actual_level = get_actual_water_levels(station_id) # # axes = plt.gca() # #surgeplot.plot_landfall_gauge(cd.gaugesoln, axes, landfall=landfall) # axes.plot(seconds_rel_landfall, actual_level, 'g') # # # Fix up plot - in particular fix time labels # axes.set_title(station_name) # axes.set_xlabel('Seconds relative to landfall') # axes.set_ylabel('Surface (m)') # axes.set_xlim([days2seconds(-2), days2seconds(1)]) # axes.set_ylim([0, 4]) # axes.set_xticks([ days2seconds(-2), days2seconds(-1), 0, #days2seconds(1)]) #axes.set_xticklabels([r"$-3$", r"$-2$", r"$-1$", r"$0$", r"$1$"]) #axes.grid(True) # def current_afterxes(cd): # station_id, station_name = stations[cd.gaugeno-1] # if len(station_id)==6: # seconds_rel_landfall, currents = get_actual_currents(station_id) # # axes = plt.gca() # #surgeplot.plot_landfall_gauge(cd.gaugesoln, axes, # landfall=landfall) # axes.plot(seconds_rel_landfall, currents, 'g') # # # Fix up plot - in particular fix time labels # axes.set_title(station_name) # axes.set_xlabel('Seconds relative to landfall') # axes.set_ylabel('Surface (m)') # axes.set_xlim([days2seconds(-2), days2seconds(1)]) # axes.set_xticks([ days2seconds(-2), days2seconds(-1), 0, # days2seconds(1)]) # #axes.set_xticklabels([r"$-3$", r"$-2$", r"$-1$", r"$0$", r"$1$"]) # #axes.grid(True) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.afteraxes = gauge_afteraxes # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # Speeds # plotfigure = plotdata.new_plotfigure(name='Currents', figno=400, \ # type='each_gauge') # plotfigure.show = True # plotfigure.clf_each_gauge = True # plotaxes = plotfigure.new_plotaxes() #plotaxes.afteraxes = current_afterxes # plotaxes.axescmd = 'subplot(122)' # try: # plotaxes.xlimits = [amrdata.t0, amrdata.tfinal] # except: # pass # plotaxes.ylimits = surface_limits #plotaxes.title = 'Momenta' # plotaxes.afteraxes = surge.gauge_afteraxes # plotitem = plotaxes.new_plotitem(plot_type='1d_plot') # plotitem.plot_var = calc_currents # plotitem.plotstyle = 'r-.' #plotitem = plotaxes.new_plotitem(plot_type='1d_plot') #plotitem.plot_var = 2 #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 = '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? 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.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.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.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.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.plot.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.plot.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.plot.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.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.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.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] 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.plot.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.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] # ============================================================== # 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 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 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 = 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=None): """""" if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() # clear any old figures,axes,items data plotdata.clearfigures() plotdata.format = 'binary' # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.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')) # Set indices for plotting surgeplot.friction_field = 1 surgeplot.wind_field = 2 surgeplot.pressure_field = 4 # Load storm track track = surgeplot.track_data(os.path.join(plotdata.outdir, 'fort.track')) # Set afteraxes function def surge_afteraxes(cd): surgeplot.surge_afteraxes(cd, track, plot_direction=False, kwargs={"markersize": 4}) # Color limits surface_limits = [-5.0, 5.0] speed_limits = [0.0, 3.0] wind_limits = [0, 64] pressure_limits = [935, 1013] friction_bounds = [0.01, 0.04] def friction_after_axes(cd): plt.title(r"Manning's $n$ Coefficient") # ========================================================================== # Plot specifications # ========================================================================== regions = { "domain": { "xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (6.4, 4.8) } } for (name, region_dict) in regions.items(): # Surface Figure plotfigure = plotdata.new_plotfigure(name="Surface - %s" % name) plotfigure.kwargs = {"figsize": region_dict['figsize']} plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Surface" plotaxes.xlimits = region_dict["xlimits"] plotaxes.ylimits = region_dict["ylimits"] plotaxes.afteraxes = surge_afteraxes surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # Speed Figure plotfigure = plotdata.new_plotfigure(name="Currents - %s" % name) plotfigure.kwargs = {"figsize": region_dict['figsize']} plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Currents" plotaxes.xlimits = region_dict["xlimits"] plotaxes.ylimits = region_dict["ylimits"] plotaxes.afteraxes = surge_afteraxes surgeplot.add_speed(plotaxes, bounds=speed_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['speed'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # # Friction field # plotfigure = plotdata.new_plotfigure(name='Friction') plotfigure.show = friction_data.variable_friction and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['domain']['xlimits'] plotaxes.ylimits = regions['domain']['ylimits'] # plotaxes.title = "Manning's N Coefficient" plotaxes.afteraxes = friction_after_axes plotaxes.scaled = True surgeplot.add_friction(plotaxes, bounds=friction_bounds, shrink=0.9) plotaxes.plotitem_dict['friction'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['friction'].colorbar_label = "$n$" # # Hurricane Forcing fields # # Pressure field plotfigure = plotdata.new_plotfigure(name='Pressure') plotfigure.show = surge_data.pressure_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['domain']['xlimits'] plotaxes.ylimits = regions['domain']['ylimits'] plotaxes.title = "Pressure Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_pressure(plotaxes, bounds=pressure_limits) surgeplot.add_land(plotaxes) # Wind field plotfigure = plotdata.new_plotfigure(name='Wind Speed') plotfigure.show = surge_data.wind_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['domain']['xlimits'] plotaxes.ylimits = regions['domain']['ylimits'] plotaxes.title = "Wind Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_wind(plotaxes, bounds=wind_limits) surgeplot.add_land(plotaxes) # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Gauge Surfaces', 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 = [-2, 1] # plotaxes.xlabel = "Days from landfall" # plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [-1, 5] plotaxes.title = 'Surface' def gauge_afteraxes(cd): axes = plt.gca() surgeplot.plot_landfall_gauge(cd.gaugesoln, axes) # Fix up plot - in particular fix time labels 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) plotaxes.afteraxes = 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 # def gauge_location_afteraxes(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) gaugetools.plot_gauge_locations(cd.plotdata, gaugenos='all', format_string='ko', add_labels=True) plotfigure = plotdata.new_plotfigure(name="Gauge Locations") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge Locations' plotaxes.scaled = True plotaxes.xlimits = [-95.5, -94] plotaxes.ylimits = [29.0, 30.0] plotaxes.afteraxes = gauge_location_afteraxes surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # ----------------------------------------- # 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.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 # parallel plotting 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
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' plotdata.format = 'ascii' # Load data from output claw_data = clawdata.ClawInputData(2) claw_data.read(os.path.join(plotdata.outdir, 'claw.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')) # Set afteraxes function surge_afteraxes = lambda cd: surgeplot.surge_afteraxes(cd, track, plot_direction=False) # Color limits surface_range = 4.5 speed_range = 1.0 # speed_range = 1.e-2 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 = [200, 1025] friction_bounds = [0.01, 0.04] vorticity_limits = [-1.e-2, 1.e-2] land_bounds = [-10, 50] # ========================================================================== # Plot specifications # ========================================================================== # Limits for plots regions = {'Full Domain': {"xlimits": [claw_data.lower[0], claw_data.upper[0]], "ylimits": [claw_data.lower[1], claw_data.upper[1]], "shrink": 1.0, "figsize": [6.4, 4.8]}, 'Tri-State Region': {"xlimits": [-74.5,-71.0], "ylimits": [40.0,41.5], "shrink": 1.0, "figsize": [6.4, 4.8]}, 'NYC': {"xlimits": [-74.2,-73.7], "ylimits": [40.4,40.85], "shrink": 1.0, "figsize": [6.4, 4.8]} } def gauge_location_afteraxes(cd): plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) surge_afteraxes(cd) gaugetools.plot_gauge_locations(cd.plotdata, gaugenos='all', format_string='ko', add_labels=True) for (name, region_dict) in regions.items(): # ======================================================================== # Surface Elevations # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface - %s' % name) plotfigure.show = True #plotfigure = plotdata.new_plotfigure(name="Gauge Locations") #plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = region_dict['xlimits'] plotaxes.ylimits = region_dict['ylimits'] plotaxes.afteraxes = surge_afteraxes plotaxes.afteraxes = gauge_location_afteraxes surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits, shrink=region_dict['shrink']) surgeplot.add_land(plotaxes, bounds=land_bounds) plotaxes.plotitem_dict['land'].amr_patchedges_show = [1,0,0] plotaxes.plotitem_dict['surface'].amr_patchedges_show = [1,0,0] # ======================================================================== # Water Speed # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Currents - %s' % name) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents' plotaxes.scaled = True plotaxes.xlimits = region_dict['xlimits'] plotaxes.ylimits = region_dict['ylimits'] plotaxes.afteraxes = surge_afteraxes surgeplot.add_speed(plotaxes, bounds=speed_limits, shrink=region_dict['shrink']) surgeplot.add_land(plotaxes, bounds=land_bounds) # ======================================================================== # Hurricane forcing - Entire Atlantic # ======================================================================== # Friction field plotfigure = plotdata.new_plotfigure(name='Friction') plotfigure.show = False plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Full Domain']['xlimits'] plotaxes.ylimits = regions['Full Domain']['ylimits'] plotaxes.title = "Manning's N Coefficients" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_friction(plotaxes,bounds=friction_bounds) # Pressure field plotfigure = plotdata.new_plotfigure(name='Pressure') plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Full Domain']['xlimits'] plotaxes.ylimits = regions['Full Domain']['ylimits'] plotaxes.title = "Pressure Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_pressure(plotaxes,bounds=pressure_limits) surgeplot.add_land(plotaxes, bounds=[-10, 500]) # Wind field plotfigure = plotdata.new_plotfigure(name='Wind Speed') plotfigure.show = True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Full Domain']['xlimits'] plotaxes.ylimits = regions['Full Domain']['ylimits'] plotaxes.title = "Wind Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_wind(plotaxes,bounds=wind_limits,plot_type='imshow') surgeplot.add_land(plotaxes, bounds=[-10, 500]) # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface & topo', figno=300, \ type='each_gauge') plotfigure.show = True plotfigure.clf_each_gauge = True stations = [('8531680','Sandy Hook, NY'), ('8518750', 'The Battery, NY'), ('8519483', 'Bergen Point West Reach, NY'), ('8516945', 'Kings Point, NY')] #('8531680','Sandy Hook, NY'), #('n03020','Narrows,NY')] landfall_time = np.datetime64('2012-10-29T23:30') begin_date = datetime.datetime(2012, 10, 28) end_date = datetime.datetime(2012, 10, 31,) def get_actual_water_levels(station_id): # Fetch water levels and tide predictions for given station date_time, water_level, tide = fetch_noaa_tide_data(station_id, begin_date, end_date) # Calculate times relative to landfall seconds_rel_landfall = (date_time - landfall_time) / np.timedelta64(1, 's') # Subtract tide predictions from measured water levels water_level -= tide return seconds_rel_landfall, water_level # def get_actual_current(station_id): # # Fetch currents for given station_name # date_time, water_level, tide, currents = # fetch_noaa_tide_data(station_id, # begin_date, end_date) # # # calculate times relative to landfall_time # secs_rel_landfall = (date_time - landfall_time) / np.timedelta64(1, # 's') # return secs_rel_landfall, currents # # def calc_currents(cd): # height = cd.q[0,:] # where_zero = np.where(height == 0)[0] # for index in where_zero: # height[index] = 1 # vel_magnitude = (cd.q[1,:]/height)**2 + (cd.q[2,:]/height)**2 # vel_magnitude = vel_magnitude**0.5 # return vel_magnitude def gauge_afteraxes(cd): axes = plt.gca() surgeplot.plot_landfall_gauge(cd.gaugesoln, axes) # Fix up plot - in particular fix time labels axes.set_title('Station %s' % cd.gaugeno) axes.set_xlabel('Days relative to landfall') axes.set_ylabel('Surface (m)') axes.set_xlim([0, 6]) axes.set_xticks([0, 1, 2, 3, 4, 5, 6]) axes.set_xticklabels([r"$0$", r"$1$", r"$2$", r"$3$", r"$4$", r"$5$", r"$6$"]) #axes.set_ylim([-1, 5]) axes.grid(True) # def gauge_afteraxes(cd): # station_id, station_name = stations[cd.gaugeno-1] # seconds_rel_landfall, actual_level = get_actual_water_levels(station_id) # # axes = plt.gca() # #surgeplot.plot_landfall_gauge(cd.gaugesoln, axes, landfall=landfall) # axes.plot(seconds_rel_landfall, actual_level, 'g') # # # Fix up plot - in particular fix time labels # axes.set_title(station_name) # axes.set_xlabel('Seconds relative to landfall') # axes.set_ylabel('Surface (m)') # axes.set_xlim([days2seconds(-2), days2seconds(1)]) # axes.set_ylim([0, 4]) # axes.set_xticks([ days2seconds(-2), days2seconds(-1), 0, #days2seconds(1)]) #axes.set_xticklabels([r"$-3$", r"$-2$", r"$-1$", r"$0$", r"$1$"]) #axes.grid(True) # def current_afterxes(cd): # station_id, station_name = stations[cd.gaugeno-1] # if len(station_id)==6: # seconds_rel_landfall, currents = get_actual_currents(station_id) # # axes = plt.gca() # #surgeplot.plot_landfall_gauge(cd.gaugesoln, axes, # landfall=landfall) # axes.plot(seconds_rel_landfall, currents, 'g') # # # Fix up plot - in particular fix time labels # axes.set_title(station_name) # axes.set_xlabel('Seconds relative to landfall') # axes.set_ylabel('Surface (m)') # axes.set_xlim([days2seconds(-2), days2seconds(1)]) # axes.set_xticks([ days2seconds(-2), days2seconds(-1), 0, # days2seconds(1)]) # #axes.set_xticklabels([r"$-3$", r"$-2$", r"$-1$", r"$0$", r"$1$"]) # #axes.grid(True) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.afteraxes = gauge_afteraxes # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # Speeds # plotfigure = plotdata.new_plotfigure(name='Currents', figno=400, \ # type='each_gauge') # plotfigure.show = True # plotfigure.clf_each_gauge = True # plotaxes = plotfigure.new_plotaxes() #plotaxes.afteraxes = current_afterxes # plotaxes.axescmd = 'subplot(122)' # try: # plotaxes.xlimits = [amrdata.t0, amrdata.tfinal] # except: # pass # plotaxes.ylimits = surface_limits #plotaxes.title = 'Momenta' # plotaxes.afteraxes = surge.gauge_afteraxes # plotitem = plotaxes.new_plotitem(plot_type='1d_plot') # plotitem.plot_var = calc_currents # plotitem.plotstyle = 'r-.' #plotitem = plotaxes.new_plotitem(plot_type='1d_plot') #plotitem.plot_var = 2 #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 = '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=None): """""" if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() # clear any old figures,axes,items data plotdata.clearfigures() plotdata.format = 'binary' # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.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')) # Set afteraxes function def surge_afteraxes(cd): surgeplot.surge_afteraxes(cd, track, plot_direction=False, kwargs={"markersize": 4}) # Color limits surface_limits = [physics.sea_level - 5.0, physics.sea_level + 5.0] 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, 3.0] speed_ticks = [0, 1, 2, 3] speed_labels = [str(value) for value in speed_ticks] wind_limits = [0, 66] pressure_limits = [909, 1013] friction_bounds = [0.01, 0.04] def add_custom_colorbar_ticks_to_axes(axes, item_name, ticks, tick_labels=None): """Adjust colorbar ticks and labels""" axes.plotitem_dict[item_name].colorbar_ticks = ticks axes.plotitem_dict[item_name].colorbar_tick_labels = tick_labels def gulf_after_axes(cd): # plt.subplots_adjust(left=0.08, bottom=0.04, right=0.97, top=0.96) surge_afteraxes(cd) def latex_after_axes(cd): # plt.subplot_adjust() surge_afteraxes(cd) 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) # ========================================================================== # Plot specifications # ========================================================================== regions = { "Coast": { "xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (8, 7.5) }, "Zhapo Station": { "xlimits": (111.71666667, 111.91666667), "ylimits": (21.48333333, 21.68333333), "figsize": (6, 6) }, "Landfall": { "xlimits": (112.26, 112.86), "ylimits": (21.3, 21.7), "figsize": (6, 4) }, "Quarry Bay": { "xlimits": (114.11333333, 114.31333333), "ylimits": (22.19111111, 22.39111111), "figsize": (6, 6) } } for (name, region_dict) in regions.items(): # Surface Figure plotfigure = plotdata.new_plotfigure(name="Surface - %s" % name) plotfigure.kwargs = {"figsize": region_dict['figsize']} plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Surface" plotaxes.xlimits = region_dict["xlimits"] plotaxes.ylimits = region_dict["ylimits"] plotaxes.afteraxes = surge_afteraxes surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 add_custom_colorbar_ticks_to_axes(plotaxes, 'surface', surface_ticks, surface_labels) # Speed Figure plotfigure = plotdata.new_plotfigure(name="Currents - %s" % name) plotfigure.kwargs = {"figsize": region_dict['figsize']} plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Currents" plotaxes.xlimits = region_dict["xlimits"] plotaxes.ylimits = region_dict["ylimits"] plotaxes.afteraxes = surge_afteraxes surgeplot.add_speed(plotaxes, bounds=speed_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['speed'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 add_custom_colorbar_ticks_to_axes(plotaxes, 'speed', speed_ticks, speed_labels) # Hurricane Forcing fields # # Pressure field plotfigure = plotdata.new_plotfigure(name='Pressure') plotfigure.show = surge_data.pressure_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Coast']['xlimits'] plotaxes.ylimits = regions['Coast']['ylimits'] plotaxes.title = "Pressure Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_pressure(plotaxes, bounds=pressure_limits) surgeplot.add_land(plotaxes) # Wind field plotfigure = plotdata.new_plotfigure(name='Wind Speed') plotfigure.show = surge_data.wind_forcing and True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Coast']['xlimits'] plotaxes.ylimits = regions['Coast']['ylimits'] plotaxes.title = "Wind Field" plotaxes.afteraxes = surge_afteraxes plotaxes.scaled = True surgeplot.add_wind(plotaxes, bounds=wind_limits) surgeplot.add_land(plotaxes) # ======================================================================== # Figures for gauges # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Gauge Surfaces', 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 = [-2.25, 0.75] #plotaxes.xlabel = "Days from landfall" #plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [-1, 4] plotaxes.title = 'Surface' def gauge_afteraxes(cd): axes = plt.gca() surgeplot.plot_landfall_gauge(cd.gaugesoln, axes) # Fix up plot - in particular fix time labels axes.set_title('Station %s' % cd.gaugeno) axes.set_xlabel('Days relative to landfall') axes.set_ylabel('Surface (m)') axes.set_xlim([-2.25, 0.75]) axes.set_ylim([-1, 4]) axes.set_xticks([-2.25, -1.25, -0.25, 0.75]) axes.set_xticklabels([r"$-2.25$", r"$-1.25$", r"$-0.25$", r"$0.75$"]) axes.grid(True) plotaxes.afteraxes = 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 # def gauge_location_afteraxes(cd): #plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.97) plt.subplots_adjust(left=0.12, bottom=0.06, right=0.97, top=0.92) surge_afteraxes(cd) gaugetools.plot_gauge_locations(cd.plotdata, gaugenos='all', format_string='ko', add_labels=True) plotfigure = plotdata.new_plotfigure(name="Gauge Locations") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge Locations' plotaxes.scaled = True plotaxes.xlimits = [111.0, 115.0] plotaxes.ylimits = [21.0, 22.5] plotaxes.afteraxes = gauge_location_afteraxes surgeplot.add_surface_elevation(plotaxes, bounds=surface_limits) surgeplot.add_land(plotaxes) plotaxes.plotitem_dict['surface'].amr_patchedges_show = [0] * 10 plotaxes.plotitem_dict['land'].amr_patchedges_show = [0] * 10 # ----------------------------------------- # 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 = [1, 2] # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? 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 # parallel plotting 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? 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.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): 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.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] # ========================== # 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) # 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] #----------------------------------------- # 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