openEMS/matlab/WriteHDF5.m

74 lines
2.4 KiB
Matlab

function WriteHDF5(filename,hdf_fielddata,hdf_mesh)
% function WriteHDF5(filename,hdf_fielddata,hdf_mesh)
%
% input:
% hdf_fielddata.time
% hdf_fielddata.names
% hdf_fielddata.values
% hdf_mesh.type
% hdf_mesh.names
% hdf_mesh.lines
%
% openEMS matlab interface
% -----------------------
% (C) 2010 Sebastian Held <sebastian.held@uni-due.de>
% See also ReadHDF5FieldData ReadHDF5Mesh
isOctave = exist('OCTAVE_VERSION','builtin') ~= 0;
if isOctave
WriteHDF5_octave(filename,hdf_fielddata,hdf_mesh);
return
end
writemode = 'overwrite';
if isfield( hdf_fielddata, 'TD' )
% this is a time domain data set
time = hdf_fielddata.TD.time;
for n=1:numel(time)
name = ['/FieldData/TD/' int2str(n)];
[details.Location, details.Name] = fileparts(name);
attribute_details.AttachedTo = name;
attribute_details.AttachType = 'dataset';
attribute_details.Name = 'time';
hdf5write( filename, details, hdf_fielddata.TD.values{n}, ...
attribute_details, time(n), ...
'WriteMode', writemode );
writemode = 'append';
end
end
if isfield( hdf_fielddata, 'FD' )
% this is a frequency domain data set
freq = hdf_fielddata.FD.frequency;
for n=1:numel(freq)
name = ['/FieldData/FD/f' int2str(n-1) '_real'];
[details.Location, details.Name] = fileparts(name);
hdf5write( filename, details, real(hdf_fielddata.FD.values{n}), ...
'WriteMode', writemode );
name = ['/FieldData/FD/f' int2str(n-1) '_imag'];
[details.Location, details.Name] = fileparts(name);
hdf5write( filename, details, imag(hdf_fielddata.FD.values{n}), ...
'WriteMode', 'append' );
writemode = 'append';
end
name = '/FieldData/FD';
[details.Location, details.Name] = fileparts(name);
attribute_details.AttachedTo = name;
attribute_details.AttachType = 'group';
attribute_details.Name = 'frequency';
hdf5write( filename, attribute_details, freq, ...
'WriteMode', 'append' );
end
names = hdf_mesh.names; % names is a cell array
for n=1:numel(names)
[details.Location, details.Name, ext] = fileparts(names{n});
details.Name = [details.Name ext];
hdf5write( filename, details, hdf_mesh.lines{n}, ...
'WriteMode', 'append' );
end
function WriteHDF5_octave(filename,hdf_fielddata,hdf_mesh)
error 'not yet implemented'