11#ifndef PANZER_L2_PROJECTION_HPP
12#define PANZER_L2_PROJECTION_HPP
14#include "Teuchos_RCP.hpp"
15#include "Phalanx_KokkosDeviceTypes.hpp"
16#include "PanzerCore_config.hpp"
19#include "Tpetra_Map.hpp"
20#include "Tpetra_CrsMatrix_fwd.hpp"
21#include "Tpetra_MultiVector_fwd.hpp"
24#include <unordered_map>
32 class BasisDescriptor;
33 class IntegrationDescriptor;
37 class WorksetContainer;
38 template<
typename T>
class BasisValues2;
47 Teuchos::RCP<const Teuchos::MpiComm<int>>
comm_;
54 std::map<std::string,Teuchos::RCP<panzer::BasisValues2<double>>>
basisValues_;
73 const Teuchos::RCP<const panzer::ConnManager>& connManager,
74 const std::vector<std::string>& elementBlockNames,
75 const Teuchos::RCP<panzer::WorksetContainer> worksetContainer = Teuchos::null);
97 Teuchos::RCP<Tpetra::CrsMatrix<double,panzer::LocalOrdinal,panzer::GlobalOrdinal,Tpetra::KokkosCompat::KokkosDeviceWrapperNode<PHX::Device>>>
99 const std::unordered_map<std::string,double>* elementBlockMultipliers =
nullptr);
123 Teuchos::RCP<Tpetra::MultiVector<double,panzer::LocalOrdinal,panzer::GlobalOrdinal,Tpetra::KokkosCompat::KokkosDeviceWrapperNode<PHX::Device>>>
143 Teuchos::RCP<Tpetra::CrsMatrix<double,panzer::LocalOrdinal,panzer::GlobalOrdinal,Tpetra::KokkosCompat::KokkosDeviceWrapperNode<PHX::Device>>>
145 const Teuchos::RCP<
const Tpetra::Map<panzer::LocalOrdinal,panzer::GlobalOrdinal,Tpetra::KokkosCompat::KokkosDeviceWrapperNode<PHX::Device>>>& ownedSourceMap,
146 const std::string& sourceFieldName,
148 const int vectorOrGradientDirectionIndex = -1);
Unified set of tools for building objects for lumped and consistent L2 projects between bases.
void useBasisValues(const std::map< std::string, Teuchos::RCP< panzer::BasisValues2< double > > > &map_eblock_to_bv)
Override using the panzer::WorksetContainer and instead use the registered BasisValues object.
panzer::IntegrationDescriptor integrationDescriptor_
panzer::BasisDescriptor targetBasisDescriptor_
Teuchos::RCP< Tpetra::CrsMatrix< double, panzer::LocalOrdinal, panzer::GlobalOrdinal, Tpetra::KokkosCompat::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.
Teuchos::RCP< panzer::GlobalIndexer > getTargetGlobalIndexer() const
Returns the target global indexer. Will be null if setup() has not been called.
Teuchos::RCP< const Teuchos::MpiComm< int > > comm_
std::vector< std::string > elementBlockNames_
Teuchos::RCP< Tpetra::MultiVector< double, panzer::LocalOrdinal, panzer::GlobalOrdinal, Tpetra::KokkosCompat::KokkosDeviceWrapperNode< PHX::Device > > > buildInverseLumpedMassMatrix()
Allocates, fills and returns a Tpetra::MultiVector containing the inverse lumped mass matrix values a...
Teuchos::RCP< Tpetra::CrsMatrix< double, panzer::LocalOrdinal, panzer::GlobalOrdinal, Tpetra::KokkosCompat::KokkosDeviceWrapperNode< PHX::Device > > > buildRHSMatrix(const panzer::GlobalIndexer &sourceDOFManager, const Teuchos::RCP< const Tpetra::Map< panzer::LocalOrdinal, panzer::GlobalOrdinal, Tpetra::KokkosCompat::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,...
Teuchos::RCP< const panzer::ConnManager > connManager_
Teuchos::RCP< panzer::DOFManager > targetGlobalIndexer_
Teuchos::RCP< panzer::WorksetContainer > worksetContainer_
std::map< std::string, Teuchos::RCP< panzer::BasisValues2< double > > > basisValues_
L2Projection()
Constructor.
bool useUserSuppliedBasisValues_
void setup(const panzer::BasisDescriptor &targetBasis, const panzer::IntegrationDescriptor &integrationDescriptor, const Teuchos::RCP< const Teuchos::MpiComm< int > > &comm, const Teuchos::RCP< const panzer::ConnManager > &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...