function
petsc-3.7.6 2017-04-24
PetscBinaryWrite(inarg,varargin)
if ischar(inarg)
fd = PetscOpenFile(inarg,'w');
else if isnumeric(inarg)
if inarg == 0
fd = PetscOpenSocket;
else
fd = PetscOpenSocket(inarg);
end
else
fd = inarg;
end
end
indices = 'int32';
precision = 'float64';
ispetsccomplex = false;
tnargin = nargin;
for l=1:nargin-2
if ischar(varargin{l}) && strcmpi(varargin{l},'indices')
tnargin = min(l,tnargin-1);
indices = varargin{l+1};
end
if ischar(varargin{l}) && strcmpi(varargin{l},'precision')
tnargin = min(l,tnargin-1);
precision = varargin{l+1};
end
if ischar(varargin{l}) && strcmpi(varargin{l},'complex')
tnargin = min(l,tnargin-1);
ispetsccomplex = varargin{l+1};
end
end
for l=1:nargin-1
A = varargin{l};
if issparse(A) || min(size(A)) > 1
if ~issparse(A)
A = sparse(A);
end
[m,n] = size(A);
if min(size(A)) == 1
n_nz = full(A' ~= 0);
else
n_nz = full(sum(A' ~= 0));
end
nz = sum(n_nz);
write(fd,[1211216,m,n,nz],indices);
write(fd,n_nz,indices);
[i,j,s] = find(A');
write(fd,i-1,indices);
if ~isreal(s) || ispetsccomplex
s = conj(s);
ll = length(s);
sr = real(s);
si = imag(s);
s(1:2:2*ll) = sr;
s(2:2:2*ll) = si;
end
write(fd,s,precision);
else
[m,n] = size(A);
write(fd,[1211214,m*n],indices);
if ~isreal(A) || ispetsccomplex
ll = length(A);
sr = real(A);
si = imag(A);
A(1:2:2*ll) = sr;
A(2:2:2*ll) = si;
end
write(fd,A,precision);
end
end
if ischar(inarg) || isinteger(inarg)
close(fd)
end