Panzer Version of the Day
Loading...
Searching...
No Matches
Panzer_ResponseLibrary.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_ResponseLibrary_hpp__
12#define __Panzer_ResponseLibrary_hpp__
13
14#include <iostream>
15#include <string>
16#include <vector>
17#include <map>
18
19#include <unordered_map>
20
21#include "Teuchos_ParameterList.hpp"
22
23#include "Phalanx_FieldManager.hpp"
24
25#include "PanzerDiscFE_config.hpp"
28
32
38
40
41namespace panzer {
42
43class LinearObjContainer;
44
57template <typename TraitsT>
59public:
60 typedef typename TraitsT::EvalTypes TypeSeq;
61
63
69 ResponseLibrary(const Teuchos::RCP<WorksetContainer> & wc,
70 const Teuchos::RCP<const GlobalIndexer> & ugi,
71 const Teuchos::RCP<const LinearObjFactory<TraitsT> > & lof,
72 bool residualType=false);
73
75
78 void initialize(const Teuchos::RCP<WorksetContainer> & wc,
79 const Teuchos::RCP<const GlobalIndexer> & ugi,
80 const Teuchos::RCP<const LinearObjFactory<TraitsT> > & lof);
81
87 void initializeResidualType(const Teuchos::RCP<WorksetContainer> & wc,
88 const Teuchos::RCP<const GlobalIndexer> & ugi,
89 const Teuchos::RCP<const LinearObjFactory<TraitsT> > & lof);
90
91
94 void initialize(const ResponseLibrary & rl);
95
101 void copyResponses(const ResponseLibrary & rl);
102
106 Teuchos::RCP<WorksetContainer> getWorksetContainer() const
107 { return wkstContainer_; }
108
110 Teuchos::RCP<const GlobalIndexer> getGlobalIndexer() const
111 { return globalIndexer_; }
112
114 Teuchos::RCP<const LinearObjFactory<TraitsT> > getLinearObjFactory() const
115 { return linObjFactory_; }
116
123 template <typename ResponseEvaluatorFactory_BuilderT>
124 void addResponse(const std::string & responseName,
125 const std::vector<std::string> & blocks,
126 const ResponseEvaluatorFactory_BuilderT & builder);
127
135 template <typename ResponseEvaluatorFactory_BuilderT>
136 void addResponse(const std::string & responseName,
137 const std::vector<std::pair<std::string,std::string> > & sideset_blocks,
138 const ResponseEvaluatorFactory_BuilderT & builder);
139
148 template <typename ResponseEvaluatorFactory_BuilderT>
149 void addResponse(const std::string & responseName,
150 const std::vector<WorksetDescriptor> & wkst_desc,
151 const ResponseEvaluatorFactory_BuilderT & builder);
152
160 template <typename EvalT>
161 Teuchos::RCP<ResponseBase> getResponse(const std::string & responseName) const;
162
168 template <typename EvalT>
169 void getResponses(std::vector<Teuchos::RCP<ResponseBase> > & responses) const;
170
175 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
177 const Teuchos::ParameterList& closure_models,
178 const Teuchos::ParameterList& user_data,
179 const bool write_graphviz_file=false,
180 const std::string& graphviz_file_prefix="")
181 { buildResponseEvaluators(physicsBlocks,Teuchos::null,cm_factory,closure_models,user_data,write_graphviz_file,graphviz_file_prefix); }
182
187 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
188 const panzer::EquationSetFactory & eqset_factory,
190 const Teuchos::ParameterList& closure_models,
191 const Teuchos::ParameterList& user_data,
192 const bool write_graphviz_file=false,
193 const std::string& graphviz_file_prefix="")
194 { buildResponseEvaluators(physicsBlocks,Teuchos::ptrFromRef(eqset_factory),cm_factory,closure_models,user_data,write_graphviz_file,graphviz_file_prefix); }
195
200 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
201 const panzer::EquationSetFactory & eqset_factory,
202 const std::vector<BC> & bcs,
203 const panzer::BCStrategyFactory & bc_factory,
205 const Teuchos::ParameterList& closure_models,
206 const Teuchos::ParameterList& user_data,
207 const bool write_graphviz_file=false,
208 const std::string& graphviz_file_prefix="");
209
215
218 template <typename EvalT>
219 void addResponsesToInArgs(panzer::AssemblyEngineInArgs & input_args) const;
220
223 template <typename EvalT>
224 void evaluate(const panzer::AssemblyEngineInArgs& input_args);
225
228 void print(std::ostream & os) const;
229
232
233 void disableGather(bool value)
234 { disableGather_ = value; }
235
236 void disableScatter(bool value)
237 { disableScatter_ = value; }
238
239 bool isResidualType() const
240 { return residualType_; }
241
242 template <typename EvalT>
243 void writeGraphvizFiles(const std::string& prefix = "");
244
245protected:
246
251 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
252 const Teuchos::Ptr<const panzer::EquationSetFactory> & eqset_factory,
254 const Teuchos::ParameterList& closure_models,
255 const Teuchos::ParameterList& user_data,
256 const bool write_graphviz_file,
257 const std::string& graphviz_file_prefix);
258
261 void addResidualResponse();
262
264 template <typename EvalT> struct Overloader {};
265
270
275
280
284#ifdef Panzer_BUILD_HESSIAN_SUPPORT
286#endif
287
290 void addResponse(const std::string & responseName,
291 const std::vector<WorksetDescriptor> & wkst_desc,
292 const Teuchos::RCP<ResponseEvaluatorFactory_TemplateManager<TraitsT> > & modelFact_tm);
293
294private:
295
296 Teuchos::RCP<WorksetContainer> wkstContainer_;
297 Teuchos::RCP<const GlobalIndexer> globalIndexer_;
298 Teuchos::RCP<const LinearObjFactory<TraitsT> > linObjFactory_;
299
301
302 Teuchos::RCP<FieldManagerBuilder> fmb2_;
304
305 typedef std::unordered_map<panzer::BC,
306 Teuchos::RCP<std::vector<std::pair<std::string,Teuchos::RCP<ResponseEvaluatorFactory_TemplateManager<TraitsT> > > > >,
308
309 // Store up response factories by element block
310 std::unordered_map<WorksetDescriptor,
311 std::vector<std::pair<std::string,Teuchos::RCP<ResponseEvaluatorFactory_TemplateManager<TraitsT> > > > > respFactories_;
313 std::size_t nextBC_id;
314
316 std::unordered_map<std::string, Response_TemplateManager> responseObjects_;
321
323
324 mutable Teuchos::RCP<LinearObjContainer> ghostedContainer_;
325
326 struct Printer {
328 std::ostream & os_;
329 Printer(const Response_TemplateManager & tm,std::ostream & os) : tm_(tm), os_(os) {}
330 template <typename T> void operator()(T) const {
331// os_ << PHX::TypeString<T>::value << "=";
332 if(tm_.get<T>()!=Teuchos::null)
333 os_ << "ON ";
334 else
335 os_ << "OFF ";
336 }
337 };
338};
339
340}
341
343
344#endif
A PHX::TemplateManager holding one panzer::AssemblyEngine<EvalT> per evaluation type in Traits::EvalT...
Stores input information for a boundary condition.
Definition Panzer_BC.hpp:48
A PHX::TemplateManager holding one panzer::ClosureModelFactory<EvalT> per evaluation type in Traits::...
A PHX::TemplateManager holding one panzer::ResponseEvaluatorFactory<EvalT> per evaluation type in Tra...
void buildResponseEvaluators(const std::vector< Teuchos::RCP< panzer::PhysicsBlock > > &physicsBlocks, const panzer::EquationSetFactory &eqset_factory, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &cm_factory, const Teuchos::ParameterList &closure_models, const Teuchos::ParameterList &user_data, const bool write_graphviz_file=false, const std::string &graphviz_file_prefix="")
Teuchos::RCP< const GlobalIndexer > getGlobalIndexer() const
Get the internally stored global indexer.
void initialize(const Teuchos::RCP< WorksetContainer > &wc, const Teuchos::RCP< const GlobalIndexer > &ugi, const Teuchos::RCP< const LinearObjFactory< TraitsT > > &lof)
Teuchos::RCP< WorksetContainer > getWorksetContainer() const
void buildResidualResponseEvaluators(const std::vector< Teuchos::RCP< panzer::PhysicsBlock > > &physicsBlocks, const panzer::EquationSetFactory &eqset_factory, const std::vector< BC > &bcs, const panzer::BCStrategyFactory &bc_factory, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &cm_factory, const Teuchos::ParameterList &closure_models, const Teuchos::ParameterList &user_data, const bool write_graphviz_file=false, const std::string &graphviz_file_prefix="")
std::unordered_map< panzer::BC, Teuchos::RCP< std::vector< std::pair< std::string, Teuchos::RCP< ResponseEvaluatorFactory_TemplateManager< TraitsT > > > > >, BC::BCHash, BC::BCEquality > BCHashMap
AssemblyEngine_TemplateManager< panzer::Traits > ae_tm2_
void copyResponses(const ResponseLibrary &rl)
void print(std::ostream &os) const
Teuchos::RCP< const LinearObjFactory< TraitsT > > getLinearObjFactory() const
Get the internally stored linear object factory.
void getResponses(std::vector< Teuchos::RCP< ResponseBase > > &responses) const
void buildResponseEvaluators(const std::vector< Teuchos::RCP< panzer::PhysicsBlock > > &physicsBlocks, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &cm_factory, const Teuchos::ParameterList &closure_models, const Teuchos::ParameterList &user_data, const bool write_graphviz_file=false, const std::string &graphviz_file_prefix="")
Teuchos::RCP< const LinearObjFactory< TraitsT > > linObjFactory_
Teuchos::RCP< ResponseBase > getResponse(const std::string &responseName) const
void addResponse(const std::string &responseName, const std::vector< std::string > &blocks, const ResponseEvaluatorFactory_BuilderT &builder)
TypeAssocMap< panzer::Traits::EvalTypes, Teuchos::RCP< ResponseBase > > Response_TemplateManager
void initializeResidualType(const Teuchos::RCP< WorksetContainer > &wc, const Teuchos::RCP< const GlobalIndexer > &ugi, const Teuchos::RCP< const LinearObjFactory< TraitsT > > &lof)
void evaluate(const panzer::AssemblyEngineInArgs &input_args)
std::unordered_map< std::string, Response_TemplateManager > responseObjects_
Store all the response objects.
Teuchos::RCP< LinearObjContainer > ghostedContainer_
Teuchos::RCP< const GlobalIndexer > globalIndexer_
Teuchos::RCP< WorksetContainer > wkstContainer_
void addResponsesToInArgs(panzer::AssemblyEngineInArgs &input_args) const
void writeGraphvizFiles(const std::string &prefix="")
Teuchos::RCP< FieldManagerBuilder > fmb2_
void addResidualResponsesToInArgs(Overloader< typename TraitsT::Residual >, panzer::AssemblyEngineInArgs &input_args) const
void useClosureModelByEBlockInResponse(bool value)
std::unordered_map< WorksetDescriptor, std::vector< std::pair< std::string, Teuchos::RCP< ResponseEvaluatorFactory_TemplateManager< TraitsT > > > > > respFactories_
Interface for constructing a BCStrategy_TemplateManager.
Allocates and initializes an equation set template manager.
A struct for handling function overloading.
Printer(const Response_TemplateManager &tm, std::ostream &os)
const Response_TemplateManager & tm_