11 #ifndef __Panzer_Interpolation_hpp__
12 #define __Panzer_Interpolation_hpp__
15 #ifdef PANZER_HAVE_EPETRA_STACK
19 #ifdef PANZER_HAVE_EPETRA_STACK
20 #include "Thyra_EpetraThyraWrappers.hpp"
23 #include <Tpetra_Operator.hpp>
24 #include <Tpetra_Import.hpp>
30 const std::string &domain_basis_name,
const std::string &range_basis_name,
31 Intrepid2::EOperator op = Intrepid2::OPERATOR_VALUE,
32 size_t worksetSize = 1000,
33 const bool matrixFree =
false);
39 const std::string &domain_basis_name,
const std::string &range_basis_name,
40 Intrepid2::EOperator op = Intrepid2::OPERATOR_VALUE,
41 size_t worksetSize = 1000,
const bool forceVectorial =
false,
42 const bool useTpetra =
true,
43 const bool matrixFree =
false);
46 template <class Scalar = Tpetra::Operator<>::scalar_type,
47 class LocalOrdinal =
typename Tpetra::Operator<Scalar>::local_ordinal_type,
48 class GlobalOrdinal =
typename Tpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type,
49 class Node =
typename Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
59 const std::string& _domain_basis_name,
60 const std::string& _range_basis_name,
61 Intrepid2::EOperator _op=Intrepid2::OPERATOR_VALUE,
62 size_t _worksetSize=1000);
82 apply (
const Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &X,
83 Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &Y,
89 applyNonTransposed (
const Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &X,
90 Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &Y,
95 applyTransposed (
const Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &X,
96 Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &Y,
121 Intrepid2::EOperator
op;
128 std::map<std::string, Kokkos::DynRankView<Intrepid2::Orientation,DeviceSpace> >
orientations_;
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
Returns the Tpetra::Map object associated with the range of this operator.
Teuchos::RCP< panzer::DOFManager > range_ugi
MatrixFreeInterpolationOp(const Teuchos::RCP< const panzer::ConnManager > &conn, const Teuchos::RCP< panzer::DOFManager > &_domain_ugi, const Teuchos::RCP< panzer::DOFManager > &_range_ugi, const std::string &_domain_basis_name, const std::string &_range_basis_name, Intrepid2::EOperator _op=Intrepid2::OPERATOR_VALUE, size_t _worksetSize=1000)
std::string domain_basis_name
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
Returns the Tpetra::Map object associated with the domain of this operator.
void applyNonTransposed(const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > domainMap_
Teuchos::RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > colmapMV_
void applyTransposed(const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const
bool hasTransposeApply() const
Teuchos::RCP< Thyra::LinearOpBase< double > > buildInterpolation(const Teuchos::RCP< const panzer::LinearObjFactory< panzer::Traits >> &linObjFactory, const std::string &domain_basis_name, const std::string &range_basis_name, Intrepid2::EOperator op, size_t worksetSize, const bool matrixFree)
Kokkos::View< LocalOrdinal *, DeviceSpace > owner_d_
void precomputeOwnersAndOrientations(const Teuchos::RCP< const panzer::ConnManager > &conn)
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > rangeMap_
std::string range_basis_name
void apply(const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > columnMap_
Teuchos::RCP< const Tpetra::Import< LocalOrdinal, GlobalOrdinal, Node > > import_
void allocateColumnMapVector(size_t numVectors)
std::map< std::string, Kokkos::DynRankView< Intrepid2::Orientation, DeviceSpace > > orientations_
Teuchos::RCP< panzer::DOFManager > domain_ugi
void setName(std::string &_name)