implemented tar-mode

This commit is contained in:
Michael Stumpf 2018-11-28 17:42:41 +01:00
parent 98435d9272
commit b7913bc624
5 changed files with 157 additions and 61 deletions

View File

@ -1,15 +1,17 @@
function [data,ib,jb,kb,nxl,nyl,nzl,ighost] = read_field_chunk_ucf(file,ifield,varargin)
% [data,ib,jb,kb,nxl,nyl,nzl,ighost] = read_field_chunk_ucf(file,ifield,varargin)
function [data,ib,jb,kb,nxl,nyl,nzl,ighost] = read_field_chunk_ucf(file,field,varargin)
% [data,ib,jb,kb,nxl,nyl,nzl,ighost] = read_field_chunk_ucf(file,field,varargin)
% Reads single field from one processor chunk.
% Input
% file file to be read
% ifield field to be read
% 'uvwp': 1:u, 2:v, 3:w, 4:p
% 'scal': 1:s1, 2:s2, ...
% Optional input (key/value pair)
% ghost keep ghost cells? (default: yes)
% verbosity verbose output? (default: no)
% debug debug output? (default: no)
% file file name (if tar-mode: ustar handle)
% field field to be read
% {'u','v','w','p','s1','s2',...}
% or integer with dataset index (not in tar-mode)
% ? step index of timestep to be read (default: 1)
% ? ghost keep ghost cells? (default: yes)
% ? verbosity verbose output? (default: no)
% ? debug debug output? (default: no)
% ? tarmode read from tar-file? (default: 0)
% ? rank rank of processor, ignored if not in tarmode (default: 0)
% Output
% data partial field with dim(nxl+2*ighost,nyl+2*ighost,nzl+2*ighost)
% ib,jb,kb global index of first grid point of the partial field w/o ghost cells
@ -18,17 +20,42 @@ function [data,ib,jb,kb,nxl,nyl,nzl,ighost] = read_field_chunk_ucf(file,ifield,v
% Parse optional input arguments
par = inputParser;
addOptional(par,'timestep',1,@isnumeric);
addOptional(par,'step',1,@isnumeric);
addOptional(par,'ghost',1,@isnumeric);
addOptional(par,'verbosity',0,@isnumeric);
addOptional(par,'debug',0,@isnumeric);
addOptional(par,'tarmode',0,@isnumeric);
addOptional(par,'rank',0,@isnumeric);
parse(par,varargin{:});
istep = par.Results.timestep;
istep = par.Results.step;
keepghost = par.Results.ghost;
% Parse field
if ischar(field)
switch field(1)
case 'u'; ifield=1; fbase='uvwp';
case 'v'; ifield=2; fbase='uvwp';
case 'w'; ifield=3; fbase='uvwp';
case 'p'; ifield=4; fbase='uvwp';
case 's'; ifield=str2double(field(2:end)); fbase='scal';
end
elseif isnumeric(field)
if par.Results.tarmode
error('field cannot be numeric, if tar-mode is used.');
end
ifield=field; fbase='';
else
error('field must either be numeric or string.');
end
% Open file
obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug);
obj.open(file);
if par.Results.tarmode
subfile = sprintf('%s.%05d',fbase,par.Results.rank);
obj.opentar(file.pointer(subfile));
else
obj.open(file);
end
% Read raw data
if ~obj.validateType('field')

View File

