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 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) % ? 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 % stime simulation time with dim(1,nt) % Parse optional input arguments par = inputParser; addParameter(par,'step',0,@isnumeric); addParameter(par,'format','array',@ischar); addParameter(par,'verbosity',0,@isnumeric); addParameter(par,'debug',0,@isnumeric); addParameter(par,'tarmode',0,@isnumeric); parse(par,varargin{:}); istep = par.Results.step; mlformat = par.Results.format; % Open file obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug); 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 % Get range of steps to be read if istep==0 steps = uint32(1:obj.getNumTimesteps()); else steps = uint32(istep); end nstepout = numel(steps); % Get simulation time stime = obj.getSimulationTime(); stime = stime(steps); % Read raw data for istep=nstepout:-1:1 [data,params] = obj.readSet(steps(istep),1); params = cast(params,'double'); np = params(1); ncol = params(2); ncol_rank = params(3); ncol_hybrid = params(4); ncol_dem = params(5); ncol_scalar = params(6); data = reshape(data,ncol,np); nscal = ncol_scalar/2; col = colmap_from_flags(ncol_rank,ncol_hybrid,ncol_dem,nscal); % Parse data to specified format switch mlformat case 'struct' pp(istep) = convert_particles_array2struct(data,col); case 'paraview' col = convert_colmap_matlab2paraview(col); pp(istep) = convert_particles_array2struct(data,col); case {'cell','array'} pp{istep} = data; otherwise error('Unknown format: %s',mlformat); end end % Convert cell array to 3-dim array, if mlformat=='array' if strcmp(mlformat,'array') pp = cat(3,pp{:}); end % Close file obj.close(); end