/usr/include/trilinos/Thyra_EpetraOperatorWrapper.hpp is in libtrilinos-dev 10.4.0.dfsg-1ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | // @HEADER
// ***********************************************************************
//
// Meros: Segregated Preconditioning Package
// Copyright (2004) 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 THYRA_EPETRA_OPERATOR_WRAPPER_HPP
#define THYRA_EPETRA_OPERATOR_WRAPPER_HPP
#include "Thyra_LinearOpBase.hpp"
#include "Epetra_Map.h"
#include "Epetra_Comm.h"
#include "Epetra_MultiVector.h"
#include "Epetra_Operator.h"
namespace Thyra {
/** \brief Implements the Epetra_Operator interface with a Thyra LinearOperator.
*
* This enables the use of absrtact Thyra operators in AztecOO as
* preconditioners and operators, without being rendered into concrete Epetra
* matrices.
*
* \ingroup Epetra_Thyra_Op_Vec_adapters_grp
*/
class EpetraOperatorWrapper : public Epetra_Operator
{
public:
/** \name Constructor, utilties. */
//@{
/** \brief . */
EpetraOperatorWrapper(const RCP<const LinearOpBase<double> > &thyraOp);
/** \brief . */
void copyEpetraIntoThyra(const Epetra_MultiVector &x,
const Ptr<VectorBase<double> > &thyraVec) const;
/** \brief . */
void copyThyraIntoEpetra(const VectorBase<double> &thyraVec,
Epetra_MultiVector &x) const;
//@}
/** \name Overridden from Epetra_Operator */
//@{
/** \brief . */
int SetUseTranspose(bool UseTranspose_in)
{
useTranspose_ = UseTranspose_in;
return 0;
}
/** \brief . */
int Apply(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const ;
/** \brief . */
int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const ;
/** \brief . */
double NormInf() const ;
/** \brief . */
const char* Label() const {return label_.c_str();}
/** \brief . */
bool UseTranspose() const {return useTranspose_;}
/** \brief . */
bool HasNormInf() const {return false;}
/** \brief . */
const Epetra_Comm& Comm() const {return *comm_;}
/** \brief . */
const Epetra_Map& OperatorDomainMap() const {return *domainMap_;}
/** \brief . */
const Epetra_Map& OperatorRangeMap() const {return *rangeMap_;}
//@}
private:
bool useTranspose_;
RCP<const LinearOpBase<double> > thyraOp_;
RCP<const VectorSpaceBase<double> > range_;
RCP<const VectorSpaceBase<double> > domain_;
RCP<const Epetra_Comm> comm_;
RCP<const Epetra_Map> rangeMap_;
RCP<const Epetra_Map> domainMap_;
std::string label_;
static RCP<const Epetra_Comm> getEpetraComm(const LinearOpBase<double>& thyraOp);
};
/** \brief Wrap a Thyra operator in the Epetra_Operator interface, and then
* wrap it again in a Thyra operator interface.
*
* This lets an arbitrary Thyra operator be given to the Thyra AztecOO
* adapters.
*
* \relates EpetraOperatorWrapper
*/
RCP<const LinearOpBase<double> >
makeEpetraWrapper(const RCP<const LinearOpBase<double> > &thyraOp);
} // namespace Thyra
#endif // THYRA_EPETRA_OPERATOR_WRAPPER_HPP
|