/usr/include/trilinos/MLAPI_LoadBalanceInverseOperator.h is in libtrilinos-ml-dev 12.10.1-3.
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 142 143 144 145 146 147 148 149 150 151 | #ifndef ML_LOADBALANCEINVERSEOPERATOR_H
#define ML_LOADBALANCEINVERSEOPERATOR_H
/*!
\file MLAPI_LoadBalanceInverseOperator.h
\brief wraps an MLAPI inverseoperator with zero rows on some processors.
\author Michael Gee, TU Munich.
\date Last updated on July-10.
*/
/* ******************************************************************** */
/* See the file COPYRIGHT for a complete copyright notice, contact */
/* person and disclaimer. */
/* ******************************************************************** */
#include "ml_common.h"
#include "ml_MultiLevelPreconditioner.h"
#include "MLAPI_BaseOperator.h"
#include "MLAPI_CompObject.h"
#include "MLAPI_TimeObject.h"
#include "MLAPI_InverseOperator.h"
#include "MLAPI_LoadBalanceOperator.h"
#include "Teuchos_RefCountPtr.hpp"
namespace Teuchos {
class List;
}
class Ifpack_Preconditioner;
namespace MLAPI {
class MultiLevel;
/*!
* \class InverseOperator
*
* \brief InverseOperator: basic class to define smoother and coarse solvers.
*
*
* \author Marzio Sala, D-INFK/ETHZ.
*
* \date Last updated on Mar-06.
*/
class LoadBalanceInverseOperator : public InverseOperator {
public:
// @{ \name Constructors and destructors.
//! Empty constructor.
LoadBalanceInverseOperator() : InverseOperator() {}
//! Copy constructor.
LoadBalanceInverseOperator(const LoadBalanceInverseOperator& RHS);
//! Destructor.
virtual ~LoadBalanceInverseOperator()
{Destroy();}
// @}
// @{ \name Overloaded operators
//! Operator =.
LoadBalanceInverseOperator& operator=(const LoadBalanceInverseOperator& RHS);
// @}
// @{ Reshaping methods
//! Resets \c this object.
void Reshape();
//! Reshape with preconstructed smoother as Ifpack_Preconditioner
void Reshape(Ifpack_Preconditioner* prec, const LoadBalanceOperator& Op,
const bool ownership);
// @}
// @{ Get and Set methods.
//! Returns a bool indicating whether this proc participates in the operator application
virtual inline bool GetParticipation() const {
return(GetOperator().GetParticipation());
}
//! Returns a reference to the range space of \c this object.
const Space GetOperatorRangeSpace() const;
//! Returns a reference to the domain space of \c this object.
const Space GetOperatorDomainSpace() const;
//! Returns a reference to the range space of \c this object.
const Space GetRangeSpace() const;
//! Returns a reference to the domain space of \c this object.
const Space GetDomainSpace() const;
//! Returns pointer of the internally stored ML_Epetra::RowMatrix object.
const Teuchos::RCP<Epetra_RowMatrix> RCPRowMatrix() const;
//! Returns pointer of the internally stored ML_Epetra::RowMatrix object.
Epetra_RowMatrix* RowMatrix() const;
//! Returns a reference to the Operator of which \c this object defines the inverse.
const LoadBalanceOperator& GetOperator() const;
//! Returns a pointer to the internally stored IFPACK preconditioner.
Teuchos::RCP<Ifpack_Preconditioner>& GetRCPData();
//! Returns a pointer to the internally stored IFPACK preconditioner.
const Teuchos::RCP<Ifpack_Preconditioner>& GetRCPData() const;
// @}
// @{ Mathematical methods
//! Applies \c this object to vector \c lhs, returns values in \c rhs.
int Apply(const MultiVector& x, MultiVector& y) const;
//! Applies the operator to LHS, returns the results.
MultiVector operator()(const MultiVector& LHS);
//! Applies the operator to LHS using RHS as initial solution, returns the results.
MultiVector operator()(const MultiVector& LHS,
const MultiVector& RHS);
// @}
// @{ \name Miscellaneous methods
//! Prints out basic information about \c this object.
std::ostream& Print(std::ostream& os, const bool verbose = true) const;
private:
// @}
// @{ \name Private data and methods
void Destroy();
//! Operator of which \c this object define the inverse.
LoadBalanceOperator Op_;
//! Wrapper for IFPACK
Teuchos::RCP<Epetra_RowMatrix> RCPRowMatrix_;
//! IFPACK preconditioner.
Teuchos::RCP<Ifpack_Preconditioner> RCPData_;
// @}
}; // InverseOperator
} // namespace MLAPI
#endif // ML_INVERSEOPERATOR_H
|