@ -1,15 +1,15 @@
function [q] = read_field_complete_ucf(file,ifield,varargin)
% [data] = read_field_complete_ucf(file,ifield,varargin)
function [q] = read_field_complete_ucf(file,field,varargin)
% [data] = read_field_complete_ucf(file,field,varargin)
% Reads a specific field from all processor chunks.
% Input
% file file to be read
% ifield field to be read
% 'uvwp': 1:u, 2:v, 3:w, 4:p
% 'scal': 1:s1, 2:s2, ...
% Optional input (key/value pair)
% timestep index of timestep to be read (default: 1)
% verbosity verbose output? (default: no)
% debug debug output? (default: no)
% field field to be read
% {'u','v','w','p','s1','s2',...}
% or integer with dataset index (not in tar-mode)
% ? step index of step to be read (default: 1)
% ? verbosity verbose output? (default: 0)
% ? debug debug output? (default: 0)
% ? tarmode read from tar-file? (default: 0)
% Output
% data partial field with dim(nxl+2*ighost,nyl+2*ighost,nzl+2*ighost)
@ -18,16 +18,39 @@ function [q] = read_field_complete_ucf(file,ifield,varargin)
addOptional(par,'timestep',1,@isnumeric);
addOptional(par,'verbosity',0,@isnumeric);
addOptional(par,'debug',0,@isnumeric);
addOptional(par,'tarmode',0,@isnumeric);
parse(par,varargin{:});
istep = par.Results.timestep;
% Parse filename
[fdir,fbase,fext] = fileparts(file);
fname = sprintf('%s/%s.%05d',fdir,fbase,0);
% Parse field
if ischar(field)
switch field(1)
case 'u'; ifield=1; fbase='uvwp';
case 'v'; ifield=2; fbase='uvwp';
case 'w'; ifield=3; fbase='uvwp';
case 'p'; ifield=4; fbase='uvwp';
case 's'; ifield=str2double(field(2:end)); fbase='scal';
end
elseif isnumeric(field)
if par.Results.tarmode
error('field cannot be numeric, if tar-mode is used.');
end
ifield=field; fbase='';
else
error('field must either be numeric or string.');
end
% Open first file
obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug);
obj.open(fname);
if par.Results.tarmode
fname = sprintf('%s.%05d',fbase,0);
obj.opentar(file.pointer(fname));
else
[fdir,fbase,fext] = fileparts(file);
fname = sprintf('%s/%s.%05d',fdir,fbase,0);
obj.open(fname);
end
if ~obj.validateType('field')
error('read error: no field data.');
end
@ -59,11 +82,22 @@ function [q] = read_field_complete_ucf(file,ifield,varargin)
% Now loop consecutively through files
ifile = 1;
fname = sprintf('%s/%s.%05d',fdir,fbase,ifile);
while exist(fname,'file')
if par.Results.tarmode
loopCondition = @(x) file.isSubfile(x);
fname = sprintf('%s.%05d',fbase,ifile);
else
loopCondition = @(x) exist(x,'file');
fname = sprintf('%s/%s.%05d',fdir,fbase,ifile);
end
while loopCondition(fname)
% Open file
obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug);
obj.open(fname);
if par.Results.tarmode
obj.opentar(file.pointer(fname));
else
obj.open(fname);
end
if ~obj.validateType('field')
error('read error: no field data.');
end
@ -91,6 +125,10 @@ function [q] = read_field_complete_ucf(file,ifield,varargin)
% Move on to next file
ifile = ifile+1;
fname = sprintf('%s/%s.%05d',fdir,fbase,ifile);
if par.Results.tarmode
fname = sprintf('%s.%05d',fbase,ifile);
else
fname = sprintf('%s/%s.%05d',fdir,fbase,ifile);
end
end
end

View File

@ -3,9 +3,9 @@ function [xu,yu,zu,xv,yv,zv,xw,yw,zw,xp,yp,zp] = read_grid_ucf(file,varargin)
% Reads staggered grid from ucf file.
% Input
% file file to be read
% Optional input (key/value pair)
% verbosity verbose output? (default: no)
% debug debug output? (default: no)
% ? verbosity verbose output? (default: 0)
% ? debug debug output? (default: 0)
% ? tarmode read from tar-file? (default: 0)
% Output
% xu,yu,zu velocity grid u
% xv,yv,zv velocity grid v
@ -16,6 +16,7 @@ function [xu,yu,zu,xv,yv,zv,xw,yw,zw,xp,yp,zp] = read_grid_ucf(file,varargin)
par = inputParser;
addOptional(par,'verbosity',0,@isnumeric);
addOptional(par,'debug',0,@isnumeric);
addOptional(par,'tarmode',0,@isnumeric);
parse(par,varargin{:});
% Define sets to be read
@ -24,7 +25,12 @@ function [xu,yu,zu,xv,yv,zv,xw,yw,zw,xp,yp,zp] = read_grid_ucf(file,varargin)
% Open UCF file and read
obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug);
obj.open(file);
if par.Results.tarmode
ptr = file.pointer('grid.bin');
obj.opentar(ptr);
else
obj.open(file);
end
% Read raw data
x = cell(1,nset);

View File

