43#ifndef __Panzer_ResponseEvaluatorFactory_Functional_impl_hpp__
44#define __Panzer_ResponseEvaluatorFactory_Functional_impl_hpp__
48#include "PanzerDiscFE_config.hpp"
52#include "Panzer_Integrator_Scalar.hpp"
60template <
typename EvalT,
typename LO,
typename GO>
65 response->setRequiresDirichletAdjustment(applyDirichletToDerivative_);
70template <
typename EvalT,
typename LO,
typename GO>
75 const Teuchos::ParameterList & )
const
82 if(requiresCellIntegral_) {
83 std::string
field = (quadPointField_==
"" ? responseName : quadPointField_);
88 Teuchos::ParameterList pl;
89 pl.set(
"Integral Name",
field);
90 pl.set(
"Integrand Name",
field);
93 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
96 this->
template registerEvaluator<EvalT>(fm, eval);
102 Teuchos::RCP<FunctionalScatterBase> scatterObj;
103 if(linearObjFactory_!=Teuchos::null) {
105 TEUCHOS_ASSERT(linearObjFactory_->getDomainGlobalIndexer()!=Teuchos::null);
107 auto ugi = Teuchos::rcp_dynamic_cast<const GlobalIndexer>(linearObjFactory_->getDomainGlobalIndexer());
108 auto bugi = Teuchos::rcp_dynamic_cast<const BlockedDOFManager>(linearObjFactory_->getDomainGlobalIndexer());
110 if(ugi!=Teuchos::null) {
111 std::vector<Teuchos::RCP<const GlobalIndexer> > ugis;
116 else if(bugi!=Teuchos::null) {
120 TEUCHOS_ASSERT(
false);
124 std::string
field = (quadPointField_==
"" ? responseName : quadPointField_);
127 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
130 this->
template registerEvaluator<EvalT>(fm, eval);
133 fm.template requireField<EvalT>(*eval->evaluatedFields()[0]);
137template <
typename EvalT,
typename LO,
typename GO>
141 if( PHX::print<EvalT>()==PHX::print<panzer::Traits::Residual>() ||
142 PHX::print<EvalT>()==PHX::print<panzer::Traits::Tangent>()
146 if(PHX::print<EvalT>()==PHX::print<panzer::Traits::Jacobian>())
147 return linearObjFactory_!=Teuchos::null;
149#ifdef Panzer_BUILD_HESSIAN_SUPPORT
150 if(PHX::print<EvalT>()==PHX::print<panzer::Traits::Hessian>()) {
151 return linearObjFactory_!=Teuchos::null;
PHX::MDField< ScalarT, panzer::Cell, panzer::BASIS > field
A field to which we'll contribute, or in which we'll store, the result of computing this integral.
Object that contains information on the physics and discretization of a block of elements with the SA...
const panzer::CellData & cellData() const
virtual void buildAndRegisterEvaluators(const std::string &responseName, PHX::FieldManager< panzer::Traits > &fm, const panzer::PhysicsBlock &physicsBlock, const Teuchos::ParameterList &user_data) const
virtual Teuchos::RCP< ResponseBase > buildResponseObject(const std::string &responseName) const
virtual bool typeSupported() const
std::vector< Teuchos::RCP< const GlobalIndexer > > nc2c_vector(const std::vector< Teuchos::RCP< GlobalIndexer > > &ugis)