|
plotframe2.m.html |
|
|
Source file: plotframe2.m
|
|
Directory: /home/rjl/git/rjleveque/clawpack-4.x/matlab
|
|
Converted: Sun May 15 2011 at 19:15:58
using clawcode2html
|
|
This documentation file will
not reflect any later changes in the source file.
|
%
% PLOTFRAME2 plots data from a single Clawpack output file.
%
% PLOTFRAME2 is called from PLOTCLAW2, the driver script for Clawpack
% graphics. PLOTFRAME2 uses parameters, defined in the user's
% workspace, usually in the SETPLOT2 script, to determine what kind of
% plot to create, and various other plotting options.
%
% See SETPLOT for a complete list of the parameters that the user can
% set.
%
% There are two basic types of plots available. These are
%
% Surface plots : 2d plots of the data. This data may be viewed as
% a manifold, if desired.
%
% Scatter plots : Spherically symmetric data is plotted as a
% function of a 1d variable, usually the distance from a fixed point
% (x0,y0). The result is a line-type plot of points representing the
% data.
%
% See SETPLOT, PLOTCLAW2, MANIFOLD.
if (~exist('amrdata'))
error('*** plotframe2 : ''amrdata'' does not exist; Call readamrdata or plotclaw2');
end;
if length(amrdata) == 0
disp(' ')
disp(['Frame ',num2str(Frame),'(',outputflag,') does not exist ***']);
disp(' ')
return;
end
disp(' ');
disp(['Frame ',num2str(Frame),' at time t = ',num2str(t)]);
if exist('beforeframe')==2
% make an m-file with this name for any other commands you
% want executed before drawing each frame, for example
% if you want to use axes to specify exactly where the
% plot will be in the window, aspect ratio, etc.
beforeframe;
end
% Do some checking to make sure input is right..
if (PlotType <= 3)
set_value('mappedgrid','MappedGrid',0);
if (mappedgrid == 1 & ~exist('mapc2p'))
error('*** MappedGrid = 1 but no ''mapc2p'' function was found.');
end;
set_value('manifold','Manifold',0);
if (manifold == 1 & ~exist('mapc2m'))
error('*** Manifold = 1, but no ''mapc2m'' function was found.');
end;
if (manifold == 1)
set_value('view_arg','UserView',3);
else
set_value('view_arg','UserView',2);
end;
set_value('cvalues','ContourValues',[]);
if (length(cvalues) == 1 & length(amrdata) > 1)
disp(' ');
disp(' *** Warning: Contour values will be chosen independently');
disp(' *** on each mesh patch. Set ContourValues to a vector of values');
disp(' *** to insure contour lines match across mesh boundaries.');
end;
if (PlotType == 2)
if (isempty(cvalues))
disp(' ');
disp(' *** Warning : You have specified PlotType == 2, but have');
disp(' *** not set any contour values. Set ContourValues to a ');
disp(' *** vector of values or integer (number of contour lines). ');
end;
end;
if (PlotType == 3)
% Change color map for schlieren plot
% colormap(flipud(gray(2048)).^5)
colormap(flipud(gray(2048)).^10)
if (~isempty(cvalues))
disp(' ');
disp(' *** Warning : ContourValues is set to a non-empty matrix.');
disp(' *** Schlieren data will be contoured.');
end;
end;
xscoords = [];
yscoords = [];
zscoords = 0;
sliceCoords = {xscoords, yscoords, zscoords};
sdir = {'x','y','z'};
% Stored in UserData of current figure (i.e. gcf);
clear_amrplot;
create_amrplot(MaxLevels,xscoords, yscoords, zscoords);
newplot; % Use this to deal with any hold on/ hold off issues.
end; % end of input checking for PlotType <= 3
if PlotType == 4
% -------------
% Scatter plots
% -------------
view_arg = 2;
set_value('usermap1d','UserMap1d',0);
if (usermap1d == 1)
if (~exist('map1d'))
error('*** You have set UserMap1d=1, but no ''map1d'' function was found');
end;
else
if ((~exist('x0') | ~exist('y0')))
str = sprintf(['*** plotframe2 : (x0,y0) must be defined before you\n',...
'*** can do a line or scatter plot, or set UserMap1d and create\n',...
'*** a function ''map1d''.']);
error(str);
end;
end;
set_value('mappedgrid','MappedGrid',0);
if (exist('ScatterStyle'))
pstyle = ScatterStyle;
elseif (exist('LineStyle'))
pstyle = LineStyle;
else
error([' *** plotframe2 : Set either ''ScatterStyle'' or ',...
'''LineStyle''.']);
end;
if (~iscell(pstyle))
error(['*** plotframe2 : ScatterStyle or LineStyle must be',...
'cell matrices. Use ''setplotstyle'' to set either of these ',...
'variables']);
end;
[linestyle,linecolors,markerstyle] = get_plotstyle(pstyle,MaxLevels);
clear_amrplot;
create_amrplot(MaxLevels);
newplot; % deals with some hold on/off issues...
end; % end of input checking for PlotType == 4
qmin = [];
qmax = [];
ncells = [];
%=============================================
% MAIN LOOP ON GRIDS FOR THIS FRAME:
%=============================================
ngrids = length(amrdata); % length of structure array
for ng = 1:ngrids,
gridno = amrdata(ng).gridno;
level = amrdata(ng).level;
% if we're not plotting data at this level, skip to next grid
if (PlotData(level) == 0)
continue;
end;
% Set block number for multi-block calculations.
set_blocknumber(gridno);
mx = amrdata(ng).mx;
my = amrdata(ng).my;
xlow = amrdata(ng).xlow;
ylow = amrdata(ng).ylow;
dx = amrdata(ng).dx;
dy = amrdata(ng).dy;
xedge = xlow + (0:mx)*dx;
yedge = ylow + (0:my)*dy;
xcenter = xedge(1:mx) + dx/2;
ycenter = yedge(1:my) + dy/2;
% for compatibility with old matlab41/plotframe2 convention:
x = xcenter;
y = ycenter;
% read q data:
data = amrdata(ng).data;
data = data';
if (UserVariable == 1)
% User has supplied a function to convert original q variables to
% the variable which is to be plotted, e.g. Mach number, entropy.
qdata = feval(UserVariableFile,data);
q = reshape(qdata,mx,my);
else
q = reshape(data(:,mq),mx,my);
end
amrdata(ng).q = q;
% q must be permuted so that it matches the dimensions of xcm,ycm,zcm
% created by meshgrid.
if (PlotType == 3)
% Scheieren plot; we plot the gradient, not the values.
[qx,qy] = gradient(q,dx,dy);
qs = sqrt(qx.^2 + qy.^2);
qmesh = qs';
else
qmesh = q';
end;
% minimum over all grids at this time, but not necessarily on slice
% shown.
qmin = min([qmin,min(min(q))]);
qmax = max([qmax,max(max(q))]);
% keep count of how many cells at this refinement level:
if length(ncells) < level
ncells(level) = 0;
end;
ncells(level) = ncells(level) + mx*my;
% -----------------------------------------------
% plot commands go here
if PlotType <= 3
% Add amr patch of manifold into current plot.
sval = level - 6; % for top down viewing
zedge = [sval sval];
zcenter = [sval sval];
sdir = 'z';
snum = 1; % only one slice in 2d plot
% only mask patches underneath if we are plotting a Manifold
maskflag = (manifold == 1);
add_patch2slice(sdir,sval,snum,xcenter,ycenter,zcenter, ...
xedge,yedge,zedge,qmesh,level,...
cvalues,mappedgrid,manifold,maskflag,ng);
end; % end of plotting for PlotType == 3
if (PlotType == 4)
% 1d Line plots
[xcm,ycm] = meshgrid(xcenter,ycenter);
if (usermap1d == 1)
if (mappedgrid == 1)
[xpm,ypm] = mapc2p(xcm,ycm);
[rvec,qvec] = map1d(xpm,ypm,qmesh);
else
[rvec,qvec] = map1d(xcm,ycm,qmesh);
end
[rs,cs] = size(rvec);
[rq,cq] = size(qvec);
if (cs > 1 | cq > 1)
error(['plotframe2 : map1d can only return single columns vectors ',...
'for s or q']);
end;
else
if (mappedgrid == 1)
[xpm,ypm] = mapc2p(xcm,ycm);
r = sqrt((xpm - x0).^2 + (ypm - y0).^2);
else
r = sqrt((xcm-x0).^2 + (ycm - y0).^2);
end
rvec = reshape(r,prod(size(r)),1);
qvec = reshape(qmesh,prod(size(qmesh)),1);
end;
add_line2plot(rvec,qvec,level,markerstyle{level},...
linecolors{level},linestyle{level});
end; % end of plotting for PlotType == 4
if exist('aftergrid')==2
% make an m-file with this name for any other commands you
% want executed at the end of drawing each grid
aftergrid;
end;
end % loop on ng (plot commands for each grid)
%=============================================
% Set user-defined variables from setplot2.m :
% add title and labels:
if UserVariable == 1
str = sprintf('%s at time %8.4f',UserVariableFile,t);
title(str,'fontsize',15);
else
str = sprintf('q(%d) at time %8.4f',mq,t);
title(str,'fontsize',15);
end
if (PlotType <= 3)
setPlotGrid(PlotGrid);
setPlotGridEdges(PlotGridEdges);
if (PlotType == 2)
setslicecolor('w');
end;
if (manifold == 0 & view_arg == 2)
% To really make sure we get a 2d view and can see all levels.
set(gca,'ZLimMode','auto');
end;
xlabel('x')
ylabel('y')
end;
% Set view point
view(view_arg);
if exist('afterframe')==2
% make an m-file with this name for any other commands you
% want executed at the end of drawing each frame
% for example to change the axes, or add a curve for a
% boundary
afterframe;
end;