Panzer  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Panzer_FieldManagerBuilder.cpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Panzer: A partial differential equation assembly
5 // engine for strongly coupled complex multiphysics systems
6 // Copyright (2011) Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39 // Eric C. Cyr (eccyr@sandia.gov)
40 // ***********************************************************************
41 // @HEADER
42 
43 #include <vector>
44 #include <string>
45 #include <sstream>
46 #include <fstream>
47 
49 
50 #include "Phalanx_DataLayout_MDALayout.hpp"
51 #include "Phalanx_FieldManager.hpp"
52 
53 #include "Teuchos_FancyOStream.hpp"
54 
55 #include "Shards_CellTopology.hpp"
56 
57 #include "Panzer_Traits.hpp"
58 #include "Panzer_Workset.hpp"
59 #include "Panzer_Workset_Builder.hpp"
60 #include "Panzer_PhysicsBlock.hpp"
64 #include "Panzer_CellData.hpp"
69 
70 //#include "EpetraExt_BlockMapOut.h"
71 
72 //=======================================================================
73 //=======================================================================
74 void panzer::FieldManagerBuilder::print(std::ostream& os) const
75 {
76  os << "panzer::FieldManagerBuilder output: Not implemented yet!";
77 }
78 
79 //=======================================================================
81  const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
82  const std::vector<WorksetDescriptor> & wkstDesc,
84  const Teuchos::ParameterList& closure_models,
86  const Teuchos::ParameterList& user_data,
87  const GenericEvaluatorFactory & gEvalFact,
88  bool closureModelByEBlock)
89 {
90  using Teuchos::RCP;
91  using Teuchos::rcp;
92 
93  TEUCHOS_TEST_FOR_EXCEPTION(getWorksetContainer()==Teuchos::null,std::logic_error,
94  "panzer::FMB::setupVolumeFieldManagers: method function getWorksetContainer() returns null. "
95  "Plase call setWorksetContainer() before calling this method");
96  TEUCHOS_TEST_FOR_EXCEPTION(physicsBlocks.size()!=wkstDesc.size(),std::runtime_error,
97  "panzer::FMB::setupVolumeFieldManagers: physics block count must match workset descriptor count.");
98 
99  phx_volume_field_managers_.clear();
100 
102 
103  for (std::size_t blkInd=0;blkInd<physicsBlocks.size();++blkInd) {
104  RCP<panzer::PhysicsBlock> pb = physicsBlocks[blkInd];
105  const WorksetDescriptor wd = wkstDesc[blkInd];
106 
107  Traits::SD setupData;
108  setupData.worksets_ = getWorksetContainer()->getWorksets(wd);
109  setupData.orientations_ = getWorksetContainer()->getOrientations();
110  if(setupData.worksets_->size()==0)
111  continue;
112 
113  // sanity check
115 
116  // build a field manager object
119 
120  // use the physics block to register evaluators
121  pb->buildAndRegisterEquationSetEvaluators(*fm, user_data);
122  if(!physicsBlockGatherDisabled())
123  pb->buildAndRegisterGatherAndOrientationEvaluators(*fm,lo_factory,user_data);
124  pb->buildAndRegisterDOFProjectionsToIPEvaluators(*fm,Teuchos::ptrFromRef(lo_factory),user_data);
125  if(!physicsBlockScatterDisabled())
126  pb->buildAndRegisterScatterEvaluators(*fm,lo_factory,user_data);
127 
128  if(closureModelByEBlock)
129  pb->buildAndRegisterClosureModelEvaluators(*fm,cm_factory,pb->elementBlockID(),closure_models,user_data);
130  else
131  pb->buildAndRegisterClosureModelEvaluators(*fm,cm_factory,closure_models,user_data);
132 
133  // register additional model evaluator from the generic evaluator factory
134  gEvalFact.registerEvaluators(*fm,wd,*pb);
135 
136  // setup derivative information
137  setKokkosExtendedDataTypeDimensions(wd.getElementBlock(),*globalIndexer,user_data,*fm);
138 
139  // build the setup data using passed in information
140  fm->postRegistrationSetup(setupData);
141 
142  // make sure to add the field manager & workset to the list
143  volume_workset_desc_.push_back(wd);
144  phx_volume_field_managers_.push_back(fm);
145  }
146 }
147 
148 //=======================================================================
150  const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
152  const Teuchos::ParameterList& closure_models,
153  const panzer::LinearObjFactory<panzer::Traits> & lo_factory,
154  const Teuchos::ParameterList& user_data)
155 {
156  std::vector<WorksetDescriptor> wkstDesc;
157  for(std::size_t i=0;i<physicsBlocks.size();i++)
158  wkstDesc.push_back(blockDescriptor(physicsBlocks[i]->elementBlockID()));
159 
161  setupVolumeFieldManagers(physicsBlocks,wkstDesc,cm_factory,closure_models,lo_factory,user_data,eef);
162 }
163 
164 //=======================================================================
165 //=======================================================================
167 setupBCFieldManagers(const std::vector<panzer::BC> & bcs,
168  const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
169  const Teuchos::Ptr<const panzer::EquationSetFactory>& /* eqset_factory */,
171  const panzer::BCStrategyFactory& bc_factory,
172  const Teuchos::ParameterList& closure_models,
173  const panzer::LinearObjFactory<panzer::Traits> & lo_factory,
174  const Teuchos::ParameterList& user_data)
175 {
176  TEUCHOS_TEST_FOR_EXCEPTION(getWorksetContainer()==Teuchos::null,std::logic_error,
177  "panzer::FMB::setupBCFieldManagers: method function getWorksetContainer() returns null. "
178  "Plase call setWorksetContainer() before calling this method");
179 
181 
182  // for convenience build a map (element block id => physics block)
183  std::map<std::string,Teuchos::RCP<panzer::PhysicsBlock> > physicsBlocks_map;
184  {
185  std::vector<Teuchos::RCP<panzer::PhysicsBlock> >::const_iterator blkItr;
186  for(blkItr=physicsBlocks.begin();blkItr!=physicsBlocks.end();++blkItr) {
188  std::string blockId = pb->elementBlockID();
189 
190  // add block id, physics block pair to the map
191  physicsBlocks_map.insert(std::make_pair(blockId,pb));
192  }
193  }
194 
195  // ***************************
196  // BCs
197  // ***************************
198  std::vector<panzer::BC>::const_iterator bc;
199  for (bc=bcs.begin(); bc != bcs.end(); ++bc) {
202  currentWkst = getWorksetContainer()->getSideWorksets(wd);
203  if (currentWkst.is_null()) continue;
204 
205  BCType bc_type = bc->bcType();
206 
207  if (bc_type == BCT_Interface) {
208  // Loop over local face indices and setup each field manager
209  for (std::map<unsigned,panzer::Workset>::const_iterator wkst = currentWkst->begin();
210  wkst != currentWkst->end(); ++wkst) {
211  // Build one FieldManager for each local side workset for each bc
212  std::map<unsigned,PHX::FieldManager<panzer::Traits> >& field_managers =
213  bc_field_managers_[*bc];
214 
215  PHX::FieldManager<panzer::Traits>& fm = field_managers[wkst->first];
216 
217  int gid_count = 0;
218  for (int block_id_index = 0; block_id_index < 2; ++block_id_index) {
219  const std::string element_block_id = block_id_index == 0 ? bc->elementBlockID() : bc->elementBlockID2();
220 
221  std::map<std::string,Teuchos::RCP<panzer::PhysicsBlock> >::const_iterator
222  volume_pb_itr = physicsBlocks_map.find(element_block_id);
223 
224  TEUCHOS_TEST_FOR_EXCEPTION(volume_pb_itr == physicsBlocks_map.end(), std::logic_error,
225  "panzer::FMB::setupBCFieldManagers: Cannot find physics block corresponding to element block \""
226  << element_block_id << "\"");
227 
228  const Teuchos::RCP<const panzer::PhysicsBlock> volume_pb = physicsBlocks_map.find(element_block_id)->second;
229  const Teuchos::RCP<const shards::CellTopology> volume_cell_topology = volume_pb->cellData().getCellTopology();
230 
231  // register evaluators from strategy
232  const panzer::CellData side_cell_data(wkst->second.num_cells,
233  wkst->second.details(block_id_index).subcell_index,
234  volume_cell_topology);
235 
236  // Copy the physics block for side integrations
237  Teuchos::RCP<panzer::PhysicsBlock> side_pb = volume_pb->copyWithCellData(side_cell_data);
238 
240  bcstm = bc_factory.buildBCStrategy(*bc, side_pb->globalData());
241 
242  // Iterate over evaluation types
244  bcs_type = bcstm->begin(); bcs_type != bcstm->end(); ++bcs_type) {
245  bcs_type->setDetailsIndex(block_id_index);
246  side_pb->setDetailsIndex(block_id_index);
247  bcs_type->setup(*side_pb, user_data);
248  bcs_type->buildAndRegisterEvaluators(fm, *side_pb, cm_factory, closure_models, user_data);
249  bcs_type->buildAndRegisterGatherAndOrientationEvaluators(fm, *side_pb, lo_factory, user_data);
250  if ( ! physicsBlockScatterDisabled())
251  bcs_type->buildAndRegisterScatterEvaluators(fm, *side_pb, lo_factory, user_data);
252  }
253 
254  gid_count += globalIndexer->getElementBlockGIDCount(element_block_id);
255  }
256 
257  { // Use gid_count to set up the derivative information.
258  std::vector<PHX::index_size_type> derivative_dimensions;
259  derivative_dimensions.push_back(gid_count);
260  fm.setKokkosExtendedDataTypeDimensions<panzer::Traits::Jacobian>(derivative_dimensions);
261 
262  #ifdef Panzer_BUILD_HESSIAN_SUPPORT
263  fm.setKokkosExtendedDataTypeDimensions<panzer::Traits::Hessian>(derivative_dimensions);
264  #endif
265 
266  derivative_dimensions[0] = 1;
267  if (user_data.isType<int>("Tangent Dimension"))
268  derivative_dimensions[0] = user_data.get<int>("Tangent Dimension");
269  fm.setKokkosExtendedDataTypeDimensions<panzer::Traits::Tangent>(derivative_dimensions);
270  }
271 
272  // Set up the field manager
273  Traits::SD setupData;
274  Teuchos::RCP<std::vector<panzer::Workset> > worksets = Teuchos::rcp(new std::vector<panzer::Workset>);
275  worksets->push_back(wkst->second);
276  setupData.worksets_ = worksets;
277  setupData.orientations_ = getWorksetContainer()->getOrientations();
278 
279  fm.postRegistrationSetup(setupData);
280  }
281  } else {
282  const std::string element_block_id = bc->elementBlockID();
283 
284  std::map<std::string,Teuchos::RCP<panzer::PhysicsBlock> >::const_iterator volume_pb_itr
285  = physicsBlocks_map.find(element_block_id);
286 
287  TEUCHOS_TEST_FOR_EXCEPTION(volume_pb_itr==physicsBlocks_map.end(),std::logic_error,
288  "panzer::FMB::setupBCFieldManagers: Cannot find physics block corresponding to element block \"" << element_block_id << "\"");
289 
290  Teuchos::RCP<const panzer::PhysicsBlock> volume_pb = physicsBlocks_map.find(element_block_id)->second;
291  Teuchos::RCP<const shards::CellTopology> volume_cell_topology = volume_pb->cellData().getCellTopology();
292 
293  // Build one FieldManager for each local side workset for each dirichlet bc
294  std::map<unsigned,PHX::FieldManager<panzer::Traits> >& field_managers =
295  bc_field_managers_[*bc];
296 
297  // Loop over local face indices and setup each field manager
298  for (std::map<unsigned,panzer::Workset>::const_iterator wkst =
299  currentWkst->begin(); wkst != currentWkst->end();
300  ++wkst) {
301 
302  PHX::FieldManager<panzer::Traits>& fm = field_managers[wkst->first];
303 
304  // register evaluators from strategy
305  const panzer::CellData side_cell_data(wkst->second.num_cells,
306  wkst->first,volume_cell_topology);
307 
308  // Copy the physics block for side integrations
309  Teuchos::RCP<panzer::PhysicsBlock> side_pb = volume_pb->copyWithCellData(side_cell_data);
310 
312  bc_factory.buildBCStrategy(*bc,side_pb->globalData());
313 
314  // Iterate over evaluation types
316  bcs_type = bcstm->begin(); bcs_type != bcstm->end(); ++bcs_type) {
317  bcs_type->setup(*side_pb,user_data);
318  bcs_type->buildAndRegisterEvaluators(fm,*side_pb,cm_factory,closure_models,user_data);
319  bcs_type->buildAndRegisterGatherAndOrientationEvaluators(fm,*side_pb,lo_factory,user_data);
320  if(!physicsBlockScatterDisabled())
321  bcs_type->buildAndRegisterScatterEvaluators(fm,*side_pb,lo_factory,user_data);
322  }
323 
324  // Setup the fieldmanager
325  Traits::SD setupData;
327  Teuchos::rcp(new(std::vector<panzer::Workset>));
328  worksets->push_back(wkst->second);
329  setupData.worksets_ = worksets;
330  setupData.orientations_ = getWorksetContainer()->getOrientations();
331 
332  // setup derivative information
333  setKokkosExtendedDataTypeDimensions(element_block_id,*globalIndexer,user_data,fm);
334 
335  fm.postRegistrationSetup(setupData);
336  }
337  }
338  }
339 }
340 
341 //=======================================================================
342 //=======================================================================
344 writeVolumeGraphvizDependencyFiles(std::string filename_prefix,
345  const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks) const
346 {
347  if(phx_volume_field_managers_.size()<1)
348  return; // nothing to see here folks
349 
350  TEUCHOS_ASSERT(phx_volume_field_managers_.size()==physicsBlocks.size());
351 
352  std::vector<Teuchos::RCP<panzer::PhysicsBlock> >::const_iterator blkItr;
353  int index = 0;
354  for (blkItr=physicsBlocks.begin();blkItr!=physicsBlocks.end();++blkItr,++index) {
355  std::string blockId = (*blkItr)->elementBlockID();
356  phx_volume_field_managers_[index]->writeGraphvizFile(filename_prefix+"_VOLUME_"+blockId);
357  }
358 
359 }
360 
361 //=======================================================================
362 //=======================================================================
364 writeBCGraphvizDependencyFiles(std::string filename_prefix) const
365 {
366  typedef std::map<panzer::BC,std::map<unsigned,PHX::FieldManager<panzer::Traits> >,panzer::LessBC> FMMap;
367 
368  FMMap::const_iterator blkItr;
369  int bc_index = 0;
370  for (blkItr=bc_field_managers_.begin();blkItr!=bc_field_managers_.end();++blkItr,++bc_index) {
371  panzer::BC bc = blkItr->first;
372  const PHX::FieldManager<panzer::Traits> & fm = blkItr->second.begin()->second; // get the first field manager
373 
374  BCType bc_type = bc.bcType();
375  std::string type;
376  if (bc_type == BCT_Dirichlet)
377  type = "_Dirichlet_";
378  else if (bc_type == BCT_Neumann)
379  type = "_Neumann_";
380  else if (bc_type == BCT_Interface)
381  type = "_Interface_";
382  else
383  TEUCHOS_ASSERT(false);
384 
385  std::string blockId = bc.elementBlockID();
386  std::string sideId = bc.sidesetID();
387  fm.writeGraphvizFile(filename_prefix+"_BC_"+std::to_string(bc_index)+type+sideId+"_"+blockId);
388  }
389 
390 }
391 
392 //=======================================================================
393 //=======================================================================
395 writeVolumeTextDependencyFiles(std::string filename_prefix,
396  const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks) const
397 {
398  if(phx_volume_field_managers_.size()<1)
399  return; // nothing to see here folks
400 
401  TEUCHOS_ASSERT(phx_volume_field_managers_.size()==physicsBlocks.size());
402 
403  std::vector<Teuchos::RCP<panzer::PhysicsBlock> >::const_iterator blkItr;
404  int index = 0;
405  for (blkItr=physicsBlocks.begin();blkItr!=physicsBlocks.end();++blkItr,++index) {
406 
407  std::string blockId = (*blkItr)->elementBlockID();
408 
409  std::string filename = filename_prefix+"_VOLUME_"+blockId+".txt";
410  std::ofstream ofs;
411  ofs.open(filename.c_str());
412 
413  ofs << *(phx_volume_field_managers_[index]) << std::endl;
414 
415  ofs.close();
416  }
417 
418 }
419 
420 //=======================================================================
421 //=======================================================================
423 writeBCTextDependencyFiles(std::string filename_prefix) const
424 {
425  typedef std::map<panzer::BC,std::map<unsigned,PHX::FieldManager<panzer::Traits> >,panzer::LessBC> FMMap;
426 
427  FMMap::const_iterator blkItr;
428  int bc_index = 0;
429  for (blkItr=bc_field_managers_.begin();blkItr!=bc_field_managers_.end();++blkItr,++bc_index) {
430  panzer::BC bc = blkItr->first;
431  const PHX::FieldManager<panzer::Traits> & fm = blkItr->second.begin()->second; // get the first field manager
432 
433  BCType bc_type = bc.bcType();
434  std::string type;
435  if (bc_type == BCT_Dirichlet)
436  type = "_Dirichlet_";
437  else if (bc_type == BCT_Neumann)
438  type = "_Neumann_";
439  else if (bc_type == BCT_Interface)
440  type = "_Interface_";
441  else
442  TEUCHOS_ASSERT(false);
443 
444  std::string blockId = bc.elementBlockID();
445  std::string sideId = bc.sidesetID();
446 
447  std::string filename = filename_prefix+"_BC_"+std::to_string(bc_index)+type+sideId+"_"+blockId+".txt";
448  std::ofstream ofs;
449  ofs.open(filename.c_str());
450 
451  ofs << fm << std::endl;
452 
453  ofs.close();
454  }
455 
456 }
457 
458 //=======================================================================
459 //=======================================================================
461 setKokkosExtendedDataTypeDimensions(const std::string & eblock,
462  const panzer::UniqueGlobalIndexerBase & globalIndexer,
463  const Teuchos::ParameterList& user_data,
465 {
466  // setup Jacobian derivative terms
467  {
468  std::vector<PHX::index_size_type> derivative_dimensions;
469  derivative_dimensions.push_back(globalIndexer.getElementBlockGIDCount(eblock));
470 
471  fm.setKokkosExtendedDataTypeDimensions<panzer::Traits::Jacobian>(derivative_dimensions);
472 
473  }
474 
475  #ifdef Panzer_BUILD_HESSIAN_SUPPORT
476  {
477  std::vector<PHX::index_size_type> derivative_dimensions;
478  derivative_dimensions.push_back(globalIndexer.getElementBlockGIDCount(eblock));
479 
480  fm.setKokkosExtendedDataTypeDimensions<panzer::Traits::Hessian>(derivative_dimensions);
481  }
482  #endif
483 
484  {
485  std::vector<PHX::index_size_type> derivative_dimensions;
486  derivative_dimensions.push_back(1);
487  if (user_data.isType<int>("Tangent Dimension"))
488  derivative_dimensions[0] = user_data.get<int>("Tangent Dimension");
489  fm.setKokkosExtendedDataTypeDimensions<panzer::Traits::Tangent>(derivative_dimensions);
490  }
491 }
492 
493 //=======================================================================
494 //=======================================================================
495 std::ostream& panzer::operator<<(std::ostream& os, const panzer::FieldManagerBuilder& rfd)
496 {
497  rfd.print(os);
498  return os;
499 }
Interface for constructing a BCStrategy_TemplateManager.
virtual int getElementBlockGIDCount(const std::string &blockId) const =0
How any GIDs are associate with a particular element block.
void setupVolumeFieldManagers(const std::vector< Teuchos::RCP< panzer::PhysicsBlock > > &physicsBlocks, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &cm_factory, const Teuchos::ParameterList &closure_models, const LinearObjFactory< panzer::Traits > &lo_factory, const Teuchos::ParameterList &user_data)
Teuchos::RCP< const std::vector< Intrepid2::Orientation > > orientations_
BCType
Type of boundary condition.
Definition: Panzer_BC.hpp:74
std::string elementBlockID() const
Returns the element block id associated with this sideset.
Definition: Panzer_BC.cpp:200
T & get(const std::string &name, T def_value)
void writeVolumeGraphvizDependencyFiles(std::string filename_prefix, const std::vector< Teuchos::RCP< panzer::PhysicsBlock > > &physicsBlocks) const
void buildAndRegisterClosureModelEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &factory, const Teuchos::ParameterList &models, const Teuchos::ParameterList &user_data) const
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
void buildAndRegisterScatterEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
const std::string & getElementBlock(const int block=0) const
Get element block name.
void writeBCGraphvizDependencyFiles(std::string filename_prefix) const
void buildAndRegisterGatherAndOrientationEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
void setKokkosExtendedDataTypeDimensions(const std::string &eblock, const panzer::UniqueGlobalIndexerBase &globalIndexer, const Teuchos::ParameterList &user_data, PHX::FieldManager< panzer::Traits > &fm) const
virtual Teuchos::RCP< panzer::BCStrategy_TemplateManager< panzer::Traits > > buildBCStrategy(const panzer::BC &bc, const Teuchos::RCP< panzer::GlobalData > &global_data) const =0
void writeBCTextDependencyFiles(std::string filename_prefix) const
Teuchos::RCP< panzer::GlobalData > globalData() const
void buildAndRegisterDOFProjectionsToIPEvaluators(PHX::FieldManager< panzer::Traits > &fm, const Teuchos::Ptr< const panzer::LinearObjFactory< panzer::Traits > > &lof, const Teuchos::ParameterList &user_data) const
void print(std::ostream &os) const
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Data for determining cell topology and dimensionality.
void writeVolumeTextDependencyFiles(std::string filename_prefix, const std::vector< Teuchos::RCP< panzer::PhysicsBlock > > &physicsBlocks) const
std::string elementBlockID() const
BCType bcType() const
Returns the boundary condition type (Dirichlet or Neumann or Interface).
Definition: Panzer_BC.cpp:186
virtual Teuchos::RCP< const panzer::UniqueGlobalIndexerBase > getRangeGlobalIndexer() const =0
Get the range global indexer object associated with this factory.
virtual bool registerEvaluators(PHX::FieldManager< panzer::Traits > &fm, const WorksetDescriptor &wd, const PhysicsBlock &pb) const =0
std::string sidesetID() const
Returns the set id.
Definition: Panzer_BC.cpp:193
std::ostream & operator<<(std::ostream &os, const AssemblyEngineInArgs &in)
bool isType(const std::string &name) const
WorksetDescriptor blockDescriptor(const std::string &eBlock)
WorksetDescriptor bcDescriptor(const panzer::BC &bc)
Definition: Panzer_BC.cpp:331
Stores input information for a boundary condition.
Definition: Panzer_BC.hpp:81
void setupBCFieldManagers(const std::vector< panzer::BC > &bcs, const std::vector< Teuchos::RCP< panzer::PhysicsBlock > > &physicsBlocks, const panzer::EquationSetFactory &eqset_factory, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &cm_factory, const panzer::BCStrategyFactory &bc_factory, const Teuchos::ParameterList &closure_models, const LinearObjFactory< panzer::Traits > &lo_factory, const Teuchos::ParameterList &user_data)
#define TEUCHOS_ASSERT(assertion_test)
void buildAndRegisterEquationSetEvaluators(PHX::FieldManager< panzer::Traits > &fm, const Teuchos::ParameterList &user_data) const
Teuchos::RCP< const std::vector< panzer::Workset > > worksets_
bool is_null() const