ucftools/matlab/write_scal_chunk_ucf.m

45 lines
1.8 KiB
Matlab

function [] = write_scal_chunk_ucf(file,s,ib,jb,kb,nx,ny,nz,time,ighost,varargin)
% [] = write_scal_chunk_ucf(file,s,ibp,jbp,kbp,nxp,nyp,nzp,time,ighost,varargin)
% Writes a partial uvwp field to UCF chunk.
% Input
% file file to be written (the extension will be replaced by the proc rank)
% s partial scalar fields with dim(nx,ny,nz,nscal)
% ib,jb,kb global index of first data point of field w/o ghost cells
% nx,ny,nz global grid size
% time simulation time
% ighost does partial field contain ghost cells?
% Optional input (key/value pair)
% rank processor rank as array [myid,my_col,my_row,my_pln]
% endian endianess of the file as used by fopen (default: 'n')
% verbosity verbose output? (default: no)
% debug debug output? (default: no)
% Parse variable input
par = inputParser;
addParamValue(par,'rank',[0,0,0,0],@(x)isnumeric(x)&&numel(x)==4);
addParamValue(par,'endian','n',@ischar);
addParamValue(par,'verbosity',0,@isnumeric);
addParamValue(par,'debug',0,@isnumeric);
parse(par,varargin{:});
% Determine number of scalar fields
nscal = size(s,4);
% Create file and write to it
obj = ucf('verbosity',par.Results.verbosity,'debug',par.Results.debug);
obj.create(file,'type','field','rank',par.Results.rank,'endian',par.Results.endian);
obj.appendStep(time);
% Write scalar field by field
for iscal=1:nscal
nxl = size(s,1)-2*ighost;
nyl = size(s,2)-2*ighost;
nzl = size(s,3)-2*ighost;
params = int64([ighost,ib,jb,kb,nxl,nyl,nzl,nx,ny,nz]);
obj.appendSet(s(:,:,:,iscal),params);
end
% Close file
obj.close();
end