def read_data(outdir="_output", adjoint=False): from numpy import loadtxt fname = outdir + '/fort.H' B = loadtxt(fname) print "Loaded B" pd = ClawPlotData() pd.outdir = outdir times = [] qxt = [] for frameno in range(5001): try: frame = pd.getframe(frameno) except: break q = frame.state.q t = frame.state.t q[0,:] = B + q[0,:] qxt.append(q) times.append(t) x = frame.state.patch.x.centers x = x X,T = np.meshgrid(x,times) qxt = np.array(qxt) if adjoint: qxt = np.flipud(qxt) # reverse t for adjoint return X,T,qxt
def read_data(outdir="_output", adjoint=False): from numpy import loadtxt fname = outdir + '/fort.H' B = loadtxt(fname) print "Loaded B" pd = ClawPlotData() pd.outdir = outdir times = [] qxt = [] for frameno in range(5001): try: frame = pd.getframe(frameno) except: break q = frame.state.q t = frame.state.t q[0, :] = B + q[0, :] qxt.append(q) times.append(t) x = frame.state.patch.x.centers x = x X, T = np.meshgrid(x, times) qxt = np.array(qxt) if adjoint: qxt = np.flipud(qxt) # reverse t for adjoint return X, T, qxt
def make_getgauge(outdir='_output'): """ Create function getgauge that will grab one set of gauge data from the fort.gauge file in directory specified by outdir. """ from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.outdir = outdir getgauge = plotdata.getgauge return getgauge
def read_gauges(runDir, nGauges, times): plotdata = ClawPlotData() plotdata.outdir = runDir + '/_output' # set to the proper output directory gauge_data = [] for ii in range(0, nGauges): g = plotdata.getgauge(ii) time_indices = np.array([any(np.isclose(t, times)) for t in g.t]) gauge_data.append(g.q[0, time_indices]) gauge_data = np.array(gauge_data) return gauge_data
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() # Figures corresponding to Figure 9.5 of LeVeque, "Finite Volume # Methods for Hyperbolic Problems," 2002 (though more of them) # Tuples of (variable name, variable number) figdata = [('Pressure', 0), ('Velocity', 1)] # Afteraxes function: draw a vertical dashed line at the interface # between different media def draw_interface(current_data): import pylab pylab.plot([0., 0.], [-1000., 1000.], 'k--') for varname, varid in figdata: plotfigure = plotdata.new_plotfigure(name=varname, figno=varid) plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-5., 5.] plotaxes.ylimits = [-0.5, 1.5] # Good for both vars because of near-unit impedance plotaxes.title = varname plotaxes.afteraxes = draw_interface plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = varid plotitem.color = 'b' plotdata.printfigs = True # Whether to output figures plotdata.print_format = 'png' # What type of output format plotdata.print_framenos = 'all' # Which frames to output plotdata.print_fignos = 'all' # Which figures to print plotdata.html = True # Whether to create HTML files plotdata.latex = False # Whether to make LaTeX output return plotdata
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 process_gauge(gaugeNo, output): plotdata = ClawPlotData() plotdata.outdir = '_output' # set to the proper output directory g = plotdata.getgauge(gaugeNo) # g.t is the array of times # g.q is the array of values recorded at the gauges (g.q[m,n] is the m`th variable at time `t[n]) t = g.t h = g.q[0,:] u = np.where(h>0.001,g.q[1,:]/h,0.) v = np.where(h>0.001,g.q[2,:]/h,0.) h = h - h[:10].sum()/10. hu2 = h*u**2 hv2 = h*v**2 header = "Time (s), water depth (m), u-velocity (m/s), v-velocity (m/s), hu^2 (m^3/s^2), hv^2 (m^3/s^2)" if 'data_at_gauges_txt' not in os.listdir('./'): os.mkdir('./data_at_gauges_txt') result = np.vstack((t, h, u, v, hu2, hv2)) result = result.transpose() np.savetxt('./data_at_gauges_txt/'+output, result, delimiter=',', header=header)
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 read_data(outdir="_output", adjoint=False): pd = ClawPlotData() pd.outdir = outdir times = [] qxt = [] for frameno in range(5001): try: frame = pd.getframe(frameno) except: break q = frame.state.q t = frame.state.t qxt.append(q) times.append(t) x = frame.state.patch.x.centers x = x X,T = np.meshgrid(x,times) qxt = np.array(qxt) if adjoint: qxt = np.flipud(qxt) # reverse t for adjoint return X,T,qxt
def make_output_for_dakota(): from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.outdir = os.path.join(os.getcwd() , '_output') # set to the proper output directory gaugeno = 34 # gauge number to examine g = plotdata.getgauge(gaugeno) gauge_max = g.q[3,:].max() print "Maximum elevation observed at gauge %s: %6.2f meters" \ % (gaugeno, gauge_max) fname = 'results.out' f = open(fname,'w') f.write("%6.2f\n" % -gauge_max) f.close() print "Created ",fname if 1: figure() plot(g.t, g.q[3,:]) title("Gauge %s" % gaugeno) ylabel('Elevation (meters)') xlabel('time (seconds)') fname = 'gauge.png' savefig(fname) print 'Created ',fname
""" Create the BM1_leveque.txt file requested by Pat Lynett. """ from pylab import * from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() toffset = 0.0 if 1: plotdata.outdir = "_output_manning010_cfl090" fname = "BM1_leveque_1.txt" if 0: plotdata.outdir = "_output_manning010_cfl089" fname = "BM1_leveque_2.txt" if 0: plotdata.outdir = "_output_manning015_cfl090" fname = "BM1_leveque_3.txt" if 0: plotdata.outdir = "_output_manning015_cfl089" fname = "BM1_leveque_4.txt" figure(figsize=(8, 12)) clf() # --- Gauge 1 --- d = loadtxt("s1u.txt") t1u = d[:, 0]
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 # Figure for q[0] plotfigure = plotdata.new_plotfigure(name='Solution', figno=1) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0,1] plotaxes.ylimits = [-.6,1.2] plotaxes.title = 'q' # 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':8},{'markersize':6},{'markersize':5}] # Plot true solution for comparison: def plot_qtrue(current_data): from pylab import plot, legend x = linspace(0,1,1000) t = current_data.t q = qtrue(x,t) plot(x,q,'k',label='true solution') def plot_qtrue_with_legend(current_data): from pylab import plot, legend x = linspace(0,1,1000) t = current_data.t q = qtrue(x,t) plot(x,q,'k',label='true solution') try: from clawpack.visclaw import legend_tools labels = ['Level 1','Level 2', 'Level 3','True solution'] legend_tools.add_legend(labels, colors=['g','b','r','k'], markers=['^','s','o',''], linestyles=['','','','-'], loc='lower right') except: legend(loc='lower right') plotaxes.afteraxes = plot_qtrue_with_legend # ------------------------------------------ # Figure with each level plotted separately: plotfigure = plotdata.new_plotfigure(name='By AMR Level', figno=2) plotfigure.kwargs = {'figsize':(8,10)} for level in range(1,4): # Set up plot for this level: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(3,1,%i)' % level plotaxes.xlimits = [0,1] plotaxes.ylimits = [-.5,1.3] plotaxes.title = 'Level %s' % level plotaxes.afteraxes = plot_qtrue 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 = [0,0,0] plotitem.amr_data_show[level-1] = 1 # show only one level #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='q', figno=300, \ type='each_gauge') plotfigure.clf_each_gauge = True plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Solution' 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' 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
TGdir = os.path.abspath('../TideGauges') outdir = '../Runs/HAI1107/_output' g_obs = numpy.loadtxt(os.path.join(TGdir, 'TG_1612340_detided.txt')) tsec = g_obs[:,0] thour = tsec / 3600. eta = g_obs[:,1] plt.figure(3) plt.clf() plt.plot(thour,eta,'k',linewidth=1) plt.plot(thour,eta,'k.',linewidth=1,label='Observed') # computed results: plotdata = ClawPlotData() plotdata.outdir = outdir print "Looking for GeoClaw results in ",plotdata.outdir g = plotdata.getgauge(12340) # shift by 10 minutes: thour = (g.t + 600.) / 3600. plt.plot(thour, g.q[3,:],'r',linewidth=2,label='GeoClaw') plt.xlim(7,13) plt.ylim(-1,1) plt.legend(loc='lower right') plt.xticks(range(8,14),fontsize=15) plt.yticks(fontsize=15) plt.xlabel('Hours post-quake') plt.ylabel('meters') plt.title('Surface elevation at TG 1612340',fontsize=15)
def compare_gauges(outdir1, outdir2, gaugenos='all', q_components='all', tol=0., verbose=True, plot=False): """ Compare gauge output in two output directories. :Input: - *outdir1, outdir2* -- output directories - *gaugenos* -- list of gauge numbers to compare, or 'all' in which case outdir1/gauges.data will be used to determine gauge numbers. - *q_components* -- list of components of q to compare. - *tol* -- tolerance for checking equality - *verbose* -- print out dt and dq for each comparison? - *plot* -- if True, will produce a plot for each gauge, with a subfigure for each component of q. Returns True if everything matches to tolerance *tol*, else False. """ from clawpack.visclaw.data import ClawPlotData from matplotlib import pyplot as plt if gaugenos == 'all': # attempt to read from gauges.data: try: setgauges1 = read_setgauges(outdir1) setgauges2 = read_setgauges(outdir2) except: print '*** could not read gauges.data from one of the outdirs' return gaugenos = setgauges1.gauge_numbers if setgauges2.gauge_numbers != gaugenos: print '*** warning -- outdirs have different sets of gauges' if len(gaugenos)==0: print "*** No gauges found in gauges.data" return plotdata1 = ClawPlotData() plotdata1.outdir = outdir1 plotdata2 = ClawPlotData() plotdata2.outdir = outdir2 matches = True for gaugeno in gaugenos: g1 = plotdata1.getgauge(gaugeno,verbose=verbose) t1 = g1.t q1 = g1.q g2 = plotdata2.getgauge(gaugeno,verbose=verbose) t2 = g2.t q2 = g2.q dt = abs(t1-t2).max() if verbose: print "Max difference in t[:] at gauge %s is %g" % (gaugeno,dt) matches = matches and (dt <= tol) if q_components == 'all': q_components = range(q1.shape[0]) for m in q_components: dq = abs(q1[m,:]-q2[m,:]).max() if verbose: print "Max difference in q[%s] at gauge %s is %g" % (m,gaugeno,dq) matches = matches and (dq <= tol) if plot: plt.figure(gaugeno) plt.clf() mq = len(q_components) for k,m in enumerate(q_components): plt.subplot(mq,1,k+1) plt.plot(g1.t,g1.q[m,:],'b',label='outdir1') plt.plot(g2.t,g2.q[m,:],'r',label='outdir2') plt.legend() plt.title('q[%s] at gauge number %s' % (m,gaugeno)) return matches
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 = 'forestclaw' # '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, 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, 0, 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 = [0, 0, 0, 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', label='Obs') 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 #----------------------------------------- # Plots of timing (CPU and wall time): def make_timing_plots(plotdata): from clawpack.visclaw import plot_timing_stats import os, sys try: timing_plotdir = plotdata.plotdir + '/_timing_figures' os.system('mkdir -p %s' % timing_plotdir) # adjust units for plots based on problem: units = { 'comptime': 'seconds', 'simtime': 'hours', 'cell': 'millions' } plot_timing_stats.make_plots(outdir=plotdata.outdir, make_pngs=True, plotdir=timing_plotdir, units=units) except: print('*** Error making timing plots') otherfigure = plotdata.new_otherfigure(name='timing plots', 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 = 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 = False # 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": 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 = [-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
try: matplotlib # see if it's already been imported (interactive session) except: import matplotlib matplotlib.use("Agg") # set to image backend import os from pylab import * from clawpack.visclaw.data import ClawPlotData rundir = "../Runs/HAI1107" outdir = os.path.join(rundir, "_output") obsdir = os.path.abspath("../Observations") pd = ClawPlotData() pd.outdir = outdir g1 = pd.getgauge(1) g1107 = pd.getgauge(1107) g12340 = pd.getgauge(12340) figure(1) clf() t = g1.t / 3600.0 plot(t, g1.q[3, :], "b", linewidth=1, label="Gauge S1") plot(t, g1107.q[3, :], "r", linewidth=2, label="HAI1107") # plot(t, g12340.q[3,:], 'g', linewidth=2, label='TG 2340') xlabel("Hours post-quake") ylabel("meters") ylim(-1, 1)
wg4 = d[:, 6] # ---- b1 = loadtxt(datadir + "/B1.txt", skiprows=1) b1a = reshape(b1, (9000, 4)) b4 = loadtxt(datadir + "/B4.txt", skiprows=1) b4a = reshape(b4, (9000, 4)) b6 = loadtxt(datadir + "/B6.txt", skiprows=1) b6a = reshape(b6, (9000, 4)) b9 = loadtxt(datadir + "/B9.txt", skiprows=1) b9a = reshape(b9, (9000, 4)) plotdata = ClawPlotData() plotdata.outdir = "_output_3" figure(50, figsize=(8, 12)) clf() for gnum, wg in zip([1, 2, 3, 4], [wg1, wg2, wg3, wg4]): g = plotdata.getgauge(gnum) subplot(4, 1, gnum) plot(t, wg, "b", label="Measured") plot(g.t, g.q[3, :], "r", label="GeoClaw") xlim(0, 40) title("Gauge %s" % gnum) ylabel("surface (m)") legend(loc="upper left")
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
rundata.clawdata.num_cells[0] = mx rundata.clawdata.num_output_times = mframe # output_times=1 won't work for high grid resolution rundata.clawdata.tfinal = 0.100000e+00 rundata.clawdata.lower[0] = xlower rundata.clawdata.upper[0] = xupper rundata.clawdata.order = 1 rundata.clawdata.bc_lower[0] = 'periodic'#'user' # at xlower rundata.clawdata.bc_upper[0] = 'periodic'#'extrap' # at xupper rundata.write() runclaw(xclawcmd='xclaw',outdir=outdir) # xclaw.exe file produced after make .exe #Get the material parameters aux = np.loadtxt(outdir+'/fort.a0000',skiprows=5) # don't delate skiprows or set it equal 6 plotdata = ClawPlotData() plotdata.outdir=outdir #Read in the solution dat = plotdata.getframe(mframe) u = dat.q[0,:] # print u stress = np.exp(u*aux) - 1 # not sure why here don't need aux[0,:] stress = u #Compute parameter for error calculation reshape_para = mx_exact/mx #Compute error
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 print("**** Python plotting tools not yet implemented in 3d") print("**** No plots will be generated.") # Parameters used only when creating html and/or latex hardcopy # e.g., via clawpack.visclaw.frametools.printframes: plotdata.printfigs = False # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = [] # list of frames to print plotdata.print_fignos = [] # list of figures to print plotdata.html = False # 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 = False # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? return plotdata
def setplot(plotdata=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): #-------------------------- """ 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 # Figure for pressure # ------------------- plotfigure = plotdata.new_plotfigure(name='Pressure', figno=0) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Pressure' plotaxes.scaled = True # so aspect ratio is 1 # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 0 plotitem.pcolor_cmap = colormaps.blue_yellow_red plotitem.pcolor_cmin = -2.0 plotitem.pcolor_cmax = 2.0 plotitem.add_colorbar = True # Figure for scatter plot # ----------------------- plotfigure = plotdata.new_plotfigure(name='scatter', figno=3) plotfigure.show = (qref_dir is not None) # don't plot if 1d solution is missing # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0,1.5] plotaxes.ylimits = [-2.,4.] plotaxes.title = 'Scatter plot' # Set up for item on these axes: scatter of 2d data plotitem = plotaxes.new_plotitem(plot_type='1d_from_2d_data') def p_vs_r(current_data): # Return radius of each grid cell and p value in the cell from pylab import sqrt x = current_data.x y = current_data.y r = sqrt(x**2 + y**2) q = current_data.q p = q[0,:,:] return r,p plotitem.map_2d_to_1d = p_vs_r plotitem.plot_var = 0 plotitem.plotstyle = 'o' plotitem.color = 'b' plotitem.show = (qref_dir is not None) # show on plot? # Set up for item on these axes: 1d reference solution plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.outdir = qref_dir plotitem.plot_var = 0 plotitem.plotstyle = '-' plotitem.color = 'r' plotitem.kwargs = {'linewidth': 2} plotitem.show = True # show on plot? def make_legend(current_data): import matplotlib.pyplot as plt plt.legend(('2d data', '1d reference solution')) plotaxes.afteraxes = make_legend # 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? 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): #-------------------------- """ 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
from pylab import * from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() if 1: plotdata.outdir = '_output' toffset = 92. if 0: plotdata.outdir = '_output_manning_0.025' toffset = 92. if 0: plotdata.outdir = '_output_manning015_cfl090' toffset = 92. if 0: plotdata.outdir = '_output_manning015_cfl089' toffset = 96. figure(50,figsize=(18,12)) clf() # --- Gauge 1 --- d = loadtxt('s1u.txt') t1u = d[:,0] s1u = d[:,1] d = loadtxt('s1v.txt')
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of visclaw.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data # Figure for pcolor plot plotfigure = plotdata.new_plotfigure(name='pcolor', figno=0) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0, 1] plotaxes.ylimits = [0, 1] plotaxes.title = 'Solution' plotaxes.scaled = True # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 0 plotitem.pcolor_cmap = colormaps.yellow_red_blue plotitem.pcolor_cmin = 0.1 plotitem.pcolor_cmax = 1. plotitem.add_colorbar = True plotitem.amr_celledges_show = [0] plotitem.amr_patchedges_show = [0] # 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 = [0, 1] plotaxes.ylimits = [0, 1] plotaxes.title = 'Solution' plotaxes.scaled = True plotaxes.afteraxes = addgauges # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = 0 plotitem.contour_nlevels = 20 plotitem.contour_min = 0.01 plotitem.contour_max = 0.99 plotitem.amr_contour_colors = ['r', 'g', 'b'] # color on each level plotitem.amr_patch_bgcolor = ['#ffeeee', '#eeeeff', '#eeffee'] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 # 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 = [0, 1] plotaxes.ylimits = [0, 1] plotaxes.title = 'Grid patches' plotaxes.scaled = True def plot_rr(current_data): from pylab import plot plot(xv1, yv1, 'b', lw=2) plot(xv2, yv2, 'b', lw=2) plotaxes.afteraxes = plot_rr # 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] #----------------------------------------- # 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 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) }, "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. """ 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 clawpack.visclaw.data.ClawPlotData. Output: a modified version of plotdata. """ if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # Figures corresponding to Figure 9.5 of LeVeque, "Finite Volume # Methods for Hyperbolic Problems," 2002 (though more of them) # Tuples of (variable name, variable number) figdata = [('Pressure', 0), ('Velocity', 1)] # Afteraxes function: draw a vertical dashed line at the interface # between different media def draw_interface(current_data): import pylab pylab.plot([0., 0.], [-1000., 1000.], 'k--') for varname, varid in figdata: plotfigure = plotdata.new_plotfigure(name=varname, figno=varid) plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-5., 5.] plotaxes.ylimits = [ -0.5, 1.5 ] # Good for both vars because of near-unit impedance plotaxes.title = varname plotaxes.afteraxes = draw_interface plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = varid plotitem.color = 'b' plotdata.printfigs = True # Whether to output figures plotdata.print_format = 'png' # What type of output format plotdata.print_framenos = 'all' # Which frames to output plotdata.print_fignos = 'all' # Which figures to print plotdata.html = True # Whether to create HTML files plotdata.latex = False # Whether to make LaTeX output 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
def check_gauges(self, save=False, regression_data_path="regression_data.txt", tolerance=1e-14): r"""Basic test to assert gauge equality Test all gauges found in gauges.data. Do full comparison of all times, levels, components of q. :Input: - *save* (bool) - If *True* will save the output from this test to the file *regresion_data.txt*. Default is *False*. - *regression_data_path* (path) - Path to the regression test data. Defaults to 'regression_data.txt'. - *tolerance* (float) - Tolerance used in comparison, defaults to *1e-14*. """ from clawpack.visclaw import gaugetools from clawpack.visclaw.data import ClawPlotData # Get gauge data plotdata = ClawPlotData() plotdata.outdir = self.temp_path setgauges = gaugetools.read_setgauges(plotdata.outdir) gauge_numbers = setgauges.gauge_numbers # read in all gauge data and sort by gauge numbers so we # can properly compare. Note gauges may be written to fort.gauge # in random order when OpenMP used. for gaugeno in gauge_numbers: g = plotdata.getgauge(gaugeno) m = len(g.level) number = numpy.array(m*[g.number]) level = numpy.array(g.level) data_gauge = numpy.vstack((number,level,g.t,g.q)).T try: data = numpy.vstack((data, data_gauge)) except: data = data_gauge # first time thru loop # save the gauge number sorted by gaugeno in case user wants to # compare if assertion fails. sorted_gauge_file = 'test_gauge.txt' sorted_gauge_path = os.path.join(self.temp_path, sorted_gauge_file) numpy.savetxt(sorted_gauge_path, data) # Get (and save) regression comparison data regression_data_file = os.path.join(self.test_path, regression_data_path) if save: numpy.savetxt(regression_data_file, data) print "Saved new regression data to %s" % regression_data_file regression_data = numpy.loadtxt(regression_data_file) # if assertion fails, indicate to user what files to compare: output_dir = os.path.join(os.getcwd(), "%s_output" % self.__class__.__name__) sorted_gauge_path = os.path.join(output_dir, sorted_gauge_file) error_msg = "Full gauge match failed. Compare these files: " + \ "\n %s\n %s" % (regression_data_file, sorted_gauge_path) + \ "\nColumns are gaugeno, level, t, q[0:num_eqn]" assert numpy.allclose(data, regression_data, tolerance), error_msg
def setplot(plotdata=None): #-------------------------- """ Specify what is to be plotted at each frame. Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData. Output: a modified version of plotdata. """ import os import numpy as np import matplotlib.pyplot as plt from clawpack.visclaw import geoplot, gaugetools, colormaps import clawpack.clawutil.data as clawutil import clawpack.amrclaw.data as amrclaw import clawpack.geoclaw.data import clawpack.geoclaw.multilayer.plot as ml_plot if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() from numpy import linspace plotdata.clearfigures() # clear any old figures,axes,items data plotdata.save_frames = False # Load data from output clawdata = clawutil.ClawInputData(2) clawdata.read(os.path.join(plotdata.outdir,'claw.data')) amrdata = amrclaw.AmrclawInputData(clawdata) amrdata.read(os.path.join(plotdata.outdir,'amr.data')) geodata = clawpack.geoclaw.data.GeoClawData() geodata.read(os.path.join(plotdata.outdir,'geoclaw.data')) multilayer_data = clawpack.geoclaw.data.MultilayerData() multilayer_data.read(os.path.join(plotdata.outdir,'multilayer.data')) # To plot gauge locations on pcolor or contour plot, use this as # an afteraxis function: def addgauges(current_data): from clawpack.visclaw import gaugetools gaugetools.plot_gauge_locations(current_data.plotdata, \ gaugenos='all', format_string='ko', add_labels=True) # ======================================================================== # Generic helper functions # ======================================================================== def pcolor_afteraxes(current_data): # bathy_ref_lines(current_data) gauge_locations(current_data) def contour_afteraxes(current_data): # gauge_locations(current_data) # m_to_km_labels() plt.hold(True) pos = -80.0 * (23e3 / 180) + 500e3 - 5e3 plt.plot([pos,pos],[-300e3,300e3],'b',[pos-5e3,pos-5e3],[-300e3,300e3],'y') plt.hold(False) wind_contours(current_data) bathy_ref_lines(current_data) def profile_afteraxes(current_data): pass def gauge_locations(current_data,gaugenos='all'): plt.hold(True) gaugetools.plot_gauge_locations(current_data.plotdata, \ gaugenos=gaugenos, format_string='kx', add_labels=True) plt.hold(False) # ======================================================================== # Axis limits # xlimits = [amrdata.xlower,amrdata.xupper] xlimits = [-100.0, 100.0] # ylimits = [amrdata.ylower,amrdata.yupper] ylimits = [-100.0, 100.0] eta = [multilayer_data.eta[0],multilayer_data.eta[1]] top_surface_limits = [eta[0]-10,eta[0]+10] internal_surface_limits = [eta[1]-5,eta[1]+5] depth_limits = [0.0, 0.4] top_speed_limits = [0.0,0.1] internal_speed_limits = [0.0,0.03] # ======================================================================== # Surface Elevations # ======================================================================== plotfigure = plotdata.new_plotfigure(name='Surface', figno=0) plotfigure.show = True plotfigure.kwargs = {'figsize':(14,4)} # Top surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Top Surface' plotaxes.axescmd = 'subplot(1,2,1)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits ml_plot.add_inundation(plotaxes, 1, bounds=depth_limits) ml_plot.add_surface_elevation(plotaxes,1,bounds=top_surface_limits) ml_plot.add_land(plotaxes, 1) # Bottom surface plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Internal Surface' plotaxes.axescmd = 'subplot(1,2,2)' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits ml_plot.add_inundation(plotaxes, 2, bounds=depth_limits) ml_plot.add_surface_elevation(plotaxes,2,bounds=internal_surface_limits) ml_plot.add_colorbar = True ml_plot.add_land(plotaxes, 2) # ======================================================================== # Figure for cross section # ======================================================================== plotfigure = plotdata.new_plotfigure(name='cross-section', figno=4) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.title = 'Cross section at y=0' ml_plot.add_cross_section(plotaxes, 1) ml_plot.add_cross_section(plotaxes, 2) ml_plot.add_land_cross_section(plotaxes) # ======================================================================== # Water Speed # ======================================================================== plotfigure = plotdata.new_plotfigure(name='speed', figno=1) plotfigure.show = False plotfigure.kwargs = {'figsize':(14,4)} # Top layer speed plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents - Top Layer' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(1,2,1)' ml_plot.add_speed(plotaxes,1,bounds=top_speed_limits) ml_plot.add_land(plotaxes, 1) # Bottom layer speed plotaxes = plotfigure.new_plotaxes() plotaxes.title = 'Currents - Bottom Layer' plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(1,2,2)' ml_plot.add_speed(plotaxes,2,bounds=internal_speed_limits) ml_plot.add_land(plotaxes, 2) # Individual components plotfigure = plotdata.new_plotfigure(name='speed_components',figno=401) plotfigure.show = False plotfigure.kwargs = {'figsize':(14,14)} # Top layer plotaxes = plotfigure.new_plotaxes() plotaxes.title = "X-Velocity - Top Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,1)' ml_plot.add_x_velocity(plotaxes,1) ml_plot.add_land(plotaxes, 1) plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Y-Velocity - Top Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,2)' ml_plot.add_y_velocity(plotaxes,1) ml_plot.add_land(plotaxes, 1) # Bottom layer plotaxes = plotfigure.new_plotaxes() plotaxes.title = "X-Velocity - Bottom Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,3)' ml_plot.add_x_velocity(plotaxes,2) ml_plot.add_land(plotaxes, 2) plotaxes = plotfigure.new_plotaxes() plotaxes.title = "Y-Velocity - Bottom Layer" plotaxes.scaled = True plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits plotaxes.axescmd = 'subplot(2,2,4)' ml_plot.add_y_velocity(plotaxes,2) ml_plot.add_land(plotaxes, 2) #----------------------------------------- # Figures for gauges #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='Surface at gauges', figno=300, \ type='each_gauge') plotfigure.clf_each_gauge = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Surface' # Plot surface as blue curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 3 plotitem.plotstyle = 'b-' # Plot topo as green curve: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False def gaugetopo(current_data): q = current_data.q h = q[0,:] eta = q[3,:] topo = eta - h return topo plotitem.plot_var = gaugetopo plotitem.plotstyle = 'g-' def add_zeroline(current_data): from pylab import plot, legend, xticks, floor, axis, xlabel t = current_data.t gaugeno = current_data.gaugeno if gaugeno == 32412: try: plot(TG32412[:,0], TG32412[:,1], 'r') legend(['GeoClaw','Obs'],loc='lower right') except: pass axis((0,t.max(),-0.3,0.3)) plot(t, 0*t, 'k') n = int(floor(t.max()/3600.) + 2) xticks([3600*i for i in range(n)], ['%i' % i for i in range(n)]) xlabel('time (hours)') #----------------------------------------- # Parameters used only when creating html and/or latex hardcopy # e.g., via pyclaw.plotters.frametools.printframes: plotdata.printfigs = True # print figures plotdata.print_format = 'png' # file format plotdata.print_framenos = 'all' # list of frames to print plotdata.print_gaugenos = 'all' # list of gauges to print plotdata.print_fignos = 'all' # list of figures to print plotdata.html = True # create html files of plots? plotdata.html_homelink = '../README.html' # pointer for top of index plotdata.latex = True # create latex file of plots? plotdata.latex_figsperline = 2 # layout of plots plotdata.latex_framesperline = 1 # layout of plots plotdata.latex_makepdf = False # also run pdflatex? plotdata.parallel = True # make multiple frame png's at once return plotdata
import tidegauge g_obs=tidegauge.read_tide_gauge('1617760__2011-03-11_to_2011-03-13.csv') outdir = '../Runs/HAI1125-26/_output' tsec = g_obs[1] thour = tsec / 3600. eta = g_obs[3] figure(3) clf() plot(thour,eta,'k',linewidth=1) plot(thour,eta,'k.',linewidth=1,label='Observed') # computed results: plotdata = ClawPlotData() plotdata.outdir = outdir print "Looking for GeoClaw results in ",plotdata.outdir g7760 = plotdata.getgauge(7760) # shift by 10 minutes: thour = (g7760.t + 600.) / 3600. plot(thour, g7760.q[3,:],'r',linewidth=2,label='GeoClaw') xlim(7.5,13) ylim(-2,1.5) legend(loc='lower right') xticks(range(8,14),fontsize=15) yticks(fontsize=15) title('Surface elevation at Gauge 7760',fontsize=15) if 1:
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 if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data 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-3 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.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.1 plotitem.pcolor_cmax = 0.1 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 = [0,0,0] plotitem.patchedges_show = 1 plotaxes.xlimits = [-2,2] plotaxes.ylimits = [-2,2] # 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 = linspace(-.1, 0.5, 20) plotitem.amr_contour_colors = ['k'] # color on each level plotitem.kwargs = {'linestyles':'solid'} plotitem.amr_contour_show = [1] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True #----------------------------------------- # Figure for cross section #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='cross-section', figno=1) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-2,2] plotaxes.ylimits = [-0.15,0.3] plotaxes.title = 'Cross section at y=0' def plot_topo_xsec(current_data): from pylab import plot, cos,sin,where,legend,nan t = current_data.t x = linspace(-2,2,201) y = 0. B = h0*(x**2 + y**2)/a**2 - h0 eta1 = sigma*h0/a**2 * (2.*x*cos(omega*t) + 2.*y*sin(omega*t) -sigma) etatrue = where(eta1>B, eta1, nan) plot(x, etatrue, 'r', label="true solution", linewidth=2) plot(x, B, 'g', label="bathymetry") ## plot([0],[-1],'kx',label="Level 1") # shouldn't show up in plots, ## plot([0],[-1],'bo',label="Level 2") # but will produced desired legend plot([0],[-1],'bo',label="Computed") ## need to fix plotstyle legend() plotaxes.afteraxes = plot_topo_xsec plotitem = plotaxes.new_plotitem(plot_type='1d_from_2d_data') def xsec(current_data): # Return x value and surface eta at this point, along y=0 from pylab import find,ravel x = current_data.x y = current_data.y dy = current_data.dy q = current_data.q ij = find((y <= dy/2.) & (y > -dy/2.)) x_slice = ravel(x)[ij] eta_slice = ravel(q[3,:,:])[ij] return x_slice, eta_slice plotitem.map_2d_to_1d = xsec plotitem.plotstyle = 'kx' ## need to be able to set amr_plotstyle plotitem.kwargs = {'markersize':3} plotitem.amr_show = [1] # plot on all levels #----------------------------------------- # Figure for grids alone #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='grids', figno=2) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-2,2] plotaxes.ylimits = [-2,2] plotaxes.title = 'grids' plotaxes.scaled = True # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_patch') plotitem.amr_patch_bgcolor = ['#ffeeee', '#eeeeff', '#eeffee'] plotitem.amr_celledges_show = [1,1,0] plotitem.amr_patchedges_show = [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 = [] # 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 plotdata = ClawPlotData() if 1: plotdata.outdir = '_output' toffset = 92. if 0: plotdata.outdir = '_output_manning_0.025' toffset = 92. if 0: plotdata.outdir = '_output_manning015_cfl090' toffset = 92. if 0: plotdata.outdir = '_output_manning015_cfl089' toffset = 96. figure(50, figsize=(18, 12)) clf() # --- Gauge 1 --- d = loadtxt('s1u.txt') t1u = d[:, 0] s1u = d[:, 1] d = loadtxt('s1v.txt') t1v = d[:, 0] s1v = d[:, 1]
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 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 # Figure for pressure and velocity: plotfigure = plotdata.new_plotfigure(name='Pressure and Velocity', figno=1) # Pressure: # --------- # 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.] plotaxes.title = 'Pressure' # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 0 plotitem.plotstyle = '-' plotitem.color = 'b' # Velocity: # --------- # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(2,1,2)' # bottom figure plotaxes.xlimits = 'auto' plotaxes.ylimits = [-1.,1.] plotaxes.title = 'Velocity' # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 1 plotitem.plotstyle = '-' plotitem.color = '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 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): #-------------------------- """ 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 #----------------------------------------- # 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 = 'Depth Contour' plotaxes.scaled = False # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 0 plotitem.pcolor_cmap = colormaps.yellow_red_blue # not the default colormap plotitem.pcolor_cmin = 0.00 plotitem.pcolor_cmax = 2.80*hn plotitem.add_colorbar = True plotitem.celledges_show = 0 plotitem.patchedges_show = 1 plotitem.show = True # show on plot? #----------------------------------------- # Figure for zoomed-in pcolor plot #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='q[0]_zoomed', figno=1) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [8.60,domain_x] plotaxes.ylimits = [-domain_y/2.0,domain_y/2.0] plotaxes.title = 'Zoomed-in Depth Contour' plotaxes.scaled = True # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 0 plotitem.pcolor_cmap = colormaps.yellow_red_blue # not the default colormap plotitem.pcolor_cmin = 0.00 plotitem.pcolor_cmax = 5.00*hn plotitem.add_colorbar = True plotitem.celledges_show = 0 plotitem.patchedges_show = 1 plotitem.show = True # show on plot? #----------------------------------------- # Figure for momentum pcolor plot #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='q[1]', figno=2) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'qx Contour' plotaxes.scaled = False # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 1 plotitem.pcolor_cmap = colormaps.yellow_red_blue # not the default colormap plotitem.pcolor_cmin = 0.00 plotitem.pcolor_cmax = 'auto' plotitem.add_colorbar = True plotitem.celledges_show = 0 plotitem.patchedges_show = 1 plotitem.show = True # show on plot? # 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.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 visclaw.data.ClawPlotData. Output: a modified version of plotdata. """ from clawpack.visclaw import colormaps if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data # Figure for pcolor plot plotfigure = plotdata.new_plotfigure(name='pcolor', figno=0) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0, 1] plotaxes.ylimits = [0, 1] plotaxes.title = 'Solution' plotaxes.scaled = True # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 0 plotitem.pcolor_cmap = colormaps.yellow_red_blue plotitem.pcolor_cmin = 0.1 plotitem.pcolor_cmax = 1. plotitem.add_colorbar = True plotitem.amr_celledges_show = [0] plotitem.amr_patchedges_show = [0] # 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 = [0, 1] plotaxes.ylimits = [0, 1] plotaxes.title = 'Solution' plotaxes.scaled = True plotaxes.afteraxes = addgauges # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_contour') plotitem.plot_var = 0 plotitem.contour_nlevels = 20 plotitem.contour_min = 0.01 plotitem.contour_max = 0.99 plotitem.amr_contour_show = [0, 0, 1, 1] plotitem.amr_contour_colors = ['g', 'g', 'r', 'b'] # color on each level plotitem.amr_patch_bgcolor = ['#ffeeee', '#eeeeff', '#eeffee', '#ddffff'] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 # 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 = [0, 1] plotaxes.ylimits = [0, 1] 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', '#ddffff'] plotitem.amr_celledges_show = [1, 0, 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-' #----------------------------------------- # Plots of timing (CPU and wall time): def make_timing_plots(plotdata): from clawpack.visclaw import plot_timing_stats import os, sys try: timing_plotdir = plotdata.plotdir + '/_timing_figures' os.system('mkdir -p %s' % timing_plotdir) # adjust units for plots based on problem: units = { 'comptime': 'seconds', 'simtime': 'dimensionless', 'cell': 'millions' } plot_timing_stats.make_plots(outdir=plotdata.outdir, make_pngs=True, plotdir=timing_plotdir, units=units) except: print('*** Error making timing plots') otherfigure = plotdata.new_otherfigure(name='timing plots', fname='_timing_figures/timing.html') otherfigure.makefig = make_timing_plots # Parameters used only when creating html and/or latex hardcopy # e.g., via 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): #-------------------------- """ 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 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('Pressure at t = %5.3f seconds' % t, fontsize=26) yticks(fontsize=23) xticks(fontsize=23) def fix_plot_innerprod(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('Inner Product at t = %5.3f seconds' % t, fontsize=26) yticks(fontsize=23) xticks(fontsize=23) # Figure for q[0] plotfigure = plotdata.new_plotfigure(name='Pressure', 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 = [-1.1,1.1] plotaxes.title = 'Pressure' 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}] # Figure for inner product, q[2] plotfigure = plotdata.new_plotfigure(name='Inner Product', figno=10) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' #plotaxes.ylimits = [-.5,1.1] # use when taking inner product with forward solution plotaxes.ylimits = [-0.01,0.02] # use when taking inner product with Richardson error plotaxes.title = 'Inner Product' plotaxes.afteraxes = fix_plot_innerprod # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d') plotitem.plot_var = 2 plotitem.amr_color = 'b' plotitem.amr_plotstyle = 'o' plotitem.amr_kwargs = [{'linewidth':2}] plotitem.amr_kwargs = [{'markersize':4}] plotitem.show = True # show on plot? # 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 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 # Figure for q[0] plotfigure = plotdata.new_plotfigure(name='Water depth', figno=1) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' # plotaxes.ylimits = [0.0, 2.8*hn] plotaxes.title = 'Depth (m)' # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 0 plotitem.plotstyle = '-o' plotitem.color = '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
""" Create the BM2 files requested by Pat Lynett. """ from pylab import * from scipy import interpolate from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.outdir = '_output_1-3sec_alltime' #tfinal = 4.9 * 3600. tfinal = 6.4 * 3600. # for alltime dt = 1. # time increment for output files tout = arange(0., tfinal, dt) g = plotdata.getgauge(3333) p = interpolate.interp1d(g.t, g.q[3, :]) # interpolate surface g3333_eta = p(tout) g = plotdata.getgauge(7761) p = interpolate.interp1d(g.t, g.q[3, :]) # interpolate surface g7761_eta = p(tout) g = plotdata.getgauge(1125) u = g.q[1, :] / g.q[0, :] v = g.q[2, :] / g.q[0, :] s = sqrt(u**2 + v**2) p = interpolate.interp1d(g.t, s) # interpolate speed
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 if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data 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-3 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.pcolor_cmap = geoplot.tsunami_colormap plotitem.pcolor_cmin = -0.1 plotitem.pcolor_cmax = 0.1 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 = [0, 0, 0] plotitem.patchedges_show = 1 plotaxes.xlimits = [-2, 2] plotaxes.ylimits = [-2, 2] # 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 = linspace(-.1, 0.5, 20) plotitem.amr_contour_colors = ['k'] # color on each level plotitem.kwargs = {'linestyles': 'solid'} plotitem.amr_contour_show = [1] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True #----------------------------------------- # Figure for cross section #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='cross-section', figno=1) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-2, 2] plotaxes.ylimits = [-0.15, 0.3] plotaxes.title = 'Cross section at y=0' def plot_topo_xsec(current_data): from pylab import plot, hold, cos, sin, where, legend, nan t = current_data.t hold(True) x = linspace(-2, 2, 201) y = 0. B = h0 * (x**2 + y**2) / a**2 - h0 eta1 = sigma * h0 / a**2 * (2. * x * cos(omega * t) + 2. * y * sin(omega * t) - sigma) etatrue = where(eta1 > B, eta1, nan) plot(x, etatrue, 'r', label="true solution", linewidth=2) plot(x, B, 'g', label="bathymetry") ## plot([0],[-1],'kx',label="Level 1") # shouldn't show up in plots, ## plot([0],[-1],'bo',label="Level 2") # but will produced desired legend plot([0], [-1], 'bo', label="Computed") ## need to fix plotstyle legend() hold(False) plotaxes.afteraxes = plot_topo_xsec plotitem = plotaxes.new_plotitem(plot_type='1d_from_2d_data') def xsec(current_data): # Return x value and surface eta at this point, along y=0 from pylab import find, ravel x = current_data.x y = current_data.y dy = current_data.dy q = current_data.q ij = find((y <= dy / 2.) & (y > -dy / 2.)) x_slice = ravel(x)[ij] eta_slice = ravel(q[3, :, :])[ij] return x_slice, eta_slice plotitem.map_2d_to_1d = xsec plotitem.plotstyle = 'kx' ## need to be able to set amr_plotstyle plotitem.kwargs = {'markersize': 3} plotitem.amr_show = [1] # plot on all levels #----------------------------------------- # Figure for grids alone #----------------------------------------- plotfigure = plotdata.new_plotfigure(name='grids', figno=2) plotfigure.show = True # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-2, 2] plotaxes.ylimits = [-2, 2] plotaxes.title = 'grids' plotaxes.scaled = True # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_patch') plotitem.amr_patch_bgcolor = ['#ffeeee', '#eeeeff', '#eeffee'] plotitem.amr_celledges_show = [1, 1, 0] plotitem.amr_patchedges_show = [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 = [] # 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() plotdata.clearfigures() def fixticks1(current_data): from pylab import ticklabel_format, grid ticklabel_format(format='plain',useOffset=False) grid(True) def fixticks(current_data): from pylab import ticklabel_format, plot,grid,ones,sqrt, \ legend,title,ylabel,text ticklabel_format(format='plain',useOffset=False) # to plot max elevation over entire computation: #if xmax is not None: # plot(xmax, etamax, 'r') #grid(True) hl = 3200. hr = 200. greens = (hl/hr)**(0.25) print('greens = ',greens) #plot(current_data.x, greens*ones(current_data.x.shape),'g--') plot(xlimits,[greens,greens],'g--', label='$C_g$, Greens Law') ctrans = 2*sqrt(hl)/(sqrt(hl)+sqrt(hr)) crefl = (sqrt(hl)-sqrt(hr))/(sqrt(hl)+sqrt(hr)) print('ctrans = ',ctrans) plot(xlimits,[ctrans,ctrans],'r--', label='$C_T$, Transmission coefficient') print('crefl = ',crefl) plot(xlimits,[crefl,crefl],'m--', label='$C_R$, Reflection coefficient') legend(loc='upper left') title('') ylabel('meters', fontsize=14) if current_data.frameno == 0: text(-95,-0.4,'$\longrightarrow$',fontsize=20) text(-95,-0.6,'Incident') h = current_data.q[0,:] mx2 = int(round(len(h)/2.)) etamax2 = (h[:mx2] - hl).max() print('mx2 = %i, etamax2 = %g' % (mx2,etamax2)) if (current_data.frameno == 5) and (etamax2 > 0.1): text(-190,-0.5,'$\longleftarrow$',fontsize=20) text(-190,-0.7,'Reflected') text(30,-0.5,'$\longrightarrow$',fontsize=20) text(15,-0.7,'Transmitted') if (current_data.frameno == 6) and (etamax2 > 0.1): text(-260,-0.5,'$\longleftarrow$',fontsize=20) text(-260,-0.7,'Reflected') text(40,-0.5,'$\longrightarrow$',fontsize=20) text(25,-0.7,'Transmitted') elif (current_data.frameno == 6): text(-20,-0.5,'$\longleftarrow$',fontsize=20) text(-20,-0.7,'Reflected') text(70,-0.5,'$\longrightarrow$',fontsize=20) text(65,-0.7,'Transmitted') plotfigure = plotdata.new_plotfigure(name='domain', figno=0) plotfigure.kwargs = {'figsize':(7,6.5)} plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'axes([.1,.4,.8,.5])' #'subplot(211)' plotaxes.xlimits = xlimits #plotaxes.xlimits = [-100e3,-20e3] plotaxes.ylimits = [-1,3] plotaxes.title = 'Surface displacement' plotaxes.afteraxes = fixticks plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = geoplot.surface plotitem.color = 'b' plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.color = 'k' plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotaxes = plotfigure.new_plotaxes() plotaxes.show = False plotaxes.axescmd = 'subplot(312)' plotaxes.xlimits = xlimits #plotaxes.xlimits = [-100e3,-20e3] #plotaxes.ylimits = [-1000, 1000] #plotaxes.title = 'Full depth' plotaxes.title = 'momentum' plotaxes.afteraxes = fixticks1 plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem = plotaxes.new_plotitem(plot_type='1d_fill_between') plotitem.show = False plotitem.plot_var = geoplot.surface plotitem.plot_var2 = geoplot.topo plotitem.color = 'b' plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.color = 'k' plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = 1 plotitem.color = 'k' plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'axes([.1,.1,.8,.2])' #'subplot(212)' plotaxes.xlimits = xlimits #plotaxes.xlimits = [-100e3,-20e3] #plotaxes.ylimits = [-1000, 1000] #plotaxes.title = 'Full depth' #plotaxes.title = 'topography' def fix_topo_plot(current_data): from pylab import title,xlabel title('') xlabel('kilometers', fontsize=14) plotaxes.afteraxes = fix_topo_plot plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem = plotaxes.new_plotitem(plot_type='1d_plot') #plotitem.show = False plotitem.plot_var = geoplot.topo plotitem.color = 'k' plotitem.MappedGrid = True plotitem.mapc2p = mapc2p #---------- plotfigure = plotdata.new_plotfigure(name='shore', figno=1) #plotfigure.kwargs = {'figsize':(9,11)} plotfigure.show = False plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(211)' plotaxes.xlimits = [0,80e3] plotaxes.ylimits = [-4,4] plotaxes.title = 'Zoom on shelf' plotaxes.afteraxes = fixticks plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = geoplot.surface #plotitem = plotaxes.new_plotitem(plot_type='1d_fill_between') #plotitem.plot_var = geoplot.surface #plotitem.plot_var2 = geoplot.topo plotitem.color = 'b' plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = geoplot.topo plotitem.color = 'k' plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(212)' #plotaxes.xlimits = [-2000,2000] plotaxes.xlimits = [-1000,1000] #plotaxes.ylimits = [-10,40] plotaxes.ylimits = [-20,60] plotaxes.title = 'Zoom around shore' plotaxes.afteraxes = fixticks plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False plotitem.plot_var = geoplot.surface plotitem = plotaxes.new_plotitem(plot_type='1d_fill_between') plotitem.plot_var = geoplot.surface plotitem.plot_var2 = geoplot.topo plotitem.color = 'b' plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.plot_var = geoplot.topo plotitem.color = 'k' plotitem.MappedGrid = True plotitem.mapc2p = mapc2p plotdata.printfigs = True # Whether to output figures plotdata.print_format = 'png' # What type of output format plotdata.print_framenos = 'all' # Which frames to output plotdata.print_fignos = 'all' # Which figures to print plotdata.html = True # Whether to create HTML files plotdata.latex = False # Whether to make LaTeX output plotdata.parallel = True 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 clawpack.visclaw.data import ClawPlotData from numpy import linspace if plotdata is None: plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data # To plot gauge locations on pcolor or contour plot, use this as # an afteraxis function: def addgauges(current_data): from clawpack.visclaw import gaugetools gaugetools.plot_gauge_locations(current_data.plotdata, \ gaugenos='all', format_string='ko', add_labels=True) 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) #----------------------------------------- # 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 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 = [1, 1, 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] #----------------------------------------- # 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-' 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? 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() plotdata.clearfigures() # clear any old figures,axes,items data def draw_interface_add_legend(current_data): from pylab import plot from numpy import abs, where, log10, exp, sin, linspace #plot([0., 0.], [-1000., 1000.], 'k--') try: from clawpack.visclaw import legend_tools labels = [ 'Level 1', 'Level 2', 'Level 3', 'Level 4', 'Level 5', 'Level 6', 'Level 7', 'Level 8', 'Level 9', 'Level 10' ] legend_tools.add_legend(labels, colors=amr_color, markers=amr_marker, linestyles=amr_linestyle, loc='upper left') except: pass # exact solution: t = current_data.t xx = linspace(-12, 12, 10000) #xpct = xx + t #xmct = xx - t #p_true = ar*exp(-betar*(xpct-5)**2) * sin(freqr*xpct) + \ # al*exp(-betal*(xmct+5)**2) * sin(freql*xmct) p_true = p_true_fcn(xx, t) plot(xx, p_true, 'k') def draw_interface_add_legend_innerprod(current_data): from pylab import plot #plot([0., 0.], [-1000., 1000.], 'k--') try: from clawpack.visclaw import legend_tools labels = ['Level 3', 'Level 4'] legend_tools.add_legend(labels, colors=['r', 'c'], markers=['o', '^'], linestyles=['', ''], loc='upper left') except: pass def add_grid(current_data): from pylab import grid grid(True) def color_by_level(current_data): from pylab import vstack, contourf, plot, ones, arange, colorbar fs = current_data.framesoln pout, level = gridtools1.grid_output_1d(fs, 0, xout, return_level=True) Xout = vstack((xout, xout)) Yout = vstack((-1.1 * ones(xout.shape), 1.1 * ones(xout.shape))) L = vstack((level, level)) contourf(Xout, Yout, L, v_levels, colors=c_levels) cb = colorbar(ticks=range(1, maxlevels + 1)) cb.set_label('AMR Level') plot(xout, pout, 'k') #import pdb; pdb.set_trace() def error_color_by_level(current_data): from pylab import vstack,contourf,plot,ones,arange,colorbar,\ ylim,semilogy fs = current_data.framesoln t = current_data.t pout, level = gridtools1.grid_output_1d(fs, 0, xout, return_level=True) err = abs(pout - p_true_fcn(xout, t)) Xout = vstack((xout, xout)) Yout = vstack((ylimits_error[0] * ones(xout.shape), ylimits_error[1] * ones(xout.shape))) L = vstack((level, level)) contourf(Xout, Yout, L, v_levels, colors=c_levels) cb = colorbar(ticks=range(1, maxlevels + 1)) cb.set_label('AMR Level') semilogy(xout, err, 'k') #semilogy(xout,level,'k') if tolerance is not None: plot(xout, tolerance * ones(xout.shape), 'r--') # Figure for q[0] plotfigure = plotdata.new_plotfigure(name='Pressure 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 = xlimits plotaxes.ylimits = [-1.1, 1.1] plotaxes.title = 'Pressure' 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 = amr_color plotitem.amr_plotstyle = amr_plotstyle plotitem.amr_data_show = [1, 1, 1] plotitem.amr_kwargs = [{ 'markersize': 5 }, { 'markersize': 4 }, { 'markersize': 3 }] # Figure for error # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(2,1,2)' # bottom figure plotaxes.xlimits = xlimits plotaxes.ylimits = [1e-10, 1] plotaxes.title = 'abs(Error)' plotaxes.afteraxes = add_grid # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d_semilogy') plotitem.plot_var = abs_error plotitem.amr_color = amr_color plotitem.amr_plotstyle = amr_plotstyle plotitem.amr_data_show = [1, 1, 1, 1, 1] plotfigure = plotdata.new_plotfigure(name='Pressure and Error', figno=2) plotfigure.show = False plotfigure.kwargs = {'figsize': (12, 8)} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(2,1,1)' # top figure plotaxes.xlimits = xlimits plotaxes.ylimits = [-1.1, 1.1] plotaxes.title = 'Pressure' plotaxes.beforeaxes = color_by_level plotaxes.afteraxes = add_grid #draw_interface_add_legend # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.show = False plotitem.plot_var = 0 plotitem.amr_color = amr_color plotitem.amr_plotstyle = amr_plotstyle plotitem.amr_data_show = [1, 1, 1] plotitem.amr_kwargs = [{ 'markersize': 5 }, { 'markersize': 4 }, { 'markersize': 3 }] # Figure for error # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.axescmd = 'subplot(2,1,2)' # bottom figure plotaxes.xlimits = xlimits plotaxes.ylimits = ylimits_error plotaxes.title = 'abs(Error)' plotaxes.beforeaxes = error_color_by_level plotaxes.afteraxes = add_grid # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d_semilogy') plotitem.show = False plotitem.plot_var = abs_error plotitem.amr_color = amr_color plotitem.amr_plotstyle = amr_plotstyle plotitem.amr_data_show = [1, 1, 1, 1, 1] def plot_finest(current_data): from pylab import vstack,contourf,plot,ones,arange,colorbar,\ xlim,ylim,semilogy,figure,title,clf,subplot,show,draw,\ tight_layout,ylabel,grid fs = current_data.framesoln t = current_data.t print('+++ plot_finest at t = %.4f' % t) pout, level = gridtools1.grid_output_1d(fs, 0, xout, return_level=True) err = abs(pout - p_true_fcn(xout, t)) Xout = vstack((xout, xout)) L = vstack((level, level)) figure(3, figsize=(12, 8)) clf() subplot(311) Yout = vstack((-1.1 * ones(xout.shape), 1.1 * ones(xout.shape))) contourf(Xout, Yout, L, v_levels, colors=c_levels) cb = colorbar(ticks=range(1, maxlevels + 1)) cb.set_label('AMR Level') plot(xout, pout, 'k') xlim(xlimits) ylim(-1.1, 1.1) title('Pressure at t = %.4f' % t) subplot(312) Yout = vstack((ylimits_error[0] * ones(xout.shape), ylimits_error[1] * ones(xout.shape))) contourf(Xout, Yout, L, v_levels, colors=c_levels) cb = colorbar(ticks=range(1, maxlevels + 1)) cb.set_label('AMR Level') semilogy(xout, err, 'k') if tolerance is not None: plot(xout, tolerance * ones(xout.shape), 'r--') xlim(xlimits) ylim(ylimits_error) ylabel('abs(error)') grid(True) subplot(313) Yout = vstack( (0 * ones(xout.shape), (maxlevels + 1) * ones(xout.shape))) contourf(Xout, Yout, L, v_levels, colors=c_levels) cb = colorbar(ticks=range(1, maxlevels + 1)) cb.set_label('AMR Level') plot(xout, level, 'k') xlim(xlimits) ylim(0, maxlevels + 1) ylabel('AMR Level') tight_layout() grid(True) draw() plotfigure = plotdata.new_plotfigure(name='finest', figno=3) plotfigure.kwargs = {'figsize': (12, 8)} plotdata.afterframe = plot_finest # Figure for inner product, q[2] plotfigure = plotdata.new_plotfigure(name='Inner Product', figno=10) plotfigure.show = False # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-12, 12] plotaxes.ylimits = [ -15, 1 ] # use when taking inner product with forward solution #plotaxes.ylimits = [-0.01,0.02] # use when taking inner product with Richardson error plotaxes.title = 'log10(Inner Product)' plotaxes.afteraxes = draw_interface_add_legend # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d') plotitem.plot_var = plot_innerprod plotitem.amr_color = amr_color plotitem.amr_plotstyle = amr_plotstyle plotitem.amr_data_show = [0, 1, 1, 1, 0] plotitem.show = True # show on plot? # Figure for abs(error) plotfigure = plotdata.new_plotfigure(name='Error', figno=11) plotfigure.show = False # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [-12, 12] plotaxes.ylimits = [-15, 1] plotaxes.title = 'log10(Error)' plotaxes.afteraxes = draw_interface_add_legend # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='1d') plotitem.plot_var = 0 #plot_error plotitem.amr_color = amr_color plotitem.amr_plotstyle = amr_plotstyle plotitem.amr_data_show = [1, 1, 1, 1, 1] plotitem.show = True # show on plot? #----------------------------------------- # 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 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 # Figure for pressure # ------------------- plotfigure = plotdata.new_plotfigure(name='Pressure', figno=0) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Pressure' plotaxes.scaled = True # so aspect ratio is 1 # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 0 plotitem.pcolor_cmap = colormaps.blue_yellow_red plotitem.pcolor_cmin = -2.0 plotitem.pcolor_cmax = 2.0 plotitem.add_colorbar = True # Figure for scatter plot # ----------------------- plotfigure = plotdata.new_plotfigure(name='scatter', figno=3) plotfigure.show = (qref_dir is not None) # don't plot if 1d solution is missing # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0, 1.5] plotaxes.ylimits = [-2., 4.] plotaxes.title = 'Scatter plot' # Set up for item on these axes: scatter of 2d data plotitem = plotaxes.new_plotitem(plot_type='1d_from_2d_data') def p_vs_r(current_data): # Return radius of each grid cell and p value in the cell from pylab import sqrt x = current_data.x y = current_data.y r = sqrt(x**2 + y**2) q = current_data.q p = q[0, :, :] return r, p plotitem.map_2d_to_1d = p_vs_r plotitem.plot_var = 0 plotitem.plotstyle = 'o' plotitem.color = 'b' plotitem.show = (qref_dir is not None) # show on plot? # Set up for item on these axes: 1d reference solution plotitem = plotaxes.new_plotitem(plot_type='1d_plot') plotitem.outdir = qref_dir plotitem.plot_var = 0 plotitem.plotstyle = '-' plotitem.color = 'r' plotitem.kwargs = {'linewidth': 2} plotitem.show = True # show on plot? def make_legend(current_data): import matplotlib.pyplot as plt plt.legend(('2d data', '1d reference solution')) plotaxes.afteraxes = make_legend # 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? return plotdata
from pylab import * from clawpack.visclaw.data import ClawPlotData from scipy import interpolate # Aux Parameters gammawat = 7.15 pinfwat = 300000000.0 rhow = 1000.0 gaugeno = 1 #1 and 2 plotdata = ClawPlotData() # Folder from out or out2 differ in that the Riemann solver used uses the Lagrangian transformation # on all of water or only in the interface respectively # CHOOSE out or outmap in the outdir to choose from non-mapped or mapped version of code outstr = '_outlim' #plotdata.outdir = '../../_output' # set to the proper output directory #g = plotdata.getgauge(gaugeno) #p = zeros(g.t.size) #p = (gammawat - 1.0)*(g.q[3,:] - 0.5*(g.q[1,:]*g.q[1,:] + g.q[2,:]*g.q[2,:])/g.q[0,:]) - gammawat*pinfwat #p = 0.001*p # Convert to KPa #tt = g.t*1000000 # Convert to microsec #plot(tt, p, '-g', label="Level New", linewidth=3) plotdata.outdir = outstr +'_conv_40x20_lvl6_refrat2-2-2-2-2' # set to the proper output directory g = plotdata.getgauge(gaugeno) p = zeros(g.t.size) p = (gammawat - 1.0)*(g.q[3,:] - 0.5*(g.q[1,:]*g.q[1,:] + g.q[2,:]*g.q[2,:])/g.q[0,:]) - gammawat*pinfwat
""" Create the BM2 files requested by Pat Lynett. """ from pylab import * from scipy import interpolate from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.outdir = '_output_1-3sec_alltime' #tfinal = 4.9 * 3600. tfinal = 6.4 * 3600. # for alltime dt = 1. # time increment for output files tout = arange(0., tfinal, dt) g = plotdata.getgauge(3333) p = interpolate.interp1d(g.t, g.q[3,:]) # interpolate surface g3333_eta = p(tout) g = plotdata.getgauge(7761) p = interpolate.interp1d(g.t, g.q[3,:]) # interpolate surface g7761_eta = p(tout) g = plotdata.getgauge(1125) u = g.q[1,:]/g.q[0,:] v = g.q[2,:]/g.q[0,:] s = sqrt(u**2 + v**2) p = interpolate.interp1d(g.t, s) # interpolate speed
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. """ from clawpack.visclaw import colormaps if plotdata is None: from clawpack.visclaw.data import ClawPlotData plotdata = ClawPlotData() plotdata.clearfigures() # clear any old figures,axes,items data # Figure for density - pcolor plotfigure = plotdata.new_plotfigure(name='Density', figno=0) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0,1] plotaxes.ylimits = [0,1] plotaxes.title = 'Density' 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.yellow_red_blue plotitem.pcolor_cmin = 0. plotitem.pcolor_cmax = 2. plotitem.add_colorbar = True plotitem.amr_patchedges_show = [0] plotitem.amr_celledges_show = [0] # Figure for density - Schlieren plotfigure = plotdata.new_plotfigure(name='Schlieren', figno=1) # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0,1] plotaxes.ylimits = [0,1] plotaxes.title = 'Density' plotaxes.scaled = True # so aspect ratio is 1 # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_schlieren') plotitem.schlieren_cmin = 0.0 plotitem.schlieren_cmax = 1.0 plotitem.plot_var = 0 plotitem.add_colorbar = False # 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 = [0,1] plotaxes.ylimits = [0,1] 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 = [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 = [0,1] plotaxes.ylimits = [0,1] plotaxes.title = 'Density' # 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): # -------------------------- """ 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, geoplot plotdata.clearfigures() # clear any old figures,axes,items data # ----------------------------------------- # Figure for pcolor plot # ----------------------------------------- def change_fonts(current_data): pylab.xticks(fontsize=21, fontname="Tex Gyre Pagella") pylab.yticks(fontsize=21, fontname="Tex Gyre Pagella") "Fill the step area with a black rectangle." import matplotlib.pyplot as plt rectangle = plt.Rectangle((x1, y1), 0.4, 0.4, color="k", fill=True) plt.gca().add_patch(rectangle) plt.rcParams['font.family'] = 'Tex Gyre Pagella' plt.rcParams['font.size'] = 15 t = current_data.t plt.title("Depth at time t = %10.4e" % t, fontsize=16) def change_fonts2(current_data): pylab.xticks(fontsize=17, fontname="Tex Gyre Pagella") pylab.yticks(fontsize=17, fontname="Tex Gyre Pagella") # # "Fill the step area with a black rectangle." # import matplotlib.pyplot as plt # rectangle = plt.Rectangle((x1,y1),0.4,0.4,color="k",fill=True) # plt.gca().add_patch(rectangle) # plt.rcParams['font.family'] = 'Tex Gyre Pagella' # plt.rcParams['font.size'] = 14 # t = current_data.t # plt.title("Depth at time t = %10.4e" % t, fontsize=16) def change_fonts3(current_data): pylab.xticks(fontsize=17, fontname="Tex Gyre Pagella") pylab.yticks(fontsize=17, fontname="Tex Gyre Pagella") # "Fill the step area with a black rectangle." import matplotlib.pyplot as plt rectangle = plt.Rectangle((x1, y1), 0.4, 0.4, color="k", fill=True) plt.gca().add_patch(rectangle) plt.rcParams['font.family'] = 'Tex Gyre Pagella' plt.rcParams['font.size'] = 14 t = current_data.t plt.title("Momentum at time t = %10.4e" % t, fontsize=16) plotfigure = plotdata.new_plotfigure(name='q[0]', figno=0) plotfigure.kwargs = {'figsize': [10, 10], 'facecolor': 'white'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Depth Contour' plotaxes.scaled = False # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 0 plotitem.pcolor_cmap = geoplot.tsunami_colormap # not the default colormap plotitem.pcolor_cmin = 0.00 plotitem.pcolor_cmax = 2.80 * hn plotitem.add_colorbar = True plotitem.celledges_show = 0 plotitem.patchedges_show = 1 plotitem.show = True # show on plot? plotaxes.afteraxes = change_fonts # ----------------------------------------- # Figure for zoomed-in pcolor plot # ----------------------------------------- plotfigure = plotdata.new_plotfigure(name='q[0]_zoomed', figno=1) plotfigure.kwargs = {'figsize': [10, 10], 'facecolor': 'white'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [9.4, domain_x] plotaxes.ylimits = [-domain_y / 2.0, domain_y / 2.0] plotaxes.title = 'Zoomed-in Depth Contour' plotaxes.scaled = True # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 0 plotitem.pcolor_cmap = geoplot.tsunami_colormap # not the default colormap plotitem.pcolor_cmin = 0.00 plotitem.pcolor_cmax = 5.00 * hn plotitem.add_colorbar = True plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotitem.show = True # show on plot? plotaxes.afteraxes = change_fonts2 # ----------------------------------------- # Figure for momentum pcolor plot # ----------------------------------------- plotfigure = plotdata.new_plotfigure(name='q[1]', figno=2) plotfigure.kwargs = {'figsize': [10, 10], 'facecolor': 'white'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'qx Contour' plotaxes.scaled = False # Set up for item on these axes: plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor') plotitem.plot_var = 1 plotitem.pcolor_cmap = geoplot.tsunami_colormap # not the default colormap plotitem.pcolor_cmin = 0.00 plotitem.pcolor_cmax = 'auto' plotitem.add_colorbar = True plotitem.celledges_show = 0 plotitem.patchedges_show = 1 plotitem.show = True # show on plot? plotaxes.afteraxes = change_fonts3 # ----------------------------------------- # Figure for cross section at y=0 # ----------------------------------------- plotfigure = plotdata.new_plotfigure(name='cross-section', figno=3) plotfigure.kwargs = {'figsize': [10, 10], 'facecolor': 'white'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = [0.0, domain_x] plotaxes.ylimits = [0.0, hn * 14.0] plotaxes.title = 'Cross section at y=0' def plot_topo_xsec(current_data): from pylab import plot, cos, sin, where, legend, nan t = current_data.t x = np.linspace(0.0, domain_x, 201) #y = 0. B = where(x > 40.0, where(x < 40.40, 7.0, 0.0), 0.0) plot(x, B, 'g', label="internal walls") legend() pylab.legend(fontsize=18) pylab.xticks(fontsize=18, fontname="Tex Gyre Pagella") pylab.yticks(fontsize=18, fontname="Tex Gyre Pagella") t = current_data.t pylab.title("Run-up at time t = %10.4e" % t, fontsize=16) plotaxes.afteraxes = plot_topo_xsec plotitem = plotaxes.new_plotitem(plot_type='1d_from_2d_data') def xsec(current_data): # Return x value and surface depth at this point, along y=0 from pylab import where, ravel x = current_data.x y = ravel(current_data.y) dy = current_data.dy q = current_data.q ij = where((y <= dy / 1.) & (y > -dy / 1.)) x_slice = ravel(x)[ij] ij1 = where((x_slice > 40.40) | (x_slice < 40.0)) x_slice = x_slice[ij1] depth_slice = ravel(q[0, :, :])[ij] depth_slice = depth_slice[ij1] return x_slice, depth_slice plotitem.map_2d_to_1d = xsec plotitem.plotstyle = 'k-o' # need to be able to set amr_plotstyle plotitem.kwargs = {'markersize': 4} # ----------------------------------------- # Figure for amr patches # ----------------------------------------- # Figure for grid cells plotfigure = plotdata.new_plotfigure(name='cells', figno=4) plotfigure.kwargs = {'figsize': [10, 10], 'facecolor': 'white'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' 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] # ----------------------------------------- # Figure for contour lines # ----------------------------------------- plotfigure = plotdata.new_plotfigure(name='contour', figno=5) plotfigure.kwargs = {'figsize': [15, 15], 'facecolor': 'white'} # Set up for axes in this figure: plotaxes = plotfigure.new_plotaxes() plotaxes.xlimits = 'auto' plotaxes.ylimits = 'auto' plotaxes.title = 'Contour lines' 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.2 * hn, 10 * hn, 50) plotitem.amr_contour_colors = ['r', 'g', 'b'] # color on each level plotitem.amr_patch_bgcolor = ['#ffeeee', '#eeeeff', '#eeffee'] plotitem.celledges_show = 0 plotitem.patchedges_show = 0 plotaxes.afteraxes = change_fonts3 # 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.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 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