classdef PetscIS < PetscObject
methods
function obj = PetscIS(indices,flag)
if (nargin > 1)
obj.pobj = indices;
return
end
comm = PETSC_COMM_SELF();
if (nargin == 1)
[err,obj.pobj] = calllib('libpetsc', 'ISCreate',comm ,0);PetscCHKERRQ(err);
err = calllib('libpetsc', 'ISSetType', obj.pobj,'general');PetscCHKERRQ(err);
indices = indices-1;
err = calllib('libpetsc', 'ISGeneralSetIndices', obj.pobj,length(indices),indices,Petsc.COPY_VALUES);PetscCHKERRQ(err);
else
[err,obj.pobj] = calllib('libpetsc', 'ISCreate',comm ,0);PetscCHKERRQ(err);
end
end
function err = SetType(obj,name)
err = calllib('libpetsc', 'ISSetType', obj.pobj,name);PetscCHKERRQ(err);
end
function [n,err] = GetSize(obj)
n = 0;
[err,n] = calllib('libpetsc', 'ISGetSize', obj.pobj,n);PetscCHKERRQ(err);
end
function err = GeneralSetIndices(obj,indices)
indices = indices - 1;
err = calllib('libpetsc', 'ISGeneralSetIndices', obj.pobj,length(indices),indices,Petsc.COPY_VALUES);PetscCHKERRQ(err);
end
function [indices,err] = GetIndices(obj,idx)
[n,err] = GetSize(obj);
indices = zeros(n,1);
[err,indices] = calllib('libpetsc','ISGetIndicesMatlab',obj.pobj,indices);
indices = indices + 1;
end
function err = View(obj,viewer)
if (nargin == 1)
err = calllib('libpetsc', 'ISView', obj.pobj,0);PetscCHKERRQ(err);
else
err = calllib('libpetsc', 'ISView', obj.pobj,viewer.pobj);PetscCHKERRQ(err);
end
end
function err = Destroy(obj)
err = calllib('libpetsc', 'ISDestroy', obj.pobj);PetscCHKERRQ(err);
end
function varargout = subsref(obj,S)
if (S(1).type == '.')
[varargout{1:nargout}] = builtin('subsref', obj, S);
else
varargout = {obj.GetIndices(S.subs{1})};
end
end
end
end