clawplotting.py.html | clawcode2html |
Source file: clawplotting.py | |
Directory: /home/rjl/www/pubs/cise08/cise08levequeV2 | |
Converted: Wed Jul 2 2008 at 13:40:44 | |
This documentation file will not reflect any later changes in the source file. |
""" clawplotting: Clawpack plotting routines in python Uses matplotlib which requires numpy and pylab """ # ---------------------------------------------------------- import os,sys from numpy import * # to work with EagleClaw: import matplotlib matplotlib.use('Agg') # Use an image backend #import pylab from pylab import * from clawtools import * #================================================================== def plotframe1(frame=0, clawframe=None, outdir='.', refresh=True): #================================================================== """ Makes a 1d plot of corresponding frame and data clawframe If clawframe (of class ClawFrame) is already loaded then the data in this frame is plotted (for which frame = clawframe.frame). If clawframe is None, then clawframe is created and data read in from files fort.t000N and fort.q000N where N = frame value passed in. In this case the value of outdir is needed to tell where to find the data. If refresh == False then the new plot is added to an existing plot, otherwise a clf() command is given before plotting. """ if clawframe is not None: # frame data has already been read into clawframe of class ClawFrame frame = clawframe.frame # frame number else: # need to read in data for this frame clawframe = read_clawframe(frame,outdir) # For 1d, no AMR so there is only one grid: grid = clawframe.grids[0] t = clawframe.t if refresh: clf() else: hold(True) # set default plot parameter values: clawplotdata = setplot1() # values may be redefined in local setplot1user.py: if os.path.exists("setplot1user.py"): file = open('setplot1user.py','r') exec(file) file.close() if (setplot1user): clawplotdata = setplot1user(clawplotdata) else: print "Local file setplot1user.py exists but does not define" print " a function setplot1user" # the following plot parameters should now be set: mq = clawplotdata.mq axis_limits = clawplotdata.axis_limits user_variable = clawplotdata.user_variable user_variable_name = clawplotdata.user_variable_name mapped_grid = clawplotdata.mapped_grid plotstyle = clawplotdata.plotstyle if os.path.exists("beforeframe.py"): file = open("beforeframe.py",'r') exec(file) file.close() if mapped_grid: fname = os.path.join(os.getcwd(),"mapc2p.py") print "fname = ",fname try: file = open(fname,'r') exec(file) file.close() except: print "mapped_grid = True but no mapc2p.py file found in directory" print " ",os.getcwd() sys.exit(1) xp = mapc2p(grid.xcenter) else: xp = grid.xcenter if user_variable: try: file = open("%s.py" % user_variable_name, 'r') exec(file) file.close() except: print "user_variable = True and user_variable_name = ",\ user_variable_name print " but file %s.py not found" % user_variable_name sys.exit(1) exec('q = %s(grid.q,xp,t)' % user_variable_name) varname = user_variable_name mq = [-1] nplots = len(mq) for n in range(nplots): subplot(nplots,1,n+1) if not user_variable: q = grid.q[:,mq[n]-1] varname = 'q(%g)' % mq[n] plotcommand = "plot(xp,q,'%s')" % plotstyle exec(plotcommand) title("%s at time %8.4f" % (varname,t)) axis(axis_limits) if os.path.exists("afterframe.py"): execfile("afterframe.py") return clawframe #================================================================== def plotframe2(frame=0, clawframe=None, outdir='.', refresh=True): #================================================================== """ Makes a 2d plot of corresponding frame and data clawframe If clawframe (of class ClawFrame) is already loaded then the data in this frame is plotted (for which frame = clawframe.frame). If clawframe is None, then clawframe is created and data read in from files fort.t000N and fort.q000N where N = frame value passed in. In this case the value of outdir is needed to tell where to find the data. If refresh == False then the new plot is added to an existing plot, otherwise a clf() command is given before plotting. """ if clawframe is not None: # frame data has already been read into clawframe of class ClawFrame frame = clawframe.frame # frame number else: # need to read in data for this frame clawframe = read_clawframe(frame,outdir) t = clawframe.t if refresh: clf() hold(True) # set default plot parameter values: clawplotdata = setplot2() # values may be redefined in local setplot2user.py: if os.path.exists("setplot2user.py"): file = open('setplot2user.py','r') exec(file) file.close() if (setplot2user): clawplotdata = setplot2user(clawplotdata) else: print "Local file setplot2user.py exists but does not define" print " a function setplot2user" # the following plot parameters should now be set: mq = clawplotdata.mq axis_limits = clawplotdata.axis_limits plot_grid = clawplotdata.plot_grid grid_color = clawplotdata.grid_color plot_grid_edges = clawplotdata.plot_grid_edges grid_edge_color = clawplotdata.grid_edge_color user_variable = clawplotdata.user_variable user_variable_name = clawplotdata.user_variable_name mapped_grid = clawplotdata.mapped_grid plot_contour = clawplotdata.plot_contour contour_levels = clawplotdata.contour_levels min_contour = clawplotdata.min_contour max_contour = clawplotdata.max_contour contour_colors = clawplotdata.contour_colors plot_pcolor = clawplotdata.plot_pcolor pcolor_map = clawplotdata.pcolor_map c_min = clawplotdata.c_min c_max = clawplotdata.c_max plot_colorbar = clawplotdata.plot_colorbar if os.path.exists("beforeframe.py"): file = open("beforeframe.py",'r') exec(file) file.close() if (not plot_contour) & (not plot_pcolor): print "The solution will not be plotted since" print " plot_contour and plot_pcolor are both False" if mapped_grid: try: file = open("mapc2p.py",'r') exec(file) file.close() except: print "mapped_grid = True but no mapc2p.py file found in directory" print " ",os.getcwd() sys.exit(1) for gridno in range(clawframe.ngrids): grid = clawframe.grids[gridno] level = grid.level # AMR level of this grid if user_variable: try: execfile(user_variable_name) except: print "user_variable = True and user_variable_name = ",\ user_variable_name print " but file %s.py not found" % user_variable_name sys.exit(1) xc_center = grid.xcenter yc_center = grid.ycenter [X_center,Y_center] = meshgrid(xc_center,yc_center) if mapped_grid: X_center,Y_center = mapc2p(X_center,Y_center) xc_edge = grid.xedge yc_edge = grid.yedge [X_edge,Y_edge] = meshgrid(xc_edge,yc_edge) if mapped_grid: X_edge,Y_edge = mapc2p(X_edge,Y_edge) if user_variable: exec('q = %s(grid.q,X_center,Y_center,t)' % user_variable_name) if plot_grid[level-1]==2: for i in range(X_edge.shape[0]): plot(X_edge[i,:], Y_edge[i,:], grid_color) for i in range(X_edge.shape[1]): plot(X_edge[:,i], Y_edge[:,i], grid_color) if plot_grid_edges[level-1]: for i in [0, X_edge.shape[0]-1]: X1 = X_edge[i,:] Y1 = Y_edge[i,:] plot(X1, Y1, grid_edge_color) for i in [0, X_edge.shape[1]-1]: X1 = X_edge[:,i] Y1 = Y_edge[:,i] plot(X1, Y1, grid_edge_color) if not user_variable: q = grid.q[:,:,mq-1] varname = 'q(%g)' % mq if plot_pcolor: if plot_grid[level-1]: pobj = pcolor(X_edge, Y_edge, transpose(q), \ cmap=pcolor_map, edgecolors=grid_color, shading='faceted') else: pobj = pcolor(X_edge, Y_edge, transpose(q), \ cmap=pcolor_map, edgecolors='None', shading='flat') clim(c_min,c_max) if plot_contour: contour(X_center, Y_center, transpose(q), \ contour_levels, colors=contour_colors) if plot_pcolor: if plot_colorbar: #print "colorbar doesn't work reliably.... not plotting" colorbar(pobj) #colorbar(pad=0.1) title("%s at time %8.4f" % (varname,t)) axis(axis_limits) hold(False) if os.path.exists("afterframe.py"): execfile("afterframe.py") return clawframe #-------------- def setplot1(): #-------------- from clawtools import ClawData clawplotdata = ClawData() clawplotdata.mq = [1] clawplotdata.axis_limits = 'auto' clawplotdata.user_variable = False clawplotdata.user_variable_name = "" clawplotdata.mapped_grid = False clawplotdata.plotstyle = 'ro' return clawplotdata #------------------------------ def setplot1user(clawplotdata): #------------------------------ """ Default library version does nothing. Create a file setplot1user.py containing a modified function if you want to change parameters. This will be called after setplot1. """ return clawplotdata #-------------- def setplot2(): #-------------- from pylab import cm # colormaps from clawtools import ClawData clawplotdata = ClawData() clawplotdata.mq = 1 clawplotdata.axis_limits = 'auto' clawplotdata.user_variable = False clawplotdata.user_variable_name = "" clawplotdata.mapped_grid = False maxlevels = 10 clawplotdata.plot_grid = zeros(maxlevels) # don't plot grid lines clawplotdata.grid_color = 'k' # color to plot grid lines clawplotdata.plot_grid_edges = ones(maxlevels) # plot grid edges clawplotdata.grid_edge_color = 'k' # color to plot grid edges clawplotdata.plot_pcolor = True # pcolor plot? clawplotdata.pcolor_map = cm.RdYlBu # for pcolor plots - set a colormap clawplotdata.c_min = 0 clawplotdata.c_max = 4 clawplotdata.plot_colorbar = False clawplotdata.plot_contour = True # contour plot? clawplotdata.contour_levels = 30 # for specified number of contour lines # can instead set to a vector of values clawplotdata.min_contour = 0.0 # or can set these to min and clawplotdata.max_contour = 1.0 # max values, then set contour_levels # based on these clawplotdata.contour_colors = 'k' # colors parameter in contour plot return clawplotdata #------------------------------ def setplot2user(clawplotdata): #------------------------------ """ Default library version does nothing. Create a file setplot2user.py containing a modified function if you want to change parameters. This will be called after setplot2. """ return clawplotdata