Raw File
plot_insitu.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_insitu(outputs, MESH, time, HANDLES, PARAMETERS)

	% INPUT
	% outputs			Structure gathering all the required data for visualization and saving
	% MESH				Mesh metadata
	% time				Time value
	% HANDLES			Metadata for in-situ visualization
	% PARAMETERS		List of simulation parameters

	if max(strcmp(PARAMETERS.OUTPUT.XDISPLAY, {'SINGLE_FIGURE', 'MULTIPLE_FIGURE'}))
		XDISPLAY_CASES = '''MESH'', ''SUBTRI_U''';
		XDISPLAY_CASES = strcat(XDISPLAY_CASES, '''P'', ''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''');
		if PARAMETERS.FE.BC_NATURAL
			XDISPLAY_CASES = strcat(XDISPLAY_CASES, ', ''W_VECTOR'', ''WX'', ''WY'', ''R''');
		end
		if strcmp(PARAMETERS.MODEL, 'NSDV')
			XDISPLAY_CASES = strcat(XDISPLAY_CASES, ', ''RHO''');
		end
		if PARAMETERS.TESTCASE_ANALYTIC
			XDISPLAY_CASES = strcat(XDISPLAY_CASES, ', ''P_EX'', ''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'', ''SHEAR_EX''');
			if strcmp(PARAMETERS.MODEL, 'NSDV')
				XDISPLAY_CASES = strcat(XDISPLAY_CASES, ', ''RHO_EX''');
			end
		end

		if strcmp(PARAMETERS.OUTPUT.XDISPLAY, 'SINGLE_FIGURE')
			figure(HANDLES.h);
			globtitle = sprintf('Time t = %e', time);
			meshtitle = HANDLES.meshtitle;
			subtriutitle = sprintf('%s %s', PARAMETERS.FE.TYPE, HANDLES.subtriutitle);
			uvecttitle = HANDLES.uvecttitle;
			uxtitle = HANDLES.uxtitle;
			uytitle = HANDLES.uytitle;
			dxuxtitle = HANDLES.dxuxtitle;
			dyuxtitle = HANDLES.dyuxtitle;
			dxuytitle = HANDLES.dxuytitle;
			dyuytitle = HANDLES.dyuytitle;
			sheartitle = HANDLES.sheartitle;
			ptitle = HANDLES.ptitle;
			dxptitle = HANDLES.dxptitle;
			dyptitle = HANDLES.dyptitle;
			gradptitle = HANDLES.gradptitle;
			omegatitle = HANDLES.omegatitle;
			psititle = HANDLES.psititle;
			umodtitle = HANDLES.umodtitle;
			rhoextitle = HANDLES.rhoextitle;
			if PARAMETERS.FE.BC_NATURAL
				wvecttitle = HANDLES.wvecttitle;
				wxtitle = HANDLES.wxtitle;
				wytitle = HANDLES.wytitle;
				rtitle = HANDLES.rtitle;
			end
			if strcmp(PARAMETERS.MODEL, 'NSDV')
				rhotitle = HANDLES.rhotitle;
			end
			if PARAMETERS.TESTCASE_ANALYTIC
				uvectextitle = HANDLES.uvectextitle;
				uxextitle = HANDLES.uxextitle;
				uyextitle = HANDLES.uyextitle;
				dxuxextitle = HANDLES.dxuxextitle;
				dyuxextitle = HANDLES.dyuxextitle;
				dxuyextitle = HANDLES.dxuyextitle;
				dyuyextitle = HANDLES.dyuyextitle;
				shearextitle = HANDLES.shearextitle;
				pextitle = HANDLES.pextitle;
				dxpextitle = HANDLES.dxptitle;
				dypextitle = HANDLES.dyptitle;
				gradpextitle = HANDLES.gradptitle;
				omegaextitle = HANDLES.omegaextitle;
				psiextitle = HANDLES.psiextitle;
				umodextitle = HANDLES.umodextitle;
				if strcmp(PARAMETERS.MODEL, 'NSDV')
					rhoextitle = HANDLES.rhoextitle;
				end
			end

		elseif strcmp(PARAMETERS.OUTPUT.XDISPLAY, 'MULTIPLE_FIGURE')
			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);
			uxtitle = sprintf('%s at time = %e', HANDLES.uxtitle, A.time);
			uytitle = sprintf('%s at time = %e', HANDLES.uytitle, A.time);
			dxuxtitle = sprintf('%s at time = %e', HANDLES.dxuxtitle, A.time);
			dyuxtitle = sprintf('%s at time = %e', HANDLES.dyuxtitle, A.time);
			dxuytitle = sprintf('%s at time = %e', HANDLES.dxuytitle, A.time);
			dyuytitle = sprintf('%s at time = %e', HANDLES.dyuytitle, A.time);
			sheartitle = sprintf('%s at time = %e', HANDLES.sheartitle, A.time);
			ptitle = sprintf('%s at time = %e', HANDLES.ptitle, A.time);
			dxptitle = sprintf('%s at time = %e', HANDLES.dxptitle, A.time);
			dyptitle = sprintf('%s at time = %e', HANDLES.dyptitle, A.time);
			gradptitle = sprintf('%s at time = %e', HANDLES.gradptitle, A.time);
			omegatitle = sprintf('%s at time = %e', HANDLES.omegatitle, A.time);
			psititle = sprintf('%s at time = %e', HANDLES.psititle, A.time);
			umodtitle = sprintf('%s at time = %e', HANDLES.umodtitle, A.time);

			if PARAMETERS.FE.BC_NATURAL
				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);
			end
			if strcmp(PARAMETERS.MODEL, 'NSDV')
				rhotitle = sprintf('%s at time = %e', HANDLES.rhotitle, A.time);
			end
			if PARAMETERS.TESTCASE_ANALYTIC
				uvectextitle = sprintf('%s at time = %e', HANDLES.uvectextitle, A.time);
				uxextitle = sprintf('%s at time = %e', HANDLES.uxextitle, A.time);
				uyextitle = sprintf('%s at time = %e', HANDLES.uyextitle, A.time);
				dxuxextitle = sprintf('%s at time = %e', HANDLES.dxuxextitle, A.time);
				dyuxextitle = sprintf('%s at time = %e', HANDLES.dyuxextitle, A.time);
				dxuyextitle = sprintf('%s at time = %e', HANDLES.dxuyextitle, A.time);
				dyuyextitle = sprintf('%s at time = %e', HANDLES.dyuyextitle, A.time);
				shearextitle = sprintf('%s at time = %e', HANDLES.shearextitle, A.time);
				pextitle = sprintf('%s at time = %e', HANDLES.pextitle, A.time);
				dxpextitle = sprintf('%s at time = %e', HANDLES.dxpextitle, A.time);
				dypextitle = sprintf('%s at time = %e', HANDLES.dypextitle, A.time);
				gradpextitle = sprintf('%s at time = %e', HANDLES.gradpextitle, A.time);
				omegaextitle = sprintf('%s at time = %e', HANDLES.omegaextitle, A.time);
				psiextitle = sprintf('%s at time = %e', HANDLES.psiextitle, A.time);
				umodextitle = sprintf('%s at time = %e', HANDLES.umodextitle, A.time);
				if strcmp(PARAMETERS.MODEL, 'NSDV')
					rhoextitle = sprintf('%s at time = %e', HANDLES.rhoextitle, A.time);
				end
			end
		end
	end

	switch PARAMETERS.MODEL
		case {'NS'}
			[levels_p, levels_u, levels_umod, levels_omega, levels_psi] = isovalues_ns(time, PARAMETERS);
			levels_rho = [];
		case {'NSDV'}
			[levels_rho, levels_p, levels_u, levels_umod, levels_omega, levels_psi] = ...
				isovalues_nsdv(time, PARAMETERS);
		otherwise
			error('Unknown model');
	end
	levels_dxp = [];
	levels_dyp = [];
	levels_ux = [];
	levels_uy = [];
	levels_dxux = [];
	levels_dyux = [];
	levels_dxuy = [];
	levels_dyuy = [];
	levels_shear = [];
	levels_wx = [];
	levels_wy = [];
	levels_r = [];


	% 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 = [];
	ind_wx = [];
	ind_wy = [];
	ind_r = [];
	for i=1:size(outputs,1)
		if max(strcmp(outputs{i,2}, {'PLOT', 'PLOTSAVE', 'SAVEPLOT'}))
			% We must plot the data

			switch outputs{i,1}
				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];
					levels_rho = compute_levels_insitu(outputs, ind_rho, levels_rho, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'P', 'P_EX'}
					ind_p = [ind_p, i];
					levels_p = compute_levels_insitu(outputs, ind_p, levels_p, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'P_DX', 'P_DX_EX'}
					ind_dxp = [ind_dxp, i];
					levels_dxp = compute_levels_insitu(outputs, ind_dxp, levels_dxp, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'P_DY', 'P_DY_EX'}
					ind_dyp = [ind_dyp, i];
					levels_dyp = compute_levels_insitu(outputs, ind_dyp, levels_dyp, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'UX', 'UX_EX'}
					ind_ux = [ind_ux, i];
					levels_ux = compute_levels_insitu(outputs, ind_ux, levels_ux, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'UY', 'UY_EX'}
					ind_uy = [ind_uy, i];
					levels_uy = compute_levels_insitu(outputs, ind_uy, levels_uy, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'U_MODULE', 'U_MODULE_EX'}
					ind_umod = [ind_umod, i];
					levels_umod = compute_levels_insitu(outputs, ind_umod, levels_umod, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'VORTIC', 'VORTIC_EX'}
					ind_omega = [ind_omega, i];
					levels_omega = compute_levels_insitu(outputs, ind_omega, levels_omega, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'STREAM', 'STREAM_EX'}
					ind_psi = [ind_psi, i];
					levels_psi = compute_levels_insitu(outputs, ind_psi, levels_psi, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'UX_DX', 'UX_DX_EX'}
					ind_dxux = [ind_dxux, i];
					levels_dxux = compute_levels_insitu(outputs, ind_dxux, levels_dxux, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'UX_DY', 'UX_DY_EX'}
					ind_dyux = [ind_dyux, i];
					levels_dyux = compute_levels_insitu(outputs, ind_dyux, levels_dyux, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'UY_DX', 'UY_DX_EX'}
					ind_dxuy = [ind_dxuy, i];
					levels_dxuy = compute_levels_insitu(outputs, ind_dxuy, levels_dxuy, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'UY_DY', 'UY_DY_EX'}
					ind_dyuy = [ind_dyuy, i];
					levels_dyuy = compute_levels_insitu(outputs, ind_dyuy, levels_dyuy, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'SHEAR', 'SHEAR_EX'}
					ind_shear = [ind_shear, i];
					levels_shear = compute_levels_insitu(outputs, ind_shear, levels_shear, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'WX'}
					ind_wx = [ind_wx, i];
					levels_wx = compute_levels_insitu(outputs, ind_wx, levels_wx, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'WY'}
					ind_wy = [ind_wy, i];
					levels_wy = compute_levels_insitu(outputs, ind_wy, levels_wy, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				case {'R'}
					ind_r = [ind_r, i];
					levels_r = compute_levels_insitu(outputs, ind_r, levels_r, ...
									PARAMETERS.TESTCASE_ANALYTIC);

				otherwise
					error(sprintf('Cannot plot the diagnostic %s\nOnly the following diagnostics are allowed: %s', ...
							outputs{i,1}, XDISPLAY_CASES));
			end
		end
	end

	for i=1:size(outputs,1)
		if max(strcmp(outputs{i,2}, {'PLOT', 'PLOTSAVE', 'SAVEPLOT'}))
			% We must plot the data

			% Identify handle, levels, title, data
			switch outputs{i,1}
				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 = outputs{i,3};

				case {'RHO_EX'}
					h = HANDLES.hrhoex;
					levels = levels_rho;
					ti = rhoextitle;
					data = outputs{i,3};

				case {'P'}
					h = HANDLES.hp;
					levels = levels_p;
					ti = ptitle;
					data = outputs{i,3};

				case {'P_EX'}
					h = HANDLES.hpex;
					levels = levels_p;
					ti = pextitle;
					data = outputs{i,3};

				case {'P_DX'}
					h = HANDLES.hdxp;
					levels = levels_dxp;
					ti = dxptitle;
					% Warning: we must redirect data to the corresponding vector field
					ivect = outputs{i,3}(1);
					data = outputs{ivect,3}(:,1);

				case {'P_DX_EX'}
					h = HANDLES.hdxpex;
					levels = levels_dxpex;
					ti = dxpextitle;
					% Warning: we must redirect data to the corresponding vector field
					ivect = outputs{i,3}(1);
					data = outputs{ivect,3}(:,1);

				case {'P_DY'}
					h = HANDLES.hdyp;
					levels = levels_dyp;
					ti = dyptitle;
					% Warning: we must redirect data to the corresponding vector field
					ivect = outputs{i,3}(1);
					data = outputs{ivect,3}(:,2);

				case {'P_DY_EX'}
					h = HANDLES.hdypex;
					levels = levels_dypex;
					ti = dypextitle;
					% Warning: we must redirect data to the corresponding vector field
					ivect = outputs{i,3}(1);
					data = outputs{ivect,3}(:,2);

				case {'GRAD_P'}
					h = HANDLES.hgradp;
					ti = gradptitle;
					data = outputs{i,3};

				case {'GRAD_P_EX'}
					h = HANDLES.hgradpex;
					ti = gradpextitle;
					data = outputs{i,3};

				case {'U_VECTOR'}
					h = HANDLES.huvect;
					ti = uvecttitle;
					data = outputs{i,3};

				case {'U_VECTOR_EX'}
					h = HANDLES.huvectex;
					ti = uvectextitle;
					data = outputs{i,3};

				case {'UX'}
					h = HANDLES.hux;
					levels = levels_ux;
					ti = uxtitle;
					% Warning: we must redirect data to the corresponding vector field
					ivect = outputs{i,3}(1);
					data = outputs{ivect,3}(:,1);

				case {'UX_EX'}
					h = HANDLES.huxex;
					levels = levels_ux;
					ti = uxextitle;
					% Warning: we must redirect data to the corresponding vector field
					ivect = outputs{i,3}(1);
					data = outputs{ivect,3}(:,1);

				case {'UY'}
					h = HANDLES.huy;
					levels = levels_uy;
					ti = uytitle;
					% Warning: we must redirect data to the corresponding vector field
					ivect = outputs{i,3}(1);
					data = outputs{ivect,3}(:,2);

				case {'UY_EX'}
					h = HANDLES.huy_ex;
					levels = levels_uy;
					ti = uyextitle;
					% Warning: we must redirect data to the corresponding vector field
					ivect = outputs{i,3}(1);
					data = outputs{ivect,3}(:,2);

				case {'UX_DX'}
					h = HANDLES.hdxux;
					levels = levels_dxux;
					ti = dxuxtitle;
					data = outputs{i,3};

				case {'UX_DX_EX'}
					h = HANDLES.hdxuxex;
					levels = levels_dxux;
					ti = dxuxextitle;
					data = outputs{i,3};

				case {'UX_DY'}
					h = HANDLES.hdyux;
					levels = levels_dyux;
					ti = dyuxtitle;
					data = outputs{i,3};

				case {'UX_DY_EX'}
					h = HANDLES.hdyuxex;
					levels = levels_dyux;
					ti = dyuxextitle;
					data = outputs{i,3};

				case {'UY_DX'}
					h = HANDLES.hdxuy;
					levels = levels_dxuy;
					ti = dxuytitle;
					data = outputs{i,3};

				case {'UY_DX_EX'}
					h = HANDLES.hdxuyex;
					levels = levels_dxuy;
					ti = dxuyextitle;
					data = outputs{i,3};

				case {'UY_DY'}
					h = HANDLES.hdyuy;
					levels = levels_dyuy;
					ti = dyuytitle;
					data = outputs{i,3};

				case {'UY_DY_EX'}
					h = HANDLES.hdyuyex;
					levels = levels_dyuy;
					ti = dyuyextitle;
					data = outputs{i,3};

				case {'SHEAR'}
					h = HANDLES.hshear;
					levels = levels_shear;
					ti = sheartitle;
					data = outputs{i,3};

				case {'SHEAR_EX'}
					h = HANDLES.hshearex;
					levels = levels_shear;
					ti = shearextitle;
					data = outputs{i,3};

				case {'VORTIC'}
					h = HANDLES.homega;
					levels = levels_omega;
					ti = omegatitle;
					data = outputs{i,3};

				case {'VORTIC_EX'}
					h = HANDLES.homegaex;
					levels = levels_omega;
					ti = omegaextitle;
					data = outputs{i,3};

				case {'STREAM'}
					h = HANDLES.hpsi;
					levels = levels_psi;
					ti = psititle;
					data = outputs{i,3};

				case {'STREAM_EX'}
					h = HANDLES.hpsiex;
					levels = levels_psi;
					ti = psiextitle;
					data = outputs{i,3};

				case {'U_MODULE'}
					h = HANDLES.humod;
					levels = levels_umod;
					ti = umodtitle;
					data = outputs{i,3};

				case {'U_MODULE_EX'}
					h = HANDLES.humodex;
					levels = levels_umod;
					ti = umodextitle;
					data = outputs{i,3};

				case {'W_VECTOR'}
					h = HANDLES.hwvect;
					ti = wvecttitle;
					data = outputs{i,3};

				case {'WX'}
					h = HANDLES.hwx;
					levels = levels_wx;
					ti = wxtitle;
					% Warning: we must redirect data to the corresponding vector field
					ivect = outputs{i,3}(1);
					data = outputs{ivect,3}(:,1);

				case {'WY'}
					h = HANDLES.hwy;
					levels = levels_uy;
					ti = wytitle;
					% Warning: we must redirect data to the corresponding vector field
					ivect = outputs{i,3}(1);
					data = outputs{ivect,3}(:,2);

				case {'R'}
					h = HANDLES.hr;
					levels = levels_r;
					ti = rtitle;
					data = outputs{i,3};

				otherwise
					error(sprintf('Cannot plot the diagnostic %s\nOnly the following diagnostics are allowed: %s', ...
							outputs{i,1}, XDISPLAY_CASES));
			end

			% Identify the mesh
			switch outputs{i,1}
				case {'MESH', 'R', 'RHO', 'RHO_EX', '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'}
					p = MESH.p1;
					t = MESH.t1(1:3,:);

				case {'GRAD_P', 'GRAD_P_EX'}
					p = zeros(2,size(MESH.t1,2));
					for ke=1:size(p,2)
						p(:,ke) = (MESH.p1(:,MESH.t1(1,ke)) + MESH.p1(:,MESH.t1(2,ke)) + ...
										MESH.p1(:,MESH.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 PARAMETERS.FE.TYPE
						case {'P1B'}
							p = MESH.p1b;
							t = MESH.st1b;
						case {'P2'}
							p = MESH.p2;
							t = MESH.st2;
						otherwise
							error('Unknown FE discretization');
					end

				otherwise
					error(sprintf('Cannot plot the diagnostic %s\nOnly the following diagnostics are allowed: %s', ...
							outputs{i,1}, XDISPLAY_CASES));
			end

			% Plot data
			switch_plot(h, PARAMETERS.OUTPUT.XDISPLAY);
			switch outputs{i,1}
				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_contour(data, p, t, levels, ti, h);
					%plot_color(data, p, t, ti, h);

				case {'P_DX', 'P_DX_EX', 'P_DY', 'P_DY_EX'}
					plot_color(data, p, t, ti, h);

				case {'U_VECTOR', 'U_VECTOR_EX', 'W_VECTOR', 'GRAD_P', 'GRAD_P_EX'}
					plot_vector(data, p, ti, h);

				otherwise
					error(sprintf('Cannot plot the diagnostic %s\nOnly the following diagnostics are allowed: %s', ...
							outputs{i,1}, XDISPLAY_CASES));
			end
			if strcmp(PARAMETERS.OUTPUT.XDISPLAY, 'SINGLE_FIGURE')
				suplabel(globtitle, 't');
				drawnow;
			end
		end
	end


	%%%%%%%%%%%%%%%%%%%%%%%
	% Auxiliary functions %
	%%%%%%%%%%%%%%%%%%%%%%%
	function[newlevels] = compute_levels_insitu(outputs, ind, oldlevels, TEST_ANALYTIC)
		newlevels = [];
		if TEST_ANALYTIC
			% We wait for the reading of both data and exact data
			if (numel(ind) == 2)
				if (numel(oldlevels) > 0)
					% We already have the isovalues --> nothing to do
					newlevels = oldlevels;
				else
					% No pre-built isovalues --> compute them
					isomin = min(min([outputs{ind(1),3},outputs{ind(1),3}]));
					isomax = max(max([outputs{ind(1),3},outputs{ind(1),3}]));
					newlevels = linspace(isomin,isomax,7);
				end
			end
		else
			if (numel(oldlevels) > 0)
				% We already have the isovalues --> nothing to do
				newlevels = oldlevels;
			else
				% No pre-built isovalues --> compute them
				isomin = min(min(outputs{ind(1),3}));
				isomax = max(max(outputs{ind(1),3}));
				newlevels = linspace(isomin,isomax,7);
			end
		end
	end

end


back to top