Subversion Repositories slepc-dev

Compare Revisions

Ignore whitespace Rev 2429 → Rev 2430

/trunk/bin/matlab/classes/slepcmatlabheader.h
31,7 → 31,7
typedef int EPSProblemType;
typedef int EPSWhich;
typedef int EPSExtraction;
int EPSCreate(MPI_Comm,EPS *);
int EPSCreate(MPI_Comm,EPS*);
int EPSSetType(EPS,const char*);
int EPSSetFromOptions(EPS);
int EPSSetOperators(EPS,Mat,Mat);
50,3 → 50,20
int EPSGetST(EPS,ST*);
int EPSDestroy(EPS*);
 
typedef PetscPointer SVD;
typedef int SVDWhich;
int SVDCreate(MPI_Comm,SVD*);
int SVDSetType(SVD,const char*);
int SVDSetFromOptions(SVD);
int SVDSetOperator(SVD,Mat);
int SVDSetWhichSingularTriplets(SVD,SVDWhich);
int SVDSetTolerances(SVD,double,int);
int SVDSetDimensions(SVD,int,int,int);
int SVDSolve(SVD);
int SVDSetUp(SVD);
int SVDGetConverged(SVD,int*);
int SVDGetSingularTriplet(SVD,int,double*,Vec,Vec);
int SVDComputeRelativeError(SVD,int,double*);
int SVDView(SVD,PetscViewer);
int SVDDestroy(SVD*);
 
/trunk/bin/matlab/classes/SlepcEPS.m
17,13 → 17,13
PGNHEP=5;
GHIEP=6;
 
EPS_RITZ=1;
EPS_HARMONIC=2;
EPS_HARMONIC_RELATIVE=3;
EPS_HARMONIC_RIGHT=4;
EPS_HARMONIC_LARGEST=5;
EPS_REFINED=6;
EPS_REFINED_HARMONIC=7;
RITZ=1;
HARMONIC=2;
HARMONIC_RELATIVE=3;
HARMONIC_RIGHT=4;
HARMONIC_LARGEST=5;
REFINED=6;
REFINED_HARMONIC=7;
 
LARGEST_MAGNITUDE=1;
SMALLEST_MAGNITUDE=2;
/trunk/bin/matlab/classes/SlepcSVD.m New file
0,0 → 1,83
classdef SlepcSVD < PetscObject
%
% SlepcSVD - a SLEPc singular value solver object
%
% Creation:
% svd = SlepcSVD;
% svd.SetType('cross');
% svd.SetOperator(A);
% svd.SetFromOptions;
%
properties (Constant)
SVD_TRANSPOSE_EXPLICIT=0;
SVD_TRANSPOSE_IMPLICIT=1;
 
