//********************************************************************** PHX_EVALUATOR_CTOR(DirichletResidual_EdgeBasis,p) { std::string residual_name = p.get<std::string>("Residual Name"); basis = p.get<Teuchos::RCP<const panzer::PureBasis> >("Basis"); pointRule = p.get<Teuchos::RCP<const panzer::PointRule> >("Point Rule"); std::string field_name = p.get<std::string>("DOF Name"); std::string dof_name = field_name+"_"+pointRule->getName(); std::string value_name = p.get<std::string>("Value Name"); Teuchos::RCP<PHX::DataLayout> basis_layout = basis->functional; Teuchos::RCP<PHX::DataLayout> vector_layout_dof = pointRule->dl_vector; Teuchos::RCP<PHX::DataLayout> vector_layout_vector = basis->functional_grad; // some sanity checks TEUCHOS_ASSERT(basis->isVectorBasis()); TEUCHOS_ASSERT(basis_layout->dimension(0)==vector_layout_dof->dimension(0)); TEUCHOS_ASSERT(basis_layout->dimension(1)==vector_layout_dof->dimension(1)); TEUCHOS_ASSERT(basis->dimension()==vector_layout_dof->dimension(2)); TEUCHOS_ASSERT(vector_layout_vector->dimension(0)==vector_layout_dof->dimension(0)); TEUCHOS_ASSERT(vector_layout_vector->dimension(1)==vector_layout_dof->dimension(1)); TEUCHOS_ASSERT(vector_layout_vector->dimension(2)==vector_layout_dof->dimension(2)); residual = PHX::MDField<ScalarT,Cell,BASIS>(residual_name, basis_layout); dof = PHX::MDField<ScalarT,Cell,Point,Dim>(dof_name, vector_layout_dof); value = PHX::MDField<ScalarT,Cell,Point,Dim>(value_name, vector_layout_vector); // setup the orientation field std::string orientationFieldName = basis->name() + " Orientation"; // std::string orientationFieldName = field_name+" Orientation"; // if(p.isType<std::string>("Orientation Field Name")) // orientationFieldName = p.get<std::string>("Orientation Field Name"); dof_orientation = PHX::MDField<ScalarT,Cell,BASIS>(orientationFieldName, basis_layout); // setup all basis fields that are required panzer::MDFieldArrayFactory af_pv(pointRule->getName()+"_"); // setup all fields to be evaluated and constructed pointValues.setupArrays(pointRule,af_pv); // the field manager will allocate all of these field this->addDependentField(pointValues.jac); this->addEvaluatedField(residual); this->addDependentField(dof); this->addDependentField(dof_orientation); this->addDependentField(value); this->addDependentField(pointValues.jac); std::string n = "Dirichlet Residual Edge Basis Evaluator"; this->setName(n); }
panzer::GatherTangents<EvalT, Traits>:: GatherTangents( const Teuchos::ParameterList& p) { dof_name = (p.get< std::string >("DOF Name")); if(p.isType< Teuchos::RCP<PureBasis> >("Basis")) basis = p.get< Teuchos::RCP<PureBasis> >("Basis"); else basis = p.get< Teuchos::RCP<const PureBasis> >("Basis"); pointRule = p.get<Teuchos::RCP<const PointRule> >("Point Rule"); Teuchos::RCP<PHX::DataLayout> basis_layout = basis->functional; Teuchos::RCP<PHX::DataLayout> vector_layout_vector = basis->functional_grad; // some sanity checks TEUCHOS_ASSERT(basis->isVectorBasis()); // setup the orientation field std::string orientationFieldName = basis->name() + " Orientation"; dof_orientation = PHX::MDField<ScalarT,Cell,NODE>(orientationFieldName, basis_layout); // setup all basis fields that are required MDFieldArrayFactory af_pv(pointRule->getName()+"_"); // setup all fields to be evaluated and constructed pointValues.setupArrays(pointRule,af_pv); // the field manager will allocate all of these field this->addDependentField(dof_orientation); this->addDependentField(pointValues.jac); gatherFieldTangents = PHX::MDField<ScalarT,Cell,NODE,Dim>(dof_name+"_Tangents",vector_layout_vector); this->addEvaluatedField(gatherFieldTangents); this->setName("Gather Tangents"); }