135 lines
4.6 KiB
C++
135 lines
4.6 KiB
C++
|
|
//@HEADER
|
|
/*
|
|
************************************************************************
|
|
|
|
Epetra: Linear Algebra Services Package
|
|
Copyright (2001) Sandia Corporation
|
|
|
|
Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
|
|
license for use of this work by or on behalf of the U.S. Government.
|
|
|
|
This library is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU Lesser General Public License as
|
|
published by the Free Software Foundation; either version 2.1 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
USA
|
|
Questions? Contact Michael A. Heroux (maherou@sandia.gov)
|
|
|
|
************************************************************************
|
|
*/
|
|
//@HEADER
|
|
|
|
#ifndef EPETRA_OPERATOR_H
|
|
#define EPETRA_OPERATOR_H
|
|
|
|
class Epetra_MultiVector;
|
|
class Epetra_Map;
|
|
class Epetra_Comm;
|
|
|
|
//! Epetra_Operator: A pure virtual class for using real-valued double-precision operators.
|
|
/*! The Epetra_Operator class is a pure virtual class (specifies interface only) that
|
|
enable the use of real-valued double-precision operators. It is currently implemented by both the
|
|
Epetra_CrsMatrix and Epetra_VbrMatrix classes and the Ifpack_CrsRiluk preconditioner class.
|
|
|
|
|
|
*/
|
|
|
|
class Epetra_Operator {
|
|
|
|
public:
|
|
|
|
//! @name Destructor
|
|
//@{
|
|
//! Destructor
|
|
virtual ~Epetra_Operator() {};
|
|
//@}
|
|
|
|
//! @name Atribute set methods
|
|
//@{
|
|
|
|
//! If set true, transpose of this operator will be applied.
|
|
/*! This flag allows the transpose of the given operator to be used implicitly. Setting this flag
|
|
affects only the Apply() and ApplyInverse() methods. If the implementation of this interface
|
|
does not support transpose use, this method should return a value of -1.
|
|
|
|
\param In
|
|
UseTranspose -If true, multiply by the transpose of operator, otherwise just use operator.
|
|
|
|
\return Integer error code, set to 0 if successful. Set to -1 if this implementation does not support transpose.
|
|
*/
|
|
virtual int SetUseTranspose(bool UseTranspose) = 0;
|
|
//@}
|
|
|
|
//! @name Mathematical functions
|
|
//@{
|
|
|
|
//! Returns the result of a Epetra_Operator applied to a Epetra_MultiVector X in Y.
|
|
/*!
|
|
\param In
|
|
X - A Epetra_MultiVector of dimension NumVectors to multiply with matrix.
|
|
\param Out
|
|
Y -A Epetra_MultiVector of dimension NumVectors containing result.
|
|
|
|
\return Integer error code, set to 0 if successful.
|
|
*/
|
|
virtual int Apply(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const = 0;
|
|
|
|
//! Returns the result of a Epetra_Operator inverse applied to an Epetra_MultiVector X in Y.
|
|
/*!
|
|
\param In
|
|
X - A Epetra_MultiVector of dimension NumVectors to solve for.
|
|
\param Out
|
|
Y -A Epetra_MultiVector of dimension NumVectors containing result.
|
|
|
|
\return Integer error code, set to 0 if successful.
|
|
|
|
\warning In order to work with AztecOO, any implementation of this method must
|
|
support the case where X and Y are the same object.
|
|
*/
|
|
virtual int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const = 0;
|
|
|
|
//! Returns the infinity norm of the global matrix.
|
|
/* Returns the quantity \f$ \| A \|_\infty\f$ such that
|
|
\f[\| A \|_\infty = \max_{1\lei\lem} \sum_{j=1}^n |a_{ij}| \f].
|
|
|
|
\warning This method must not be called unless HasNormInf() returns true.
|
|
*/
|
|
virtual double NormInf() const = 0;
|
|
//@}
|
|
|
|
//! @name Atribute access functions
|
|
//@{
|
|
|
|
//! Returns a character string describing the operator
|
|
virtual const char * Label() const = 0;
|
|
|
|
//! Returns the current UseTranspose setting.
|
|
virtual bool UseTranspose() const = 0;
|
|
|
|
//! Returns true if the \e this object can provide an approximate Inf-norm, false otherwise.
|
|
virtual bool HasNormInf() const = 0;
|
|
|
|
//! Returns a pointer to the Epetra_Comm communicator associated with this operator.
|
|
virtual const Epetra_Comm & Comm() const = 0;
|
|
|
|
//! Returns the Epetra_Map object associated with the domain of this operator.
|
|
virtual const Epetra_Map & OperatorDomainMap() const = 0;
|
|
|
|
//! Returns the Epetra_Map object associated with the range of this operator.
|
|
virtual const Epetra_Map & OperatorRangeMap() const = 0;
|
|
//@}
|
|
|
|
};
|
|
|
|
#endif /* EPETRA_OPERATOR_H */
|