Panzer Version of the Day
Loading...
Searching...
No Matches
Panzer_L2Projection.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Panzer: A partial differential equation assembly
4// engine for strongly coupled complex multiphysics systems
5//
6// Copyright 2011 NTESS and the Panzer contributors.
7// SPDX-License-Identifier: BSD-3-Clause
8// *****************************************************************************
9// @HEADER
10
11#ifndef PANZER_L2_PROJECTION_HPP
12#define PANZER_L2_PROJECTION_HPP
13
14#include "Teuchos_RCP.hpp"
15#include "Phalanx_KokkosDeviceTypes.hpp"
16#include "PanzerCore_config.hpp"
19#include "Tpetra_Map.hpp" // for KokkosDeviceWrapperNode
20#include "Tpetra_CrsMatrix_fwd.hpp"
21#include "Tpetra_MultiVector_fwd.hpp"
22#include <vector>
23#include <string>
24#include <unordered_map>
25
26namespace Teuchos {
27 template<typename T> class MpiComm;
28}
29
30namespace panzer {
31
32 class BasisDescriptor;
33 class IntegrationDescriptor;
34 class ConnManager;
35 class DOFManager;
36 class GlobalIndexer;
37 class WorksetContainer;
38 template<typename T> class BasisValues2;
39
44
47 Teuchos::RCP<const Teuchos::MpiComm<int>> comm_;
48 Teuchos::RCP<const panzer::ConnManager> connManager_;
49 std::vector<std::string> elementBlockNames_;
50 mutable Teuchos::RCP<panzer::WorksetContainer> worksetContainer_;
52 Teuchos::RCP<panzer::DOFManager> targetGlobalIndexer_;
54 std::map<std::string,Teuchos::RCP<panzer::BasisValues2<double>>> basisValues_;
55
56 public:
57
60
70 void setup(const panzer::BasisDescriptor& targetBasis,
71 const panzer::IntegrationDescriptor& integrationDescriptor,
72 const Teuchos::RCP<const Teuchos::MpiComm<int>>& comm,
73 const Teuchos::RCP<const panzer::ConnManager>& connManager,
74 const std::vector<std::string>& elementBlockNames,
75 const Teuchos::RCP<panzer::WorksetContainer> worksetContainer = Teuchos::null);
76
85 void useBasisValues(const std::map<std::string,Teuchos::RCP<panzer::BasisValues2<double>>>& map_eblock_to_bv);
86
88 Teuchos::RCP<panzer::GlobalIndexer> getTargetGlobalIndexer() const;
89
97 Teuchos::RCP<Tpetra::CrsMatrix<double,panzer::LocalOrdinal,panzer::GlobalOrdinal,Tpetra::KokkosCompat::KokkosDeviceWrapperNode<PHX::Device>>>
98 buildMassMatrix(bool use_lumping=false,
99 const std::unordered_map<std::string,double>* elementBlockMultipliers = nullptr);
100
123 Teuchos::RCP<Tpetra::MultiVector<double,panzer::LocalOrdinal,panzer::GlobalOrdinal,Tpetra::KokkosCompat::KokkosDeviceWrapperNode<PHX::Device>>>
125
143 Teuchos::RCP<Tpetra::CrsMatrix<double,panzer::LocalOrdinal,panzer::GlobalOrdinal,Tpetra::KokkosCompat::KokkosDeviceWrapperNode<PHX::Device>>>
144 buildRHSMatrix(const panzer::GlobalIndexer& sourceDOFManager,
145 const Teuchos::RCP<const Tpetra::Map<panzer::LocalOrdinal,panzer::GlobalOrdinal,Tpetra::KokkosCompat::KokkosDeviceWrapperNode<PHX::Device>>>& ownedSourceMap,
146 const std::string& sourceFieldName,
147 const panzer::BasisDescriptor& sourceBasisDescriptor,
148 const int vectorOrGradientDirectionIndex = -1);
149 };
150
151}
152
153#endif
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_
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...