4 #ifndef PANZER_L2_PROJECTION_HPP
5 #define PANZER_L2_PROJECTION_HPP
8 #include "Phalanx_KokkosDeviceTypes.hpp"
11 #include "Tpetra_Map.hpp"
12 #include "Tpetra_CrsMatrix_fwd.hpp"
13 #include "Tpetra_MultiVector_fwd.hpp"
16 #include <unordered_map>
24 class BasisDescriptor;
25 class IntegrationDescriptor;
34 template<
typename LO,
typename GO>
65 const std::vector<std::string>& elementBlockNames,
80 const std::unordered_map<std::string,double>* elementBlockMultipliers =
nullptr);
126 const Teuchos::RCP<
const Tpetra::Map<LO,GO,Kokkos::Compat::KokkosDeviceWrapperNode<PHX::Device>>>& ownedSourceMap,
127 const std::string& sourceFieldName,
129 const int vectorOrGradientDirectionIndex = -1);
std::vector< std::string > elementBlockNames_
Teuchos::RCP< Tpetra::MultiVector< double, LO, GO, Kokkos::Compat::KokkosDeviceWrapperNode< PHX::Device > > > buildInverseLumpedMassMatrix()
Allocates, fills and returns a Tpetra::MultiVector containing the inverse lumped mass matrix values a...
Teuchos::RCP< const panzer::ConnManager< LO, GO > > connManager_
Class that provides access to worksets on each element block and side set.
Teuchos::RCP< panzer::UniqueGlobalIndexer< LO, GO > > getTargetGlobalIndexer() const
Returns the target global indexer. Will be null if setup() has not been called.
Teuchos::RCP< panzer::WorksetContainer > worksetContainer_
L2Projection()
Constructor.
Teuchos::RCP< const Teuchos::MpiComm< int > > comm_
panzer::BasisDescriptor targetBasisDescriptor_
Teuchos::RCP< Tpetra::CrsMatrix< double, LO, GO, Kokkos::Compat::KokkosDeviceWrapperNode< PHX::Device > > > buildRHSMatrix(const panzer::UniqueGlobalIndexer< LO, GO > &sourceDOFManager, const Teuchos::RCP< const Tpetra::Map< LO, GO, Kokkos::Compat::KokkosDeviceWrapperNode< PHX::Device >>> &ownedSourceMap, const std::string &sourceFieldName, const panzer::BasisDescriptor &sourceBasisDescriptor, const int vectorOrGradientDirectionIndex=-1)
Allocates, fills and returns a rectangular matrix for L2 projection of a scalar field, one dimension of gradient (for hgrad basis), or one dimension of a vector field onto the target scalar basis. If you wish to project all values of a vector field or all the gradients of a scalar field, then you will need three separate RHS matrices to form the RHS for each independently. The vectors must be independent Tpetra vectors to solve multiple right hand sides with the linear solver.
void setup(const panzer::BasisDescriptor &targetBasis, const panzer::IntegrationDescriptor &integrationDescriptor, const Teuchos::RCP< const Teuchos::MpiComm< int >> &comm, const Teuchos::RCP< const panzer::ConnManager< LO, GO >> &connManager, const std::vector< std::string > &elementBlockNames, const Teuchos::RCP< panzer::WorksetContainer > worksetContainer=Teuchos::null)
Setup base objects for L2 Projections - requires target scalar basis and creates worksets if not supp...
Teuchos::RCP< panzer::DOFManager< LO, GO > > targetGlobalIndexer_
Teuchos::RCP< Tpetra::CrsMatrix< double, LO, GO, Kokkos::Compat::KokkosDeviceWrapperNode< PHX::Device > > > buildMassMatrix(bool use_lumping=false, const std::unordered_map< std::string, double > *elementBlockMultipliers=nullptr)
Allocates, fills and returns a mass matrix for L2 projection onto a target basis. ...
Unified set of tools for building objects for lumped and consistent L2 projects between bases...
panzer::IntegrationDescriptor integrationDescriptor_