95 lines
2.2 KiB
Matlab
95 lines
2.2 KiB
Matlab
function PlotHDF5FieldData(file, PlotArgs)
|
|
% function PlotHDF5FieldData(file, PlotArgs)
|
|
%
|
|
% e.g.
|
|
% PlotArgs.slice = {0 [10 20] 0};
|
|
% PlotArgs.pauseTime=0.01;
|
|
% PlotArgs.component=2;
|
|
% PlotArgs.Limit = 'auto';
|
|
%
|
|
% PlotHDF5FieldData('tmp/Et.h5',PlotArgs)
|
|
%
|
|
% openEMS matlab interface
|
|
% -----------------------
|
|
% author: Thorsten Liebig
|
|
|
|
component = PlotArgs.component;
|
|
|
|
if (isfield(PlotArgs,'pauseTime'))
|
|
pauseT = PlotArgs.pauseTime;
|
|
else
|
|
pauseT = 0.01;
|
|
end
|
|
|
|
mesh = ReadHDF5Mesh(file);
|
|
fields = ReadHDF5FieldData(file);
|
|
|
|
if (mesh.type==0)
|
|
% cartesian mesh
|
|
[X Y Z] = meshgrid(mesh.lines{1},mesh.lines{2},mesh.lines{3});
|
|
for n=1:numel(fields.values)
|
|
% since Matlab 7.1SP3 the field needs to be reordered
|
|
fields.values{n} = permute(fields.values{n},[2 1 3 4]); % reorder: y,x,z (or y,x)
|
|
end
|
|
else
|
|
disp(['PlotHDF5FieldData:: Error: unknown mesh type ' num2str(mesh.type)]);
|
|
end
|
|
|
|
max_amp = 0;
|
|
|
|
if (component>0)
|
|
for n=1:numel(fields.values)
|
|
Field{n} = fields.values{n}(:,:,:,component);
|
|
end
|
|
else
|
|
for n=1:numel(fields.values)
|
|
fx = fields.values{n}(:,:,:,1);
|
|
fy = fields.values{n}(:,:,:,2);
|
|
fz = fields.values{n}(:,:,:,3);
|
|
Field{n} = sqrt(fx.^2 + fy.^2 + fz.^2);
|
|
end
|
|
end
|
|
|
|
for n=1:numel(Field)
|
|
amp = max(max(max(abs(Field{n}))));
|
|
if (amp>max_amp)
|
|
max_amp = amp;
|
|
end
|
|
end
|
|
|
|
if (max_amp==0)
|
|
disp('max found amplitude was 0 --> nothing to plot');
|
|
return
|
|
end
|
|
|
|
for n=1:numel(Field)
|
|
if size(Field{n},3) > 1
|
|
% Field is a volume
|
|
hsurfaces = slice(X,Y,Z, Field{n} , PlotArgs.slice{:});
|
|
set(hsurfaces,'FaceColor','interp','EdgeColor','none');
|
|
else
|
|
% Field is already a 2D cut
|
|
pcolor(X,Y,Field{n});
|
|
shading( 'interp' );
|
|
xlabel( 'x' );
|
|
ylabel( 'y' );
|
|
end
|
|
title(fields.names{n});
|
|
%view(3)
|
|
axis equal
|
|
if (isfield(PlotArgs,'Limit'))
|
|
if ~ischar(PlotArgs.Limit)
|
|
caxis(PlotArgs.Limit);
|
|
elseif strcmp(PlotArgs.Limit,'auto')
|
|
if (component>0)
|
|
caxis([-max_amp,max_amp]);
|
|
else
|
|
caxis([0,max_amp]);
|
|
end
|
|
end
|
|
end
|
|
|
|
drawnow
|
|
pause(pauseT)
|
|
end
|