plot_from_file.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This file is part of NS2DDV. %
% %
% Copyright(C) 2011-2018 C. Calgaro (caterina.calgaro@math.univ-lille1.fr) %
% E. Creusé (emmanuel.creuse@math.univ-lille1.fr) %
% T. Goudon (thierry.goudon@inria.fr) %
% A. Mouton (alexandre.mouton@math.univ-lille1.fr) %
% %
% NS2DDV is free software: you can redistribute it and/or modify it under the terms %
% of the GNU General Public License as published by the Free Software Foundation, %
% either version 3 of the License, or (at your option) any later version. %
% %
% NS2DDV is distributed in the hope that it will be useful, but WITHOUT ANY %
% WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A %
% PARTICULAR PURPOSE. See the GNU General Public License for more details. %
% %
% You should have received a copy of the GNU General Public License along with %
% NS2DDV. If not, see <http://www.gnu.org/licenses/>. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[] = plot_from_file(namefile, XDISPLAY_LIST, LEVELS, XDISPLAY_METHOD, typeplot, nbrows, nbcols)
% INPUT
% namefile The input file to be used for generating the animation
% XDISPLAY_LIST List of diagnostics to be plotted
% LEVELS Isovalues associated to the diagnostics to be plotted
% XDISPLAY_METHOD Kind of visualization (single window or multiple window)
% typeplot Kind of scalar data representation (contour or pseudocolor)
% nbrows Number of rows in the visualization grid
% nbcols Number of columns in the visualization grid
close all;
cprec = 1e-8;
v = version('-release');
vnum = str2num(v(1:4));
usemat = strcmp(namefile(size(namefile,2)-3:size(namefile,2)), '.mat');
usehdf5 = strcmp(namefile(size(namefile,2)-2:size(namefile,2)), '.h5');
if ~(numel(XDISPLAY_LIST) == numel(LEVELS))
error("Problem in plot_from_file: Second and third arguments must be cell array with same shape");
end
if ~(usemat || usehdf5)
error('Only .mat or .h5 files can be handled');
elseif (usehdf5 && (vnum < 2011))
error('Cannot read .h5 file: please Matlab R2011a or newer version to proceed');
end
hasdensity = false;
if usemat
% Extract all data
A = load(namefile);
if isfield(A, 'rho')
hasdensity = true;
end
% Extract the mesh
if exist(A.namemesh)
B = load(A.namemesh);
else
error(sprintf('Cannot find mesh file %s', A.namemesh));
end
elseif usehdf5
% Extract all data
headers = h5info(namefile);
for i=1:numel(headers.Datasets)
name = headers.Datasets(i).Name;
value = h5read(namefile, strcat('/', name));
switch name
case {'Density'}
A.rho = value;
hasdensity = true;
case {'Density (exact)'}
A.rhoex = value;
case {'Pressure'}
A.p = value;
case {'Pressure_exact'}
A.pex = value;
case {'Velocity_x'}
A.ux = value;
case {'Velocity_x_exact'}
A.uexx = value;
case {'Velocity_y'}
A.uy = value;
case {'Velocity_y_exact'}
A.uexy = value;
case {'Velocity_x_dx'}
A.dxux = value;
case {'Velocity_x_dy'}
A.dyux = value;
case {'Velocity_y_dx'}
A.dxuy = value;
case {'Velocity_y_dy'}
A.dyuy = value;
case {'Velocity_x_dx_exact'}
A.dxuexx = value;
case {'Velocity_x_dy_exact'}
A.dyuexx = value;
case {'Velocity_y_dx_exact'}
A.dxuexy = value;
case {'Velocity_y_dy_exact'}
A.dyuexy = value;
case {'Shear_rate'}
A.shear = value;
case {'Shear_rate_exact'}
A.shearex = value;
case {'Velocity_magnitude'}
A.umod = value;
case {'Velocity_magnitude_exact'}
A.umod = value;
case {'Vorticity'}
A.omega = value;
case {'Vorticity_exact'}
A.omegaex = value;
case {'Streamlines'}
A.psi = value;
case {'Streamlines_exact'}
A.psiex = value;
case {'Pressure_gradient_x'}
A.dxp = value;
case {'Pressure_gradient_y'}
A.dyp = value;
case {'Pressure_gradient_x_exact'}
A.dxpex = value;
case {'Pressure_gradient_y_exact'}
A.dypex = value;
case {'Time'}
A.time = value;
end
end
% Complete with vector fields
if (isfield(A, 'ux') && isfield(A, 'uy'))
A.u = [A.ux', A.uy'];
end
if (isfield(A, 'uexx') && isfield(A, 'uexy'))
A.uex = [A.uexx', A.uexy'];
end
if (isfield(A, 'wx') && isfield(A, 'wy'))
A.w = [A.wx', A.wy'];
end
if (isfield(A, 'dxp') && isfield(A, 'dyp'))
A.gradp = [A.dxp', A.dyp'];
end
if (isfield(A, 'dxpex') && isfield(A, 'dypex'))
A.gradpex = [A.dxpex', A.dypex'];
end
% Extract the mesh
namemesh = h5readatt(namefile, '/', 'Mesh');
A.NAME_MESH = 'Mesh';
if exist(namemesh)
headers = h5info(namemesh);
else
error(sprintf('Cannot find mesh file %s', namemesh));
end
for i=1:numel(headers.Datasets)
name = headers.Datasets(i).Name;
value = h5read(namemesh, strcat('/', name));
switch name
case {'MESH_p1'}
B.GRID.p1 = value;
case {'MESH_t1'}
B.GRID.t1 = value;
B.GRID.t1 = B.GRID.t1 + ones(size(value));
case {'MESH_p1b'}
B.GRID.p1b = value;
case {'MESH_st1b'}
B.GRID.st1b = value;
B.GRID.st1b = B.GRID.st1b + ones(size(value));
case {'MESH_p2'}
B.GRID.p2 = value;
case {'MESH_st2'}
B.GRID.st2 = value;
B.GRID.st2 = B.GRID.st2 + ones(size(value));
end
end
% Extract the spatial discretizations
A.METHOD_U = h5readatt(namefile, '/', 'Method_velocity');
A.METHOD_P = h5readatt(namefile, '/', 'Method_pressure');
if hasdensity
A.METHOD_RHO = h5readatt(namefile, '/', 'Method_density');
end
end
TEST_ANALYTIC = isfield(A, 'pex');
XDISPLAY_CASES = '''MESH'', ''SUBTRI_U'', ';
XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''P'', ''P_DX'', ''P_DY'', ''GRAD_P'', ');
XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''U_VECTOR'', ''UX'', ''UY'', ');
XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''VORTIC'', ''STREAM'', ''U_MODULE'', ');
XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''UX_DX'', ''UX_DY'', ''UY_DX'', ''UY_DY'', ''SHEAR'', ');
XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''W_VECTOR'', ''WX'', ''WY'', ''R''');
if hasdensity
XDISPLAY_CASES = strcat(XDISPLAY_CASES, ', ''RHO''');
end
if TEST_ANALYTIC
XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''P_EX'', ''P_DX_EX'', ''P_DY_EX'', ''GRAD_P_EX'', ');
XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''U_VECTOR_EX'', ''UX_EX'', ''UY_EX'', ');
XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''VORTIC_EX'', ''STREAM_EX'', ''U_MODULE_EX'', ');
XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''UX_DX_EX'', ''UX_DY_EX'', ''UY_DX_EX'', ''UY_DY_EX'', ');
XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''SHEAR_EX''');
if hasdensity
XDISPLAY_CASES = strcat(XDISPLAY_CASES, ', ''RHO_EX''');
end
end
% Prepare the isovalues for scalar diagnostics
ind_rho = [];
ind_p = [];
ind_dxp = [];
ind_dyp = [];
ind_ux = [];
ind_uy = [];
ind_omega = [];
ind_psi = [];
ind_shear = [];
ind_umod = [];
ind_dxux = [];
ind_dyux = [];
ind_dxuy = [];
ind_dyuy = [];
for i=1:numel(XDISPLAY_LIST)
switch XDISPLAY_LIST{i}
case {'MESH', 'SUBTRI_U', 'U_VECTOR', 'U_VECTOR_EX', 'W_VECTOR', 'GRAD_P'}
% Nothing to do
case {'RHO', 'RHO_EX'}
ind_rho = [ind_rho, i];
if TEST_ANALYTIC
levels_rho = compute_levels_from_file(A.rho, A.rhoex, ind_rho, LEVELS);
else
levels_rho = compute_levels_from_file(A.rho, [], ind_rho, LEVELS);
end
case {'P', 'P_EX'}
ind_p = [ind_p, i];
if TEST_ANALYTIC
levels_p = compute_levels_from_file(A.p, A.pex, ind_p, LEVELS);
else
levels_p = compute_levels_from_file(A.p, [], ind_p, LEVELS);
end
case {'P_DX', 'P_DX_EX'}
ind_dxp = [ind_dxp, i];
if TEST_ANALYTIC
levels_dxp = compute_levels_from_file(A.dxp, A.dxpex, ind_dxp, LEVELS);
else
levels_dxp = compute_levels_from_file(A.dxp, [], ind_dxp, LEVELS);
end
case {'P_DY', 'P_DY_EX'}
ind_dyp = [ind_dyp, i];
if TEST_ANALYTIC
levels_dyp = compute_levels_from_file(A.dyp, A.dypex, ind_dyp, LEVELS);
else
levels_dyp = compute_levels_from_file(A.dyp, [], ind_dyp, LEVELS);
end
case {'UX', 'UX_EX'}
ind_ux = [ind_ux, i];
if TEST_ANALYTIC
levels_ux = compute_levels_from_file(A.ux, A.uxex, ind_ux, LEVELS);
else
levels_ux = compute_levels_from_file(A.ux, [], ind_ux, LEVELS);
end
case {'UY', 'UY_EX'}
ind_uy = [ind_uy, i];
if TEST_ANALYTIC
levels_uy = compute_levels_from_file(A.uy, A.uyex, ind_uy, LEVELS);
else
levels_uy = compute_levels_from_file(A.uy, [], ind_uy, LEVELS);
end
case {'VORTIC', 'VORTIC_EX'}
ind_omega = [ind_omega, i];
if TEST_ANALYTIC
levels_omega = compute_levels_from_file(A.omega, A.omegaex, ind_omega, LEVELS);
else
levels_omega = compute_levels_from_file(A.omega, [], ind_omega, LEVELS);
end
case {'STREAM', 'STREAM_EX'}
ind_psi = [ind_psi, i];
if TEST_ANALYTIC
levels_psi = compute_levels_from_file(A.psi, A.psiex, ind_psi, LEVELS);
else
levels_psi = compute_levels_from_file(A.psi, [], ind_psi, LEVELS);
end
case {'U_MODULE', 'U_MODULE_EX'}
ind_umod = [ind_umod, i];
if TEST_ANALYTIC
levels_umod = compute_levels_from_file(A.umod, A.umodex, ind_umod, LEVELS);
else
levels_umod = compute_levels_from_file(A.umod, [], ind_umod, LEVELS);
end
case {'UX_DX', 'UX_DX_EX'}
ind_dxux = [ind_dxux, i];
if TEST_ANALYTIC
levels_dxux = compute_levels_from_file(A.dxux, A.dxuxex, ind_dxux, LEVELS);
else
levels_dxux = compute_levels_from_file(A.dxux, [], ind_dxux, LEVELS);
end
case {'UX_DY', 'UX_DY_EX'}
ind_dyux = [ind_dyux, i];
if TEST_ANALYTIC
levels_dyux = compute_levels_from_file(A.dyux, A.dyuxex, ind_dyux, LEVELS);
else
levels_dyux = compute_levels_from_file(A.dyux, [], ind_dyux, LEVELS);
end
case {'UY_DX', 'UY_DX_EX'}
ind_dxuy = [ind_dxuy, i];
if TEST_ANALYTIC
levels_dxuy = compute_levels_from_file(A.dxuy, A.dxuyex, ind_dxuy, LEVELS);
else
levels_dxuy = compute_levels_from_file(A.dxuy, [], ind_dxuy, LEVELS);
end
case {'UY_DY', 'UY_DY_EX'}
ind_dyuy = [ind_dyuy, i];
if TEST_ANALYTIC
levels_dyuy = compute_levels_from_file(A.dyuy, A.dyuyex, ind_dyuy, LEVELS);
else
levels_dyuy = compute_levels_from_file(A.dyuy, [], ind_dyuy, LEVELS);
end
case {'SHEAR', 'SHEAR_EX'}
ind_shear = [ind_shear, i];
if TEST_ANALYTIC
levels_shear = compute_levels_from_file(A.shear, A.shearex, ind_shear, LEVELS);
else
levels_shear = compute_levels_from_file(A.shear, [], ind_shear, LEVELS);
end
case {'WX'}
levels_wx = compute_levels_from_file(A.wx, [], [i], LEVELS);
case {'WY'}
levels_wy = compute_levels_from_file(A.wy, [], [i], LEVELS);
case {'R'}
levels_r = compute_levels_from_file(A.r, [], [i], LEVELS);
otherwise
error(sprintf('Cannot plot the diagnostic %s\nOnly the following diagnostics are allowed: %s', ...
XDISPLAY_LIST{i}, XDISPLAY_CASES));
end
end
switch XDISPLAY_METHOD
case {'SINGLE_FIGURE'}
% Start the visualization interface
if ((~exist('nbcols')) || (~exist('nbrows')))
error(sprintf('If SINGLE_FIGURE method is selected, you must provide a number of rows and a number of columns\n'));
end
HANDLES = start_figs(XDISPLAY_LIST, XDISPLAY_METHOD, nbrows, nbcols);
% Add the time
figure(HANDLES.h);
globtitle = sprintf('Time t = %e', A.time);
meshtitle = HANDLES.meshtitle;
subtriutitle = sprintf('%s %s', A.METHOD_U, HANDLES.subtriutitle);
uvecttitle = HANDLES.uvecttitle;
uvectextitle = HANDLES.uvectextitle;
uxtitle = HANDLES.uxtitle;
uxextitle = HANDLES.uxextitle;
uytitle = HANDLES.uytitle;
uyextitle = HANDLES.uyextitle;
dxuxtitle = HANDLES.dxuxtitle;
dxuxextitle = HANDLES.dxuxextitle;
dyuxtitle = HANDLES.dyuxtitle;
dyuxextitle = HANDLES.dyuxextitle;
dxuytitle = HANDLES.dxuytitle;
dxuyextitle = HANDLES.dxuyextitle;
dyuytitle = HANDLES.dyuytitle;
dyuyextitle = HANDLES.dyuyextitle;
sheartitle = HANDLES.sheartitle;
shearextitle = HANDLES.shearextitle;
ptitle = HANDLES.ptitle;
pextitle = HANDLES.pextitle;
dxptitle = HANDLES.dxptitle;
dxpextitle = HANDLES.dxpextitle;
dyptitle = HANDLES.dyptitle;
dypextitle = HANDLES.dypextitle;
gradptitle = HANDLES.gradptitle;
gradpextitle = HANDLES.gradpextitle;
omegatitle = HANDLES.omegatitle;
omegaextitle = HANDLES.omegaextitle;
psititle = HANDLES.psititle;
psiextitle = HANDLES.psiextitle;
umodtitle = HANDLES.umodtitle;
umodextitle = HANDLES.umodextitle;
rhotitle = HANDLES.rhotitle;
rhoextitle = HANDLES.rhoextitle;
rtitle = HANDLES.rtitle;
wvecttitle = HANDLES.wvecttitle;
wxtitle = HANDLES.wxtitle;
wytitle = HANDLES.wytitle;
case {'MULTIPLE_FIGURE'}
% Start the visualization interface
HANDLES = start_figs(XDISPLAY_LIST, XDISPLAY_METHOD);
meshtitle = sprintf('%s at time = %e', HANDLES.meshtitle, A.time);
subtriutitle = sprintf('%s %s at time = %e', A.METHOD_U, HANDLES.subtriutitle, A.time);
uvecttitle = sprintf('%s at time = %e', HANDLES.uvecttitle, A.time);
uvectextitle = sprintf('%s at time = %e', HANDLES.uvectextitle, A.time);
uxtitle = sprintf('%s at time = %e', HANDLES.uxtitle, A.time);
uxextitle = sprintf('%s at time = %e', HANDLES.uxextitle, A.time);
uytitle = sprintf('%s at time = %e', HANDLES.uytitle, A.time);
uyextitle = sprintf('%s at time = %e', HANDLES.uyextitle, A.time);
dxuxtitle = sprintf('%s at time = %e', HANDLES.dxuxtitle, A.time);
dxuxextitle = sprintf('%s at time = %e', HANDLES.dxuxextitle, A.time);
dyuxtitle = sprintf('%s at time = %e', HANDLES.dyuxtitle, A.time);
dyuxextitle = sprintf('%s at time = %e', HANDLES.dyuxextitle, A.time);
dxuytitle = sprintf('%s at time = %e', HANDLES.dxuytitle, A.time);
dxuyextitle = sprintf('%s at time = %e', HANDLES.dxuyextitle, A.time);
dyuytitle = sprintf('%s at time = %e', HANDLES.dyuytitle, A.time);
dyuyextitle = sprintf('%s at time = %e', HANDLES.dyuyextitle, A.time);
sheartitle = sprintf('%s at time = %e', HANDLES.sheartitle, A.time);
shearextitle = sprintf('%s at time = %e', HANDLES.shearextitle, A.time);
ptitle = sprintf('%s at time = %e', HANDLES.ptitle, A.time);
pextitle = sprintf('%s at time = %e', HANDLES.pextitle, A.time);
dxptitle = sprintf('%s at time = %e', HANDLES.dxptitle, A.time);
dxpextitle = sprintf('%s at time = %e', HANDLES.dxpextitle, A.time);
dyptitle = sprintf('%s at time = %e', HANDLES.dyptitle, A.time);
dypextitle = sprintf('%s at time = %e', HANDLES.dypextitle, A.time);
gradptitle = sprintf('%s at time = %e', HANDLES.gradptitle, A.time);
gradpextitle = sprintf('%s at time = %e', HANDLES.gradpextitle, A.time);
omegatitle = sprintf('%s at time = %e', HANDLES.omegatitle, A.time);
omegaextitle = sprintf('%s at time = %e', HANDLES.omegaextitle, A.time);
psititle = sprintf('%s at time = %e', HANDLES.psititle, A.time);
psiextitle = sprintf('%s at time = %e', HANDLES.psiextitle, A.time);
umodtitle = sprintf('%s at time = %e', HANDLES.umodtitle, A.time);
umodextitle = sprintf('%s at time = %e', HANDLES.umodextitle, A.time);
rhotitle = sprintf('%s at time = %e', HANDLES.rhotitle, A.time);
rhoextitle = sprintf('%s at time = %e', HANDLES.rhoextitle, A.time);
rtitle = sprintf('%s at time = %e', HANDLES.rtitle, A.time);
wvecttitle = sprintf('%s at time = %e', HANDLES.wvecttitle, A.time);
wxtitle = sprintf('%s at time = %e', HANDLES.wxtitle, A.time);
wytitle = sprintf('%s at time = %e', HANDLES.wytitle, A.time);
otherwise
error(sprintf('Problem while using plot_from_file: wrong value of PARAMETERS.OUTPUT.XDISPLAY\n'));
end
for i=1:numel(XDISPLAY_LIST)
% Identify handle, levels, title, data
switch XDISPLAY_LIST{i}
case {'MESH'}
h = HANDLES.hmesh;
ti = meshtitle;
case {'SUBTRI_U'}
h = HANDLES.hsubtriu;
ti = subtriutitle;
case {'RHO'}
h = HANDLES.hrho;
levels = levels_rho;
ti = rhotitle;
data = A.rho;
case {'RHO_EX'}
h = HANDLES.hrhoex;
levels = levels_rho;
ti = rhoextitle;
data = A.rhoex;
case {'P'}
h = HANDLES.hp;
levels = levels_p;
ti = ptitle;
data = A.p;
case {'P_EX'}
h = HANDLES.hpex;
levels = levels_p;
ti = pextitle;
data = A.pex;
case {'P_DX'}
h = HANDLES.hdxp;
levels = levels_dxp;
ti = dxptitle;
data = A.dxp;
case {'P_DX_EX'}
h = HANDLES.hdxpex;
levels = levels_dxpex;
ti = dxpextitle;
data = A.dxpex;
case {'P_DY'}
h = HANDLES.hdyp;
levels = levels_dyp;
ti = dyptitle;
data = A.dyp;
case {'P_DY_EX'}
h = HANDLES.hdypex;
levels = levels_dypex;
ti = dypextitle;
data = A.dypex;
case {'GRAD_P'}
h = HANDLES.hgradp;
ti = gradptitle;
data = A.gradp;
case {'GRAD_P_EX'}
h = HANDLES.hgradpex;
ti = gradpextitle;
data = A.gradpex;
case {'U_VECTOR'}
h = HANDLES.huvect;
ti = uvecttitle;
data = A.u;
case {'U_VECTOR_EX'}
h = HANDLES.huvectex;
ti = uvectextitle;
data = A.uex;
case {'UX'}
h = HANDLES.hux;
levels = levels_ux;
ti = uxtitle;
data = A.ux;
case {'UX_EX'}
h = HANDLES.huxex;
levels = levels_ux;
ti = uxextitle;
data = A.uxex;
case {'UY'}
h = HANDLES.huy;
levels = levels_uy;
ti = uytitle;
data = A.uy;
case {'UY_EX'}
h = HANDLES.huy_ex;
levels = levels_uy;
ti = uyextitle;
data = A.uyex;
case {'UX_DX'}
h = HANDLES.hdxux;
levels = levels_dxux;
ti = dxuxtitle;
data = A.dxux;
case {'UX_DX_EX'}
h = HANDLES.hdxuxex;
levels = levels_dxux;
ti = dxuxextitle;
data = A.dxuxex;
case {'UX_DY'}
h = HANDLES.hdyux;
levels = levels_dyux;
ti = dyuxtitle;
data = A.dyux;
case {'UX_DY_EX'}
h = HANDLES.hdyuxex;
levels = levels_dyux;
ti = dyuxextitle;
data = A.dyuxex;
case {'UY_DX'}
h = HANDLES.hdxuy;
levels = levels_dxuy;
ti = dxuytitle;
data = A.dxuy;
case {'UY_DX_EX'}
h = HANDLES.hdxuyex;
levels = levels_dxuy;
ti = dxuyextitle;
data = A.dxuyex;
case {'UY_DY'}
h = HANDLES.hdyuy;
levels = levels_dyuy;
ti = dyuytitle;
data = A.dyuy;
case {'UY_DY_EX'}
h = HANDLES.hdyuyex;
levels = levels_dyuy;
ti = dyuyextitle;
data = A.dyuyex;
case {'SHEAR'}
h = HANDLES.hshear;
levels = levels_shear;
ti = sheartitle;
data = A.shear;
case {'SHEAR_EX'}
h = HANDLES.hshearex;
levels = levels_shear;
ti = shearextitle;
data = A.shearex;
case {'VORTIC'}
h = HANDLES.homega;
levels = levels_omega;
ti = omegatitle;
data = A.omega;
case {'VORTIC_EX'}
h = HANDLES.homegaex;
levels = levels_omega;
ti = omegaextitle;
data = A.omegaex;
case {'STREAM'}
h = HANDLES.hpsi;
levels = levels_psi;
ti = psititle;
data = A.psi;
case {'STREAM_EX'}
h = HANDLES.hpsiex;
levels = levels_psi;
ti = psiextitle;
data = A.psiex;
case {'U_MODULE'}
h = HANDLES.humod;
levels = levels_umod;
ti = umodtitle;
data = A.umod;
case {'U_MODULE_EX'}
h = HANDLES.humodex;
levels = levels_umod;
ti = umodextitle;
data = A.umodex;
case {'W_VECTOR'}
h = HANDLES.hwvect;
ti = wvecttitle;
data = A.w;
case {'WX'}
h = HANDLES.hwx;
levels = levels_wx;
ti = wxtitle;
data = A.wx;
case {'WY'}
h = HANDLES.hwy;
levels = levels_uy;
ti = wytitle;
data = A.wy;
case {'R'}
h = HANDLES.hr;
levels = levels_r;
ti = rtitle;
data = A.r;
otherwise
error(sprintf('Cannot plot the diagnostic %s\nOnly the following diagnostics are allowed: %s', ...
XDISPLAY_LIST{i}, XDISPLAY_CASES));
end
% Identify the mesh
switch XDISPLAY_LIST{i}
case {'MESH', 'R', 'P', 'P_EX', 'P_DX', 'P_DX_EX', 'P_DY', 'P_DY_EX', ...
'VORTIC', 'VORTIC_EX', 'STREAM', 'STREAM_EX', ...
'UX_DX', 'UX_DX_EX', 'UX_DY', 'UX_DY_EX', 'UY_DX', 'UY_DX_EX', ...
'UY_DY', 'UY_DY_EX', 'SHEAR', 'SHEAR_EX', 'RHO', 'RHO_EX'}
p = B.GRID.p1;
t = B.GRID.t1(1:3,:);
case {'GRAD_P', 'GRAD_P_EX'}
p = zeros(2,size(B.GRID.t1,2));
for ke=1:size(p,2)
p(:,ke) = (B.GRID.p1(:,B.GRID.t1(1,ke)) + B.GRID.p1(:,B.GRID.t1(2,ke)) + ...
B.GRID.p1(:,B.GRID.t1(3,ke)))/3.;
end
case {'SUBTRI_U', 'U_VECTOR', 'U_VECTOR_EX', 'UX', 'UX_EX', 'UY', 'UY_EX', ...
'U_MODULE', 'U_MODULE_EX', 'W_VECTOR', 'WX', 'WY'}
switch A.METHOD_U
case {'P1B'}
p = B.GRID.p1b;
t = B.GRID.st1b;
case {'P2'}
p = B.GRID.p2;
t = B.GRID.st2;
otherwise
error('Unknown FE discretization');
end
otherwise
error(sprintf('Cannot plot the diagnostic %s\nOnly the following diagnostics are allowed: %s', ...
XDISPLAY_LIST{i}, XDISPLAY_CASES));
end
% Plot data
switch_plot(h, XDISPLAY_METHOD);
switch XDISPLAY_LIST{i}
case {'MESH', 'SUBTRI_U'}
% Plot a mesh
plot_mesh(p, t, ti, h);
case {'R', 'RHO', 'RHO_EX', 'P', 'P_EX', 'VORTIC', 'VORTIC_EX', 'STREAM', 'STREAM_EX', ...
'UX_DX', 'UX_DY', 'UY_DX', 'UY_DY', 'SHEAR', ...
'UX_DX_EX', 'UX_DY_EX', 'UY_DX_EX', 'UY_DY_EX', 'SHEAR_EX', ...
'UX', 'UY', 'U_MODULE', 'UX_EX', 'UY_EX', 'U_MODULE_EX', 'WX', 'WY'}
% Plot a node-centered scalar data
switch typeplot
case {'contour'}
plot_contour(data, p, t, levels, ti, h);
case {'pseudocolor'}
plot_color(data, p, t, ti, h);
otherwise
error('Only ''contour'' or ''pseudocolor'' plot type is allowed');
end
case {'P_DX', 'P_DX_EX', 'P_DY', 'P_DY_EX'}
% Plot a cell-centered scalar data
plot_color(data, p, t, ti, h);
case {'U_VECTOR', 'U_VECTOR_EX', 'W_VECTOR', 'GRAD_P', 'GRAD_P_EX'}
% Plot a vector field
plot_vector(data, p, ti, h);
otherwise
error(sprintf('Cannot plot the diagnostic %s\nOnly the following diagnostics are allowed: %s', ...
XDISPLAY_LIST{i}, XDISPLAY_CASES));
end
if strcmp(XDISPLAY_METHOD, 'SINGLE_FIGURE')
suplabel(globtitle, 't');
drawnow;
end
end
%%%%%%%%%%%%%%%%%%%%%%%
% Auxiliary functions %
%%%%%%%%%%%%%%%%%%%%%%%
function[newlevels] = compute_levels_from_file(data, dataex, ind, LEVELS)
cprec = 1e-8;
newlevels = [];
if (numel(dataex) > 0)
% We wait for the reading of both data and exact data
if (numel(ind) == 2)
if (numel(LEVELS{ind(1)}) == numel(LEVELS{ind(2)}))
if (max(abs(LEVELS{ind(1)}-LEVELS{ind(2)}))/max(abs(LEVELS{ind(1)})) < cprec)
newlevels = LEVELS{ind(1)};
else
% Need to correct the isovalues
isomin = min(min([data,dataex]));
isomax = max(max([data,dataex]));
if (numel(LEVELS{ind(1)}) > 0)
newlevels = linspace(isomin,isomax,numel(LEVELS{ind(1)}));
else
newlevels = linspace(isomin,isomax,7);
end
end
else
% Need to correct the isovalues
isomin = min(min([data,dataex]));
isomax = max(max([data,dataex]));
newlevels = linspace(isomin,isomax,7);
end
end
else
if (numel(LEVELS{ind(1)}) > 0)
newlevels = LEVELS{ind(1)};
else
% Need to compute the isovalues
isomin = min(min(data));
isomax = max(max(data));
newlevels = linspace(isomin,isomax,7);
end
end
end
end