43 #ifndef PANZER_EQUATIONSET_DEFAULT_IMPL_IMPL_HPP 
   44 #define PANZER_EQUATIONSET_DEFAULT_IMPL_IMPL_HPP 
   51 #include "Panzer_GatherBasisCoordinates.hpp" 
   52 #include "Panzer_GatherIntegrationCoordinates.hpp" 
   53 #include "Panzer_GatherOrientation.hpp" 
   56 #include "Phalanx_MDField.hpp" 
   57 #include "Phalanx_DataLayout.hpp" 
   58 #include "Phalanx_DataLayout_MDALayout.hpp" 
   65 template <
typename EvalT>
 
   68                         const int& default_integration_order,
 
   71                         const bool build_transient_support) :
 
   73   m_input_params(params),
 
   74   m_default_integration_order(default_integration_order),
 
   75   m_cell_data(cell_data),
 
   76   m_build_transient_support(build_transient_support)
 
   84 template <
typename EvalT>
 
   89   m_type = m_input_params->get<std::string>(
"Type");
 
   96   this->m_provided_dofs.clear();
 
   97   this->m_int_rules.clear();
 
  100   for(
typename std::map<std::string,DOFDescriptor>::iterator itr=m_provided_dofs_desc.begin();
 
  101       itr!=m_provided_dofs_desc.end();++itr) {
 
  105     this->m_provided_dofs.push_back(std::make_pair(itr->first, itr->second.basis));
 
  116     m_int_rules[itr->second.intRule->order()] = itr->second.intRule;
 
  121   for (
DescriptorIterator dof_iter = m_provided_dofs_desc.begin(); dof_iter != m_provided_dofs_desc.end(); ++dof_iter) {
 
  123     std::string basis_name = dof_iter->second.basis->name();
 
  125     std::string dof_name = dof_iter->first;
 
  127     if (
is_null(m_basis_to_dofs[basis_name].first)) {
 
  128       m_basis_to_dofs[basis_name].first = basis;
 
  129       m_basis_to_dofs[basis_name].second = 
Teuchos::rcp(
new std::vector<std::string>);
 
  132     m_basis_to_dofs[basis_name].second->push_back(dof_name);
 
  136   for (
DescriptorIterator dof_iter = m_provided_dofs_desc.begin(); dof_iter != m_provided_dofs_desc.end(); ++dof_iter) {
 
  137     m_unique_bases[dof_iter->second.basis->name()] = dof_iter->second.basis;
 
  141   this->m_eval_plist->set(
"Block ID", getElementBlockId());
 
  142   this->setupDeprecatedDOFsSupport();
 
  146 template <
typename EvalT>
 
  158   this->m_eval_plist->set(
"Basis", basis);
 
  159   this->m_eval_plist->set(
"IR", int_rule);
 
  163 template <
typename EvalT>
 
  179   for (
BasisIterator basis_it = m_basis_to_dofs.begin(); basis_it != m_basis_to_dofs.end(); ++basis_it) {
 
  183     if (m_tangent_param_names.size() > 0) {
 
  184       tangent_field_names = 
rcp(
new std::vector< std::vector<std::string> >(basis_it->second.second->size()));
 
  185       for (std::size_t i=0; i<basis_it->second.second->size(); ++i) {
 
  186         for (std::size_t j=0; j<m_tangent_param_names.size(); ++j) {
 
  187           const std::string tname =
 
  188             (*(basis_it->second.second))[i] + 
" SENSITIVITY " + m_tangent_param_names[j];
 
  189           (*tangent_field_names)[i].push_back(tname);
 
  195       ParameterList p(
"Gather");
 
  196       p.set(
"Basis", basis_it->second.first);
 
  197       p.set(
"DOF Names", basis_it->second.second);
 
  198       p.set(
"Indexer Names", basis_it->second.second);
 
  199       p.set(
"Sensitivities Name", 
"");
 
  200       p.set(
"First Sensitivities Available", 
true);
 
  201       p.set(
"Second Sensitivities Available", 
true);
 
  204       if (tangent_field_names != Teuchos::null)
 
  205         p.set(
"Tangent Names", tangent_field_names);
 
  209       this->
template registerEvaluator<EvalT>(fm, op);
 
  214     if (tangent_field_names != Teuchos::null) {
 
  215       for (std::size_t i=0; i<m_tangent_param_names.size(); ++i) {
 
  218         for (std::size_t j=0; j<basis_it->second.second->size(); ++j)
 
  219           names->push_back((*tangent_field_names)[j][i]);
 
  221         ParameterList p(std::string(
"Gather Tangent ") + this->m_tangent_param_names[i]);
 
  222         p.set(
"Basis", basis_it->second.first);
 
  223         p.set(
"DOF Names", names);
 
  224         p.set(
"Indexer Names", basis_it->second.second);
 
  225         p.set(
"Sensitivities Name", 
"");
 
  226         p.set(
"First Sensitivities Available", 
false);
 
  227         p.set(
"Second Sensitivities Available", 
false);
 
  228         p.set(
"Global Data Key", 
"X TANGENT GATHER CONTAINER: " + this->m_tangent_param_names[i]);
 
  232         this->
template registerEvaluator<EvalT>(fm, op);
 
  243          basis != m_unique_bases.end(); ++ basis) {
 
  246       this->
template registerEvaluator<EvalT>(fm, basis_op);
 
  251          ir != m_int_rules.end(); ++ir)   {
 
  254       this->
template registerEvaluator<EvalT>(fm, quad_op);
 
  267   for (
BasisIterator basis_it = m_basis_to_dofs.begin(); basis_it != m_basis_to_dofs.end(); ++basis_it) {
 
  274     for (
typename std::vector<std::string>::const_iterator dof_name = basis_it->second.second->begin();
 
  275          dof_name != basis_it->second.second->end(); ++dof_name) {
 
  281       if(desc->second.timeDerivative.first) {
 
  283         t_dof_names->push_back(*dof_name);
 
  284         t_field_names->push_back(desc->second.timeDerivative.second);
 
  287         if (m_tangent_param_names.size() > 0) {
 
  288           std::vector<std::string> tfn;
 
  289           for (std::size_t j=0; j<m_tangent_param_names.size(); ++j) {
 
  290             const std::string tname =
 
  291               desc->second.timeDerivative.second + 
" SENSITIVITY " + m_tangent_param_names[j];
 
  292             tfn.push_back(tname);
 
  294           tangent_field_names->push_back(tfn);
 
  300       ParameterList p(
"Gather");
 
  301       p.set(
"Basis", basis_it->second.first);
 
  302       p.set(
"DOF Names", t_field_names);
 
  303       p.set(
"Indexer Names", t_dof_names);
 
  304       p.set(
"Use Time Derivative Solution Vector", 
true);
 
  307       if (m_tangent_param_names.size() > 0)
 
  308         p.set(
"Tangent Names", tangent_field_names);
 
  312       this->
template registerEvaluator<EvalT>(fm, op);
 
  317     if (m_tangent_param_names.size() > 0) {
 
  318       for (std::size_t i=0; i<m_tangent_param_names.size(); ++i) {
 
  321           rcp(
new std::vector<std::string>);
 
  322         for (std::size_t j=0; j<tangent_field_names->size(); ++j)
 
  323           names->push_back((*tangent_field_names)[j][i]);
 
  325         ParameterList p(std::string(
"Gather Tangent ") + this->m_tangent_param_names[i]);
 
  326         p.set(
"Basis", basis_it->second.first);
 
  327         p.set(
"DOF Names", names);
 
  328         p.set(
"Indexer Names", t_dof_names);
 
  329         p.set(
"Use Time Derivative Solution Vector", 
true);
 
  330         p.set(
"Global Data Key", 
"DXDT TANGENT GATHER CONTAINER: " + this->m_tangent_param_names[i]);
 
  334         this->
template registerEvaluator<EvalT>(fm, op);
 
  343   for (
BasisIterator basis_it = m_basis_to_dofs.begin(); basis_it != m_basis_to_dofs.end(); ++basis_it) {
 
  344     if(basis_it->second.first->requiresOrientations())  {
 
  345       ParameterList p(
"Gather Orientation");
 
  346       p.set(
"Basis", basis_it->second.first);
 
  347       p.set(
"DOF Names", basis_it->second.second);
 
  348       p.set(
"Indexer Names", basis_it->second.second);
 
  352       this->
template registerEvaluator<EvalT>(fm, op);
 
  359 template <
typename EvalT>
 
  372   if(lof!=Teuchos::null) 
 
  373     globalIndexer = lof->getRangeGlobalIndexer();
 
  376   for (
DescriptorIterator dof_iter = m_provided_dofs_desc.begin(); dof_iter != m_provided_dofs_desc.end(); ++dof_iter) {
 
  379     p.set(
"Name", dof_iter->first);
 
  383     if(globalIndexer!=Teuchos::null) {
 
  385       int fieldNum = globalIndexer->
getFieldNum(dof_iter->first);
 
  388       p.set(
"Jacobian Offsets Vector", offsets);
 
  395     this->
template registerEvaluator<EvalT>(fm, op);
 
  400   for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=m_provided_dofs_desc.begin();
 
  401       itr!=m_provided_dofs_desc.end();++itr) {
 
  403     if(itr->second.basis->supportsGrad()) {
 
  406       if(!itr->second.grad.first) 
 
  409       const std::string dof_name =      itr->first;
 
  410       const std::string dof_grad_name = itr->second.grad.second;
 
  413       p.set(
"Name", dof_name);
 
  414       p.set(
"Gradient Name", dof_grad_name);
 
  421       this->
template registerEvaluator<EvalT>(fm, op);
 
  427   for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=m_provided_dofs_desc.begin();
 
  428       itr!=m_provided_dofs_desc.end();++itr) {
 
  430     if(itr->second.basis->supportsCurl()) {
 
  433       if(!itr->second.curl.first) 
 
  436       const std::string dof_name =      itr->first;
 
  437       const std::string dof_curl_name = itr->second.curl.second;
 
  440       p.set(
"Name", dof_name);
 
  441       p.set(
"Curl Name", dof_curl_name);
 
  446       if(globalIndexer!=Teuchos::null) {
 
  448         int fieldNum = globalIndexer->
getFieldNum(dof_name);
 
  451         p.set(
"Jacobian Offsets Vector", offsets);
 
  459       this->
template registerEvaluator<EvalT>(fm, op);
 
  466   for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=m_provided_dofs_desc.begin();
 
  467       itr!=m_provided_dofs_desc.end();++itr) {
 
  469     if(itr->second.basis->supportsDiv()) {
 
  472       if(!itr->second.div.first) 
 
  475       const std::string dof_name =      itr->first;
 
  476       const std::string dof_div_name = itr->second.div.second;
 
  479       p.set(
"Name", dof_name);
 
  480       p.set(
"Div Name", dof_div_name);
 
  485       if(globalIndexer!=Teuchos::null) {
 
  487         int fieldNum = globalIndexer->
getFieldNum(dof_name);
 
  490         p.set(
"Jacobian Offsets Vector", offsets);
 
  498       this->
template registerEvaluator<EvalT>(fm, op);
 
  503   for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=m_provided_dofs_desc.begin();
 
  504       itr!=m_provided_dofs_desc.end();++itr) {
 
  506     if(!itr->second.timeDerivative.first) 
 
  509     const std::string td_name = itr->second.timeDerivative.second;
 
  512     p.set(
"Name", td_name);
 
  516     if(globalIndexer!=Teuchos::null) {
 
  518       int fieldNum = globalIndexer->
getFieldNum(itr->first);
 
  521       p.set(
"Jacobian Offsets Vector", offsets);
 
  527     if(itr->second.basis->requiresOrientations())
 
  528       p.set(
"Orientation Field Name", itr->first+
" Orientation");
 
  533     this->
template registerEvaluator<EvalT>(fm, op);
 
  539 template <
typename EvalT>
 
  552   bool ignoreScatter = 
false;
 
  554     ignoreScatter = user_data.
get<
bool>(
"Ignore Scatter");
 
  558     for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=m_provided_dofs_desc.begin();
 
  559         itr!=m_provided_dofs_desc.end();++itr) {
 
  567       names_map->insert(std::make_pair(itr->second.residualName.second,itr->first));
 
  568       residual_names->push_back(itr->second.residualName.second);
 
  571         ParameterList p(
"Scatter");
 
  572         p.set(
"Scatter Name", itr->second.scatterName);
 
  573         p.set(
"Basis", itr->second.basis.getConst());
 
  574         p.set(
"Dependent Names", residual_names);
 
  575         p.set(
"Dependent Map", names_map);
 
  579         this->
template registerEvaluator<EvalT>(fm, op);
 
  584         PHX::Tag<typename EvalT::ScalarT> tag(itr->second.scatterName, 
 
  586         fm.template requireField<EvalT>(tag);
 
  597 template <
typename EvalT>
 
  606   for (std::vector<std::string>::const_iterator model_name = m_closure_model_ids.begin();
 
  607        model_name != m_closure_model_ids.end(); ++model_name) {
 
  609     this->buildAndRegisterClosureModelEvaluators(fm,fl,ir,factory,*model_name,models,user_data);
 
  615 template <
typename EvalT>
 
  621                                        const std::string& model_name,
 
  626     factory.getAsObject<EvalT>()->buildClosureModels(model_name,
 
  630                                                      *(this->m_eval_plist),
 
  632                                                      this->getGlobalData(),
 
  635   for (std::vector< 
Teuchos::RCP<PHX::Evaluator<panzer::Traits> > >::size_type i=0; i < evaluators->size(); ++i)
 
  636     this->
template registerEvaluator<EvalT>(fm, (*evaluators)[i]);
 
  640 template <
typename EvalT>
 
  645                                            const std::string& model_name,
 
  652        basis != m_unique_bases.end(); ++ basis) {
 
  655     this->
template registerEvaluator<EvalT>(fm, basis_op);
 
  658   for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=m_provided_dofs_desc.begin();
 
  659       itr!=m_provided_dofs_desc.end();++itr) {
 
  662     p.
set(
"Scatter Name", itr->second.scatterName);
 
  663     p.
set(
"Basis", itr->second.basis.getConst());
 
  665     name->push_back(itr->first);
 
  666     p.
set(
"Dependent Names", name);
 
  670     names_map->insert(std::make_pair(itr->first,itr->first));
 
  671     p.
set(
"Dependent Map", names_map);
 
  674     p.
set(
"Scatter Initial Condition", 
true);
 
  679     this->
template registerEvaluator<EvalT>(fm, op);
 
  683     PHX::Tag<typename EvalT::ScalarT> tag(itr->second.scatterName,
Teuchos::rcp(
new PHX::MDALayout<Dummy>(0)));
 
  684     fm.template requireField<EvalT>(tag);
 
  698     if (m_int_rules.size() > 0)
 
  699       dummy_ir = m_int_rules.begin()->second;
 
  703       factory.getAsObject<EvalT>()->buildClosureModels(model_name, models, *fll, dummy_ir, *(this->m_eval_plist), user_data, this->getGlobalData(), fm);
 
  705     for (std::vector< 
Teuchos::RCP<PHX::Evaluator<panzer::Traits> > >::size_type i=0; i < evaluators->size(); ++i)
 
  706       this->
template registerEvaluator<EvalT>(fm, (*evaluators)[i]);
 
  713   for (
BasisIterator basis_it = m_basis_to_dofs.begin(); basis_it != m_basis_to_dofs.end(); ++basis_it) {
 
  714     if(basis_it->second.first->requiresOrientations())  {
 
  716       p.
set(
"Basis", basis_it->second.first);
 
  717       p.
set(
"DOF Names", basis_it->second.second);
 
  718       p.
set(
"Indexer Names", basis_it->second.second);
 
  722       this->
template registerEvaluator<EvalT>(fm, op);
 
  729 template <
typename EvalT>
 
  737 template <
typename EvalT>
 
  738 const std::vector<std::pair<std::string,Teuchos::RCP<panzer::PureBasis> > >&
 
  741   return m_provided_dofs;
 
  745 template <
typename EvalT>
 
  746 const std::vector<std::vector<std::string> > &
 
  749   return m_coordinate_dofs;
 
  753 template <
typename EvalT>
 
  754 const std::map<int,Teuchos::RCP<panzer::IntegrationRule> > &
 
  761 template <
typename EvalT>
 
  766    m_block_id = blockId;
 
  767    this->m_eval_plist->set(
"Block ID", getElementBlockId());  
 
  772 template <
typename EvalT>
 
  780 template <
typename EvalT>
 
  787 template <
typename EvalT>
 
  790   m_tangent_param_names = tangent_param_names;
 
  794 template <
typename EvalT>
 
  797   return m_build_transient_support;
 
  801 template <
typename EvalT>
 
  806   for(
typename std::map<std::string,DOFDescriptor>::const_iterator itr=m_provided_dofs_desc.begin();
 
  807       itr!=m_provided_dofs_desc.end();++itr)
 
  808     dofNames.push_back(itr->first);
 
  812 template <
typename EvalT>
 
  816           int integrationOrder)
 
  818   typename std::map<std::string,DOFDescriptor>::const_iterator itr = m_provided_dofs_desc.find(dofName);
 
  821                              "EquationSet_DefaultImpl::updateDOF: DOF \"" << dofName << 
"\" has not been specified " 
  822                              "by derived equation set \"" << this->getType() << 
"\".");
 
  829   if (integrationOrder == -1)
 
  830     desc.integrationOrder = m_default_integration_order;
 
  832     desc.integrationOrder = integrationOrder;
 
  838 template <
typename EvalT>
 
  842   typename std::map<std::string,DOFDescriptor>::const_iterator itr = m_provided_dofs_desc.find(dofName);
 
  845                              "EquationSet_DefaultImpl::getBasisOrder: DOF \"" << dofName << 
"\" has not been specified " 
  846                              "by derived equation set \"" << this->getType() << 
"\".");
 
  848   return itr->second.basisOrder;
 
  852 template <
typename EvalT>
 
  856   typename std::map<std::string,DOFDescriptor>::const_iterator itr = m_provided_dofs_desc.find(dofName);
 
  859                              "EquationSet_DefaultImpl::getIntegrationOrder: DOF \"" << dofName << 
"\" has not been specified " 
  860                              "by derived equation set \"" << this->getType() << 
"\".");
 
  862   return itr->second.integrationOrder;
 
  866 template <
typename EvalT>
 
  869        const std::string & basisType,
 
  870        const int & basisOrder,
 
  871        const int integrationOrder,
 
  872        const std::string residualName,
 
  873        const std::string scatterName)
 
  875   typename std::map<std::string,DOFDescriptor>::const_iterator itr = m_provided_dofs_desc.find(dofName);
 
  878                              "EquationSet_DefaultImpl::addProvidedDOF: DOF \"" << dofName << 
"\" was previously specified " 
  879                              "by derived equation set \"" << this->getType() << 
"\".");
 
  884   desc.basisType = basisType;
 
  885   desc.basisOrder = basisOrder;
 
  888   if (integrationOrder == -1)
 
  889     desc.integrationOrder = m_default_integration_order;
 
  891     desc.integrationOrder = integrationOrder;
 
  896   desc.residualName.first = 
true;
 
  898   if (residualName == 
"")
 
  899     desc.residualName.second = 
"RESIDUAL_" + dofName;
 
  901     desc.residualName.second = residualName;
 
  903   if (scatterName == 
"")
 
  904     desc.scatterName = 
"SCATTER_" + dofName;
 
  906     desc.scatterName = scatterName;
 
  911 template <
typename EvalT>
 
  914            const std::string & gradName)
 
  916   typename std::map<std::string,DOFDescriptor>::iterator itr = m_provided_dofs_desc.find(dofName);
 
  919                              "EquationSet_DefaultImpl::addDOFGrad: DOF \"" << dofName << 
"\" has not been specified as a DOF " 
  920                              "by derived equation set \"" << this->getType() << 
"\".");
 
  927     desc.grad = std::make_pair(
true,std::string(
"GRAD_")+dofName);
 
  929     desc.grad = std::make_pair(
true,gradName);
 
  933 template <
typename EvalT>
 
  936            const std::string & curlName)
 
  938   typename std::map<std::string,DOFDescriptor>::iterator itr = m_provided_dofs_desc.find(dofName);
 
  941                              "EquationSet_DefaultImpl::addDOFCurl: DOF \"" << dofName << 
"\" has not been specified as a DOF " 
  942                              "by derived equation set \"" << this->getType() << 
"\".");
 
  949     desc.curl = std::make_pair(
true,std::string(
"CURL_")+dofName);
 
  951     desc.curl = std::make_pair(
true,curlName);
 
  955 template <
typename EvalT>
 
  958           const std::string & divName)
 
  960   typename std::map<std::string,DOFDescriptor>::iterator itr = m_provided_dofs_desc.find(dofName);
 
  963                              "EquationSet_DefaultImpl::addDOFDiv: DOF \"" << dofName << 
"\" has not been specified as a DOF " 
  964                              "by derived equation set \"" << this->getType() << 
"\".");
 
  971     desc.div = std::make_pair(
true,std::string(
"DIV_")+dofName);
 
  973     desc.div = std::make_pair(
true,divName);
 
  977 template <
typename EvalT>
 
  980                               const std::string & dotName)
 
  982   typename std::map<std::string,DOFDescriptor>::iterator itr = m_provided_dofs_desc.find(dofName);
 
  985                              "EquationSet_DefaultImpl::addDOFTimeDerivative: DOF \"" << dofName << 
"\" has not been specified as a DOF " 
  986                              "by derived equation set \"" << this->getType() << 
"\".");
 
  993     desc.timeDerivative = std::make_pair(
true,std::string(
"DXDT_")+dofName);
 
  995     desc.timeDerivative = std::make_pair(
true,dotName);
 
  999 template <
typename EvalT>
 
 1004                              "EquationSet_DefaultImpl::setCoordinateDOFs: Size of vector is not equal to the " 
 1005                              "spatial dimension.");
 
 1007   for(std::size_t d=0;d<dofNames.size();d++) {
 
 1008     typename std::map<std::string,DOFDescriptor>::const_iterator desc_it = m_provided_dofs_desc.find(dofNames[d]);
 
 1010                              "EquationSet_DefaultImpl::setCoordinateDOFs: DOF of name \"" + dofNames[d] + 
"\" " 
 1011                              "has not been added, thus cannot be set as a coordinate DOF.");
 
 1014   m_coordinate_dofs.push_back(dofNames);
 
 1018 template <
typename EvalT>
 
 1022   std::string default_type = 
"";
 
 1023   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.");
 
 1027 template <
typename EvalT>
 
 1031   typename std::map<std::string,DOFDescriptor>::const_iterator desc_it = m_provided_dofs_desc.find(dof_name);
 
 1033   return desc_it->second.basis;
 
 1037 template <
typename EvalT>
 
 1041   typename std::map<std::string,DOFDescriptor>::const_iterator desc_it = m_provided_dofs_desc.find(dof_name);
 
 1043                              "EquationSet_DefaultImpl::getIntRuleForDOF: Failed to find degree of freedom " 
 1044                              "with name \"" << dof_name << 
"\".");
 
 1045   return desc_it->second.intRule;
 
 1049 template <
typename EvalT>
 
 1053   typename std::map<std::string,DOFDescriptor>::const_iterator desc_it = m_provided_dofs_desc.find(dof_name);
 
 1055                              "EquationSet_DefaultImpl::getBasisIRLayoutForDOF: Failed to find degree of freedom " 
 1056                              "with name \"" << dof_name << 
"\".");
 
 1062 template <
typename EvalT>
 
 1065                                            const std::string dof_name,
 
 1066                                            const std::vector<std::string>& residual_contributions,
 
 1067                                            const std::string residual_field_name)
 const 
 1074   if (residual_field_name != 
"")
 
 1075     p.
set(
"Sum Name", residual_field_name);
 
 1077     p.
set(
"Sum Name", 
"RESIDUAL_" + dof_name);
 
 1080   *rcp_residual_contributions = residual_contributions;
 
 1082   p.
set(
"Values Names", rcp_residual_contributions);
 
 1087   p.
set(
"Data Layout", desc_it->second.basis->functional);
 
 1091   this->
template registerEvaluator<EvalT>(fm, op);
 
 1095 template <
typename EvalT>
 
 1098                                            const std::string dof_name,
 
 1099                                            const std::vector<std::string>& residual_contributions,
 
 1100                                            const std::vector<double>& scale_contributions,
 
 1101                                            const std::string residual_field_name)
 const 
 1108   if (residual_field_name != 
"")
 
 1109     p.
set(
"Sum Name", residual_field_name);
 
 1111     p.
set(
"Sum Name", 
"RESIDUAL_" + dof_name);
 
 1114   *rcp_residual_contributions = residual_contributions;
 
 1115   p.
set(
"Values Names", rcp_residual_contributions);
 
 1118   p.
set(
"Scalars", rcp_scale_contributions);
 
 1123   p.
set(
"Data Layout", desc_it->second.basis->functional);
 
 1127   this->
template registerEvaluator<EvalT>(fm, op);
 
 1131 template <
typename EvalT>
 
 1134   m_closure_model_ids.push_back(closure_model);
 
 1138 template <
typename EvalT>
 
 1142   return m_input_params;
 
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< panzer::BasisIRLayout > lookupLayout(const std::string &fieldName) const 
Get the basis associated with a particular field. 
 
Teuchos::RCP< panzer::IntegrationRule > getIntRuleForDOF(const std::string &dof_name) const 
Returns the integration rule associated with the residual contributions for the dof_name. 
 
std::map< std::string, DOFDescriptor >::const_iterator DescriptorIterator
For convenience, declare the DOFDescriptor iterator. 
 
void setupDeprecatedDOFsSupport()
 
Interpolates basis DOF values to IP DOF Gradient values. 
 
virtual std::string getElementBlockId() const 
 
void addDOFGrad(const std::string &dofName, const std::string &gradName="")
 
bool is_null(const boost::shared_ptr< T > &p)
 
virtual void setTangentParamNames(const std::vector< std::string > &tangent_param_names)
Set the list of tangent parameter names. 
 
virtual std::string getType() const 
Returns the type of the equation set object. Corresponds to the keyword used by the equation set fact...
 
int getIntegrationOrder(const std::string &dofName) const 
Get the integration order for an existing degree of freedom. 
 
Default implementation for accessing the GlobalData object. 
 
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...
 
T & get(const std::string &name, T def_value)
 
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
 
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
 
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 
 
Teuchos::RCP< Teuchos::ParameterList > m_eval_plist
 
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 
 
int getBasisOrder(const std::string &dofName) const 
Get the basis order for an existing degree of freedom. 
 
Teuchos::RCP< PHX::Evaluator< Traits > > buildGatherTangent(const Teuchos::ParameterList &pl) const 
Use preconstructed gather evaluators. 
 
Teuchos::RCP< panzer::PureBasis > getBasisForDOF(const std::string &dof_name) const 
Returns the PureBasis associated with the residual contributions for the dof_name. 
 
Interpolates basis DOF values to IP DOF Div values. 
 
void setDefaultValidParameters(Teuchos::ParameterList &valid_parameters)
 
Teuchos::RCP< Teuchos::ParameterList > getEquationSetParameterList() const 
Returns the parameter list used to build this equation set. 
 
Teuchos::RCP< panzer::BasisIRLayout > basisIRLayout(std::string basis_type, const int basis_order, const PointRule &pt_rule)
Nonmember constructor. 
 
bool isParameter(const std::string &name) const 
 
void setCoordinateDOFs(const std::vector< std::string > &dofNames)
 
Teuchos::RCP< PHX::Evaluator< Traits > > buildScatterDirichlet(const Teuchos::ParameterList &pl) const 
Use preconstructed dirichlet scatter evaluators. 
 
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
 
Data for determining cell topology and dimensionality. 
 
void addDOFDiv(const std::string &dofName, const std::string &divName="")
 
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...
 
Gathers coordinates for the quadrature from the workset and stores them in the field manager...
 
virtual void setupDOFs()
Builds the integration rule, basis, DOFs, and default parameter list. This MUST be called in the cons...
 
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. 
 
Interpolates basis DOF values to IP DOF Curl values. 
 
virtual int getFieldNum(const std::string &str) const =0
Get the number used for access to this field. 
 
Teuchos::RCP< PHX::Evaluator< Traits > > buildGather(const Teuchos::ParameterList &pl) const 
Use preconstructed gather evaluators. 
 
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="")
 
void updateDOF(const std::string &dofName, int basisOrder, int integrationOrder=-1)
Modifying an existing DOF's basis function and integration rule. 
 
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...
 
Teuchos::RCP< panzer::BasisIRLayout > getBasisIRLayoutForDOF(const std::string &dof_name) const 
Returns the BasisIRLayout for the dof_name. 
 
virtual void buildAndRegisterGatherAndOrientationEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::FieldLibrary &fl, const LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const 
 
bool nonnull(const boost::shared_ptr< T > &p)
 
Teuchos::RCP< const FieldLayoutLibrary > buildFieldLayoutLibrary(panzer::PointRule &ir) const 
 
Teuchos::RCP< PHX::Evaluator< Traits > > buildGatherOrientation(const Teuchos::ParameterList &pl) const 
Use preconstructed gather evaluators. 
 
const Teuchos::RCP< Teuchos::ParameterList > m_input_params
 
virtual const std::vector< int > & getGIDFieldOffsets(const std::string &blockId, int fieldNum) const =0
Use the field pattern so that you can find a particular field in the GIDs array. 
 
void getAddedDOFs(std::vector< std::string > &dofNames) const 
 
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) ...
 
Interpolates basis DOF values to IP DOF values. 
 
virtual const std::vector< std::vector< std::string > > & getCoordinateDOFs() const 
Return a vector of vectors that correspond to DOFs set as coordinate fields. 
 
void addDOFTimeDerivative(const std::string &dofName, const std::string &dotName="")
 
Teuchos::RCP< PHX::Evaluator< Traits > > buildScatter(const Teuchos::ParameterList &pl) const 
Use preconstructed scatter evaluators. 
 
bool buildTransientSupport() const 
Returns true if transient support should be enabled in the equation set. 
 
virtual void buildAndRegisterScatterEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::FieldLibrary &fl, const LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const 
 
Description and data layouts associated with a particular basis. 
 
#define TEUCHOS_ASSERT(assertion_test)
 
void addDOFCurl(const std::string &dofName, const std::string &curlName="")
 
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)
 
virtual void setElementBlockId(const std::string &blockId)
 
Gathers coordinates for the basis function from the workset and stores them in the field manager...
 
Kokkos::View< const int *, PHX::Device > offsets
 
void addClosureModel(const std::string &closure_model)