@ -8,12 +8,13 @@ function [u,ibu,jbu,kbu,nxul,nyul,nzul,...
% p,ibp,jbp,kbp,nxpl,nypl,nzpl,ighost] = read_uvwp_chunk_ucf(file,varargin)
% Reads u,v,w,p from one processor chunk.
% Input
% file file to be read
% Optional input (key/value pair)
% timestep index of timestep to be read (default: 1)
% ghost keep ghost cells? (default: yes)
% verbosity verbose output? (default: no)
% debug debug output? (default: no)
% file file name (if tar-mode: ustar handle)
% ? step index of timestep to be read (default: 1)
% ? ghost keep ghost cells? (default: 1)
% ? verbosity verbose output? (default: 0)
% ? debug debug output? (default: 0)
% ? tarmode read from tar-file? (default: 0)
% ? rank rank of processor, ignored if not in tarmode (default: 0)
% Output
% u,v,w,p partial fields with dim(nxl,nyl,nzl)+2*ighost
% ibu,jbu,kbu,... global index of first grid point of the partial field w/o ghost cells
@ -22,12 +23,14 @@ function [u,ibu,jbu,kbu,nxul,nyul,nzul,...
% Parse optional input arguments
par = inputParser;
addOptional(par,'timestep',1,@isnumeric);
addOptional(par,'step',1,@isnumeric);
addOptional(par,'ghost',1,@isnumeric);
addOptional(par,'verbosity',0,@isnumeric);
addOptional(par,'debug',0,@isnumeric);
addOptional(par,'tarmode',0,@isnumeric);
addOptional(par,'rank',0,@isnumeric);
parse(par,varargin{:});
istep = par.Results.timestep;
istep = par.Results.step;
keepghost = par.Results.ghost;
% Define sets to be read
@ -36,9 +39,11 @@ function [u,ibu,jbu,kbu,nxul,nyul,nzul,...
% Open file
obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug);
obj.open(file);
if ~obj.validateType('field')
error('read error: no field data.');
if par.Results.tarmode
subfile = sprintf('uvwp.%05d',par.Results.rank);
obj.opentar(file.pointer(subfile));
else
obj.open(file);
end
% Read raw data

View File

@ -2,19 +2,20 @@ function [u,v,w,p] = read_uvwp_complete_ucf(file,varargin)
% [u,v,w,p] = read_uvwp_complete_ucf(file,varargin)
% Reads u,v,w,p from all processor chunks and combines them to a single field.
% Input
% file file to be read
% Optional input (key/value pair)
% timestep index of timestep to be read (default: 1)
% verbosity verbose output? (default: no)
% debug debug output? (default: no)
% file file name (if tar-mode: ustar handle)
% ? step index of timestep to be read (default: 1)
% ? verbosity verbose output? (default: no)
% ? debug debug output? (default: no)
% ? tarmode read from tar-file? (default: 0)
% Output
% u,v,w,p complete fields with dim(nx,ny,nz)
% Parse optional input arguments
par = inputParser;
addOptional(par,'timestep',1,@isnumeric);
addOptional(par,'step',1,@isnumeric);
addOptional(par,'verbosity',0,@isnumeric);
addOptional(par,'debug',0,@isnumeric);
addOptional(par,'tarmode',0,@isnumeric);
parse(par,varargin{:});
istep = par.Results.timestep;
@ -22,13 +23,17 @@ function [u,v,w,p] = read_uvwp_complete_ucf(file,varargin)
sets = {'u','v','w','p'};
nset = numel(sets);
% Parse filename
[fdir,fbase,fext] = fileparts(file);
fname = sprintf('%s/%s.%05d',fdir,fbase,0);
% Open first file
obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug);
obj.open(fname);
if par.Results.tarmode
fname = sprintf('uvwp.%05d',0);
obj.opentar(file.pointer(fname));
else
[fdir,fbase,fext] = fileparts(file);
fname = sprintf('%s/%s.%05d',fdir,fbase,0);
obj.open(fname);
end
if ~obj.validateType('field')
error('read error: no field data.');
end
@ -93,11 +98,22 @@ function [u,v,w,p] = read_uvwp_complete_ucf(file,varargin)
% Now loop consecutively through files
ifile = 1;
fname = sprintf('%s/%s.%05d',fdir,fbase,ifile);
while exist(fname,'file')
if par.Results.tarmode
loopCondition = @(x) file.isSubfile(x);
fname = sprintf('uvwp.%05d',ifile);
else
loopCondition = @(x) exist(x,'file');
fname = sprintf('%s/%s.%05d',fdir,fbase,ifile);
end
while loopCondition(fname)
% Open file
obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug);
obj.open(fname);
if par.Results.tarmode
obj.opentar(file.pointer(fname));
else
obj.open(fname);
end
if ~obj.validateType('field')
error('read error: no field data.');
end
@ -152,6 +168,10 @@ function [u,v,w,p] = read_uvwp_complete_ucf(file,varargin)
% Move on to next file
ifile = ifile+1;
fname = sprintf('%s/%s.%05d',fdir,fbase,ifile);
if par.Results.tarmode
fname = sprintf('uvwp.%05d',ifile);
else
fname = sprintf('%s/%s.%05d',fdir,fbase,ifile);
end
end
end