43 #include "PanzerDiscFE_config.hpp" 55 #include "Epetra_CrsMatrix.h" 56 #include "Epetra_MpiComm.h" 57 #include "Epetra_LocalMap.h" 59 #include "Teuchos_ScalarTraits.hpp" 60 #include "Teuchos_DefaultMpiComm.hpp" 61 #include "Teuchos_TimeMonitor.hpp" 63 #include "Thyra_EpetraOperatorWrapper.hpp" 64 #include "Thyra_EpetraThyraWrappers.hpp" 65 #include "Thyra_VectorStdOps.hpp" 66 #include "Thyra_ProductVectorBase.hpp" 67 #include "Thyra_SpmdVectorBase.hpp" 68 #include "Thyra_DefaultProductVector.hpp" 69 #include "Thyra_ProductVectorSpaceBase.hpp" 76 class EpetraLOF_EOpFactory :
public Teuchos::AbstractFactory<Epetra_Operator> {
77 Teuchos::RCP<Epetra_CrsGraph> W_graph_;
80 : W_graph_(lof.getGraph(0,0)) {}
82 virtual Teuchos::RCP<Epetra_Operator> create()
const 93 const std::vector<Teuchos::RCP<Teuchos::Array<std::string> > >& p_names,
94 const std::vector<Teuchos::RCP<Teuchos::Array<double> > >& p_values,
95 const Teuchos::RCP<panzer::GlobalData>& global_data,
96 bool build_transient_support)
99 , responseLibrary_(rLibrary)
101 , global_data_(global_data)
102 , build_transient_support_(build_transient_support)
104 , oneTimeDirichletBeta_on_(false)
105 , oneTimeDirichletBeta_(0.0)
108 using Teuchos::rcp_dynamic_cast;
111 ae_tm_.buildObjects(builder);
118 Teuchos::RCP<panzer::BlockedEpetraLinearObjFactory<panzer::Traits,int> > ep_lof =
122 if(ep_lof!=Teuchos::null)
125 TEUCHOS_ASSERT(
false);
133 const std::vector<Teuchos::RCP<Teuchos::Array<std::string> > >& p_names,
134 const std::vector<Teuchos::RCP<Teuchos::Array<double> > >& p_values,
135 const Teuchos::RCP<panzer::GlobalData>& global_data,
136 bool build_transient_support)
139 , responseLibrary_(rLibrary)
141 , global_data_(global_data)
142 , build_transient_support_(build_transient_support)
144 , oneTimeDirichletBeta_on_(false)
145 , oneTimeDirichletBeta_(0.0)
148 using Teuchos::rcp_dynamic_cast;
151 ae_tm_.buildObjects(builder);
164 using Teuchos::rcp_dynamic_cast;
166 TEUCHOS_TEST_FOR_EXCEPTION(responseLibrary_==Teuchos::null,std::logic_error,
167 "panzer::ModelEvaluator_Epetra::initializeEpetraObjs: The response library " 168 "was not correctly initialized before calling initializeEpetraObjs.");
173 x_dot_init_->PutScalar(0.0);
176 for (
int i=0; i < parameter_vector_.size(); i++) {
177 RCP<Epetra_Map> local_map = rcp(
new Epetra_LocalMap(static_cast<int>(parameter_vector_[i].size()), 0, map_x_->Comm())) ;
178 p_map_.push_back(local_map);
180 RCP<Epetra_Vector> ep_vec = rcp(
new Epetra_Vector(*local_map));
181 ep_vec->PutScalar(0.0);
183 for (
unsigned int j=0; j < parameter_vector_[i].size(); j++)
184 (*ep_vec)[j] = parameter_vector_[i][j].baseValue;
186 p_init_.push_back(ep_vec);
190 epetraOperatorFactory_ = Teuchos::rcp(
new EpetraLOF_EOpFactory(lof));
195 const std::vector<Teuchos::RCP<Teuchos::Array<double> > >& p_values,
196 const Teuchos::RCP<panzer::ParamLib>& parameter_library)
198 parameter_vector_.resize(p_names.size());
199 is_distributed_parameter_.resize(p_names.size(),
false);
200 for (std::vector<Teuchos::RCP<Teuchos::Array<std::string> > >::size_type p = 0;
201 p < p_names.size(); ++p) {
204 for(
int i=0;i<p_names[p]->size();i++)
209 for(
int i=0;i<p_names[p]->size();i++) {
210 parameter_vector_[p][i].baseValue = (*p_values[p])[i];
211 parameter_vector_[p][i].family->setRealValueForAllTypes((*p_values[p])[i]);
220 const Teuchos::RCP<Epetra_Map>& global_map,
221 const Teuchos::RCP<Epetra_Import>& importer,
222 const Teuchos::RCP<Epetra_Vector>& ghosted_vector)
225 int index =
static_cast<int>(p_map_.size());
227 p_map_.push_back(global_map);
228 Teuchos::RCP<Epetra_Vector> ep_vec = Teuchos::rcp(
new Epetra_Vector(*global_map));
229 ep_vec->PutScalar(0.0);
230 p_init_.push_back(ep_vec);
232 Teuchos::RCP<Teuchos::Array<std::string> > tmp_names =
233 Teuchos::rcp(
new Teuchos::Array<std::string>);
234 tmp_names->push_back(name);
235 p_names_.push_back(tmp_names);
237 is_distributed_parameter_.push_back(
true);
244 distributed_parameter_container_.push_back(std::make_tuple(name,index,importer,ghosted_vector));
251 Teuchos::RCP<const Epetra_Map>
257 Teuchos::RCP<const Epetra_Map>
263 Teuchos::RCP<const Epetra_Vector>
269 Teuchos::RCP<const Epetra_Vector>
281 Teuchos::RCP<Epetra_Operator>
284 return epetraOperatorFactory_->create();
287 Teuchos::RCP<const Epetra_Map>
293 Teuchos::RCP<const Teuchos::Array<std::string> >
299 Teuchos::RCP<const Epetra_Vector>
305 Teuchos::RCP<const Epetra_Map>
315 inArgs.setModelEvalDescription(this->description());
316 inArgs.setSupports(IN_ARG_x,
true);
317 if (build_transient_support_) {
318 inArgs.setSupports(IN_ARG_x_dot,
true);
319 inArgs.setSupports(IN_ARG_t,
true);
320 inArgs.setSupports(IN_ARG_alpha,
true);
321 inArgs.setSupports(IN_ARG_beta,
true);
323 inArgs.set_Np(p_init_.size());
333 outArgs.
set_Np_Ng(p_init_.size(), g_map_.size());
337 DerivativeProperties(
338 DERIV_LINEARITY_NONCONST
345 for(std::size_t i=0;i<p_init_.size();i++) {
346 if(!is_distributed_parameter_[i])
351 for(std::size_t i=0;i<g_names_.size();i++) {
355 Teuchos::RCP<panzer::ResponseBase> respJacBase = responseLibrary_->getResponse<RespEvalT>(g_names_[i]);
356 if(respJacBase!=Teuchos::null) {
361 if(resp->supportsDerivative())
362 outArgs.
setSupports(OUT_ARG_DgDx,i,DerivativeSupport(DERIV_TRANS_MV_BY_ROW));
375 using Teuchos::ArrayRCP;
376 using Teuchos::Array;
378 using Teuchos::rcp_dynamic_cast;
381 if(Teuchos::is_null(ghostedContainer_)) {
382 ghostedContainer_ = lof_->buildGhostedLinearObjContainer();
388 ae_inargs.
container_ = lof_->buildLinearObjContainer();
390 ae_inargs.
alpha = 0.0;
391 ae_inargs.
beta = 1.0;
398 const RCP<panzer::ThyraObjContainer<double> > thGlobalContainer =
401 TEUCHOS_ASSERT(!Teuchos::is_null(thGlobalContainer));
406 const RCP<panzer::ThyraObjContainer<double> > thGhostedContainer =
408 TEUCHOS_ASSERT(!Teuchos::is_null(thGhostedContainer));
409 Thyra::assign(thGhostedContainer->get_f_th().ptr(),0.0);
418 thGlobalContainer->set_x_th(x);
421 RCP<panzer::LinearObjContainer> counter = ae_tm_.getAsObject<
panzer::Traits::Residual>()->evaluateOnlyDirichletBCs(ae_inargs);
424 RCP<panzer::LinearObjContainer>
result = lof_->buildLinearObjContainer();
433 lof_->applyDirichletBCs(*counter,*
result);
440 using Teuchos::rcp_dynamic_cast;
442 evalModel_basic(inArgs,outArgs);
449 using Teuchos::rcp_dynamic_cast;
454 bool has_x_dot =
false;
456 has_x_dot = nonnull(inArgs.get_x_dot());
459 TEUCHOS_TEST_FOR_EXCEPTION(has_x_dot && !build_transient_support_, std::runtime_error,
460 "ModelEvaluator was not built with transient support enabled!");
465 const RCP<Epetra_Vector> f_out = outArgs.
get_f();
466 const RCP<Epetra_Operator> W_out = outArgs.
get_W();
467 bool requiredResponses = required_basic_g(outArgs);
468 bool requiredSensitivities = required_basic_dfdp(outArgs);
471 if(Teuchos::is_null(f_out) && Teuchos::is_null(W_out) &&
472 !requiredResponses && !requiredSensitivities) {
480 if(Teuchos::is_null(ghostedContainer_)) {
481 ghostedContainer_ = lof_->buildGhostedLinearObjContainer();
491 const RCP<const Epetra_Vector> x = inArgs.get_x();
492 RCP<const Epetra_Vector> x_dot;
495 ae_inargs.
container_ = lof_->buildLinearObjContainer();
497 ae_inargs.
alpha = 0.0;
498 ae_inargs.
beta = 1.0;
500 if (build_transient_support_) {
501 x_dot = inArgs.get_x_dot();
502 ae_inargs.
alpha = inArgs.get_alpha();
503 ae_inargs.
beta = inArgs.get_beta();
504 ae_inargs.
time = inArgs.get_t();
513 if(oneTimeDirichletBeta_on_) {
517 oneTimeDirichletBeta_on_ =
false;
521 for (
int i=0; i<inArgs.Np(); i++) {
522 Teuchos::RCP<const Epetra_Vector> p = inArgs.get_p(i);
523 if ( nonnull(p) && !is_distributed_parameter_[i]) {
524 for (
unsigned int j=0; j < parameter_vector_[i].size(); j++) {
525 parameter_vector_[i][j].baseValue = (*p)[j];
530 for (Teuchos::Array<panzer::ParamVec>::size_type i=0; i < parameter_vector_.size(); i++) {
531 for (
unsigned int j=0; j < parameter_vector_[i].size(); j++) {
532 parameter_vector_[i][j].family->setRealValueForAllTypes(parameter_vector_[i][j].baseValue);
537 for (std::vector<std::tuple<std::string,
int,Teuchos::RCP<Epetra_Import>,Teuchos::RCP<Epetra_Vector> > >::const_iterator i =
538 distributed_parameter_container_.begin(); i != distributed_parameter_container_.end(); ++i) {
540 Teuchos::RCP<const Epetra_Vector> global_vec = inArgs.get_p(std::get<1>(*i));
541 if (nonnull(global_vec)) {
543 Teuchos::RCP<Epetra_Import> importer = std::get<2>(*i);
544 if (nonnull(importer))
545 std::get<3>(*i)->Import(*global_vec,*importer,
Insert);
549 Teuchos::RCP<panzer::EpetraLinearObjContainer> container =
551 container->set_x(std::get<3>(*i));
556 const RCP<panzer::EpetraLinearObjContainer> epGlobalContainer =
559 TEUCHOS_ASSERT(!Teuchos::is_null(epGlobalContainer));
564 const RCP<panzer::EpetraLinearObjContainer> epGhostedContainer =
574 epGlobalContainer->
set_x(Teuchos::rcp_const_cast<Epetra_Vector>(x));
576 epGlobalContainer->set_dxdt(Teuchos::rcp_const_cast<Epetra_Vector>(x_dot));
578 if (!Teuchos::is_null(f_out) && !Teuchos::is_null(W_out)) {
580 PANZER_FUNC_TIME_MONITOR(
"panzer::ModelEvaluator::evalModel(f and J)");
583 epGlobalContainer->set_f(f_out);
584 epGlobalContainer->set_A(Teuchos::rcp_dynamic_cast<Epetra_CrsMatrix>(W_out));
587 epGhostedContainer->get_f()->PutScalar(0.0);
588 epGhostedContainer->get_A()->PutScalar(0.0);
592 else if(!Teuchos::is_null(f_out) && Teuchos::is_null(W_out)) {
594 PANZER_FUNC_TIME_MONITOR(
"panzer::ModelEvaluator::evalModel(f)");
596 epGlobalContainer->set_f(f_out);
599 epGhostedContainer->get_f()->PutScalar(0.0);
603 f_out->Update(1.0, *(epGlobalContainer->get_f()), 0.0);
605 else if(Teuchos::is_null(f_out) && !Teuchos::is_null(W_out)) {
607 PANZER_FUNC_TIME_MONITOR(
"panzer::ModelEvaluator::evalModel(J)");
610 if (Teuchos::is_null(dummy_f_))
611 dummy_f_ = Teuchos::rcp(
new Epetra_Vector(*(this->get_f_map())));
612 epGlobalContainer->set_f(dummy_f_);
613 epGlobalContainer->set_A(Teuchos::rcp_dynamic_cast<Epetra_CrsMatrix>(W_out));
616 epGhostedContainer->get_A()->PutScalar(0.0);
623 epGlobalContainer->set_A(Teuchos::null);
626 if(requiredResponses) {
627 evalModel_basic_g(ae_inargs,inArgs,outArgs);
630 if(required_basic_dgdx(outArgs))
631 evalModel_basic_dgdx(ae_inargs,inArgs,outArgs);
634 if(required_basic_dfdp(outArgs))
635 evalModel_basic_dfdp(ae_inargs,inArgs,outArgs);
641 epGlobalContainer->set_x(Teuchos::null);
642 epGlobalContainer->set_dxdt(Teuchos::null);
643 epGlobalContainer->set_f(Teuchos::null);
644 epGlobalContainer->set_A(Teuchos::null);
658 for(std::size_t i=0;i<g_names_.size();i++) {
659 Teuchos::RCP<Epetra_Vector> vec = outArgs.
get_g(i);
660 if(vec!=Teuchos::null) {
661 std::string responseName = g_names_[i];
662 Teuchos::RCP<panzer::ResponseMESupportBase<panzer::Traits::Residual> > resp
664 resp->setVector(vec);
678 TEUCHOS_ASSERT(required_basic_dgdx(outArgs));
680 for(std::size_t i=0;i<g_names_.size();i++) {
688 if(vec!=Teuchos::null) {
689 std::string responseName = g_names_[i];
690 Teuchos::RCP<panzer::ResponseMESupportBase<panzer::Traits::Jacobian> > resp
692 resp->setDerivative(vec);
706 using Teuchos::rcp_dynamic_cast;
708 TEUCHOS_ASSERT(required_basic_dfdp(outArgs));
711 RCP<const Thyra::VectorSpaceBase<double> > glblVS = rcp_dynamic_cast<
const ThyraObjFactory<double> >(lof_,
true)->getThyraRangeSpace();;
713 std::vector<std::string> activeParameters;
716 int totalParameterCount = 0;
717 for(Teuchos::Array<panzer::ParamVec>::size_type i=0; i < parameter_vector_.size(); i++) {
725 TEUCHOS_ASSERT(mVec->NumVectors()==int(parameter_vector_[i].size()));
727 for (
unsigned int j=0; j < parameter_vector_[i].size(); j++) {
731 RCP<LinearObjContainer> globalContainer = loc_pair->getGlobalLOC();
734 RCP<Epetra_Vector> vec = Teuchos::rcpFromRef(*(*mVec)(j));
735 RCP<panzer::ThyraObjContainer<double> > thGlobalContainer =
737 thGlobalContainer->
set_f_th(Thyra::create_Vector(vec,glblVS));
740 std::string name =
"PARAMETER_SENSITIVIES: "+(*p_names_[i])[j];
744 activeParameters.push_back(name);
745 totalParameterCount++;
754 for (Teuchos::Array<panzer::ParamVec>::size_type i=0; i < parameter_vector_.size(); i++) {
759 for (
unsigned int j=0; j < parameter_vector_[i].size(); j++) {
767 for (
unsigned int j=0; j < parameter_vector_[i].size(); j++) {
769 p.fastAccessDx(paramIndex) = 1.0;
777 TEUCHOS_ASSERT(paramIndex==totalParameterCount);
779 if(totalParameterCount>0) {
787 bool activeGArgs =
false;
788 for(
int i=0;i<outArgs.
Ng();i++)
789 activeGArgs |= (outArgs.
get_g(i)!=Teuchos::null);
791 return activeGArgs | required_basic_dgdx(outArgs);
797 bool activeGArgs =
false;
798 for(
int i=0;i<outArgs.
Ng();i++) {
800 if(outArgs.
supports(OUT_ARG_DgDx,i).none())
804 activeGArgs |= (!outArgs.
get_DgDx(i).isEmpty());
813 bool activeFPArgs =
false;
814 for(
int i=0;i<outArgs.
Np();i++) {
816 if(outArgs.
supports(OUT_ARG_DfDp,i).none())
820 activeFPArgs |= (!outArgs.
get_DfDp(i).isEmpty());
835 using Teuchos::rcpFromRef;
836 using Teuchos::rcp_dynamic_cast;
838 using Teuchos::ArrayView;
839 using Teuchos::rcp_dynamic_cast;
843 TEUCHOS_TEST_FOR_EXCEPTION(numVecs != 1, std::runtime_error,
844 "epetraToThyra does not work with MV dimension != 1");
846 const RCP<const Thyra::ProductVectorBase<double> > prodThyraVec =
847 Thyra::castOrCreateProductVectorBase(rcpFromRef(thyraVec));
852 std::size_t offset = 0;
853 const int numBlocks = prodThyraVec->productSpace()->numBlocks();
854 for (
int b = 0; b < numBlocks; ++b) {
855 const RCP<const Thyra::VectorBase<double> > vec_b = prodThyraVec->getVectorBlock(b);
856 const RCP<const Thyra::SpmdVectorBase<double> > spmd_b =
857 rcp_dynamic_cast<
const Thyra::SpmdVectorBase<double> >(vec_b,
true);
859 Teuchos::ArrayRCP<const double> thyraData;
860 spmd_b->getLocalData(Teuchos::ptrFromRef(thyraData));
862 for (Teuchos::ArrayRCP<const double>::size_type i=0; i < thyraData.size(); ++i) {
863 epetraData[i+offset] = thyraData[i];
865 offset += thyraData.size();
875 using Teuchos::ArrayView;
876 using Teuchos::rcpFromPtr;
877 using Teuchos::rcp_dynamic_cast;
881 TEUCHOS_TEST_FOR_EXCEPTION(numVecs != 1, std::runtime_error,
882 "ModelEvaluator_Epetra::copyEpetraToThyra does not work with MV dimension != 1");
884 const RCP<Thyra::ProductVectorBase<double> > prodThyraVec =
885 Thyra::castOrCreateNonconstProductVectorBase(rcpFromPtr(thyraVec));
887 const Teuchos::ArrayView<const double> epetraData(x[0], x.
Map().
NumMyElements());
892 std::size_t offset = 0;
893 const int numBlocks = prodThyraVec->productSpace()->numBlocks();
894 for (
int b = 0; b < numBlocks; ++b) {
895 const RCP<Thyra::VectorBase<double> > vec_b = prodThyraVec->getNonconstVectorBlock(b);
896 const RCP<Thyra::SpmdVectorBase<double> > spmd_b =
897 rcp_dynamic_cast<Thyra::SpmdVectorBase<double> >(vec_b,
true);
899 Teuchos::ArrayRCP<double> thyraData;
900 spmd_b->getNonconstLocalData(Teuchos::ptrFromRef(thyraData));
902 for (Teuchos::ArrayRCP<double>::size_type i=0; i < thyraData.size(); ++i) {
903 thyraData[i] = epetraData[i+offset];
905 offset += thyraData.size();
911 Teuchos::RCP<panzer::ModelEvaluator_Epetra>
915 const std::vector<Teuchos::RCP<Teuchos::Array<std::string> > >& p_names,
916 const std::vector<Teuchos::RCP<Teuchos::Array<double> > >& p_values,
917 const Teuchos::RCP<panzer::GlobalData>& global_data,
918 bool build_transient_support)
921 using Teuchos::rcp_dynamic_cast;
924 std::stringstream ss;
925 ss <<
"panzer::buildEpetraME: Linear object factory is incorrect type. Should be one of: ";
927 RCP<BlockedEpetraLinearObjFactory<panzer::Traits,int> > ep_lof
931 if(ep_lof!=Teuchos::null)
932 return rcp(
new ModelEvaluator_Epetra(fmb,rLibrary,ep_lof,p_names,p_values,global_data,build_transient_support));
934 ss <<
"\"BlockedEpetraLinearObjFactory\", ";
936 TEUCHOS_TEST_FOR_EXCEPTION(
true,std::logic_error,ss.str());
942 oneTimeDirichletBeta_on_ =
true;
943 oneTimeDirichletBeta_ = beta;
void evalModel_basic_dfdp(AssemblyEngineInArgs ae_inargs, const InArgs &inArgs, const OutArgs &outArgs) const
const Epetra_BlockMap & Map() const
void copyEpetraIntoThyra(const Epetra_MultiVector &x, const Teuchos::Ptr< Thyra::VectorBase< double > > &thyraVec) const
void set_W_properties(const DerivativeProperties &properties)
bool evaluate_transient_terms
Teuchos::RCP< const Epetra_Vector > get_x_init() const
void setSupports(EOutArgsMembers arg, bool supports=true)
Teuchos::RCP< Epetra_MultiVector > getMultiVector() const
void copyThyraIntoEpetra(const Thyra::VectorBase< double > &thyraVec, Epetra_MultiVector &x) const
void initializeEpetraObjs(panzer::BlockedEpetraLinearObjFactory< panzer::Traits, int > &lof)
virtual const Teuchos::RCP< Epetra_Map > getMap(int i) const
get the map from the matrix
Teuchos::RCP< panzer::LinearObjContainer > ghostedContainer_
void set_t_init(double t)
Set initial time value.
Teuchos::RCP< panzer::LinearObjContainer > container_
ModelEvaluator_Epetra(const Teuchos::RCP< panzer::FieldManagerBuilder > &fmb, const Teuchos::RCP< panzer::ResponseLibrary< panzer::Traits > > &rLibrary, const Teuchos::RCP< panzer::LinearObjFactory< panzer::Traits > > &lof, const std::vector< Teuchos::RCP< Teuchos::Array< std::string > > > &p_names, const std::vector< Teuchos::RCP< Teuchos::Array< double > > > &p_values, const Teuchos::RCP< panzer::GlobalData > &global_data, bool build_transient_support)
void addGlobalEvaluationData(const std::string &key, const Teuchos::RCP< GlobalEvaluationData > &ged)
PHX::MDField< ScalarT, panzer::Cell, panzer::IP > result
A field that will be used to build up the result of the integral we're performing.
Derivative get_DfDp(int l) const
void setModelEvalDescription(const std::string &modelEvalDescription)
int addDistributedParameter(const std::string name, const Teuchos::RCP< Epetra_Map > &global_map, const Teuchos::RCP< Epetra_Import > &importer, const Teuchos::RCP< Epetra_Vector > &ghosted_vector)
bool required_basic_dfdp(const OutArgs &outArgs) const
Are derivatives of the residual with respect to the parameters in the out args? DfDp.
Teuchos::RCP< Epetra_Operator > get_W() const
virtual void set_f_th(const Teuchos::RCP< Thyra::VectorBase< ScalarT > > &in)=0
Teuchos::RCP< Epetra_Operator > create_W() const
int NumMyElements() const
Teuchos::RCP< const Epetra_Map > get_f_map() const
OutArgs createOutArgs() const
InArgs createInArgs() const
void evalModel(const InArgs &inArgs, const OutArgs &outArgs) const
void evalModel_basic_dgdx(AssemblyEngineInArgs ae_inargs, const InArgs &inArgs, const OutArgs &outArgs) const
double get_t_init() const
void initializeParameterVector(const std::vector< Teuchos::RCP< Teuchos::Array< std::string > > > &p_names, const std::vector< Teuchos::RCP< Teuchos::Array< double > > > &p_values, const Teuchos::RCP< panzer::ParamLib > ¶meter_library)
Teuchos::RCP< const Epetra_Map > get_g_map(int l) const
Derivative get_DgDx(int j) const
panzer::AssemblyEngine_TemplateManager< panzer::Traits > ae_tm_
Teuchos::RCP< ModelEvaluator_Epetra > buildEpetraME(const Teuchos::RCP< FieldManagerBuilder > &fmb, const Teuchos::RCP< ResponseLibrary< panzer::Traits > > &rLibrary, const Teuchos::RCP< LinearObjFactory< panzer::Traits > > &lof, const std::vector< Teuchos::RCP< Teuchos::Array< std::string > > > &p_names, const std::vector< Teuchos::RCP< Teuchos::Array< double > > > &p_values, const Teuchos::RCP< panzer::GlobalData > &global_data, bool build_transient_support)
Teuchos::RCP< const Epetra_Map > get_x_map() const
void set_x(const Teuchos::RCP< Epetra_Vector > &in)
bool supports(EOutArgsMembers arg) const
void evalModel_basic(const InArgs &inArgs, const OutArgs &outArgs) const
for evaluation and handling of normal quantities, x,f,W, etc
bool apply_dirichlet_beta
void setOneTimeDirichletBeta(const double &beta) const
Evaluation< Epetra_Vector > get_g(int j) const
Teuchos::RCP< const Epetra_Map > get_p_map(int l) const
std::vector< Teuchos::RCP< Teuchos::Array< std::string > > > p_names_
void applyDirichletBCs(const Teuchos::RCP< Thyra::VectorBase< double > > &x, const Teuchos::RCP< Thyra::VectorBase< double > > &f) const
Evaluation< Epetra_Vector > get_f() const
Teuchos::RCP< const Epetra_Vector > get_p_init(int l) const
Teuchos::RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
void registerScalarParameter(const std::string name, panzer::ParamLib &pl, double realValue)
bool required_basic_g(const OutArgs &outArgs) const
Are their required responses in the out args? g and DgDx.
void set_Np_Ng(int Np, int Ng)
void evalModel_basic_g(AssemblyEngineInArgs ae_inargs, const InArgs &inArgs, const OutArgs &outArgs) const
bool required_basic_dgdx(const OutArgs &outArgs) const
Are their required responses in the out args? DgDx.
Teuchos::RCP< const Epetra_Vector > get_x_dot_init() const