Panzer Version of the Day
Loading...
Searching...
No Matches
Panzer_WorksetContainer.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_WorksetContainer_hpp__
12#define __Panzer_WorksetContainer_hpp__
13
14#include "Teuchos_RCP.hpp"
15
16#include "Intrepid2_Orientation.hpp"
17
19#include "Panzer_BC.hpp"
21#include "Panzer_WorksetDescriptor.hpp" // what the workset is defined over
22#include "Panzer_WorksetNeeds.hpp" // whats in a workset basis/integration rules
23
24namespace panzer {
25
26// forward declaration
27class GlobalIndexer;
28
42public:
45
53 WorksetContainer(const Teuchos::RCP<const WorksetFactoryBase> & factory,
54 const std::map<std::string,WorksetNeeds> & needs = {});
55
60
64 void setFactory(const Teuchos::RCP<const WorksetFactoryBase> & factory)
65 { clear(); wkstFactory_ = factory; }
66
68 Teuchos::RCP<const WorksetFactoryBase> getFactory() const
69 { return wkstFactory_; }
70
72 void setWorksetSize(std::size_t worksetSize)
73 { worksetSize_ = worksetSize; }
74
76 std::size_t getWorksetSize() const
77 { return worksetSize_; }
78
87 void setNeeds(const std::string & eBlock,const WorksetNeeds & needs);
88
92 void clear();
93
101 void clearVolumeWorksets();
102
107 void clearSideWorksets();
108
110 const WorksetNeeds & lookupNeeds(const std::string & eBlock) const;
111
113 Teuchos::RCP<std::vector<Workset> > getWorksets(const WorksetDescriptor & wd);
114
116 Teuchos::RCP<std::map<unsigned,Workset> > getSideWorksets(const WorksetDescriptor & desc);
117
121 void setGlobalIndexer(const Teuchos::RCP<const panzer::GlobalIndexer> & ugi);
122
126 void addBasis(const std::string & type,int order,const std::string & rep_field);
127
130 Teuchos::RCP<const std::vector<Intrepid2::Orientation> > getOrientations() const
131 { return orientations_; }
132
133private:
138 void applyOrientations(const Teuchos::RCP<const panzer::GlobalIndexer> & ugi);
139
143 void applyOrientations(const std::vector<Intrepid2::Orientation> & orientations,
144 const std::string & eBlock,
145 std::vector<Workset> & worksets) const;
146
149 void applyOrientations(const std::vector<Intrepid2::Orientation> & orientations,
150 const WorksetDescriptor & desc,
151 std::map<unsigned,Workset> & worksets) const;
152
153 typedef std::unordered_map<WorksetDescriptor,Teuchos::RCP<std::vector<Workset> > > WorksetMap;
154 typedef std::unordered_map<WorksetDescriptor,Teuchos::RCP<std::map<unsigned,Workset> > > SideMap;
155
159 void applyOrientations(const std::string & eBlock,std::vector<Workset> & worksets) const;
160
163 void applyOrientations(const WorksetDescriptor & desc,std::map<unsigned,Workset> & worksets) const;
164
170 void setIdentifiers(const WorksetDescriptor & wd,std::vector<Workset> & worksets);
171
177 void setIdentifiers(const WorksetDescriptor & wd,std::map<unsigned,Workset> & wkstMap);
178
183 bool hasNeeds() const
184 {return ebToNeeds_.size() > 0;}
185
186 Teuchos::RCP<const WorksetFactoryBase> wkstFactory_;
187 std::map<std::string,WorksetNeeds> ebToNeeds_;
188
191
192 std::size_t worksetSize_;
193
194 Teuchos::RCP<const panzer::GlobalIndexer> globalIndexer_;
195
196 Teuchos::RCP<std::vector<Intrepid2::Orientation> > orientations_;
197};
198
209 const std::vector<std::string> & elementBlockNames,
210 std::map<std::string,Teuchos::RCP<std::vector<Workset> > > & volumeWksts);
211
222 const std::vector<BC> & bcs,
223 std::map<BC,Teuchos::RCP<std::map<unsigned,Workset> >,LessBC> & sideWksts);
224
225}
226
227#endif
Stores input information for a boundary condition.
Definition Panzer_BC.hpp:48
Class that provides access to worksets on each element block and side set.
void applyOrientations(const std::vector< Intrepid2::Orientation > &orientations, const std::string &eBlock, std::vector< Workset > &worksets) const
Teuchos::RCP< std::vector< Workset > > getWorksets(const WorksetDescriptor &wd)
Access to volume worksets.
std::size_t getWorksetSize() const
get the workset size
const WorksetNeeds & lookupNeeds(const std::string &eBlock) const
Look up an input physics block, throws an exception if it can not be found.
void setIdentifiers(const WorksetDescriptor &wd, std::vector< Workset > &worksets)
void setWorksetSize(std::size_t worksetSize)
set the workset size
void applyOrientations(const Teuchos::RCP< const panzer::GlobalIndexer > &ugi)
void addBasis(const std::string &type, int order, const std::string &rep_field)
WorksetMap worksets_
Maps element blocks to input physics block objects.
void applyOrientations(const std::vector< Intrepid2::Orientation > &orientations, const WorksetDescriptor &desc, std::map< unsigned, Workset > &worksets) const
void setGlobalIndexer(const Teuchos::RCP< const panzer::GlobalIndexer > &ugi)
void setNeeds(const std::string &eBlock, const WorksetNeeds &needs)
Teuchos::RCP< std::vector< Intrepid2::Orientation > > orientations_
std::unordered_map< WorksetDescriptor, Teuchos::RCP< std::map< unsigned, Workset > > > SideMap
Teuchos::RCP< std::map< unsigned, Workset > > getSideWorksets(const WorksetDescriptor &desc)
Access, and construction of side worksets.
WorksetContainer()
Default contructor, starts with no workset factory objects.
Teuchos::RCP< const WorksetFactoryBase > wkstFactory_
void setFactory(const Teuchos::RCP< const WorksetFactoryBase > &factory)
Teuchos::RCP< const WorksetFactoryBase > getFactory() const
Access the workset factory pointer.
Teuchos::RCP< const panzer::GlobalIndexer > globalIndexer_
std::unordered_map< WorksetDescriptor, Teuchos::RCP< std::vector< Workset > > > WorksetMap
std::map< std::string, WorksetNeeds > ebToNeeds_
How to construct worksets.
Teuchos::RCP< const std::vector< Intrepid2::Orientation > > getOrientations() const
void getVolumeWorksetsFromContainer(WorksetContainer &wc, const std::vector< std::string > &elementBlockNames, std::map< std::string, Teuchos::RCP< std::vector< Workset > > > &volumeWksts)
void getSideWorksetsFromContainer(WorksetContainer &wc, const std::vector< BC > &bcs, std::map< BC, Teuchos::RCP< std::map< unsigned, Workset > >, LessBC > &sideWksts)