11#ifndef PANZER_EQUATIONSET_DEFAULT_IMPL_IMPL_HPP
12#define PANZER_EQUATIONSET_DEFAULT_IMPL_IMPL_HPP
19#include "Panzer_GatherBasisCoordinates.hpp"
20#include "Panzer_GatherIntegrationCoordinates.hpp"
21#include "Panzer_GatherOrientation.hpp"
24#include "Phalanx_MDField.hpp"
25#include "Phalanx_DataLayout.hpp"
26#include "Phalanx_DataLayout_MDALayout.hpp"
27#include "Teuchos_ParameterList.hpp"
33template <
typename EvalT>
36 const int& default_integration_order,
38 const Teuchos::RCP<panzer::GlobalData>& global_data,
39 const bool build_transient_support) :
52template <
typename EvalT>
72 TEUCHOS_ASSERT(nonnull(itr->second.basis));
73 this->
m_provided_dofs.push_back(std::make_pair(itr->first, itr->second.basis));
83 TEUCHOS_ASSERT(nonnull(itr->second.intRule));
84 m_int_rules[itr->second.intRule->order()] = itr->second.intRule;
91 std::string basis_name = dof_iter->second.basis->name();
92 Teuchos::RCP<panzer::PureBasis> basis = dof_iter->second.basis;
93 std::string dof_name = dof_iter->first;
97 m_basis_to_dofs[basis_name].second = Teuchos::rcp(
new std::vector<std::string>);
105 m_unique_bases[dof_iter->second.basis->name()] = dof_iter->second.basis;
114template <
typename EvalT>
122 Teuchos::RCP<panzer::PureBasis> pure_basis =
m_provided_dofs.begin()->second;
123 Teuchos::RCP<panzer::IntegrationRule> int_rule =
m_int_rules.begin()->second;
131template <
typename EvalT>
136 const Teuchos::ParameterList& )
const
138 using Teuchos::ParameterList;
150 Teuchos::RCP< std::vector< std::vector<std::string> > > tangent_field_names;
152 tangent_field_names = rcp(
new std::vector< std::vector<std::string> >(basis_it->second.second->size()));
153 for (std::size_t i=0; i<basis_it->second.second->size(); ++i) {
155 const std::string tname =
157 (*tangent_field_names)[i].push_back(tname);
163 ParameterList p(
"Gather");
164 p.set(
"Basis", basis_it->second.first);
165 p.set(
"DOF Names", basis_it->second.second);
166 p.set(
"Indexer Names", basis_it->second.second);
167 p.set(
"Sensitivities Name",
"");
168 p.set(
"First Sensitivities Available",
true);
169 p.set(
"Second Sensitivities Available",
true);
172 if (tangent_field_names != Teuchos::null)
173 p.set(
"Tangent Names", tangent_field_names);
175 RCP< PHX::Evaluator<panzer::Traits> > op = lof.
buildGather<EvalT>(p);
182 if (tangent_field_names != Teuchos::null) {
185 Teuchos::RCP< std::vector<std::string> > names = rcp(
new std::vector<std::string>);
186 for (std::size_t j=0; j<basis_it->second.second->size(); ++j)
187 names->push_back((*tangent_field_names)[j][i]);
190 p.set(
"Basis", basis_it->second.first);
191 p.set(
"DOF Names", names);
192 p.set(
"Indexer Names", basis_it->second.second);
193 p.set(
"Sensitivities Name",
"");
194 p.set(
"First Sensitivities Available",
false);
195 p.set(
"Second Sensitivities Available",
false);
210 for (std::map<std::string,Teuchos::RCP<panzer::PureBasis> >::const_iterator basis =
m_unique_bases.begin();
212 RCP< PHX::Evaluator<panzer::Traits> > basis_op
218 for (std::map<
int,Teuchos::RCP<panzer::IntegrationRule> >::const_iterator ir =
m_int_rules.begin();
220 RCP< PHX::Evaluator<panzer::Traits> > quad_op
237 RCP< std::vector<std::string> > t_dof_names = rcp(
new std::vector<std::string>);
238 RCP< std::vector<std::string> > t_field_names = rcp(
new std::vector<std::string>);
239 RCP< std::vector< std::vector<std::string> > > tangent_field_names = rcp(
new std::vector< std::vector<std::string> >);
242 for (
typename std::vector<std::string>::const_iterator dof_name = basis_it->second.second->begin();
243 dof_name != basis_it->second.second->end(); ++dof_name) {
249 if(desc->second.timeDerivative.first) {
251 t_dof_names->push_back(*dof_name);
252 t_field_names->push_back(desc->second.timeDerivative.second);
256 std::vector<std::string> tfn;
258 const std::string tname =
260 tfn.push_back(tname);
262 tangent_field_names->push_back(tfn);
268 ParameterList p(
"Gather");
269 p.set(
"Basis", basis_it->second.first);
270 p.set(
"DOF Names", t_field_names);
271 p.set(
"Indexer Names", t_dof_names);
272 p.set(
"Use Time Derivative Solution Vector",
true);
276 p.set(
"Tangent Names", tangent_field_names);
278 RCP< PHX::Evaluator<panzer::Traits> > op = lof.
buildGather<EvalT>(p);
288 Teuchos::RCP< std::vector<std::string> > names =
289 rcp(
new std::vector<std::string>);
290 for (std::size_t j=0; j<tangent_field_names->size(); ++j)
291 names->push_back((*tangent_field_names)[j][i]);
294 p.set(
"Basis", basis_it->second.first);
295 p.set(
"DOF Names", names);
296 p.set(
"Indexer Names", t_dof_names);
297 p.set(
"Use Time Derivative Solution Vector",
true);
312 if(basis_it->second.first->requiresOrientations()) {
313 ParameterList p(
"Gather Orientation");
314 p.set(
"Basis", basis_it->second.first);
315 p.set(
"DOF Names", basis_it->second.second);
316 p.set(
"Indexer Names", basis_it->second.second);
327template <
typename EvalT>
331 const Teuchos::RCP<panzer::IntegrationRule>& ir,
333 const Teuchos::ParameterList& )
const
335 using Teuchos::ParameterList;
339 Teuchos::RCP<const panzer::GlobalIndexer> globalIndexer;
340 if(lof!=Teuchos::null)
341 globalIndexer = lof->getRangeGlobalIndexer();
347 p.set(
"Name", dof_iter->first);
351 if(globalIndexer!=Teuchos::null) {
353 int fieldNum = globalIndexer->getFieldNum(dof_iter->first);
354 RCP<const std::vector<int> > offsets =
355 rcp(
new std::vector<int>(globalIndexer->getGIDFieldOffsets(
m_block_id,fieldNum)));
356 p.set(
"Jacobian Offsets Vector", offsets);
360 RCP< PHX::Evaluator<panzer::Traits> > op =
368 for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=
m_provided_dofs_desc.begin();
371 if(itr->second.basis->supportsGrad()) {
374 if(!itr->second.grad.first)
377 const std::string dof_name = itr->first;
378 const std::string dof_grad_name = itr->second.grad.second;
381 p.set(
"Name", dof_name);
382 p.set(
"Gradient Name", dof_grad_name);
386 RCP< PHX::Evaluator<panzer::Traits> > op =
395 for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=
m_provided_dofs_desc.begin();
398 if(itr->second.basis->supportsCurl()) {
401 if(!itr->second.curl.first)
404 const std::string dof_name = itr->first;
405 const std::string dof_curl_name = itr->second.curl.second;
408 p.set(
"Name", dof_name);
409 p.set(
"Curl Name", dof_curl_name);
414 if(globalIndexer!=Teuchos::null) {
416 int fieldNum = globalIndexer->getFieldNum(dof_name);
417 RCP<const std::vector<int> > offsets =
418 rcp(
new std::vector<int>(globalIndexer->getGIDFieldOffsets(
m_block_id,fieldNum)));
419 p.set(
"Jacobian Offsets Vector", offsets);
424 RCP< PHX::Evaluator<panzer::Traits> > op =
434 for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=
m_provided_dofs_desc.begin();
437 if(itr->second.basis->supportsDiv()) {
440 if(!itr->second.div.first)
443 const std::string dof_name = itr->first;
444 const std::string dof_div_name = itr->second.div.second;
447 p.set(
"Name", dof_name);
448 p.set(
"Div Name", dof_div_name);
453 if(globalIndexer!=Teuchos::null) {
455 int fieldNum = globalIndexer->getFieldNum(dof_name);
456 RCP<const std::vector<int> > offsets =
457 rcp(
new std::vector<int>(globalIndexer->getGIDFieldOffsets(
m_block_id,fieldNum)));
458 p.set(
"Jacobian Offsets Vector", offsets);
463 RCP< PHX::Evaluator<panzer::Traits> > op =
471 for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=
m_provided_dofs_desc.begin();
474 if(!itr->second.timeDerivative.first)
477 const std::string td_name = itr->second.timeDerivative.second;
480 p.set(
"Name", td_name);
484 if(globalIndexer!=Teuchos::null) {
486 int fieldNum = globalIndexer->getFieldNum(itr->first);
487 RCP<const std::vector<int> > offsets =
488 rcp(
new std::vector<int>(globalIndexer->getGIDFieldOffsets(
m_block_id,fieldNum)));
489 p.set(
"Jacobian Offsets Vector", offsets);
495 if(itr->second.basis->requiresOrientations())
496 p.set(
"Orientation Field Name", itr->first+
" Orientation");
498 RCP< PHX::Evaluator<panzer::Traits> > op =
507template <
typename EvalT>
512 const Teuchos::ParameterList& user_data)
const
514 using Teuchos::ParameterList;
520 bool ignoreScatter =
false;
521 if(user_data.isParameter(
"Ignore Scatter"))
522 ignoreScatter = user_data.get<
bool>(
"Ignore Scatter");
526 for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=
m_provided_dofs_desc.begin();
529 RCP<std::map<std::string,std::string> > names_map = rcp(
new std::map<std::string,std::string>);
530 RCP< std::vector<std::string> > residual_names = rcp(
new std::vector<std::string>);
533 TEUCHOS_ASSERT(itr->second.residualName.first);
535 names_map->insert(std::make_pair(itr->second.residualName.second,itr->first));
536 residual_names->push_back(itr->second.residualName.second);
539 ParameterList p(
"Scatter");
540 p.set(
"Scatter Name", itr->second.scatterName);
541 p.set(
"Basis", itr->second.basis.getConst());
542 p.set(
"Dependent Names", residual_names);
543 p.set(
"Dependent Map", names_map);
545 RCP< PHX::Evaluator<panzer::Traits> > op = lof.
buildScatter<EvalT>(p);
552 PHX::Tag<typename EvalT::ScalarT> tag(itr->second.scatterName,
553 Teuchos::rcp(
new PHX::MDALayout<Dummy>(0)));
554 fm.template requireField<EvalT>(tag);
565template <
typename EvalT>
569 const Teuchos::RCP<panzer::IntegrationRule>& ir,
571 const Teuchos::ParameterList& models,
572 const Teuchos::ParameterList& user_data)
const
583template <
typename EvalT>
587 const Teuchos::RCP<panzer::IntegrationRule>& ir,
589 const std::string& model_name,
590 const Teuchos::ParameterList& models,
591 const Teuchos::ParameterList& user_data)
const
593 Teuchos::RCP< std::vector< Teuchos::RCP<PHX::Evaluator<panzer::Traits> > > > evaluators =
594 factory.getAsObject<EvalT>()->buildClosureModels(model_name,
603 for (std::vector< Teuchos::RCP<PHX::Evaluator<panzer::Traits> > >
::size_type i=0; i < evaluators->size(); ++i)
608template <
typename EvalT>
613 const std::string& model_name,
614 const Teuchos::ParameterList& models,
616 const Teuchos::ParameterList& user_data)
const
619 for (std::map<std::string,Teuchos::RCP<panzer::PureBasis> >::const_iterator basis =
m_unique_bases.begin();
621 Teuchos::RCP< PHX::Evaluator<panzer::Traits> > basis_op
626 for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=
m_provided_dofs_desc.begin();
629 Teuchos::ParameterList p(
"Scatter");
630 p.set(
"Scatter Name", itr->second.scatterName);
631 p.set(
"Basis", itr->second.basis.getConst());
632 Teuchos::RCP<std::vector<std::string> > name = Teuchos::rcp(
new std::vector<std::string>);
633 name->push_back(itr->first);
634 p.set(
"Dependent Names", name);
637 Teuchos::RCP<std::map<std::string,std::string> > names_map = Teuchos::rcp(
new std::map<std::string,std::string>);
638 names_map->insert(std::make_pair(itr->first,itr->first));
639 p.set(
"Dependent Map", names_map);
642 p.set(
"Scatter Initial Condition",
true);
651 PHX::Tag<typename EvalT::ScalarT> tag(itr->second.scatterName,Teuchos::rcp(
new PHX::MDALayout<Dummy>(0)));
652 fm.template requireField<EvalT>(tag);
665 Teuchos::RCP<panzer::IntegrationRule> dummy_ir;
670 Teuchos::RCP< std::vector< Teuchos::RCP<PHX::Evaluator<panzer::Traits> > > > evaluators =
671 factory.getAsObject<EvalT>()->buildClosureModels(model_name, models, *fll, dummy_ir, *(this->
m_eval_plist), user_data, this->
getGlobalData(), fm);
673 for (std::vector< Teuchos::RCP<PHX::Evaluator<panzer::Traits> > >
::size_type i=0; i < evaluators->size(); ++i)
682 if(basis_it->second.first->requiresOrientations()) {
683 Teuchos::ParameterList p(
"Gather Orientation");
684 p.set(
"Basis", basis_it->second.first);
685 p.set(
"DOF Names", basis_it->second.second);
686 p.set(
"Indexer Names", basis_it->second.second);
697template <
typename EvalT>
698const Teuchos::RCP<Teuchos::ParameterList>
705template <
typename EvalT>
706const std::vector<std::pair<std::string,Teuchos::RCP<panzer::PureBasis> > >&
713template <
typename EvalT>
714const std::vector<std::vector<std::string> > &
721template <
typename EvalT>
722const std::map<int,Teuchos::RCP<panzer::IntegrationRule> > &
729template <
typename EvalT>
740template <
typename EvalT>
748template <
typename EvalT>
755template <
typename EvalT>
762template <
typename EvalT>
769template <
typename EvalT>
774 for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=
m_provided_dofs_desc.begin();
776 dofNames.push_back(itr->first);
780template <
typename EvalT>
784 int integrationOrder)
786 typename std::map<std::string,DOFDescriptor>::const_iterator itr =
m_provided_dofs_desc.find(dofName);
789 "EquationSet_DefaultImpl::updateDOF: DOF \"" << dofName <<
"\" has not been specified "
790 "by derived equation set \"" << this->getType() <<
"\".");
797 if (integrationOrder == -1)
806template <
typename EvalT>
810 typename std::map<std::string,DOFDescriptor>::const_iterator itr =
m_provided_dofs_desc.find(dofName);
813 "EquationSet_DefaultImpl::getBasisOrder: DOF \"" << dofName <<
"\" has not been specified "
814 "by derived equation set \"" << this->getType() <<
"\".");
816 return itr->second.basisOrder;
820template <
typename EvalT>
824 typename std::map<std::string,DOFDescriptor>::const_iterator itr =
m_provided_dofs_desc.find(dofName);
827 "EquationSet_DefaultImpl::getIntegrationOrder: DOF \"" << dofName <<
"\" has not been specified "
828 "by derived equation set \"" << this->getType() <<
"\".");
830 return itr->second.integrationOrder;
834template <
typename EvalT>
836addDOF(
const std::string & dofName,
837 const std::string & basisType,
838 const int & basisOrder,
839 const int integrationOrder,
840 const std::string residualName,
841 const std::string scatterName)
843 typename std::map<std::string,DOFDescriptor>::const_iterator itr =
m_provided_dofs_desc.find(dofName);
846 "EquationSet_DefaultImpl::addProvidedDOF: DOF \"" << dofName <<
"\" was previously specified "
847 "by derived equation set \"" << this->getType() <<
"\".");
856 if (integrationOrder == -1)
866 if (residualName ==
"")
871 if (scatterName ==
"")
879template <
typename EvalT>
882 const std::string & gradName)
884 typename std::map<std::string,DOFDescriptor>::iterator itr =
m_provided_dofs_desc.find(dofName);
887 "EquationSet_DefaultImpl::addDOFGrad: DOF \"" << dofName <<
"\" has not been specified as a DOF "
888 "by derived equation set \"" << this->getType() <<
"\".");
892 TEUCHOS_ASSERT(desc.
dofName==dofName);
895 desc.
grad = std::make_pair(
true,std::string(
"GRAD_")+dofName);
897 desc.
grad = std::make_pair(
true,gradName);
901template <
typename EvalT>
904 const std::string & curlName)
906 typename std::map<std::string,DOFDescriptor>::iterator itr =
m_provided_dofs_desc.find(dofName);
909 "EquationSet_DefaultImpl::addDOFCurl: DOF \"" << dofName <<
"\" has not been specified as a DOF "
910 "by derived equation set \"" << this->getType() <<
"\".");
914 TEUCHOS_ASSERT(desc.
dofName==dofName);
917 desc.
curl = std::make_pair(
true,std::string(
"CURL_")+dofName);
919 desc.
curl = std::make_pair(
true,curlName);
923template <
typename EvalT>
926 const std::string & divName)
928 typename std::map<std::string,DOFDescriptor>::iterator itr =
m_provided_dofs_desc.find(dofName);
931 "EquationSet_DefaultImpl::addDOFDiv: DOF \"" << dofName <<
"\" has not been specified as a DOF "
932 "by derived equation set \"" << this->getType() <<
"\".");
936 TEUCHOS_ASSERT(desc.
dofName==dofName);
939 desc.
div = std::make_pair(
true,std::string(
"DIV_")+dofName);
941 desc.
div = std::make_pair(
true,divName);
945template <
typename EvalT>
948 const std::string & dotName)
950 typename std::map<std::string,DOFDescriptor>::iterator itr =
m_provided_dofs_desc.find(dofName);
953 "EquationSet_DefaultImpl::addDOFTimeDerivative: DOF \"" << dofName <<
"\" has not been specified as a DOF "
954 "by derived equation set \"" << this->getType() <<
"\".");
958 TEUCHOS_ASSERT(desc.
dofName==dofName);
961 desc.
timeDerivative = std::make_pair(
true,std::string(
"DXDT_")+dofName);
967template <
typename EvalT>
971 TEUCHOS_TEST_FOR_EXCEPTION(
m_cell_data.baseCellDimension()!=Teuchos::as<int>(dofNames.size()),std::invalid_argument,
972 "EquationSet_DefaultImpl::setCoordinateDOFs: Size of vector is not equal to the "
973 "spatial dimension.");
975 for(std::size_t d=0;d<dofNames.size();d++) {
976 typename std::map<std::string,DOFDescriptor>::const_iterator desc_it =
m_provided_dofs_desc.find(dofNames[d]);
978 "EquationSet_DefaultImpl::setCoordinateDOFs: DOF of name \"" + dofNames[d] +
"\" "
979 "has not been added, thus cannot be set as a coordinate DOF.");
986template <
typename EvalT>
990 std::string default_type =
"";
991 valid_parameters.set(
"Type",default_type,
"The equation set type. This must corespond to the type keyword used to build the equation set in the equation set factory.");
995template <
typename EvalT>
996Teuchos::RCP<panzer::PureBasis>
999 typename std::map<std::string,DOFDescriptor>::const_iterator desc_it =
m_provided_dofs_desc.find(dof_name);
1001 return desc_it->second.basis;
1005template <
typename EvalT>
1006Teuchos::RCP<panzer::IntegrationRule>
1009 typename std::map<std::string,DOFDescriptor>::const_iterator desc_it =
m_provided_dofs_desc.find(dof_name);
1011 "EquationSet_DefaultImpl::getIntRuleForDOF: Failed to find degree of freedom "
1012 "with name \"" << dof_name <<
"\".");
1013 return desc_it->second.intRule;
1017template <
typename EvalT>
1018Teuchos::RCP<panzer::BasisIRLayout>
1021 typename std::map<std::string,DOFDescriptor>::const_iterator desc_it =
m_provided_dofs_desc.find(dof_name);
1023 "EquationSet_DefaultImpl::getBasisIRLayoutForDOF: Failed to find degree of freedom "
1024 "with name \"" << dof_name <<
"\".");
1030template <
typename EvalT>
1033 const std::string dof_name,
1034 const std::vector<std::string>& residual_contributions,
1035 const std::string residual_field_name)
const
1040 Teuchos::ParameterList p;
1042 if (residual_field_name !=
"")
1043 p.set(
"Sum Name", residual_field_name);
1045 p.set(
"Sum Name",
"RESIDUAL_" + dof_name);
1047 RCP<std::vector<std::string> > rcp_residual_contributions = rcp(
new std::vector<std::string>);
1048 *rcp_residual_contributions = residual_contributions;
1050 p.set(
"Values Names", rcp_residual_contributions);
1055 p.set(
"Data Layout", desc_it->second.basis->functional);
1063template <
typename EvalT>
1066 const std::string dof_name,
1067 const std::vector<std::string>& residual_contributions,
1068 const std::vector<double>& scale_contributions,
1069 const std::string residual_field_name)
const
1074 Teuchos::ParameterList p;
1076 if (residual_field_name !=
"")
1077 p.set(
"Sum Name", residual_field_name);
1079 p.set(
"Sum Name",
"RESIDUAL_" + dof_name);
1081 RCP<std::vector<std::string> > rcp_residual_contributions = rcp(
new std::vector<std::string>);
1082 *rcp_residual_contributions = residual_contributions;
1083 p.set(
"Values Names", rcp_residual_contributions);
1085 RCP<const std::vector<double> > rcp_scale_contributions = rcp(
new std::vector<double>(scale_contributions));
1086 p.set(
"Scalars", rcp_scale_contributions);
1091 p.set(
"Data Layout", desc_it->second.basis->functional);
1099template <
typename EvalT>
1106template <
typename EvalT>
1107Teuchos::RCP<Teuchos::ParameterList>
Data for determining cell topology and dimensionality.
A PHX::TemplateManager holding one panzer::ClosureModelFactory<EvalT> per evaluation type in Traits::...
Interpolates basis DOF values to IP DOF Curl values.
Interpolates basis DOF values to IP DOF Div values.
Interpolates basis DOF values to IP DOF Gradient values.
Interpolates basis DOF values to IP DOF values.
virtual std::string getElementBlockId() const
std::map< std::string, Teuchos::RCP< panzer::PureBasis > > m_unique_bases
Key is the basis name from panzer::PureBasis::name() and value is the corresponding PureBasis.
void addDOFGrad(const std::string &dofName, const std::string &gradName="")
void addDOFCurl(const std::string &dofName, const std::string &curlName="")
int getBasisOrder(const std::string &dofName) const
Get the basis order for an existing degree of freedom.
virtual void buildAndRegisterGatherAndOrientationEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::FieldLibrary &fl, const LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
std::map< std::string, std::pair< Teuchos::RCP< panzer::PureBasis >, Teuchos::RCP< std::vector< std::string > > > >::const_iterator BasisIterator
For convenience, declare a basis iterator.
const bool m_build_transient_support
int getIntegrationOrder(const std::string &dofName) const
Get the integration order for an existing degree of freedom.
const panzer::CellData m_cell_data
void addClosureModel(const std::string &closure_model)
Teuchos::RCP< panzer::PureBasis > getBasisForDOF(const std::string &dof_name) const
Returns the PureBasis associated with the residual contributions for the dof_name.
void setCoordinateDOFs(const std::vector< std::string > &dofNames)
std::vector< std::string > m_closure_model_ids
std::map< int, Teuchos::RCP< panzer::IntegrationRule > > m_int_rules
Key is the integration rule order and the value is the corresponding integration rule.
virtual const std::vector< std::pair< std::string, Teuchos::RCP< panzer::PureBasis > > > & getProvidedDOFs() const
Return the Basis for the equation set, key is the DOF name (note coordinate DOFs are NOT included).
void setupDeprecatedDOFsSupport()
EquationSet_DefaultImpl(const Teuchos::RCP< Teuchos::ParameterList > ¶ms, const int &default_integration_order, const panzer::CellData &cell_data, const Teuchos::RCP< panzer::GlobalData > &global_data, const bool build_transient_support)
void buildAndRegisterResidualSummationEvaluator(PHX::FieldManager< panzer::Traits > &fm, const std::string dof_name, const std::vector< std::string > &residual_contributions, const std::string residual_field_name="") const
Teuchos::RCP< Teuchos::ParameterList > getEquationSetParameterList() const
Returns the parameter list used to build this equation set.
virtual const std::map< int, Teuchos::RCP< panzer::IntegrationRule > > & getIntegrationRules() const
Return a map of unique integration rules for the equation set, key is the integration order.
virtual void setupDOFs()
Builds the integration rule, basis, DOFs, and default parameter list. This MUST be called in the cons...
Teuchos::RCP< panzer::BasisIRLayout > getBasisIRLayoutForDOF(const std::string &dof_name) const
Returns the BasisIRLayout for the dof_name.
void updateDOF(const std::string &dofName, int basisOrder, int integrationOrder=-1)
Modifying an existing DOF's basis function and integration rule.
virtual void buildAndRegisterDOFProjectionsToIPEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::FieldLayoutLibrary &fl, const Teuchos::RCP< panzer::IntegrationRule > &ir, const Teuchos::Ptr< const panzer::LinearObjFactory< panzer::Traits > > &lof, const Teuchos::ParameterList &user_data) const
bool buildTransientSupport() const
Returns true if transient support should be enabled in the equation set.
virtual std::string getType() const
Returns the type of the equation set object. Corresponds to the keyword used by the equation set fact...
void getAddedDOFs(std::vector< std::string > &dofNames) const
virtual const Teuchos::RCP< Teuchos::ParameterList > getEvaluatorParameterList() const
Returns the parameter list that will be passed off from the equaiton set to the closure model evaluat...
std::vector< std::vector< std::string > > m_coordinate_dofs
void addDOF(const std::string &dofName, const std::string &basisType, const int &basisOrder, const int integrationOrder=-1, const std::string residualName="", const std::string scatterName="")
std::vector< std::pair< std::string, Teuchos::RCP< panzer::PureBasis > > > m_provided_dofs
Key is the dof name and the value is the corresponding basis.
virtual void buildAndRegisterClosureModelEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::FieldLayoutLibrary &fl, const Teuchos::RCP< panzer::IntegrationRule > &ir, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &factory, const Teuchos::ParameterList &models, const Teuchos::ParameterList &user_data) const
Register closure model evaluators with the model name internally specified by the equation set.
virtual const std::vector< std::vector< std::string > > & getCoordinateDOFs() const
Return a vector of vectors that correspond to DOFs set as coordinate fields.
int m_default_integration_order
void addDOFTimeDerivative(const std::string &dofName, const std::string &dotName="")
Teuchos::RCP< panzer::IntegrationRule > getIntRuleForDOF(const std::string &dof_name) const
Returns the integration rule associated with the residual contributions for the dof_name.
virtual void setTangentParamNames(const std::vector< std::string > &tangent_param_names)
Set the list of tangent parameter names.
virtual void setElementBlockId(const std::string &blockId)
Teuchos::RCP< Teuchos::ParameterList > m_eval_plist
std::map< std::string, std::pair< Teuchos::RCP< panzer::PureBasis >, Teuchos::RCP< std::vector< std::string > > > > m_basis_to_dofs
Map that links a common basis to a vector of dof names. Key is the unique basis name,...
virtual void buildAndRegisterInitialConditionEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::FieldLibrary &fl, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &factory, const std::string &model_name, const Teuchos::ParameterList &models, const LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
std::vector< std::string > m_tangent_param_names
virtual void buildAndRegisterScatterEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::FieldLibrary &fl, const LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
const Teuchos::RCP< Teuchos::ParameterList > m_input_params
void addDOFDiv(const std::string &dofName, const std::string &divName="")
std::map< std::string, DOFDescriptor > m_provided_dofs_desc
Maps the dof name into a DOFDescriptor. Should be private, but is protected so that the aux equaiton ...
std::map< std::string, DOFDescriptor >::const_iterator DescriptorIterator
For convenience, declare the DOFDescriptor iterator.
void setDefaultValidParameters(Teuchos::ParameterList &valid_parameters)
void registerEvaluator(PHX::FieldManager< panzer::Traits > &fm, const Teuchos::RCP< PHX::Evaluator< panzer::Traits > > &op) const
Teuchos::RCP< panzer::BasisIRLayout > lookupLayout(const std::string &fieldName) const
Get the basis associated with a particular field.
Teuchos::RCP< const FieldLayoutLibrary > buildFieldLayoutLibrary(panzer::PointRule &ir) const
Gathers coordinates for the basis function from the workset and stores them in the field manager.
Gathers coordinates for the quadrature from the workset and stores them in the field manager.
GlobalDataAcceptorDefaultImpl()
Teuchos::RCP< panzer::GlobalData > getGlobalData() const
Teuchos::RCP< PHX::Evaluator< Traits > > buildScatter(const Teuchos::ParameterList &pl) const
Use preconstructed scatter evaluators.
Teuchos::RCP< PHX::Evaluator< Traits > > buildScatterDirichlet(const Teuchos::ParameterList &pl) const
Use preconstructed dirichlet scatter evaluators.
Teuchos::RCP< PHX::Evaluator< Traits > > buildGatherTangent(const Teuchos::ParameterList &pl) const
Use preconstructed gather evaluators.
Teuchos::RCP< PHX::Evaluator< Traits > > buildGatherOrientation(const Teuchos::ParameterList &pl) const
Use preconstructed gather evaluators.
Teuchos::RCP< PHX::Evaluator< Traits > > buildGather(const Teuchos::ParameterList &pl) const
Use preconstructed gather evaluators.
Description and data layouts associated with a particular basis.
Teuchos::RCP< panzer::BasisIRLayout > basisIRLayout(std::string basis_type, const int basis_order, const PointRule &pt_rule)
Nonmember constructor.
std::pair< bool, std::string > timeDerivative
Teuchos::RCP< panzer::IntegrationRule > intRule
std::pair< bool, std::string > grad
std::pair< bool, std::string > div
Teuchos::RCP< panzer::PureBasis > basis
std::pair< bool, std::string > residualName
std::pair< bool, std::string > curl