def plotclaw(outdir='.', plotdir='_plots', setplot='setplot.py', format='ascii', msgfile=''): """ Create html and/or latex versions of plots. INPUT: setplot is a module containing a function setplot that will be called to set various plotting parameters. format specifies the format of the files output from Clawpack """ from clawpack.visclaw.data import ClawPlotData from clawpack.visclaw import plotpages plotdata = ClawPlotData() plotdata.outdir = outdir plotdata.plotdir = plotdir plotdata.setplot = setplot plotdata.format = format plotdata.msgfile = msgfile plotpages.plotclaw_driver(plotdata, verbose=False, format=format)
def plotclaw(outdir='.', plotdir='_plots', setplot = 'setplot.py',format='ascii'): """ Create html and/or latex versions of plots. INPUT: setplot is a module containing a function setplot that will be called to set various plotting parameters. format specifies the format of the files output from Clawpack """ from clawpack.visclaw.data import ClawPlotData from clawpack.visclaw import plotpages plotdata = ClawPlotData() plotdata.outdir = outdir plotdata.plotdir = plotdir plotdata.setplot = setplot plotdata.format = format plotpages.plotclaw_driver(plotdata, verbose=False, format=format)
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 = [-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 = { "Gulf": { "xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (6.4, 4.8) }, "Texas Gulf Coast": { "xlimits": (-99.2, -94.2), "ylimits": (26.4, 30.4), "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 # 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) # ======================================================================== # 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() #Time Conversions def days2seconds(days): return days * 60.0**2 * 24.0 stations = [('8773037', 'Seadrift'), ('8773701', 'Port OConnor'), ('8774230', 'Aransas Wildlife Refuge'), ('8775237', 'Port Aransas'), ('8775296', 'USS Lexington')] landfall_time = numpy.datetime64('2017-08-25T10:00') begin_date = datetime.datetime(2017, 8, 24) end_date = datetime.datetime(2017, 8, 28) 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) / numpy.timedelta64( 1, 's') # Subtract tide predictions from measured water levels water_level -= tide return seconds_rel_landfall, water_level 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) 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(-1), days2seconds(3)]) axes.set_ylim([-1, 5]) axes.set_xticks([ -days2seconds(-1), 0, days2seconds(1), days2seconds(2), days2seconds(3) ]) #axes.set_xticklabels([r"$-1$", r"$0$", r"$1$", r"$2$", r"$3$"]) #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-' # # 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=False) #Plot for gauge location 1 plotfigure = plotdata.new_plotfigure(name="Gauge Location 1") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge Location 1' plotaxes.scaled = True plotaxes.xlimits = [-96.83, -96.63] plotaxes.ylimits = [28.33, 28.43] 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 #Plot for gauge location 2 plotfigure = plotdata.new_plotfigure(name="Gauge Location 2") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge Location 2' plotaxes.scaled = True plotaxes.xlimits = [-96.48, -96.28] plotaxes.ylimits = [28.40, 28.50] 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 #Plot for gauge location 3 plotfigure = plotdata.new_plotfigure(name="Gauge Location 3") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge Location 3' plotaxes.scaled = True plotaxes.xlimits = [-96.85, -96.65] plotaxes.ylimits = [28.17, 28.27] 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 #Plot for gauge location 4 plotfigure = plotdata.new_plotfigure(name="Gauge Location 4") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge Location 4' plotaxes.scaled = True plotaxes.xlimits = [-97.15, -96.95] plotaxes.ylimits = [27.79, 27.89] 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 #Plot for gauge location 5 plotfigure = plotdata.new_plotfigure(name="Gauge Location 5") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge Location 5' plotaxes.scaled = True plotaxes.xlimits = [-97.48, -97.28] plotaxes.ylimits = [27.75, 27.85] 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, 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=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of clawpack.visclaw.data.ClawPlotData. Output: a modified version of plotdata. """ # Reversing time in adjoint output setadjoint() if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' # 'ascii', 'binary', 'netcdf' def fix_plot(current_data): from pylab import plot from pylab import xticks,yticks,xlabel,ylabel,savefig,ylim,title t = current_data.t plot([0., 0.], [-1000., 1000.], 'k--') title('Adjoint at t = %5.3f seconds' % t, fontsize=26) yticks(fontsize=23) xticks(fontsize=23) # Figure for q[0] plotfigure = plotdata.new_plotfigure(name='Adjoint', figno=1) plotfigure.kwargs = {'figsize': (10,3.5)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-12,12] plotaxes.ylimits = [-0.5,4.3] plotaxes.title = 'Adjoint' plotaxes.afteraxes = fix_plot # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 0 plotitem.amr_color = 'b' plotitem.amr_plotstyle = 'o' plotitem.amr_kwargs = [{'linewidth':2}] plotitem.amr_kwargs = [{'markersize':4}] plotitem.outdir = '../../adjoint/_outputReversed' # Parameters used only when creating html and/or latex hardcopy # e.g., via clawpack.visclaw.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' 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): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps, geoplot from numpy import linspace if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'ascii' # 'ascii' or 'binary' to match setrun.py # 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) #----------------------------------------- # Figure for surface #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True def fixup(current_data): import pylab addgauges(current_data) t = current_data.t t = t / 3600. # hours pylab.title('Surface at %4.2f hours' % t, fontsize=20) pylab.xticks(fontsize=15) pylab.yticks(fontsize=15) plotaxes.afteraxes = fixup # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.2 plotitem.pcolor_cmax = 0.2 plotitem.add_colorbar = True plotitem.amr_celledges_show = [0,0,0] plotitem.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 = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [1,1,0] plotitem.patchedges_show = 1 plotaxes.xlimits = [-120,-60] plotaxes.ylimits = [-60,0] # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = linspace(-3000,-3000,1) plotitem.amr_contour_colors = ['y'] # color on each level plotitem.kwargs = {'linestyles':'solid','linewidths':2} plotitem.amr_contour_show = [1,0,0] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface at gauges', figno=300, \ type='each_gauge') plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Surface' # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # Plot topo as green curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False def gaugetopo(current_data): q = current_data.q h = q[0,:] eta = q[3,:] topo = eta - h return topo plotitem.plot_var = gaugetopo plotitem.plotstyle = 'g-' def add_zeroline(current_data): from pylab import plot, legend, xticks, floor, axis, xlabel t = current_data.t gaugeno = current_data.gaugeno if gaugeno == 32412: try: plot(TG32412[:,0], TG32412[:,1], 'r') legend(['GeoClaw','Obs'],loc='lower right') except: pass axis((0,t.max(),-0.3,0.3)) plot(t, 0*t, 'k') n = int(floor(t.max()/3600.) + 2) xticks([3600*i for i in range(n)], ['%i' % i for i in range(n)]) xlabel('time (hours)') 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_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps, geoplot from numpy import linspace if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' # 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) #----------------------------------------- # Figure for surface #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) plotfigure.kwargs = {'figsize': (8, 5)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True def fixup(current_data): import pylab addgauges(current_data) t = current_data.t t = t / 3600. # hours pylab.title('Surface at %4.2f hours' % t, fontsize=20) pylab.grid(True) #pylab.xticks(fontsize=15) #pylab.yticks(fontsize=15) plotaxes.afteraxes = fixup # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = colormaps.red_white_blue #geoplot.tsunami_colormap plotitem.pcolor_cmin = sea_level - 0.1 plotitem.pcolor_cmax = sea_level + 0.1 plotitem.add_colorbar = False #plotitem.colorbar_shrink = 0.5 plotitem.colorbar_shrink = 1.0 plotitem.amr_celledges_show = [0, 0, 0] plotitem.patchedges_show = 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 = [-230, -115] plotaxes.ylimits = [0, 65] # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = linspace(-3000, -3000, 1) plotitem.amr_contour_colors = ['y'] # color on each level plotitem.kwargs = {'linestyles': 'solid', 'linewidths': 2} plotitem.amr_contour_show = [1, 0, 0] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 #----------------------------------------- # Figure for adjoint #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Adjoint ', figno=20) plotfigure.kwargs = {'figsize': (8, 5)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('adjoint') plotaxes.scaled = True plotaxes.title = 'Adjoint flag' def fixup(current_data): import pylab addgauges(current_data) t = current_data.t t = t / 3600. # hours pylab.title('Adjoint flag at %4.2f hours' % t, fontsize=20) pylab.grid(True) plotaxes.afteraxes = fixup adj_flag_tol = 0.000001 def masked_inner_product(current_data): from numpy import ma q = current_data.q soln = ma.masked_where(q[4, :, :] < adj_flag_tol, q[4, :, :]) return soln def masked_regions(current_data): from numpy import ma q = current_data.q soln = ma.masked_where(q[4, :, :] < 1e9, q[4, :, :]) return soln plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 4 #masked_inner_product plotitem.pcolor_cmap = colormaps.white_red plotitem.pcolor_cmin = 0.5 * adj_flag_tol plotitem.pcolor_cmax = 6 * adj_flag_tol plotitem.add_colorbar = False plotitem.amr_celledges_show = [0] plotitem.amr_data_show = [1, 1, 0, 0, 0, 0, 0] plotitem.patchedges_show = 0 #plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = masked_regions #plotitem.pcolor_cmap = colormaps.white_blue #plotitem.pcolor_cmin = 9e9 #plotitem.pcolor_cmax = 1.1e10 #plotitem.add_colorbar = False #plotitem.amr_celledges_show = [0] #plotitem.amr_data_show = [1,1,0,0] #plotitem.patchedges_show = 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 = [-230, -115] plotaxes.ylimits = [0, 65] #----------------------------------------- # Figure for levels #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Grid patches', figno=10) plotfigure.kwargs = {'figsize': (8, 5)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Grid patches' plotaxes.scaled = True def aa_patches(current_data): import pylab pylab.ticklabel_format(format='plain', useOffset=False) pylab.xticks([180, 200, 220, 240], rotation=20, fontsize=28) pylab.yticks(fontsize=28) t = current_data.t t = t / 3600. # hours pylab.title('Grids patches at %4.2f hours' % t, fontsize=20) a = pylab.gca() a.set_aspect(1. / pylab.cos(41.75 * pylab.pi / 180.)) pylab.grid(True) def fixup(current_data): import pylab addgauges(current_data) t = current_data.t t = t / 3600. # hours pylab.title('Grids patches at %4.2f hours' % t, fontsize=20) pylab.grid(True) # Water plotitem = plotaxes.new_plotitem(plot_type='2d_patch') plotitem.amr_patch_bgcolor = [[1, 1, 1], [0.8, 0.8, 0.8], [0.8, 1, 0.8], [1, .7, .7], [0.6, 0.6, 1]] plotitem.amr_patchedges_color = ['k', 'k', 'g', 'r', 'b'] plotitem.amr_celledges_show = [0] plotitem.amr_patchedges_show = [0, 1, 1, 1, 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 = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [0] plotitem.amr_patchedges_show = [0] plotaxes.afteraxes = fixup plotaxes.xlimits = [-230, -115] plotaxes.ylimits = [0, 65] #----------------------------------------- # Zoom #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Crescent City', figno=1) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.afteraxes = fixup # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = sea_level - 0.1 plotitem.pcolor_cmax = sea_level + 0.1 plotitem.add_colorbar = True #plotitem.colorbar_shrink = 0.5 plotitem.colorbar_shrink = 1.0 plotitem.amr_celledges_show = [0, 0, 0] plotitem.patchedges_show = 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 ######## Limits below encompass Crescent City plotaxes.xlimits = [-127, -123.5] plotaxes.ylimits = [40.5, 44.5] #----------------------------------------- # Zoom2 #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Crescent City Zoomed', figno=2) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.afteraxes = fixup # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = sea_level - 0.1 plotitem.pcolor_cmax = sea_level + 0.1 plotitem.add_colorbar = True #plotitem.colorbar_shrink = 0.5 plotitem.colorbar_shrink = 1.0 plotitem.amr_celledges_show = [0, 0, 0] plotitem.patchedges_show = 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 ######## Limits below encompass Crescent City zoomed area plotaxes.xlimits = [-124.235, -124.143] plotaxes.ylimits = [41.716, 41.783] #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface at gauges', figno=300, \ type='each_gauge') plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [9.5 * 3600, 15 * 3600] plotaxes.ylimits = [-3, 3] plotaxes.title = 'Surface' # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # Plot topo as green curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False def gaugetopo(current_data): q = current_data.q h = q[0, :] eta = q[3, :] topo = eta - h return topo plotitem.plot_var = gaugetopo plotitem.plotstyle = 'g-' def add_zeroline(current_data): from pylab import plot, legend, xticks, floor, axis, xlabel t = current_data.t gaugeno = current_data.gaugeno plot(t, 0 * t, 'k') n = int(floor(t.max() / 3600.) + 2) #xticks([3600*i for i in range(n)], ['%i' % i for i in range(n)]) xticks([3600 * i for i in range(9, n)], ['%i' % i for i in range(9, n)]) xlabel('time (hours)') 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_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=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_range = 5.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, 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 = { "Entire Region": { "xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (13, 10) }, "Caribbean Sub-region": { "xlimits": (-86, -58.0), "ylimits": (9, 28), "figsize": (16, 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 # 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 False plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Entire Region']['xlimits'] plotaxes.ylimits = regions['Entire Region']['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 False plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Entire Region']['xlimits'] plotaxes.ylimits = regions['Entire Region']['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 False plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = regions['Entire Region']['xlimits'] plotaxes.ylimits = regions['Entire Region']['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 = [clawdata.lower[0], clawdata.upper[0]] plotaxes.ylimits = [clawdata.lower[1], clawdata.upper[1]] 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 #----------------------------------------- # Figures for fgmax plots #----------------------------------------- from clawpack.geoclaw import fgmax_tools fgmax_plotdir = '_plots' os.system('mkdir -p %s' % fgmax_plotdir) # Read fgmax data: fgno = 1 while (True): fg = fgmax_tools.FGmaxGrid() try: fg.read_fgmax_grids_data(fgno) fg.read_output(outdir=plotdata.outdir) fg.B0 = fg.B # no seafloor deformation in this problem fg.h_onshore = np.ma.masked_where(fg.B0 < 0., fg.h) plt.figure(figsize=(20, 20)) pc = plt.pcolormesh(fg.X, fg.Y, fg.h_onshore, cmap='hot_r') cb = plt.colorbar(pc, extend='max', shrink=0.7) cb.set_label('meters') plt.contour(fg.X, fg.Y, fg.B, [0], colors='g') plt.gca().set_aspect(1. / np.cos(48 * np.pi / 180.)) plt.ticklabel_format(useOffset=False) plt.xticks(rotation=20) plt.title('Maximum Onshore flow depth\nfgmax grid {fgno}') img_name = f'fgmax{str(fgno).zfill(4)}_h_onshore.png' plt.savefig(fname=f'{fgmax_plotdir}/{img_name}') otherfigure = plotdata.new_otherfigure( name=f'max depth on fgmax grid {fgno}', fname=img_name) fgno = fgno + 1 except: break # ----------------------------------------- # 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 = 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? plotdata.parallel = True # parallel plotting return plotdata
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() from clawpack.visclaw import colormaps, geoplot plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'ascii' # Format of output print('Reading all gauges...') gauge_solutions = particle_tools.read_gauges(gaugenos='all', outdir=plotdata.outdir) gaugenos_lagrangian = [k for k in gauge_solutions.keys() \ if gauge_solutions[k].gtype=='lagrangian'] gaugenos_stationary = [k for k in gauge_solutions.keys() \ if gauge_solutions[k].gtype=='stationary'] print('+++ gaugenos_lagrangian: ', gaugenos_lagrangian) def add_particles(current_data): t = current_data.t # plot recent path: t_path_length = 10. # length of path trailing particle kwargs_plot_path = {'linewidth': 1, 'color': 'k'} particle_tools.plot_paths(gauge_solutions, t1=t - t_path_length, t2=t, gaugenos=gaugenos_lagrangian, kwargs_plot=kwargs_plot_path) # plot current location: kwargs_plot_point = {'marker': 'o', 'markersize': 3, 'color': 'k'} particle_tools.plot_particles(gauge_solutions, t, gaugenos=gaugenos_lagrangian, kwargs_plot=kwargs_plot_point) # plot any stationary gauges: gaugetools.plot_gauge_locations(current_data.plotdata, \ gaugenos=gaugenos_stationary, format_string='kx', add_labels=False) kwargs = {'loc': 'upper left'} legend_tools.add_legend(['Lagrangian particle', 'Stationary gauge'], linestyles=['', ''], markers=['o', 'x'], loc='lower right', framealpha=0.5, fontsize=10) def speed(current_data): from pylab import sqrt, where, zeros from numpy.ma import masked_where, allequal q = current_data.q h = q[0, :, :] hs = sqrt(q[1, :, :]**2 + q[2, :, :]**2) s = where(h > 1e-3, hs / h, 0.) s = masked_where(h < 1e-3, s) s = s * 1.94384 # convert to knots return s speed_cmap = colormaps.make_colormap({ 0: [0, 1, 1], 0.5: [1, 1, 0], 1: [1, 0, 0] }) #----------------------------------------- # Figure for pcolor plot #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='pcolor', figno=0) plotfigure.kwargs = {'figsize': (9, 4)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Speed' plotaxes.scaled = True plotaxes.xlimits = [0, 80] plotaxes.ylimits = [0, 50] plotaxes.afteraxes = add_particles # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface #plotitem.plot_var = geoplot.surface_or_depth plotitem.plot_var = speed #plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmap = speed_cmap plotitem.pcolor_cmin = 0. plotitem.pcolor_cmax = 20 plotitem.add_colorbar = True plotitem.colorbar_label = 'knots' plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [1] plotitem.amr_patchedges_color = ['m', 'g', 'w'] # Land plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.show = False 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] # Add contour lines of topography: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = False plotitem.plot_var = geoplot.topo from numpy import arange, linspace plotitem.contour_levels = arange(-75, 75, 10) #plotitem.contour_nlevels = 10 plotitem.amr_contour_colors = ['g'] # color on each level plotitem.kwargs = {'linestyles': 'solid'} plotitem.amr_contour_show = [1, 1, 1] # show contours only on finest level 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 = 'auto' plotaxes.ylimits = [-100, 100] 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 plotitem.plot_var = gaugetopo plotitem.plotstyle = 'g-' def add_zeroline(current_data): from pylab import plot, legend t = current_data.t legend(('surface', 'topography'), loc='lower left') plot(t, 0 * t, 'k') 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 = range(40) plotdata.print_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once plotdata.html_movie_width = 700 # width used in JSAnimation return plotdata
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps, geoplot from numpy import linspace if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' # 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 timeformat(t): from numpy import mod hours = int(t/3600.) tmin = mod(t,3600.) min = int(tmin/60.) sec = int(mod(tmin,60.)) timestr = '%s:%s:%s' % (hours,str(min).zfill(2),str(sec).zfill(2)) return timestr def title_hours(current_data): from pylab import title t = current_data.t timestr = timeformat(t) title('%s after earthquake' % timestr) #----------------------------------------- # Figure for surface #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) plotfigure.kwargs = {'figsize':(8,5)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Surface' plotaxes.scaled = False # need to set aspect ratio properly for lat/long def aa(current_data): from pylab import ticklabel_format, xticks, gca, cos, pi, savefig gca().set_aspect(1./cos(48*pi/180.)) title_hours(current_data) ticklabel_format(useOffset=False) xticks(rotation=20) plotaxes.afteraxes = aa #plotaxes.xlimits = [-122.7,-122.16] #plotaxes.ylimits = [47.2,48.3] # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = cmin plotitem.pcolor_cmax = cmax plotitem.add_colorbar = True plotitem.colorbar_shrink = 0.8 plotitem.amr_celledges_show = [0] #plotitem.celledges_show = 0 #plotitem.patchedges_show = 0 plotitem.amr_patchedges_show = [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 = cmax_land plotitem.add_colorbar = False plotitem.amr_celledges_show = [0] plotitem.patchedges_show = 0 #----------------------------------------- # Figure for zoom on Eagle Harbor #----------------------------------------- plotfigure = plotdata.new_plotfigure(name="fgmax region", figno=11) #plotfigure.show = False plotfigure.kwargs = {'figsize': (9,6)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.scaled = False plotaxes.xlimits = [-122.55,-122.48] plotaxes.ylimits = [47.61,47.64] if bg_image: plotaxes.beforeaxes = background_image plotaxes.afteraxes = aa # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = cmin plotitem.pcolor_cmax = cmax plotitem.add_colorbar = True plotitem.amr_data_show = [0,0,1] # only show on finest plotitem.amr_celledges_show = [0,0,0] plotitem.patchedges_show = 0 # Land plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.show = False plotitem.plot_var = geoplot.land plotitem.pcolor_cmap = geoplot.land_colors plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = cmax_land plotitem.add_colorbar = False plotitem.amr_celledges_show = [0] plotitem.patchedges_show = 0 # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') #plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = [0] plotitem.amr_contour_colors = ['yellow'] # color on each level plotitem.kwargs = {'linestyles':'solid','linewidths':2} plotitem.amr_contour_show = [0,0,1] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 #----------------------------------------- # Figure for zoom on Bainbridge / Seattle #----------------------------------------- plotfigure = plotdata.new_plotfigure(name="Bainbridge", figno=12) # not needed for this small domain plotfigure.show = False plotfigure.kwargs = {'figsize': (9,6)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.scaled = False plotaxes.xlimits = [-122.65, -122.3] plotaxes.ylimits = [47.5, 47.76] plotaxes.afteraxes = aa # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = cmin plotitem.pcolor_cmax = 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.plot_var = geoplot.land plotitem.pcolor_cmap = geoplot.land_colors plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = cmax_land plotitem.add_colorbar = False plotitem.amr_celledges_show = [0] plotitem.patchedges_show = 0 #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='gauge plot', figno=300, \ type='each_gauge') plotfigure.kwargs = {'figsize': (11,6)} #plotfigure.clf_each_gauge = False # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(2,1,1)' #plotaxes.ylimits = [-1,10] plotaxes.title = 'Flow depth' plotaxes.time_scale = 1./60. plotaxes.time_label = '' def add_ylabel_depth(current_data): from pylab import ylabel, grid ylabel('water depth (m)') grid(True) plotaxes.afteraxes = add_ylabel_depth # Plot depth as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 0 plotitem.plotstyle = 'b-' # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(2,1,2)' #plotaxes.ylimits = [-1,10] plotaxes.title = 'Flow speed (m/s)' plotaxes.time_scale = 1./60. plotaxes.time_label = 'minutes' def add_ylabel_speed(current_data): from pylab import ylabel, tight_layout, grid ylabel('speed (m/s)') grid(True) tight_layout() plotaxes.afteraxes = add_ylabel_speed def speed(current_data): from numpy import sqrt, maximum q = current_data.q h = q[0,:] hu = q[1,:] hv = q[2,:] s = sqrt(hu**2 + hv**2) / maximum(h,0.001) return s # Plot depth as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = speed plotitem.plotstyle = 'b-' #----------------------------------------- # Figures for fgmax plots #----------------------------------------- # Note: need to move fgmax png files into _plots after creating with # python run_process_fgmax.py # This just creates the links to these figures... if 0: otherfigure = plotdata.new_otherfigure(name='max depth', fname='depth.png') otherfigure = plotdata.new_otherfigure(name='max speed', fname='speed.png') #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=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 = [-5.0, 5.0] speed_limits = [0.0, 3.0] wind_limits = [0, 64] pressure_limits = [935, 1013] friction_bounds = [0.01, 0.04] color_limits=[0,50] def friction_after_axes(cd): plt.title(r"Manning's $n$ Coefficient") # ========================================================================== # Plot specifications # ========================================================================== regions = {"Atlantic": {"xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (6.4, 4.8)}, "Atlantic City, NJ": {"xlimits": (-78, -74), "ylimits": (32,36), "figsize": (10.5, 11.5)}, "ChesapeakeBay Shelf": {"xlimits": (-77, -75), "ylimits": (36, 38), "figsize": (5, 6)}, "Manhattan Shelf": {"xlimits": (-75,-73), "ylimits": (38,40), "figsize": (5,6)}, "Sandy Hook, NJ": {"xlimits": (-76,-73), "ylimits": (38,41), "figsize":(5,6)}, "New Haven CT": {"xlimits": (-77,-73), "ylimits": (39,41), "figsize":(5,6)}, "New London CT": {"xlimits": (-74,-70), "ylimits": (39,43), "figsize":(5,6)}, "Boston MA": {"xlimits": (-72,-68), "ylimits": (40,44), "figsize":(5,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 # 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,bounds=color_limits) 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['Atlantic']['xlimits'] plotaxes.ylimits = regions['Atlantic']['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['Atlantic']['xlimits'] plotaxes.ylimits = regions['Atlantic']['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['Atlantic']['xlimits'] plotaxes.ylimits = regions['Atlantic']['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 = [-3, 3] # plotaxes.xlabel = "Days from landfall" # plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [0,1.5] plotaxes.title = 'Surface' #Gauge Data from NOAA try: gauges = [np.loadtxt('gauge_data_1.txt'), np.loadtxt('gauge_data_2.txt'), np.loadtxt('gauge_data3.txt'), np.loadtxt('gauge_data_4.txt'), np.loadtxt('gauge_data_5.txt'), np.loadtxt('gauge_data_6.txt')] #Legend with Gauge Locations data_names = ["Duke Marine Lab, NC Data from NOAA", "Kiptopeke Beach, NC Data from NOAA", "Atlantic City, NJ Data from NOAA", "Sandy Hook, NJ Data from NOAA", "New London, CT Data from NOAA", "Boston, MA Data from NOAA"] except: print("Add gauge files to directory") 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([-3, 3]) axes.set_ylim([0,1.5]) axes.set_xticks([-3, -2, -1, 0, 1, 2, 3]) axes.set_xticklabels([r"$-3$",r"$-2$",r"$-1$", r"$0$", r"$1$", r"$2$", r"$3$"]) axes.grid(True) try: gauge_data=gauges[cd.gaugeno-1] axes.plot(gauge_data[:,0], gauge_data[:,1], label=data_names[cd.gaugeno-1]) axes.legend() except: print('Gauge Data Unavailable') 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 = [-81, -70] plotaxes.ylimits = [33,45] 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, 3, 4, 5, 6] # 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=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of clawpack.visclaw.data.ClawPlotData. Output: a modified version of plotdata. """ if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() from clawpack.visclaw import colormaps plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = "ascii" # Figure for pcolor plot plotfigure = plotdata.new_plotfigure(name='q[0]', figno=0) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'q[0]' plotaxes.scaled = True plotaxes.afteraxes = addgauges # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 0 plotitem.pcolor_cmap = colormaps.red_yellow_blue plotitem.pcolor_cmin = -1. plotitem.pcolor_cmax = 1. plotitem.add_colorbar = True plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem.show = True # show on plot? # Figure for contour plot plotfigure = plotdata.new_plotfigure(name='contour', figno=1) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'q[0]' plotaxes.scaled = True # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = 0 plotitem.contour_levels = np.linspace(-0.9, 0.9, 10) plotitem.amr_contour_colors = ['k', 'b'] plotitem.patchedges_show = 1 plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem.show = True # show on plot? # Figure for grids plotfigure = plotdata.new_plotfigure(name='grids', figno=2) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'grids' plotaxes.scaled = True # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_patch') plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem.amr_celledges_show = [1, 1, 0] plotitem.amr_patchedges_show = [1] #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='q', 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 = 'q' # Plot q as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 0 plotitem.plotstyle = 'b-' # Parameters used only when creating html and/or latex hardcopy # e.g., via clawpack.visclaw.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_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.html_movie = 'JSAnimation' # new style, or "4.x" for old style plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=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): 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=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps, geoplot from numpy import linspace if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' # 'ascii', 'binary', 'netcdf' # 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 timeformat(t): from numpy import mod hours = int(t / 3600.) tmin = mod(t, 3600.) min = int(tmin / 60.) sec = int(mod(tmin, 60.)) timestr = '%s:%s:%s' % (hours, str(min).zfill(2), str(sec).zfill(2)) return timestr def title_hours(current_data): from pylab import title t = current_data.t timestr = timeformat(t) title('Adjoint time %s before time of interest' % timestr) #----------------------------------------- # Figure for surface #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Adjoint' plotaxes.scaled = True plotaxes.afteraxes = title_hours # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.005 plotitem.pcolor_cmax = 0.005 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.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 = [-120, -60] plotaxes.ylimits = [-60, 0] # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = linspace(-3000, -3000, 1) plotitem.amr_contour_colors = ['y'] # color on each level plotitem.kwargs = {'linestyles': 'solid', 'linewidths': 2} plotitem.amr_contour_show = [1, 0, 0] plotitem.celledges_show = 0 plotitem.patchedges_show = 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? plotdata.parallel = True # make multiple frame png's at once 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 = '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 = [-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 = { "Gulf": { "xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (6.4, 4.8) }, "LaTex Shelf": { "xlimits": (-97.5, -88.5), "ylimits": (27.5, 30.5), "figsize": (8, 2.7) } } 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) # ======================================================================== # 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 = [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.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
from pylab import * from clawpack.visclaw.data import ClawPlotData if 0: gdata = loadtxt('gauges.data',skiprows=7) ngauges = gdata.shape[0] print "Found %s gauges" % ngauges xc = gdata[:,1] yc = gdata[:,2] # Load ClawplotData plotdata = ClawPlotData() plotdata.format = 'binary' plotdata.outdir = '_output' def plot_gauges(goffset=0): if goffset == 0: ngauges = 100 # top surface elif goffset == 200: ngauges = 100 # bottom of domain elif goffset == 300: ngauges = 50 # above fault plane elif goffset == 400: ngauges = 50 # below fault plane plot_okada = (goffset==0) figure()
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps, geoplot from numpy import linspace if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' # 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 timeformat(t): from numpy import mod hours = int(t/3600.) tmin = mod(t,3600.) min = int(tmin/60.) sec = int(mod(tmin,60.)) timestr = '%s:%s:%s' % (hours,str(min).zfill(2),str(sec).zfill(2)) return timestr def title_hours(current_data): from pylab import title t = current_data.t timestr = timeformat(t) title('%s after earthquake' % timestr) def discrete_cmap_reds(clines): from numpy import floor, linspace, hstack, ones, zeros nlines = len(clines) Red = ones(nlines) Green = Blue = linspace(1,0,nlines) colors = list(zip(Red,Green,Blue)) return colors #----------------------------------------- # Figure for surface #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) plotfigure.kwargs = {'figsize': (10,6)} #plotfigure.show = False # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.xlimits = [-140,-122] plotaxes.ylimits = [40,50] def fixup(current_data): import pylab #addgauges(current_data) #t = current_data.t #t = t / 3600. # hours #pylab.title('Surface at %4.2f hours' % t, fontsize=20) title_hours(current_data) pylab.xticks(fontsize=10) pylab.yticks(fontsize=10) pylab.xlabel('longitude',fontsize=10) pylab.ylabel('latitude',fontsize=10) plotaxes.afteraxes = fixup # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.2 plotitem.pcolor_cmax = 0.2 plotitem.add_colorbar = True plotitem.colorbar_shrink = 0.7 plotitem.amr_celledges_show = [0,0,0] #plotitem.amr_data_show = [1,1,1,0] plotitem.patchedges_show = 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 #plotitem.amr_data_show = [1,1,1,0] # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = linspace(-2700,-300,9) plotitem.amr_contour_colors = ['k'] # color on each level plotitem.kwargs = {'linestyles':'solid','linewidths':1} plotitem.amr_contour_show = [0,0,0,1,0] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 #----------------------------------------- # Zoom #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='coast', figno=1) plotfigure.kwargs = {'figsize':(10,5)} #plotfigure.show = False def title_hours(current_data): # with increased fontsize from pylab import title t = current_data.t timestr = timeformat(t) title('%s after earthquake' % timestr, fontsize=15) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.afteraxes = fixup plotaxes.xlimits = [-128,-123.5] plotaxes.ylimits = [43.,45] # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.show = False #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.5 plotitem.pcolor_cmax = 0.5 plotitem.add_colorbar = False plotitem.colorbar_shrink = 0.7 plotitem.amr_celledges_show = [0,0,0] plotitem.patchedges_show = 0 plotitem = plotaxes.new_plotitem(plot_type='2d_contour') #plotitem.show = False plotitem.plot_var = geoplot.surface_or_depth plotitem.contour_levels = np.arange(0.025,0.60,0.025) plotitem.amr_contour_colors = ['r'] # color on each level plotitem.kwargs = {'linestyles':'solid','linewidths':1.3} plotitem.amr_contour_show = [0,0,0,1,0] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem = plotaxes.new_plotitem(plot_type='2d_contourf') plotitem.plot_var = geoplot.surface_or_depth plotitem.contour_levels = np.arange(0.025,0.60,0.025) wave_colors = discrete_cmap_reds(plotitem.contour_levels) plotitem.fill_colors = wave_colors plotitem.kwargs = {'extend':'max'} plotitem.amr_contour_show = [0,0,0,1,0] plotitem.celledges_show = 0 plotitem.patchedges_show = 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 = 10000.0 plotitem.add_colorbar = False plotitem.amr_data_show = [0,0,0,1] plotitem.patchedges_show = 0 # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') #plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = linspace(-2700,-300,9) plotitem.amr_contour_colors = ['k'] # color on each level plotitem.kwargs = {'linestyles':'solid','linewidths':1} plotitem.amr_contour_show = [0,0,0,1,0] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface at gauges', figno=300, \ type='each_gauge') plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Surface' # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # Plot topo as green curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False def gaugetopo(current_data): q = current_data.q h = q[0,:] eta = q[3,:] topo = eta - h return topo plotitem.plot_var = gaugetopo plotitem.plotstyle = 'g-' def add_zeroline(current_data): from pylab import plot, legend, xticks, floor, axis, xlabel t = current_data.t gaugeno = current_data.gaugeno plot(t, 0*t, 'k') n = int(floor(t.max()/3600.) + 2) xticks([3600*i for i in range(n)], ['%i' % i for i in range(n)]) xlabel('time (hours)') 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_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=None): # -------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() from clawpack.visclaw import colormaps, geoplot plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = "ascii" # Format of output # plotdata.format = 'netcdf' def set_drytol(current_data): # The drytol parameter is used in masking land and water and # affects what color map is used for cells with small water depth h. # The cell will be plotted as dry if h < drytol. # The best value to use often depends on the application and can # be set here (measured in meters): current_data.user["drytol"] = 1.0e-2 plotdata.beforeframe = set_drytol # 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) # ----------------------------------------- # Figure for pcolor plot # ----------------------------------------- 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 # Water plotitem = plotaxes.new_plotitem(plot_type="2d_pcolor") # plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.9 plotitem.pcolor_cmax = 0.9 plotitem.add_colorbar = True plotitem.amr_celledges_show = [1, 1, 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 = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [1, 1, 0] plotaxes.xlimits = [-100, 100] plotaxes.ylimits = [-100, 100] # ----------------------------------------- # Figure for zoom # ----------------------------------------- plotfigure = plotdata.new_plotfigure(name="Zoom", figno=10) # plotfigure.show = False plotfigure.kwargs = {"figsize": [12, 7]} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes("diag zoom") plotaxes.axescmd = "axes([0.0,0.1,0.6,0.6])" plotaxes.title = "On diagonal" plotaxes.scaled = True plotaxes.xlimits = [55, 66] plotaxes.ylimits = [55, 66] plotaxes.afteraxes = addgauges # Water plotitem = plotaxes.new_plotitem(plot_type="2d_pcolor") # plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.9 plotitem.pcolor_cmax = 0.9 plotitem.add_colorbar = True plotitem.amr_celledges_show = [1, 1, 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 = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [1, 1, 0] # Add contour lines of bathymetry: plotitem = plotaxes.new_plotitem(plot_type="2d_contour") plotitem.plot_var = geoplot.topo from numpy import arange, linspace plotitem.contour_levels = arange(-10.0, 0.0, 1.0) plotitem.amr_contour_colors = ["k"] # color on each level plotitem.kwargs = {"linestyles": "solid"} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # Add contour lines of topography: plotitem = plotaxes.new_plotitem(plot_type="2d_contour") plotitem.plot_var = geoplot.topo from numpy import arange, linspace plotitem.contour_levels = arange(0.0, 11.0, 1.0) plotitem.amr_contour_colors = ["g"] # color on each level plotitem.kwargs = {"linestyles": "solid"} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # Add dashed contour line for shoreline plotitem = plotaxes.new_plotitem(plot_type="2d_contour") plotitem.plot_var = geoplot.topo plotitem.contour_levels = [0.0] plotitem.amr_contour_colors = ["k"] # color on each level plotitem.kwargs = {"linestyles": "dashed"} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # ----------------------------------------- # Figure for zoom near axis # ----------------------------------------- # plotfigure = plotdata.new_plotfigure(name='Zoom2', figno=11) # now included in same figure as zoom on diagonal # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes("x zoom") plotaxes.show = True plotaxes.axescmd = "axes([0.5,0.1,0.6,0.6])" plotaxes.title = "On x-axis" plotaxes.scaled = True plotaxes.xlimits = [82, 93] plotaxes.ylimits = [-5, 6] plotaxes.afteraxes = addgauges # Water plotitem = plotaxes.new_plotitem(plot_type="2d_pcolor") # plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.9 plotitem.pcolor_cmax = 0.9 plotitem.add_colorbar = True plotitem.amr_celledges_show = [1, 1, 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 = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [1, 1, 0] # Add contour lines of bathymetry: plotitem = plotaxes.new_plotitem(plot_type="2d_contour") plotitem.plot_var = geoplot.topo from numpy import arange, linspace plotitem.contour_levels = arange(-10.0, 0.0, 1.0) plotitem.amr_contour_colors = ["k"] # color on each level plotitem.kwargs = {"linestyles": "solid"} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # Add contour lines of topography: plotitem = plotaxes.new_plotitem(plot_type="2d_contour") plotitem.plot_var = geoplot.topo from numpy import arange, linspace plotitem.contour_levels = arange(0.0, 11.0, 1.0) plotitem.amr_contour_colors = ["g"] # color on each level plotitem.kwargs = {"linestyles": "solid"} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # Add dashed contour line for shoreline plotitem = plotaxes.new_plotitem(plot_type="2d_contour") plotitem.plot_var = geoplot.topo plotitem.contour_levels = [0.0] plotitem.amr_contour_colors = ["k"] # color on each level plotitem.kwargs = {"linestyles": "dashed"} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # ----------------------------------------- # 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 = [-2.0, 2.0] 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 plotitem.plot_var = gaugetopo plotitem.plotstyle = "g-" def add_zeroline(current_data): from pylab import plot, legend t = current_data.t legend(("surface", "topography"), loc="lower left") plot(t, 0 * t, "k") plotaxes.afteraxes = add_zeroline # ----------------------------------------- # Figure for patches alone # ----------------------------------------- plotfigure = plotdata.new_plotfigure(name="patches", 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 = "patches" 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 = [1, 1, 0] plotitem.amr_patchedges_show = [1] # ----------------------------------------- # Scatter plot of surface for radially symmetric # ----------------------------------------- plotfigure = plotdata.new_plotfigure(name="Scatter", figno=200) plotfigure.show = False # Note: will not look very good unless more of domain is refined # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0.0, 100.0] plotaxes.ylimits = [-1.5, 2.0] plotaxes.title = "Scatter plot of surface" # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type="1d_from_2d_data") plotitem.plot_var = geoplot.surface def q_vs_radius(current_data): from numpy import sqrt x = current_data.x y = current_data.y r = sqrt(x ** 2 + y ** 2) q = current_data.var return r, q plotitem.map_2d_to_1d = q_vs_radius plotitem.plotstyle = "o" plotitem.amr_color = ["b", "r", "g"] plotaxes.afteraxes = "import pylab; pylab.legend(['Level 1','Level 2'])" # ----------------------------------------- # 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 = [4, 5, 104, 105] # list of gauges to print plotdata.print_fignos = "all" # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = "../README.html" # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps, geoplot from numpy import linspace if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' def timeformat(t): from numpy import mod hours = int(t / 3600.) tmin = mod(t, 3600.) min = int(tmin / 60.) sec = int(mod(tmin, 60.)) timestr = '%s:%s:%s' % (hours, str(min).zfill(2), str(sec).zfill(2)) return timestr def title_hours(current_data): from pylab import title t = current_data.t timestr = timeformat(t) title('%s after earthquake' % timestr) #----------------------------------------- # Figure for surface #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Computational domain', figno=0) plotfigure.kwargs = {'figsize': (8, 7)} plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True def aa(current_data): from pylab import ticklabel_format, xticks, gca, cos, pi, savefig gca().set_aspect(1.) title_hours(current_data) ticklabel_format(useOffset=False) xticks(rotation=20) plotaxes.afteraxes = aa # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = cmin plotitem.pcolor_cmax = cmax plotitem.add_colorbar = True plotitem.colorbar_shrink = 0.7 plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_patchedges_show = [0, 0, 0, 0] plotitem.amr_data_show = [1, 1, 1, 1, 1, 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 = cmax_land plotitem.add_colorbar = False plotitem.amr_celledges_show = [0] plotitem.amr_patchedges_show = [0, 0, 0, 0] plotitem.amr_data_show = [1, 1, 1, 1, 1, 0, 0] # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = linspace(-3000, -3000, 1) plotitem.amr_contour_colors = ['y'] # color on each level plotitem.kwargs = {'linestyles': 'solid', 'linewidths': 2} plotitem.amr_contour_show = [1, 0, 0] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 #----------------------------------------- # Figure for coastal area #----------------------------------------- x1, x2, y1, y2 = [-0.005, 0.016, -0.01, 0.01] plotfigure = plotdata.new_plotfigure(name="coastal area", figno=11) plotfigure.show = True plotfigure.kwargs = {'figsize': (6, 7)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.scaled = False plotaxes.xlimits = [x1, x2] plotaxes.ylimits = [y1, y2] def aa_withbox(current_data): from pylab import plot x1, x2, y1, y2 = (-0.009259, 0.013796, -0.005093, 0.005000) if current_data.t > 5 * 60.: plot([x1, x1, x2, x2, x1], [y1, y2, y2, y1, y1], 'w--') aa(current_data) plotaxes.afteraxes = aa_withbox # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = geoplot.surface #plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = cmin plotitem.pcolor_cmax = cmax plotitem.add_colorbar = True plotitem.colorbar_shrink = 0.4 plotitem.amr_celledges_show = [0, 0, 0] plotitem.patchedges_show = 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 = cmax_land plotitem.add_colorbar = False plotitem.amr_celledges_show = [0] plotitem.patchedges_show = 0 # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') #plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = [-2, -1, 0, 1, 2] plotitem.amr_contour_colors = ['yellow'] # color on each level plotitem.kwargs = {'linestyles': 'solid', 'linewidths': 1} plotitem.amr_contour_show = [0, 0, 1, 0] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 # Plots of timing (CPU and wall time): def make_timing_plots(plotdata): import os from clawpack.visclaw import plot_timing_stats try: timing_plotdir = plotdata.plotdir + '/_timing_figures' os.system('mkdir -p %s' % timing_plotdir) units = { 'comptime': 'minutes', 'simtime': 'minutes', 'cell': 'millions' } plot_timing_stats.make_plots(outdir=plotdata.outdir, make_pngs=True, plotdir=timing_plotdir, units=units) os.system('cp %s/timing.* %s' % (plotdata.outdir, timing_plotdir)) except: print('*** Error making timing plots') otherfigure = plotdata.new_otherfigure(name='timing', fname='_timing_figures/timing.html') otherfigure.makefig = make_timing_plots #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps, geoplot from numpy import linspace if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'ascii' # 'ascii', 'binary', 'netcdf' # 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) # To add title with time format hours:minutes:seconds... def title_hours(current_data): from pylab import title, mod t = current_data.t hours = int(t / 3600.) tmin = mod(t, 3600.) min = int(tmin / 60.) tsec = mod(tmin, 60.) sec = int(mod(tmin, 60.)) timestr = '%s:%s:%s' % (hours, str(min).zfill(2), str(sec).zfill(2)) title('%s after earthquake' % timestr) #----------------------------------------- # Figure for surface #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) plotfigure.kwargs = {'figsize': (12, 6)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.axescmd = 'subplot(121)' plotaxes.title = 'Surface' plotaxes.scaled = True def fixup(current_data): addgauges(current_data) title_hours(current_data) plotaxes.afteraxes = fixup # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.2 plotitem.pcolor_cmax = 0.2 plotitem.add_colorbar = False plotitem.amr_celledges_show = [0, 0, 0] plotitem.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 = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [0, 0, 0] plotitem.patchedges_show = 0 plotaxes.xlimits = [-120, -60] plotaxes.ylimits = [-60, 0] # add contour lines of bathy if desired: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.contour_levels = linspace(-3000, -3000, 1) plotitem.amr_contour_colors = ['y'] # color on each level plotitem.kwargs = {'linestyles': 'solid', 'linewidths': 2} plotitem.amr_contour_show = [1, 0, 0] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 #----------------------------------------- # Figure for adjoint flagging #----------------------------------------- # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('adjoint') plotaxes.axescmd = 'subplot(122)' plotaxes.scaled = True plotaxes.title = 'Adjoint flag' def fixup(current_data): addgauges(current_data) plotaxes.afteraxes = fixup def masked_inner_product(current_data): from numpy import ma aux = current_data.aux tol = 1e-15 soln = ma.masked_where(aux[3, :, :] < tol, aux[3, :, :]) return soln plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = masked_inner_product plotitem.pcolor_cmap = colormaps.white_red plotitem.pcolor_cmin = 0.0 plotitem.pcolor_cmax = 0.005 #plotitem.pcolor_cmax = 0.00001 # use for adjoint-error flagging plotitem.add_colorbar = False # doesn't work when adjoint all masked plotitem.colorbar_shrink = 0.75 plotitem.amr_celledges_show = [0, 0, 0] plotitem.amr_data_show = [1, 1, 0] # inner product not computed on finest level plotitem.patchedges_show = 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 = [-120, -60] plotaxes.ylimits = [-60, 0] #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface at gauges', figno=300, \ type='each_gauge') plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Surface' # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # Plot topo as green curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False def gaugetopo(current_data): q = current_data.q h = q[0, :] eta = q[3, :] topo = eta - h return topo plotitem.plot_var = gaugetopo plotitem.plotstyle = 'g-' def add_zeroline(current_data): from pylab import plot, legend, xticks, floor, axis, xlabel t = current_data.t gaugeno = current_data.gaugeno if gaugeno == 32412: try: plot(TG32412[:, 0], TG32412[:, 1], 'r') legend(['GeoClaw', 'Obs'], loc='lower right') except: pass axis((0, t.max(), -0.3, 0.3)) plot(t, 0 * t, 'k') n = int(floor(t.max() / 3600.) + 2) xticks([3600 * i for i in range(n)], ['%i' % i for i in range(n)]) xlabel('time (hours)') 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_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() from clawpack.visclaw import colormaps, geoplot plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'ascii' # Format of output # plotdata.format = 'netcdf' def set_drytol(current_data): # The drytol parameter is used in masking land and water and # affects what color map is used for cells with small water depth h. # The cell will be plotted as dry if h < drytol. # The best value to use often depends on the application and can # be set here (measured in meters): current_data.user['drytol'] = 1.e-2 plotdata.beforeframe = set_drytol # 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) #----------------------------------------- # Figure for pcolor plot #----------------------------------------- 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 # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = colormaps.make_colormap({ 1.0: 'r', 0.5: 'w', 0.0: 'b' }) plotitem.pcolor_cmin = -0.3 plotitem.pcolor_cmax = 0.3 plotitem.add_colorbar = True # 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 = 2.0 plotitem.add_colorbar = False plotaxes.xlimits = [-1, 1] plotaxes.ylimits = [-1, 1] #----------------------------------------- # 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 = [4, 5, 104, 105] # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
from pylab import * from clawpack.visclaw.data import ClawPlotData if 0: gdata = loadtxt('gauges.data', skiprows=7) ngauges = gdata.shape[0] print "Found %s gauges" % ngauges xc = gdata[:, 1] yc = gdata[:, 2] # Load ClawplotData plotdata = ClawPlotData() plotdata.format = 'binary' plotdata.outdir = '_output' def plot_gauges(goffset=0): if goffset == 0: ngauges = 100 # top surface elif goffset == 200: ngauges = 100 # bottom of domain elif goffset == 300: ngauges = 50 # above fault plane elif goffset == 400: ngauges = 50 # below fault plane plot_okada = (goffset == 0) figure() #for t in linspace(0.,120,7):
def plot_all(values_to_plot,nb_test,nb_frames,format='ascii',msgfile='',**kargs): # ============================ # = Create Initial Condition = # ============================ # Construct output and plot directory paths name = 'multilayer/dry_state_rarefaction_test' prefix = 'ml_e%s_m%s_fix_m%s_vel' % (2, 500, values_to_plot[0]) prefix = "".join((prefix, "F")) outdir,plotdir,log_path = runclaw.create_output_paths(name, prefix, **kargs) script_dir = os.path.dirname(__file__) plots_dir = os.path.join(script_dir, 'All_plots/') if not os.path.isdir(plots_dir): os.makedirs(plots_dir) # Set physics data global g g=Solution(0, path=outdir,read_aux=True).state.problem_data['g'] global manning manning=Solution(0, path=outdir,read_aux=True).state.problem_data['manning'] global rho_air rho_air=Solution(0, path=outdir,read_aux=True).state.problem_data['rho_air'] global rho rho=Solution(0, path=outdir,read_aux=True).state.problem_data['rho'] global r r=Solution(0, path=outdir,read_aux=True).state.problem_data['r'] global one_minus_r one_minus_r=Solution(0, path=outdir,read_aux=True).state.problem_data['one_minus_r'] global num_layers num_layers=Solution(0, path=outdir,read_aux=True).state.problem_data['num_layers'] global b b = Solution(0, path=outdir,read_aux=True).state.aux[bathy_index,:] # Set method parameters, this ensures it gets to the Fortran routines eigen_method=Solution(0, path=outdir,read_aux=True).state.problem_data['eigen_method'] dry_tolerance=Solution(0, path=outdir,read_aux=True).state.problem_data['dry_tolerance'] inundation_method=Solution(0, path=outdir,read_aux=True).state.problem_data['inundation_method'] entropy_fix=Solution(0, path=outdir,read_aux=True).state.problem_data['entropy_fix'] #num_cells=Solution(0,path=outdir,read_aux=True).state.problem_data['num_cells'] #does not work num_cells=500 plt.clf() # Load bathymetery #b = Solution(0, path=outdir,read_aux=True).state.aux[bathy_index,:] # Load gravitation #g = Solution(0, path=outdir,read_aux=True).state.problem_data['g'] # Load one minus r #one_minus_r=Solution(0, path=outdir,read_aux=True).state.problem_data['one_minus_r'] xlimits=[] for t in range(nb_frames): #Depths plotdata=ClawPlotData() plotfigure_depths = plotdata.new_plotfigure(name='Depths') plotfigure_depths.show=True plotaxes_depths = plotfigure_depths.new_plotaxes() plotaxes_depths.title = "Depths" plotaxes_depths.xlimits = xlimits plotaxes_depths.ylimits = 'auto' # fig2 = plt.figure(num=2) # plt.xlabel('x(m)') # plt.ylabel('Depths') # plt.title('Solution at t = %3.5f' % t) # plt.ylim(-1.1, 0.1) #Entropy fig7 = plt.figure(num=2) plt.xlabel('x(m)') plt.ylabel('Entropy') plt.title('Entropy as t = %3.5f' % t) #Composite Froude number fig12 = plt.figure(num=12) plt.xlabel('x(m)') plt.ylabel('Composite Froude number') plt.title('Composite Froude number at t = %3.5f' % t) plotdata.outdir = outdir plotdata.plotdir = plots_dir print(plotdir) Solutions_=[] x = [k/1000 for k in range(0,1000,2)] print('Plot the figures at frame %s' % t) for i in range(nb_test): # Construct output and plot directory paths name = 'multilayer/dry_state_rarefaction_test' prefix = 'ml_e%s_m%s_fix_m%s_vel' % (eigen_method, num_cells, values_to_plot[i]) if entropy_fix: prefix = "".join((prefix, "T")) else: prefix = "".join((prefix, "F")) outdir,plotdir,log_path = runclaw.create_output_paths(name, prefix, **kargs) #exec("cd_"+str(i)+"='"Solution(t,path=outdir,read_aux=True)+"'") cd = Solution(t,path=outdir,read_aux=True) Solutions_ += [Solution(t,path=outdir,read_aux=True)] #=====Plotting===== plot_color='g' plot_style='-' if values_to_plot[i] >= 3.9 : if values_to_plot[i] >= 8.0 : plot_color = 'r' plot_style = ':' else : plot_color = 'b' plot_style = '-.' #depth #plotdata.setplot = setplot plotdata.format = format plotdata.msgfile = msgfile plotitem_depths = plotaxes_depths.new_plotitem(plot_type='1d') plotitem_depths.plot_var = eta_1 plotitem_depths.plotstyle='k' plotitem_depths.color=plot_color plotitem_depths.show=True # plt.figure(num=2) # plt.plot(bathy(cd),'k') # plt.plot(eta_1(cd),'k',color=plot_color,linestyle=plot_style) # plt.plot(eta_2(cd),'k',color=plot_color,linestyle=plot_style) # depthname = 'frame00%sfig1002.png' % t # plt.savefig(plots_dir + depthname) #plt.close() #Entropy # plt.figure(num=7) # plt.plot(entropy(cd),'k',color=plot_color,linestyle=plot_style) # entropyname = 'frame00%sfig1007.png' % t # plt.savefig(plots_dir + entropyname) # # #Composite Froude number # plt.figure(num=12) # plt.plot(composite_Froude_nb(cd),'k',color=plot_color,linestyle=plot_style) # froudename = 'frame00%sfig1012.png' % ( t ) # plt.savefig(plots_dir + froudename) #plt.close() plt.close('all')
def plotclaw(outdir='.', plotdir='_plots', setplot='setplot.py', format='ascii', msgfile='', frames=None, verbose=False): """ Create html and/or latex versions of plots. INPUT: setplot is a module containing a function setplot that will be called to set various plotting parameters. format specifies the format of the files output from Clawpack """ from clawpack.visclaw.data import ClawPlotData from clawpack.visclaw import plotpages plotdata = ClawPlotData() plotdata.outdir = outdir plotdata.plotdir = plotdir plotdata.setplot = setplot plotdata.format = format plotdata.msgfile = msgfile frametools.call_setplot(plotdata.setplot, plotdata) if plotdata.num_procs is None: plotdata.num_procs = int(os.environ.get("OMP_NUM_THREADS", 1)) # Make sure plotdata.parallel is False in some cases: if plotdata.parallel: assert type(setplot) in [str, bool, type(None)], \ "*** Parallel plotting is not supported when ClawPlotData " \ + "attribute setplot is a function." if plotdata.parallel and (plotdata.num_procs > 1): # If this is the original call then we need to split up the work and # call this function again # First set up plotdir: plotdata._parallel_todo = 'initialize' plotpages.plotclaw_driver(plotdata, verbose=False, format=format) if frames is None: if plotdata.num_procs is None: plotdata.num_procs = int(os.environ.get("OMP_NUM_THREADS", 1)) frames = [[] for n in range(plotdata.num_procs)] framenos = frametools.only_most_recent(plotdata.print_framenos, outdir) # don't use more procs than frames or infinite loop!! num_procs = min(plotdata.num_procs, len(framenos)) for (n, frame) in enumerate(framenos): frames[n % num_procs].append(frame) # Create subprocesses to work on each plotclaw_cmd = "python %s" % __file__ process_queue = [] for n in range(num_procs): plot_cmd = "%s %s %s %s" % (plotclaw_cmd, outdir, plotdir, setplot) plot_cmd = plot_cmd + " " + " ".join( [str(i) for i in frames[n]]) process_queue.append(subprocess.Popen(plot_cmd, shell=True)) poll_interval = 5 try: while len(process_queue) > 0: time.sleep(poll_interval) for process in process_queue: if process.poll() is not None: process_queue.remove(process) if verbose: print("Number of processes currently:", len(process_queue)) # Stop child processes if interrupt was caught or something went # wrong except KeyboardInterrupt: print("ABORTING: A keyboard interrupt was caught. All " + \ "child processes will be terminated as well.") for process in process_queue: process.terminate() raise except: print("ERROR: An error occurred while waiting for " + \ "plotting processes to complete. Aborting all " + \ "child processes.") for process in process_queue: process.terminate() raise # After all frames have been plotted via recursive calls, # make index and gauge plots only: plotdata._parallel_todo = 'finalize' plotpages.plotclaw_driver(plotdata, verbose=False, format=format) else: # make frame plots only: plotdata._parallel_todo = 'frames' plotdata.print_framenos = frames plotpages.plotclaw_driver(plotdata, verbose=False, format=format) else: # not in parallel: plotdata._parallel_todo = None plotpages.plotclaw_driver(plotdata, verbose=False, format=format)
def plotclaw(outdir='.', plotdir='_plots', setplot = 'setplot.py', format='ascii', msgfile='', frames=None, verbose=False): """ Create html and/or latex versions of plots. INPUT: setplot is a module containing a function setplot that will be called to set various plotting parameters. format specifies the format of the files output from Clawpack """ from clawpack.visclaw.data import ClawPlotData from clawpack.visclaw import plotpages plotdata = ClawPlotData() plotdata.outdir = outdir plotdata.plotdir = plotdir plotdata.setplot = setplot plotdata.format = format plotdata.msgfile = msgfile frametools.call_setplot(plotdata.setplot, plotdata) if plotdata.num_procs is None: plotdata.num_procs = int(os.environ.get("OMP_NUM_THREADS", 1)) # Make sure plotdata.parallel is False in some cases: if plotdata.parallel: assert type(setplot) in [str, bool, type(None)], \ "*** Parallel plotting is not supported when ClawPlotData " \ + "attribute setplot is a function." if plotdata.parallel and (plotdata.num_procs > 1): # If this is the original call then we need to split up the work and # call this function again # First set up plotdir: plotdata._parallel_todo = 'initialize' plotpages.plotclaw_driver(plotdata, verbose=False, format=format) if frames is None: if plotdata.num_procs is None: plotdata.num_procs = int(os.environ.get("OMP_NUM_THREADS", 1)) frames = [[] for n in xrange(plotdata.num_procs)] framenos = frametools.only_most_recent(plotdata.print_framenos, outdir) # don't use more procs than frames or infinite loop!! num_procs = min(plotdata.num_procs, len(framenos)) for (n, frame) in enumerate(framenos): frames[n%num_procs].append(frame) # Create subprocesses to work on each plotclaw_cmd = "python %s" % __file__ process_queue = [] for n in xrange(num_procs): plot_cmd = "%s %s %s %s" % (plotclaw_cmd, outdir, plotdir, setplot) plot_cmd = plot_cmd + " " + " ".join([str(i) for i in frames[n]]) process_queue.append(subprocess.Popen(plot_cmd, shell=True)) poll_interval = 5 try: while len(process_queue) > 0: time.sleep(poll_interval) for process in process_queue: if process.poll() is not None: process_queue.remove(process) if verbose: print "Number of processes currently:",len(process_queue) # Stop child processes if interrupt was caught or something went # wrong except KeyboardInterrupt: print "ABORTING: A keyboard interrupt was caught. All " + \ "child processes will be terminated as well." for process in process_queue: process.terminate() raise except: print "ERROR: An error occurred while waiting for " + \ "plotting processes to complete. Aborting all " + \ "child processes." for process in process_queue: process.terminate() raise # After all frames have been plotted via recursive calls, # make index and gauge plots only: plotdata._parallel_todo = 'finalize' plotpages.plotclaw_driver(plotdata, verbose=False, format=format) else: # make frame plots only: plotdata._parallel_todo = 'frames' plotdata.print_framenos = frames plotpages.plotclaw_driver(plotdata, verbose=False, format=format) else: # not in parallel: plotdata._parallel_todo = None plotpages.plotclaw_driver(plotdata, verbose=False, format=format)
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')) # Calculate landfall time # Landfall for Ike in Houston was September 13th, at 7 UTC landfall_dt = datetime.datetime(2008, 9, 13, 7) - \ datetime.datetime(2008, 1, 1, 0) landfall = landfall_dt.days * 24.0 * 60**2 + landfall_dt.seconds # Set afteraxes function def surge_afteraxes(cd): surgeplot.surge_afteraxes(cd, track, landfall, 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 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 = {"Gulf": {"xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (6.4, 4.8)}, "LaTex Shelf": {"xlimits": (-97.5, -88.5), "ylimits": (27.5, 30.5), "figsize": (8, 2.7)}} for (name, region_dict) in regions.iteritems(): # 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) # ======================================================================== # 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, landfall=landfall) # 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 = [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.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=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": 5}) # Color limits surface_limits = [-5.0, 5.0] speed_limits = [0.0, 3.0] wind_limits = [0, 100] 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 = { "Atlantic": { "xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (6.4, 4.8) }, "United Kingdom": { "xlimits": (-10.5, 0), "ylimits": (51.5, 60.0), "figsize": (8, 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 # 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['Atlantic']['xlimits'] plotaxes.ylimits = regions['Atlantic']['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['Atlantic']['xlimits'] plotaxes.ylimits = regions['Atlantic']['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['Atlantic']['xlimits'] plotaxes.ylimits = regions['Atlantic']['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, 2] # plotaxes.xlabel = "Days from landfall" # plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [-.25, .75] plotaxes.title = 'Surface' # -------- Failed attempt at comparing data on Clawpack ---------- #def get_actual_water_levels(gaugeno): # heights = open("surge_"+str(gaugeno)+".txt", "r") # surge = [] # for height in heights: # line = height.strip() # line = line.split(",") # line = float(line[0]) # surge.append(line) # # t = np.arange(-172800, 172800, 3600, dtype='float') # # return t, surge def gauge_afteraxes(cd): axes = plt.gca() surgeplot.plot_landfall_gauge(cd.gaugesoln, axes) #t, surge = get_actual_water_levels(cd.gaugeno) #axes.plot(t, surge, color="g", label="Observed") # 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, 2]) axes.set_ylim([-.25, .75]) axes.set_xticks([-2, -1, 0, 1, 2]) axes.set_xticklabels([r"$-2$", r"$-1$", r"$0$", r"$1$", r"$2$"]) 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 # # --------- For only one plot for location of all four gauges, uncomment ------- # 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 = [-7.0, -4.8] # plotaxes.ylimits = [55.0, 58.2] # 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 # individual gauge plots def gauge_1_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=[1], format_string='ko', add_labels=True) def gauge_2_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=[2], format_string='ko', add_labels=True) def gauge_3_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=[3], format_string='ko', add_labels=True) def gauge_4_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=[4], format_string='ko', add_labels=True) plotfigure = plotdata.new_plotfigure(name="Gauge 1") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 1' plotaxes.scaled = True plotaxes.xlimits = [-7.0, -6.0] plotaxes.ylimits = [55.0, 56.0] plotaxes.afteraxes = gauge_1_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 plotfigure = plotdata.new_plotfigure(name="Gauge 2") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 2' plotaxes.scaled = True plotaxes.xlimits = [-6.5, -5.5] plotaxes.ylimits = [56.0, 57.0] plotaxes.afteraxes = gauge_2_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 plotfigure = plotdata.new_plotfigure(name="Gauge 3") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 3' plotaxes.scaled = True plotaxes.xlimits = [-6.0, -5.0] plotaxes.ylimits = [57.5, 58.5] plotaxes.afteraxes = gauge_3_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 plotfigure = plotdata.new_plotfigure(name="Gauge 4") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 4' plotaxes.scaled = True plotaxes.xlimits = [-6.0, -5.0] plotaxes.ylimits = [58.0, 59.0] plotaxes.afteraxes = gauge_4_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, 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.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=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] color_limits = [0, 20] def friction_after_axes(cd): plt.title(r"Manning's $n$ Coefficient") # ========================================================================== # Plot specifications # ========================================================================== regions = {"Atlantic": {"xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (6.4, 4.8)}, "Bahamas": {"xlimits": (-81, -75), "ylimits": (23.0, 26.0), "figsize": (8, 4)}, "Haiti": {"xlimits": (-73, -71), "ylimits": (18.0, 20.0), "figsize": (4, 4)}, "Cuba": {"xlimits": (-80, -75), "ylimits": (15.0, 25.0), "figsize": (4 ,8)}, "Florida": {"xlimits": (-82, -79), "ylimits": (23.0, 26.0), "figsize": (4 ,4)}} 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['Atlantic']['xlimits'] plotaxes.ylimits = regions['Atlantic']['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['Atlantic']['xlimits'] plotaxes.ylimits = regions['Atlantic']['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['Atlantic']['xlimits'] plotaxes.ylimits = regions['Atlantic']['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 = [-3, 5] # plotaxes.xlabel = "Days from landfall" # plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [-2, 3] plotaxes.title = 'Surface' try: # comparison water level files gauges = [np.loadtxt('gauge_data_1.txt'), np.loadtxt('gauge_data_2.txt'), np.loadtxt('gauge_data_3.txt'), np.loadtxt('gauge_data_4.txt')] # origin of comparison data (for legend) data_names = ["Difference in Water level of Virginia Key, Biscanay Bay, Florida from NOAA", "Difference in Water level of Key West, Florida from NOAA", "Difference in Water level of Mona Island, Puerto Rico from NOAA", "Difference in Water level of Magueyes Island, Puerto Rico from NOAA", "Flood Height of Rum Cay, the Bahamas from local newspaper, Bahamas Press", "Flood Height of Cat Island, the Bahamas from local newspaper, The Tribune"] except: pass def gauge_afteraxes(cd): axes = plt.gca() surgeplot.plot_landfall_gauge(cd.gaugesoln, axes) # Fix up plot - in particular fix time labels # axes.legend() axes.set_title('Station %s' % cd.gaugeno) axes.set_xlabel('Days relative to landfall') axes.set_ylabel('Surface (m)') axes.set_xlim([-3, 5]) axes.set_ylim([-2, 3]) axes.set_xticks([-3, -2, -1, 0, 1, 2, 3, 4, 5]) axes.set_xticklabels([r"$-3$", r"$-2$", r"$-1$", r"$0$", r"$1$", r"$2$", r"$3$", r"$4$", r"$5$"]) axes.grid(True) try: # gauge 5 and 6 are in the Bahamas, and there's no water level data, # comparison data is estimate flood heights from newspapers if(cd.gaugeno == 5 or cd.gaugeno == 6): if(cd.gaugeno == 5): axes.axhline(y=4*0.3040, color = 'r', label = data_names[4]) # flood height was 4 feet else: axes.axhline(y=5*0.3040, color = 'r', label = data_names[5]) # flood height was 5 feet # the rest have NOAA water level files else: # read water level data gauge_data = gauges[cd.gaugeno - 1] axes.plot(gauge_data[:, 1], gauge_data[:, 0], label = data_names[cd.gaugeno - 1]) axes.legend() except: pass 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 = [-82, -64] plotaxes.ylimits = [16.0, 27.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 = [1, 2, 3, 4, 5, 6] # 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=None): #-------------------------- 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, 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: surgeplot.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 surgeplot.add_surface_elevation(plotaxes, plot_type='contourf', contours=surface_contours, shrink=gulf_shrink) surgeplot.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 surgeplot.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 surgeplot.add_land(plotaxes) surgeplot.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 surgeplot.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 surgeplot.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') surgeplot.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 surgeplot.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') surgeplot.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 surgeplot.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) surgeplot.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 surgeplot.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) surgeplot.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 surgeplot.add_pressure(plotaxes, bounds=pressure_limits, shrink=gulf_shrink) surgeplot.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 surgeplot.add_wind(plotaxes, bounds=wind_limits, plot_type='pcolor', shrink=gulf_shrink) surgeplot.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) surgeplot.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 surgeplot.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) surgeplot.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 = surgeplot.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] surgeplot.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 = surgeplot.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] surgeplot.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 = surgeplot.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] surgeplot.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 = surgeplot.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] surgeplot.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? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps, geoplot from numpy import linspace if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' # 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 title_hours(current_data): from pylab import title, mod t = current_data.t hours = int(t/3600.) tmin = mod(t,3600.) min = int(tmin/60.) tsec = mod(tmin,60.) sec = int(mod(tmin,60.)) if t < 120: timestr = '%s seconds' % t else: timestr = '%s:%s:%s' % (hours,str(min).zfill(2),str(sec).zfill(2)) title('%s after earthquake' % timestr) #----------------------------------------- # Figure for surface #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) plotfigure.kwargs = {'figsize':(8,5)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True def fixup(current_data): import pylab addgauges(current_data) t = current_data.t t = t / 3600. # hours pylab.title('Surface at %4.2f hours' % t, fontsize=20) pylab.grid(True) plotaxes.afteraxes = fixup # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = colormaps.red_white_blue #geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.03 plotitem.pcolor_cmax = 0.03 plotitem.add_colorbar = False plotitem.colorbar_shrink = 0.5 plotitem.amr_celledges_show = [0,0,0] plotitem.patchedges_show = 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 = [-240,-66] plotaxes.ylimits = [-47,65] #----------------------------------------- # Figure for adjoint #----------------------------------------- # Set up for axes in this figure: plotfigure = plotdata.new_plotfigure(name='Adjoint ', figno=20) plotfigure.kwargs = {'figsize': (8,5)} plotaxes = plotfigure.new_plotaxes('adjoint') plotaxes.scaled = True plotaxes.title = 'Adjoint flag' def fixup(current_data): addgauges(current_data) plotaxes.afteraxes = fixup adj_flag_tol = 0.000001 def masked_inner_product(current_data): from numpy import ma q = current_data.q soln = ma.masked_where(q[4,:,:] < adj_flag_tol, q[4,:,:]) return soln def masked_regions(current_data): from numpy import ma q = current_data.q soln = ma.masked_where(q[4,:,:] < 1e9, q[4,:,:]) return soln plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 4 #masked_inner_product plotitem.pcolor_cmap = colormaps.white_red plotitem.pcolor_cmin = adj_flag_tol plotitem.pcolor_cmax = 100*adj_flag_tol plotitem.add_colorbar = False plotitem.amr_celledges_show = [0] plotitem.amr_data_show = [1,1,0,0,0,0,0,0,0] plotitem.patchedges_show = 0 #plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = masked_regions #plotitem.pcolor_cmap = colormaps.white_blue #plotitem.pcolor_cmin = 9e9 #plotitem.pcolor_cmax = 1.1e10 #plotitem.add_colorbar = False #plotitem.amr_celledges_show = [0] #plotitem.amr_data_show = [1,1,0,0] #plotitem.patchedges_show = 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 = [-240,-66] plotaxes.ylimits = [-47,65] #----------------------------------------- # Figure for levels #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Grid patches', figno=10) plotfigure.kwargs = {'figsize': (8,5)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Grid patches' plotaxes.scaled = True def aa_patches(current_data): from pylab import ticklabel_format, xticks, gca, cos, pi, yticks ticklabel_format(format='plain',useOffset=False) xticks([180, 200, 220, 240], rotation=20, fontsize = 28) yticks(fontsize = 28) a = gca() a.set_aspect(1./cos(41.75*pi/180.)) def fixup(current_data): import pylab addgauges(current_data) t = current_data.t t = t / 3600. # hours pylab.title('Grid patches at %4.2f hours' % t, fontsize=20) pylab.grid(True) plotaxes.afteraxes = fixup # Water plotitem = plotaxes.new_plotitem(plot_type='2d_patch') plotitem.amr_patch_bgcolor = [[1,1,1], [0.8,0.8,0.8], [0.8,1,0.8], [1,.7,.7],[0.6,0.6,1]] plotitem.amr_patchedges_color = ['k','k','g','r','b'] plotitem.amr_celledges_show = [0] plotitem.amr_patchedges_show = [0,1,1,1,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 = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [0] plotitem.amr_patchedges_show = [0] plotaxes.xlimits = [-240,-66] plotaxes.ylimits = [-47,65] #----------------------------------------- # Zoom #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Crescent City Agrid', figno=1) #plotfigure.show = False plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.afteraxes = fixup # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.1 plotitem.pcolor_cmax = 0.1 plotitem.add_colorbar = True plotitem.colorbar_shrink = 0.5 plotitem.amr_celledges_show = [0,0,0] plotitem.patchedges_show = 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 = [-161.,-154.0333] #plotaxes.ylimits = [18.0317,22.9983] plotaxes.xlimits = [-126.995,-123.535] plotaxes.ylimits = [40.515,44.495] #----------------------------------------- # Zoom2 #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Crescent City Zoom', figno=2) #plotfigure.show = False plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('pcolor') plotaxes.title = 'Surface' plotaxes.scaled = True plotaxes.afteraxes = fixup # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.1 plotitem.pcolor_cmax = 0.1 plotitem.add_colorbar = True plotitem.colorbar_shrink = 0.5 plotitem.amr_celledges_show = [0,0,0] plotitem.patchedges_show = 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 = [-124.2345,-124.1434] plotaxes.ylimits = [41.7168,41.7829] #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface at gauges', figno=300, \ type='each_gauge') plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Surface' # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # Plot topo as green curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False def gaugetopo(current_data): q = current_data.q h = q[0,:] eta = q[3,:] topo = eta - h return topo plotitem.plot_var = gaugetopo plotitem.plotstyle = 'g-' def add_zeroline(current_data): from pylab import plot, legend, xticks, floor, axis, xlabel, \ xlim, ylim t = current_data.t gaugeno = current_data.gaugeno plot(t, 0*t, 'k') n = int(floor(t.max()/3600.) + 2) xticks([3600*i for i in range(n)], ['%i' % i for i in range(n)]) xlabel('time (hours)') xlim(14.5*3600,26.0*3600) ylim(-1.5,1.5) 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_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of clawpack.visclaw.data.ClawPlotData. Output: a modified version of plotdata. """ if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'binary' # 'ascii', 'binary', 'netcdf' def draw_interface_add_legend(current_data): from pylab import plot plot([0., 0.], [-1000., 1000.], 'k--') try: from clawpack.visclaw import legend_tools labels = ['Level 1','Level 2', 'Level 3'] legend_tools.add_legend(labels, colors=['g','b','r'], markers=['^','s','o'], linestyles=['','',''], loc='upper left') except: pass # Figure for q[0] plotfigure = plotdata.new_plotfigure(name='Adjoint and Velocity', figno=1) plotfigure.kwargs = {'figsize': (8,8)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(2,1,1)' # top figure plotaxes.xlimits = 'auto' plotaxes.ylimits = [-.5,1.1] plotaxes.title = 'Adjoint' plotaxes.afteraxes = draw_interface_add_legend # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 0 plotitem.amr_color = ['g','b','r'] plotitem.amr_plotstyle = ['^-','s-','o-'] plotitem.amr_data_show = [1,1,1] plotitem.amr_kwargs = [{'markersize':5},{'markersize':4},{'markersize':3}] # Figure for q[1] # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(2,1,2)' # bottom figure plotaxes.xlimits = 'auto' plotaxes.ylimits = [-.5,1.1] plotaxes.title = 'Velocity' plotaxes.afteraxes = draw_interface_add_legend # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 1 plotitem.amr_color = ['g','b','r'] plotitem.amr_plotstyle = ['^-','s-','o-'] plotitem.amr_data_show = [1,1,1] plotitem.amr_kwargs = [{'markersize':5},{'markersize':4},{'markersize':3}] #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='q', figno=300, \ type='each_gauge') plotfigure.clf_each_gauge = True plotfigure.kwargs = {'figsize': (10,10)} plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(211)' plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Pressure' plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 0 plotitem.plotstyle = 'b-' plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(212)' plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Velocity' plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 1 plotitem.plotstyle = 'b-' # Parameters used only when creating html and/or latex hardcopy # e.g., via clawpack.visclaw.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' 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): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() from clawpack.visclaw import colormaps, geoplot plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = 'ascii' # Format of output # plotdata.format = 'netcdf' def set_drytol(current_data): # The drytol parameter is used in masking land and water and # affects what color map is used for cells with small water depth h. # The cell will be plotted as dry if h < drytol. # The best value to use often depends on the application and can # be set here (measured in meters): current_data.user['drytol'] = 1.e-2 plotdata.beforeframe = set_drytol #----------------------------------------- # Figure for pcolor plot #----------------------------------------- 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 # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.9 plotitem.pcolor_cmax = 0.9 plotitem.add_colorbar = True plotitem.amr_celledges_show = [1, 1, 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 = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [1, 1, 0] plotaxes.xlimits = [-100, 100] plotaxes.ylimits = [-100, 100] #----------------------------------------- # Figure for zoom #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Zoom', figno=10) #plotfigure.show = False plotfigure.kwargs = {'figsize': [12, 7]} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('diag zoom') plotaxes.axescmd = 'axes([0.0,0.1,0.6,0.6])' plotaxes.title = 'On diagonal' plotaxes.scaled = True plotaxes.xlimits = [55, 66] plotaxes.ylimits = [55, 66] def addgauges(current_data): from clawpack.visclaw import gaugetools gaugenos = range(101, 110) # on diagonal gaugetools.plot_gauge_locations(current_data.plotdata, \ gaugenos=gaugenos, format_string='ko', add_labels=True) plotaxes.afteraxes = addgauges # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.9 plotitem.pcolor_cmax = 0.9 plotitem.add_colorbar = True plotitem.amr_celledges_show = [1, 1, 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 = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [1, 1, 0] # Add contour lines of bathymetry: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = geoplot.topo from numpy import arange, linspace plotitem.contour_levels = arange(-10., 0., 1.) plotitem.amr_contour_colors = ['k'] # color on each level plotitem.kwargs = {'linestyles': 'solid'} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # Add contour lines of topography: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = geoplot.topo from numpy import arange, linspace plotitem.contour_levels = arange(0., 11., 1.) plotitem.amr_contour_colors = ['g'] # color on each level plotitem.kwargs = {'linestyles': 'solid'} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # Add dashed contour line for shoreline plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = geoplot.topo plotitem.contour_levels = [0.] plotitem.amr_contour_colors = ['k'] # color on each level plotitem.kwargs = {'linestyles': 'dashed'} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True #----------------------------------------- # Figure for zoom near axis #----------------------------------------- #plotfigure = plotdata.new_plotfigure(name='Zoom2', figno=11) # now included in same figure as zoom on diagonal # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes('x zoom') plotaxes.show = True plotaxes.axescmd = 'axes([0.5,0.1,0.6,0.6])' plotaxes.title = 'On x-axis' plotaxes.scaled = True plotaxes.xlimits = [82, 93] plotaxes.ylimits = [-5, 6] def addgauges(current_data): from clawpack.visclaw import gaugetools gaugenos = range(1, 10) # on x-axis gaugetools.plot_gauge_locations(current_data.plotdata, \ gaugenos=gaugenos, format_string='ko', add_labels=True) plotaxes.afteraxes = addgauges # Water plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') #plotitem.plot_var = geoplot.surface plotitem.plot_var = geoplot.surface_or_depth plotitem.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.9 plotitem.pcolor_cmax = 0.9 plotitem.add_colorbar = True plotitem.amr_celledges_show = [1, 1, 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 = 100.0 plotitem.add_colorbar = False plotitem.amr_celledges_show = [1, 1, 0] # Add contour lines of bathymetry: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = geoplot.topo from numpy import arange, linspace plotitem.contour_levels = arange(-10., 0., 1.) plotitem.amr_contour_colors = ['k'] # color on each level plotitem.kwargs = {'linestyles': 'solid'} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # Add contour lines of topography: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = geoplot.topo from numpy import arange, linspace plotitem.contour_levels = arange(0., 11., 1.) plotitem.amr_contour_colors = ['g'] # color on each level plotitem.kwargs = {'linestyles': 'solid'} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # Add dashed contour line for shoreline plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = geoplot.topo plotitem.contour_levels = [0.] plotitem.amr_contour_colors = ['k'] # color on each level plotitem.kwargs = {'linestyles': 'dashed'} plotitem.amr_contour_show = [0, 0, 1] # show contours only on finest level plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True #----------------------------------------- # 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 = [-2.0, 2.0] 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 plotitem.plot_var = gaugetopo plotitem.plotstyle = 'g-' def add_zeroline(current_data): from pylab import plot, legend t = current_data.t legend(('surface', 'topography'), loc='lower left') plot(t, 0 * t, 'k') plotaxes.afteraxes = add_zeroline #----------------------------------------- # Figure for patches alone #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='patches', 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 = 'patches' 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 = [1, 1, 0] plotitem.amr_patchedges_show = [1] #----------------------------------------- # Scatter plot of surface for radially symmetric #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Scatter', figno=200) plotfigure.show = False # Note: will not look very good unless more of domain is refined # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0., 100.] plotaxes.ylimits = [-1.5, 2.] plotaxes.title = 'Scatter plot of surface' # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d_from_2d_data') plotitem.plot_var = geoplot.surface def q_vs_radius(current_data): from numpy import sqrt x = current_data.x y = current_data.y r = sqrt(x**2 + y**2) q = current_data.var return r, q plotitem.map_2d_to_1d = q_vs_radius plotitem.plotstyle = 'o' plotitem.amr_color = ['b', 'r', 'g'] plotaxes.afteraxes = "import pylab; pylab.legend(['Level 1','Level 2'])" #----------------------------------------- # 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 = [4, 5, 104, 105] # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once plotdata.html_movie_width = 800 # width for js movie return plotdata
def setplot(plotdata=None, 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 """ if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir, 'claw.data')) multilayer_data = clawpack.geoclaw.data.MultilayerData() multilayer_data.read(os.path.join(plotdata.outdir, 'multilayer.data')) def transform_c2p(x, y, x0, y0, theta): return ((x + x0) * np.cos(theta) - (y + y0) * np.sin(theta), (x + x0) * np.sin(theta) + (y + y0) * np.cos(theta)) def transform_p2c(x, y, x0, y0, theta): return (x * np.cos(theta) + y * np.sin(theta) - x0, -x * np.sin(theta) + y * np.cos(theta) - y0) # Setup bathymetry reference lines with open(os.path.join(plotdata.outdir, "bathy_geometry.data"), 'r') \ as bathy_geometry_file: bathy_location = float(bathy_geometry_file.readline()) bathy_angle = float(bathy_geometry_file.readline()) x = [0.0, 0.0] y = [0.0, 1.0] x1, y1 = transform_c2p(x[0], y[0], bathy_location, 0.0, bathy_angle) x2, y2 = transform_c2p(x[1], y[1], bathy_location, 0.0, bathy_angle) if abs(x1 - x2) < 10**-3: x = [x1, x1] y = [clawdata.lower[1], clawdata.upper[1]] else: m = (y1 - y2) / (x1 - x2) x[0] = (clawdata.lower[1] - y1) / m + x1 y[0] = clawdata.lower[1] x[1] = (clawdata.upper[1] - y1) / m + x1 y[1] = clawdata.upper[1] ref_lines = [((x[0], y[0]), (x[1], y[1]))] plotdata.clearfigures() plotdata.save_frames = False plotdata.format = 'ascii' # ======================================================================== # Generic helper functions def pcolor_afteraxes(current_data): bathy_ref_lines(current_data) def contour_afteraxes(current_data): axes = plt.gca() pos = -80.0 * (23e3 / 180) + 500e3 - 5e3 axes.plot([pos, pos], [-300e3, 300e3], 'b', [pos - 5e3, pos - 5e3], [-300e3, 300e3], 'y') wind_contours(current_data) bathy_ref_lines(current_data) def profile_afteraxes(current_data): pass def bathy_ref_lines(current_data): axes = plt.gca() 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] axes.plot([x1, x2], [y1, y2], 'y--', linewidth=1) # ======================================================================== # Axis limits xlimits = [-0.5, 0.5] 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_speed_limits = [0.0, 0.1] internal_speed_limits = [0.0, 0.03] # ======================================================================== # Surface Elevations plotfigure = plotdata.new_plotfigure(name='Surface') 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, 1) # Bottom surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Internal Surface' plotaxes.axescmd = 'subplot(1,2,2)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits 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, 2) # ======================================================================== # 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, 1) # 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, 2) # ======================================================================== # Water Speed plotfigure = plotdata.new_plotfigure(name='speed') 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 ml_plot.add_speed(plotaxes, 1, bounds=top_speed_limits) ml_plot.add_land(plotaxes, 1) # Bottom layer speed plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents - Bottom Layer' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(1,2,2)' 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, 2) # Individual components plotfigure = plotdata.new_plotfigure(name='speed_components', figno=401) plotfigure.show = False plotfigure.kwargs = {'figsize': (14, 14)} # Top layer plotaxes = plotfigure.new_plotaxes() plotaxes.title = "X-Velocity - Top Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,1)' 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, 1) plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Y-Velocity - Top Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,2)' 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, 1) # Bottom layer plotaxes = plotfigure.new_plotaxes() plotaxes.title = "X-Velocity - Bottom Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,3)' 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, 2) plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Y-Velocity - Bottom Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,4)' 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, 2) # ======================================================================== # Profile Plots # Note that these are not currently plotted by default - set # `plotfigure.show = True` is you want this to be plotted plotfigure = plotdata.new_plotfigure(name='profile') plotfigure.show = False # Top surface plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = xlimits plotaxes.ylimits = [-1.1, 0.1] 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 # 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, 1) # ======================================================================== # 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, 1, 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, 2, 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 # ======================================================================== # Grid Cells # ======================================================================== # Figure for grid cells plotfigure = plotdata.new_plotfigure(name='cells', figno=2) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.title = 'Grid patches' 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 = [1, 1, 1] # ======================================================================== # 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', type='each_gauge', figno=301) plotfigure.show = True plotfigure.clf_each_gauge = True plotfigure.kwargs = {'figsize': (14, 4)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(1, 2, 1)' 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-' # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(1, 2, 2)' 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-' # ========================================================================= # Other plots # Gauge Locations - Enable to see where gauges are located def locations_afteraxes(current_data, gaugenos='all'): gaugetools.plot_gauge_locations(current_data.plotdata, gaugenos=gaugenos, format_string='kx', add_labels=True) pcolor_afteraxes(current_data) plotfigure = plotdata.new_plotfigure(name='Gauge Locations') plotfigure.show = False 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 = locations_afteraxes ml_plot.add_surface_elevation(plotaxes, 1, bounds=top_surface_limits) ml_plot.add_land(plotaxes, 1) # Bottom surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Internal Surface' plotaxes.axescmd = 'subplot(1, 2, 2)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.afteraxes = locations_afteraxes ml_plot.add_surface_elevation(plotaxes, 2, bounds=internal_surface_limits) ml_plot.add_land(plotaxes, 2) # ----------------------------------------- # 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? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of clawpack.visclaw.data.ClawPlotData. Output: a modified version of plotdata. """ if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() from clawpack.visclaw import colormaps plotdata.clearfigures() # clear any old figures,axes,items data plotdata.format = "ascii" # Figure for pcolor plot plotfigure = plotdata.new_plotfigure(name='q[0]', figno=0) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'q[0]' plotaxes.scaled = True plotaxes.afteraxes = addgauges # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 0 plotitem.pcolor_cmap = colormaps.red_yellow_blue plotitem.pcolor_cmin = -1. plotitem.pcolor_cmax = 1. plotitem.add_colorbar = True plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem.show = True # show on plot? # Figure for contour plot plotfigure = plotdata.new_plotfigure(name='contour', figno=1) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'q[0]' plotaxes.scaled = True # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = 0 plotitem.contour_levels = np.linspace(-0.9, 0.9, 10) plotitem.amr_contour_colors = ['k','b'] plotitem.patchedges_show = 1 plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem.show = True # show on plot? # Figure for grids plotfigure = plotdata.new_plotfigure(name='grids', figno=2) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'grids' plotaxes.scaled = True # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_patch') plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem.amr_celledges_show = [1,1,0] plotitem.amr_patchedges_show = [1] #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='q', 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 = 'q' # Plot q as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 0 plotitem.plotstyle = 'b-' # Parameters used only when creating html and/or latex hardcopy # e.g., via clawpack.visclaw.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_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.html_movie = 'JSAnimation' # new style, or "4.x" for old style plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
def setplot(plotdata=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 = [-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 = { "Gulf": { "xlimits": (clawdata.lower[0], clawdata.upper[0]), "ylimits": (clawdata.lower[1], clawdata.upper[1]), "figsize": (6.4, 4.8) }, "Long Island": { "xlimits": (-74.5, -71.5), "ylimits": (40, 41.5), "figsize": (8, 2.7) } } 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) # ======================================================================== # 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, 3.75] # plotaxes.xlabel = "Days from landfall" # plotaxes.ylabel = "Surface (m)" plotaxes.ylimits = [0, 4] plotaxes.title = 'Surface' def gauge_afteraxes(cd): axes = plt.gca() surgeplot.plot_landfall_gauge(cd.gaugesoln, axes) # fetch real data noaaArr = [ "8557380", "8639348", "8662245", "2695540", "8531680", "8510560" ] gaugeNumber = cd.gaugeno if (gaugeNumber < 7): # only looking at gauge 1-6 because rest of data not from NOAA Gauges realData = geoutil.fetch_noaa_tide_data( noaaArr[gaugeNumber - 1], datetime.datetime(2015, 9, 30, hour=12), datetime.datetime(2015, 10, 6, hour=6)) values = realData[1] - realData[2] # de-tide NOAA data times = [] for time in realData[0]: times.append( (time - numpy.datetime64("2015-10-02T12:00")).astype(float) / 1440) plt.plot(times, values, color="g", label="real") # 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, 3.75]) axes.set_ylim([0, 4]) axes.set_xticks([-2, -1, 0, 1, 2, 3]) axes.set_xticklabels( [r"$-2$", r"$-1$", r"$0$", r"$1$", r"$2$", r"$3$"]) 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_1_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=[1], format_string='ko', add_labels=True) def gauge_2_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=[2], format_string='ko', add_labels=True) def gauge_3_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=[3], format_string='ko', add_labels=True) def gauge_4_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=[4], format_string='ko', add_labels=True) def gauge_5_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=[5], format_string='ko', add_labels=True) def gauge_6_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=[6], format_string='ko', add_labels=True) def gauge_7_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=[8], format_string='ko', add_labels=True) def gauge_8_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=[9], format_string='ko', add_labels=True) plotfigure = plotdata.new_plotfigure(name="Gauge 1") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 1' plotaxes.scaled = True plotaxes.xlimits = [-75.5, -74.75] plotaxes.ylimits = [38.25, 39.25] plotaxes.afteraxes = gauge_1_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 plotfigure = plotdata.new_plotfigure(name="Gauge 2") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 2' plotaxes.scaled = True plotaxes.xlimits = [-76.75, -75.5] plotaxes.ylimits = [36.5, 37.5] plotaxes.afteraxes = gauge_2_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 plotfigure = plotdata.new_plotfigure(name="Gauge 3") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 3' plotaxes.scaled = True plotaxes.xlimits = [-79.5, -79] plotaxes.ylimits = [33, 33.5] plotaxes.afteraxes = gauge_3_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 plotfigure = plotdata.new_plotfigure(name="Gauge 4") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 4' plotaxes.scaled = True plotaxes.xlimits = [-65.25, -64.25] plotaxes.ylimits = [31.75, 32.5] plotaxes.afteraxes = gauge_4_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 plotfigure = plotdata.new_plotfigure(name="Gauge 5") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 5' plotaxes.scaled = True plotaxes.xlimits = [-74.5, -73.5] plotaxes.ylimits = [40, 40.75] plotaxes.afteraxes = gauge_5_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 plotfigure = plotdata.new_plotfigure(name="Gauge 6") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 6' plotaxes.scaled = True plotaxes.xlimits = [-72.5, -71.5] plotaxes.ylimits = [40.5, 41.5] plotaxes.afteraxes = gauge_6_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 plotfigure = plotdata.new_plotfigure(name="Gauge 7") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 7' plotaxes.scaled = True plotaxes.xlimits = [-75.5, -74] plotaxes.ylimits = [23, 24.5] plotaxes.afteraxes = gauge_7_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 plotfigure = plotdata.new_plotfigure(name="Gauge 8") plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Gauge 8' plotaxes.scaled = True plotaxes.xlimits = [-74.75, -73.5] plotaxes.ylimits = [21.75, 23.25] plotaxes.afteraxes = gauge_8_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, 3, 4, 5, 6, 7, 8] # 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=None): #-------------------------- 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,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: surgeplot.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 surgeplot.add_surface_elevation(plotaxes, plot_type='contourf', contours=surface_contours, shrink=gulf_shrink) surgeplot.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 surgeplot.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 surgeplot.add_land(plotaxes) surgeplot.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 surgeplot.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 surgeplot.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') surgeplot.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 surgeplot.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') surgeplot.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 surgeplot.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) surgeplot.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 surgeplot.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) surgeplot.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 surgeplot.add_pressure(plotaxes, bounds=pressure_limits, shrink=gulf_shrink) surgeplot.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 surgeplot.add_wind(plotaxes, bounds=wind_limits, plot_type='pcolor', shrink=gulf_shrink) surgeplot.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) surgeplot.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 surgeplot.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) surgeplot.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 = surgeplot.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] surgeplot.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 = surgeplot.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] surgeplot.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 = surgeplot.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] surgeplot.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 = surgeplot.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] surgeplot.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? plotdata.parallel = True # make multiple frame png's at once return plotdata