From 3b2b577211844eede89704f17608590502cb73af Mon Sep 17 00:00:00 2001 From: Michael Stumpf Date: Tue, 27 Nov 2018 15:51:09 +0100 Subject: [PATCH] added tarmode support --- matlab/read_parameters_ucf.m | 18 +++++++--- matlab/read_particles_ucf.m | 24 ++++++++----- matlab/read_procgrid_ucf.m | 63 ++++++++++++++++++--------------- matlab/read_scal_chunk_ucf.m | 27 +++++++++----- matlab/read_scal_complete_ucf.m | 52 ++++++++++++++++++--------- 5 files changed, 116 insertions(+), 68 deletions(-) diff --git a/matlab/read_parameters_ucf.m b/matlab/read_parameters_ucf.m index df2f4be..b985741 100644 --- a/matlab/read_parameters_ucf.m +++ b/matlab/read_parameters_ucf.m @@ -3,19 +3,27 @@ function [params] = read_parameters_ucf(file,varargin) % Reads the entire parameters_XXXX.asc as written by UCF file format % into a struct. % Input - % file file name - % Optional input - % verbosity verbose screen output? (default: no) + % file file name (if tar-mode: ustar handle) + % ? verbosity verbose screen output? (default: 0) + % ? tarmode read from tar-file? (default: 0) % Output % params struct with content of parameters_XXXX.asc % Parse optional input arguments par = inputParser; addOptional(par,'verbosity',0,@isnumeric); + addOptional(par,'tarmode',0,@isnumeric); parse(par,varargin{:}); - + % Open file obj = ini('verbosity',par.Results.verbosity); - obj.open(file); + if par.Results.tarmode + ptr = file.pointer('parameters.asc'); + obj.opentar(ptr); + else + obj.open(file); + end + % Get parsed content params = obj.getContent(); + % Close file obj.close(); end diff --git a/matlab/read_particles_ucf.m b/matlab/read_particles_ucf.m index 32550c7..721d6cc 100644 --- a/matlab/read_particles_ucf.m +++ b/matlab/read_particles_ucf.m @@ -2,16 +2,16 @@ function [pp,col,stime] = read_particles_ucf(file,varargin) % [pp,col] = read_particles_ucf(file,varargin) % Reads particle data from UCF file % Input - % file file to be read - % Optional input (key/value pair) - % timestep timestep to be read (default: all) - % format MATLAB format (default: 'array') + % file file name (if tar-mode: ustar handle) + % ? step timestep to be read (default: 0 [all]) + % ? format MATLAB format (default: 'array') % 'array' plain array with dim(ncol.np,nt) % 'struct' structure array with short fieldnames % 'paraview' structure array with H5Part fieldnames % 'cell' cell array with dim(1,nt) and plain arrays with dim(ncol,np) inside - % verbosity verbose output? (default: no) - % debug debug output? (default: no) + % ? verbosity verbose output? (default: no) + % ? debug debug output? (default: no) + % ? tarmode read from tar-file? (default: 0) % Output % pp particle data in specified format % col container map 'char'->'double' which maps quantity names to column index @@ -19,17 +19,23 @@ function [pp,col,stime] = read_particles_ucf(file,varargin) % Parse optional input arguments par = inputParser; - addOptional(par,'timestep',0,@isnumeric); + addOptional(par,'step',0,@isnumeric); addOptional(par,'format','array',@ischar); addOptional(par,'verbosity',0,@isnumeric); addOptional(par,'debug',0,@isnumeric); + addOptional(par,'tarmode',0,@isnumeric); parse(par,varargin{:}); - istep = par.Results.timestep; + istep = par.Results.step; mlformat = par.Results.format; % Open file obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug); - obj.open(file); + if par.Results.tarmode + ptr = file.pointer('particles.bin'); + obj.opentar(ptr); + else + obj.open(file); + end if ~obj.validateType('particle') error('read error: no particle data.'); end diff --git a/matlab/read_procgrid_ucf.m b/matlab/read_procgrid_ucf.m index cba6031..21aa13c 100644 --- a/matlab/read_procgrid_ucf.m +++ b/matlab/read_procgrid_ucf.m @@ -8,10 +8,9 @@ function [ibegu,iendu,jbegu,jendu,kbegu,kendu,... % ibegp,iendp,jbegp,jendp,kbegp,kendp] = read_procgrid_ucf(file,varargin) % Reads processor grids. % Input - % file file to be read - % Optional input (key/value pair) - % verbosity verbose output? (default: no) - % + % file file name (if tar-mode: ustar handle) + % ? verbosity verbose output? (default: 0) + % ? tarmode read from tar-file? (default: 0) % Output % ibegu,iendu,jbegu,jendu,kbegu,kendu processor grid u % ibegv,iendv,jbegv,jendv,kbegv,kendv processor grid v @@ -22,6 +21,7 @@ function [ibegu,iendu,jbegu,jendu,kbegu,kendu,... 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 @@ -30,7 +30,12 @@ function [ibegu,iendu,jbegu,jendu,kbegu,kendu,... % Open file obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug); - obj.open(file); + if par.Results.tarmode + ptr = file.pointer('proc.bin'); + obj.opentar(ptr); + else + obj.open(file); + end % Read raw data ibeg = cell(1,nset); @@ -58,34 +63,34 @@ function [ibegu,iendu,jbegu,jendu,kbegu,kendu,... % Reassign content from loop iset = find(strcmp(sets,'u')); - ibegu = ibeg{iset}; - iendu = iend{iset}; - jbegu = jbeg{iset}; - jendu = jend{iset}; - kbegu = kbeg{iset}; - kendu = kend{iset}; + ibegu = cast(ibeg{iset},'double'); + iendu = cast(iend{iset},'double'); + jbegu = cast(jbeg{iset},'double'); + jendu = cast(jend{iset},'double'); + kbegu = cast(kbeg{iset},'double'); + kendu = cast(kend{iset},'double'); iset = find(strcmp(sets,'v')); - ibegv = ibeg{iset}; - iendv = iend{iset}; - jbegv = jbeg{iset}; - jendv = jend{iset}; - kbegv = kbeg{iset}; - kendv = kend{iset}; + ibegv = cast(ibeg{iset},'double'); + iendv = cast(iend{iset},'double'); + jbegv = cast(jbeg{iset},'double'); + jendv = cast(jend{iset},'double'); + kbegv = cast(kbeg{iset},'double'); + kendv = cast(kend{iset},'double'); iset = find(strcmp(sets,'w')); - ibegw = ibeg{iset}; - iendw = iend{iset}; - jbegw = jbeg{iset}; - jendw = jend{iset}; - kbegw = kbeg{iset}; - kendw = kend{iset}; + ibegw = cast(ibeg{iset},'double'); + iendw = cast(iend{iset},'double'); + jbegw = cast(jbeg{iset},'double'); + jendw = cast(jend{iset},'double'); + kbegw = cast(kbeg{iset},'double'); + kendw = cast(kend{iset},'double'); iset = find(strcmp(sets,'p')); - ibegp = ibeg{iset}; - iendp = iend{iset}; - jbegp = jbeg{iset}; - jendp = jend{iset}; - kbegp = kbeg{iset}; - kendp = kend{iset}; + ibegp = cast(ibeg{iset},'double'); + iendp = cast(iend{iset},'double'); + jbegp = cast(jbeg{iset},'double'); + jendp = cast(jend{iset},'double'); + kbegp = cast(kbeg{iset},'double'); + kendp = cast(kend{iset},'double'); end diff --git a/matlab/read_scal_chunk_ucf.m b/matlab/read_scal_chunk_ucf.m index 8e11d26..3af187d 100644 --- a/matlab/read_scal_chunk_ucf.m +++ b/matlab/read_scal_chunk_ucf.m @@ -2,12 +2,13 @@ function [s,ib,jb,kb,nxl,nyl,nzl,ighost] = read_scal_chunk_ucf(file,varargin) % [s,ib,jb,kb,nxl,nyl,nzl,ighost] = read_scal_chunk_ucf(file,varargin) % Reads scalar fields 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 % s partial fields with dim(nxl+2*ighost,nyl+2*ighost,nzl+2*ighost,nscal) % ib,jb,kb,... global index of first grid point of the partial field w/o ghost cells @@ -16,17 +17,25 @@ function [s,ib,jb,kb,nxl,nyl,nzl,ighost] = read_scal_chunk_ucf(file,varargin) % 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; % Open file obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug); - obj.open(file); + if par.Results.tarmode + subfile = sprintf('scal.%05d',par.Results.rank); + obj.opentar(file.pointer(subfile)); + else + obj.open(file); + end + if ~obj.validateType('field') error('read error: no field data.'); end diff --git a/matlab/read_scal_complete_ucf.m b/matlab/read_scal_complete_ucf.m index 39130cf..e747976 100644 --- a/matlab/read_scal_complete_ucf.m +++ b/matlab/read_scal_complete_ucf.m @@ -2,29 +2,34 @@ function [s] = read_scal_complete_ucf(file,varargin) % [s] = read_scal_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: 0) + % ? debug debug output? (default: 0) + % ? tarmode read from tar-file? (default: 0) % Output % s complete scalar fields with dim(nx,ny,nz,nscal) % 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; - - % Parse filename - [fdir,fbase,fext] = fileparts(file); - fname = sprintf('%s/%s.%05d',fdir,fbase,0); + istep = par.Results.step; % Open first file obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug); - obj.open(fname); + if par.Results.tarmode + fname = sprintf('scal.%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 @@ -62,11 +67,22 @@ function [s] = read_scal_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('scal.%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 @@ -99,6 +115,10 @@ function [s] = read_scal_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('scal.%05d',ifile); + else + fname = sprintf('%s/%s.%05d',fdir,fbase,ifile); + end end end