function [ibegu,iendu,jbegu,jendu,kbegu,kendu,... ibegv,iendv,jbegv,jendv,kbegv,kendv,... ibegw,iendw,jbegw,jendw,kbegw,kendw,... ibegp,iendp,jbegp,jendp,kbegp,kendp,... ibegs,iends,jbegs,jends,kbegs,kends] = read_procgrid_ucf(file,varargin) % [ibegu,iendu,jbegu,jendu,kbegu,kendu,... % ibegv,iendv,jbegv,jendv,kbegv,kendv,... % ibegw,iendw,jbegw,jendw,kbegw,kendw,... % ibegp,iendp,jbegp,jendp,kbegp,kendp,... % ibegs,iends,jbegs,jends,kbegs,kends] = read_procgrid_ucf(file,varargin) % Reads processor grids. % Input % 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 % ibegw,iendw,jbegw,jendw,kbegw,kendw processor grid w % ibegp,iendp,jbegp,jendp,kbegp,kendp processor grid p % ibegs,iends,jbegs,jends,kbegs,kends processor grid s % Parse optional input arguments par = inputParser; addParamValue(par,'verbosity',0,@isnumeric); addParamValue(par,'debug',0,@isnumeric); addParamValue(par,'tarmode',0,@isnumeric); parse(par,varargin{:}); % Open file obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug); switch class(file) case 'char' obj.open(file); case {'ustar','ucfmulti'} ptr = file.pointer('proc.bin'); obj.opentar(ptr); otherwise error('Input file type not supported: %s',class(file)); end % Define sets to be read isDualMesh=(obj.UCFVersion>=2) && (obj.NumDataset>4); if isDualMesh sets = {'u','v','w','p','s'}; else sets = {'u','v','w','p'}; end nset = numel(sets); % Read raw data ibeg = cell(1,nset); iend = cell(1,nset); jbeg = cell(1,nset); jend = cell(1,nset); kbeg = cell(1,nset); kend = cell(1,nset); for iset=1:nset [data,params] = obj.readSet(1,iset); params = cast(params,'double'); nxprocs = params(1); nyprocs = params(2); nzprocs = params(3); ibeg{iset} = data(1:nxprocs); iend{iset} = data(nxprocs+1:2*nxprocs); jbeg{iset} = data(2*nxprocs+1:2*nxprocs+nyprocs); jend{iset} = data(2*nxprocs+nyprocs+1:2*nxprocs+2*nyprocs); kbeg{iset} = data(2*nxprocs+2*nyprocs+1:2*nxprocs+2*nyprocs+nzprocs); kend{iset} = data(2*nxprocs+2*nyprocs+nzprocs+1:2*nxprocs+2*nyprocs+2*nzprocs); end % Close UCF file obj.close(); % Reassign content from loop iset = find(strcmp(sets,'u')); 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 = 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 = 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 = 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'); if isDualMesh iset = find(strcmp(sets,'s')); ibegs = cast(ibeg{iset},'double'); iends = cast(iend{iset},'double'); jbegs = cast(jbeg{iset},'double'); jends = cast(jend{iset},'double'); kbegs = cast(kbeg{iset},'double'); kends = cast(kend{iset},'double'); else ibegs = ibegp; iends = iendp; jbegs = jbegp; jends = jendp; kbegs = kbegp; kends = kendp; end end