matlab: new data type (real or complex value) flag for hdf5 data

This commit is contained in:
Thorsten Liebig 2012-09-21 14:18:47 +02:00
parent b3ca99ec56
commit 892dd67264
3 changed files with 49 additions and 13 deletions

View File

@ -55,17 +55,24 @@ if (do_FD_dump)
if (~isfield(field,'FD'))
warning('openEMS:ConvertHDF5_VTK','no FD data found skipping frequency domian vtk dump...');
else
ph = linspace(0,360,phase_N+1);
ph = ph(1:end-1);
for n = 1:numel(field.FD.frequency)
for p = ph
filename = [vtk_prefix '_' num2str(field.FD.frequency(n)) '_' num2str(p,'%03d') '.vtk' ];
Dump2VTK(filename, real(field.FD.values{n}*exp(1j*p*pi/180)), mesh, fieldname, varargin{:});
if (field.FD.DataType==1) % dump complex value FD data
ph = linspace(0,360,phase_N+1);
ph = ph(1:end-1);
for n = 1:numel(field.FD.frequency)
for p = ph
filename = [vtk_prefix '_' num2str(field.FD.frequency(n)) '_' num2str(p,'%03d') '.vtk' ];
Dump2VTK(filename, real(field.FD.values{n}*exp(1j*p*pi/180)), mesh, fieldname, varargin{:});
end
filename = [vtk_prefix '_' num2str(field.FD.frequency(n)) '_abs.vtk' ];
Dump2VTK(filename, abs(field.FD.values{n}), mesh, fieldname, varargin{:});
filename = [vtk_prefix '_' num2str(field.FD.frequency(n)) '_ang.vtk' ];
Dump2VTK(filename, angle(field.FD.values{n}), mesh, fieldname, varargin{:});
end
else % dump real value FD data
for n = 1:numel(field.FD.frequency)
filename = [vtk_prefix '_' num2str(field.FD.frequency(n)) '.vtk' ];
Dump2VTK(filename, real(field.FD.values{n}), mesh, fieldname, varargin{:});
end
filename = [vtk_prefix '_' num2str(field.FD.frequency(n)) '_abs.vtk' ];
Dump2VTK(filename, abs(field.FD.values{n}), mesh, fieldname, varargin{:});
filename = [vtk_prefix '_' num2str(field.FD.frequency(n)) '_ang.vtk' ];
Dump2VTK(filename, angle(field.FD.values{n}), mesh, fieldname, varargin{:});
end
end
end

View File

@ -44,3 +44,5 @@ for n=1:numTS
end
end
field.FD.DataType=1;

View File

@ -6,10 +6,12 @@ function hdf_fielddata = ReadHDF5FieldData(file)
% hdf_fielddata.TD.time
% hdf_fielddata.TD.names
% hdf_fielddata.TD.values
% hdf_fielddata.TD.DataType (0 --> real value data)
%
% % frequency domain data (if exist)
% hdf_fielddata.FD.frequency
% hdf_fielddata.FD.values
% hdf_fielddata.FD.DataType (0 / 1 --> real / complex value data)
%
% example: values of timestep 12:
% hdf_fielddata.TD.values{12}: array (x,y,z,polarization)
@ -54,6 +56,7 @@ end
if (numel(TD.names)>0)
hdf_fielddata.TD=TD;
hdf_fielddata.TD.DataType = 0; %real value data
for n=1:numel(hdf_fielddata.TD.names)
hdf_fielddata.TD.values{n} = double(hdf5read(file,hdf_fielddata.TD.names{n}));
end
@ -66,8 +69,19 @@ catch err
% disp(err)
return
end
for n=1:numel(hdf_fielddata.FD.frequency)
hdf_fielddata.FD.values{n} = double(hdf5read(file,['/FieldData/FD/f' int2str(n-1) '_real']) + 1i*hdf5read(file,['/FieldData/FD/f' int2str(n-1) '_imag']));
try
hdf_fielddata.FD.values{n} = double(hdf5read(file,['/FieldData/FD/f' int2str(n-1) '_real']) + 1i*hdf5read(file,['/FieldData/FD/f' int2str(n-1) '_imag']));
hdf_fielddata.FD.DataType = 1; %complex value data
catch
try
hdf_fielddata.FD.values{n} = double(hdf5read(file,['/FieldData/FD/f' int2str(n-1)]));
hdf_fielddata.FD.DataType = 0; %real value data
catch
error('openEMS:ReadHDF5FieldData','FD data invalid...')
end
end
end
function hdf_fielddata = ReadHDF5FieldData_octave(file)
@ -83,11 +97,24 @@ if isfield(hdf.FieldData,'TD')
hdf_fielddata.TD.names{n} = ['/FieldData/TD/' hdf_fielddata_names{n}(2:end)];
hdf_fielddata.TD.time(n) = ReadHDF5Attribute(file, hdf_fielddata.TD.names{n},'time');
end
hdf_fielddata.TD.DataType = 0; %real value data
end
if isfield(hdf.FieldData,'FD')
%read FD data
hdf_fielddata.FD.frequency = ReadHDF5Attribute(file,'/FieldData/FD/','frequency');
for n=1:numel(hdf_fielddata.FD.frequency)
hdf_fielddata.FD.values{n} = double(hdf.FieldData.FD.(['f' int2str(n-1) '_real']) +1i*hdf.FieldData.FD.(['f' int2str(n-1) '_imag']) );
try %try reading complex data
for n=1:numel(hdf_fielddata.FD.frequency)
hdf_fielddata.FD.values{n} = double(hdf.FieldData.FD.(['f' int2str(n-1) '_real']) +1i*hdf.FieldData.FD.(['f' int2str(n-1) '_imag']) );
end
hdf_fielddata.FD.DataType = 1; %complex value data
catch
try %try reading real value data
for n=1:numel(hdf_fielddata.FD.frequency)
hdf_fielddata.FD.values{n} = double(hdf.FieldData.FD.(['f' int2str(n-1)]));
end
hdf_fielddata.FD.DataType = 0; %real value data
catch
error('openEMS:ReadHDF5FieldData','FD data invalid...')
end
end
end