function
   petsc-3.7.7 2017-09-25
    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