|
readamrdata_hdf.m.html |
|
|
Source file: readamrdata_hdf.m
|
|
Directory: /home/rjl/git/rjleveque/clawpack-4.x/matlab
|
|
Converted: Sun May 15 2011 at 19:15:58
using clawcode2html
|
|
This documentation file will
not reflect any later changes in the source file.
|
function [amr,t] = readamrdata_hdf(dim,Frame,dir);
% Internal routines for Clawpack graphics.
% Check to see if an hdf file exists for this frame.
n1 = Frame+10000;
fname = [dir, 'fort.',num2str(n1),'.hdf'];
fname(length(dir)+6) = 'q';
if ~exist(fname)
amr = {};
t = [];
return;
end
% Read grid info for initial grid from hdf file.
disp(['Reading data from ',fname]);
sd_id = hdfsd('start',fname,'read');
% Get number of datasets (nsds) and global attributes (nattr).
[nsds,nattr,status] = hdfsd('fileinfo',sd_id);
% Select and read in the first dataset (grid info for grid 0).
sds_index = 0;
sds_id = hdfsd('select',sd_id,sds_index);
[data,status] = hdfsd('readdata',sds_id,0,1,21);
status = hdfsd('endaccess',sds_id);
% Extract time, meqn and ngrids.
t = data(3);
meqn = data(4);
ngrids = nsds/(meqn+1);
%=============================================
% MAIN LOOP ON GRIDS FOR THIS FRAME:
%=============================================
% Initialize data set counter
sds_index=0;
for ng = 1:ngrids
% get parameters for this grid from hdf file.
sds_id = hdfsd('select',sd_id,sds_index);
[data,status] = hdfsd('readdata',sds_id,0,1,21);
status = hdfsd('endaccess',sds_id);
% check number of dimensions requested matches that in HDF file.
if dim ~= data(2)
error(['Number of dimensions requested does not match HDF ' ...
'file']);
end
% copy parameters for this grid into amrdata data structure.
% note that data(14:17) contains xhigh, yhigh, zhigh.
amrdata.gridno = data(1);
amrdata.level = data(5);
if (dim == 1)
amrdata.mx = data(6);
amrdata.xlow = data(10);
amrdata.dx = data(18);
% create an array of zeros which will hold the data.
amrdata.data = zeros([meqn,amrdata.mx]);
elseif (dim == 2)
amrdata.mx = data(6);
amrdata.xlow = data(10);
amrdata.dx = data(18);
amrdata.my = data(7);
amrdata.ylow = data(11);
amrdata.dy = data(19);
% create an array of zeros which will hold the data.
amrdata.data = zeros([meqn,amrdata.mx*amrdata.my]);
elseif (dim == 3)
amrdata.mx = data(6);
amrdata.xlow = data(10);
amrdata.dx = data(18);
amrdata.my = data(7);
amrdata.ylow = data(11);
amrdata.dy = data(19);
amrdata.mz = data(8);
amrdata.zlow = data(12);
amrdata.dz = data(20);
% create an array of zeros which will hold the data.
amrdata.data=zeros([meqn,amrdata.mx*amrdata.my*amrdata.mz]);
end
% provide description of the data set for reading data.
start = zeros([dim,1]);
stride = ones([dim,1]);
if (dim == 1)
edge = [amrdata.mx]';
elseif (dim == 2)
edge = [amrdata.mx amrdata.my]';
elseif (dim == 3)
edge = [amrdata.mx amrdata.my amrdata.mz]';
end
% loop over datasets on each grid, reading each one.
for nq = 1:meqn
sds_index = sds_index+1;
sds_id = hdfsd('select',sd_id,sds_index);
[qcomp,status] = hdfsd('readdata',sds_id,start,stride,edge);
status = hdfsd('endaccess',sds_id);
if (dim == 1)
amrdata.data(nq,:) = reshape(qcomp,[amrdata.mx 1])';
elseif (dim == 2)
amrdata.data(nq,:) = reshape(permute(qcomp,[2 1]),...
[amrdata.mx*amrdata.my 1])';
elseif (dim == 3)
amrdata.data(nq,:) = reshape(permute(qcomp,[3 2 1]),...
[amrdata.mx*amrdata.my*amrdata.mz 1])';
end
end
% Get ready for next grid
sds_index = sds_index+1;
amr(ng) = amrdata;
end
status = hdfsd('end',sd_id);