LARGEST=0;
SMALLEST=1;
end
methods
function obj = SlepcSVD(pid,flag)
if (nargin > 1)
% SelpcSVD(pid,'pobj') uses an already existing SLEPc SVD object
obj.pobj = pid;
return
end
comm = PETSC_COMM_SELF();
[err,obj.pobj] = calllib('libslepc', 'SVDCreate', comm,0);PetscCHKERRQ(err);
end
function err = SetType(obj,name)
err = calllib('libslepc', 'SVDSetType', obj.pobj,name);PetscCHKERRQ(err);
end
function err = SetFromOptions(obj)
err = calllib('libslepc', 'SVDSetFromOptions', obj.pobj);PetscCHKERRQ(err);
end
function err = SetUp(obj)
err = calllib('libslepc', 'SVDSetUp', obj.pobj);PetscCHKERRQ(err);
end
function err = Solve(obj)
err = calllib('libslepc', 'SVDSolve', obj.pobj);PetscCHKERRQ(err);
end
function err = SetOperator(obj,A)
err = calllib('libslepc', 'SVDSetOperator', obj.pobj,A.pobj);PetscCHKERRQ(err);
end
function err = SetTransposeMode(obj,t)
err = calllib('libslepc', 'SVDSetTransposeMode', obj.pobj,t);PetscCHKERRQ(err);
end
function err = SetWhichSingularTriplets(obj,t)
err = calllib('libslepc', 'SVDSetWhichSingularTriplets', obj.pobj,t);PetscCHKERRQ(err);
end
function err = SetTolerances(obj,t,mx)
if (nargin == 2) mx = 0; end
err = calllib('libslepc', 'SVDSetTolerances', obj.pobj,t,mx);PetscCHKERRQ(err);
end
function err = SetDimensions(obj,nev,ncv,mpd)
if (nargin < 3) ncv = 0; end
if (nargin < 4) mpd = 0; end
err = calllib('libslepc', 'SVDSetDimensions', obj.pobj,nev,ncv,mpd);PetscCHKERRQ(err);
end
function [nconv,err] = GetConverged(obj)
nconv = 0;
[err,nconv] = calllib('libslepc', 'SVDGetConverged', obj.pobj,nconv);PetscCHKERRQ(err);
end
function [sigma,err] = GetSingularTriplet(obj,i)
sigma = 0.0;
[err,sigma] = calllib('libslepc', 'SVDGetSingularTriplet', obj.pobj,i-1,sigma,0,0);PetscCHKERRQ(err);
end
function [relerr,err] = ComputeRelativeError(obj,i)
relerr = 0.0;
[err,relerr] = calllib('libslepc', 'SVDComputeRelativeError', obj.pobj,i-1,relerr);PetscCHKERRQ(err);
end
function err = View(obj,viewer)
if (nargin == 1)
err = calllib('libslepc', 'SVDView', obj.pobj,0);PetscCHKERRQ(err);
else
err = calllib('libslepc', 'SVDView', obj.pobj,viewer.pobj);PetscCHKERRQ(err);
end
end
function err = Destroy(obj)
err = calllib('libslepc', 'SVDDestroy', obj.pobj);PetscCHKERRQ(err);
end
end
end
 
/trunk/bin/matlab/classes/examples/tutorials/exSVD.m New file
0,0 → 1,61
%%
%
% Computes a partial SVD of a matrix with SLEPc
% User creates directly a PETSc Mat
%
 
%%
% Set the Matlab path and initialize SLEPc
%
path(path,'../../')
if exist('PetscInitialize')~=2
PETSC_DIR = getenv('PETSC_DIR');
if (length(PETSC_DIR) == 0)
error('Must set environment variable PETSC_DIR or add the appropriate dir to Matlab path')
end
path(path,[PETSC_DIR '/bin/matlab/classes'])
end
SlepcInitialize({'-malloc','-malloc_debug','-malloc_dump'});
 
%%
% Create the Lauchli matrix
%
n = 100;
mu = 1e-6;
mat = PetscMat();
mat.SetType('seqaij');
mat.SetSizes(n,n,n,n);
for i=1:n
mat.SetValues(1,i,1.0);
end
for i=2:n
mat.SetValues(i,i-1,mu);
end
mat.AssemblyBegin(PetscMat.FINAL_ASSEMBLY);
mat.AssemblyEnd(PetscMat.FINAL_ASSEMBLY);
%mat.View;
 
%%
% Create the solver, pass the matrix and solve the problem
%
svd = SlepcSVD();
svd.SetType('cross');
svd.SetOperator(mat);
svd.SetFromOptions();
svd.Solve();
nconv = svd.GetConverged();
fprintf(' sigma residual norm\n')
fprintf(' ----------------- ------------------\n')
for i=1:nconv
sigma = svd.GetSingularTriplet(i);
relerr = svd.ComputeRelativeError(i);
fprintf(' %12f %12g\n',sigma,relerr)
end
%svd.View();
 
%%
% Free objects and shutdown SLEPc
%
mat.Destroy();
svd.Destroy();
SlepcFinalize();