43 #include "Thyra_LinearOpWithSolveFactoryHelpers.hpp" 46 #include "Thyra_DetachedMultiVectorView.hpp" 47 #include "Thyra_ModelEvaluatorDelegatorBase.hpp" 48 #include "EpetraExt_ModelEvaluatorScalingTools.h" 49 #include "Epetra_RowMatrix.h" 50 #include "Teuchos_Time.hpp" 51 #include "Teuchos_implicit_cast.hpp" 52 #include "Teuchos_Assert.hpp" 53 #include "Teuchos_StandardParameterEntryValidators.hpp" 54 #include "Teuchos_VerboseObjectParameterListHelpers.hpp" 60 const std::string StateFunctionScaling_name =
"State Function Scaling";
62 Teuchos::StringToIntegralParameterEntryValidator<
66 stateFunctionScalingValidator;
67 const std::string StateFunctionScaling_default =
"None";
71 Teuchos::RCP<Epetra_RowMatrix>
73 const EpetraExt::ModelEvaluator::OutArgs &epetraOutArgs
77 const RCP<Epetra_Operator>
78 eW = epetraOutArgs.get_W();
79 const RCP<Epetra_RowMatrix>
80 ermW = Teuchos::rcp_dynamic_cast<Epetra_RowMatrix>(eW,
false);
81 TEUCHOS_TEST_FOR_EXCEPTION(
82 is_null(ermW), std::logic_error,
83 "Thyra::EpetraModelEvaluator::evalModel(...): Error, if\n" 84 "scaling is turned on, the underlying Epetra_Operator created\n" 85 "an initialized by the underlying epetra model evaluator\n" 86 "\"" << epetraOutArgs.modelEvalDescription() <<
"\"\n" 87 "must support the Epetra_RowMatrix interface through a dynamic cast.\n" 88 "The concrete type " << Teuchos::typeName(*eW) <<
" does not support\n" 95 Teuchos::RCP<Epetra_Operator>
97 const EpetraExt::ModelEvaluator &epetraModel
102 eW = epetraModel.create_W();
103 TEUCHOS_TEST_FOR_EXCEPTION(
104 is_null(eW), std::logic_error,
105 "Error, the call to create_W() returned null on the " 106 "EpetraExt::ModelEvaluator object " 107 "\"" << epetraModel.description() <<
"\". This may mean that " 108 "the underlying model does not support more than one copy of " 124 :nominalValuesAndBoundsAreUpdated_(false), stateFunctionScaling_(STATE_FUNC_SCALING_NONE),
125 currentInArgsOutArgs_(false), finalPointWasSolved_(false)
130 const RCP<const EpetraExt::ModelEvaluator> &epetraModel,
131 const RCP<LinearOpWithSolveFactoryBase<double> > &W_factory
133 :nominalValuesAndBoundsAreUpdated_(false), stateFunctionScaling_(STATE_FUNC_SCALING_NONE),
134 currentInArgsOutArgs_(false), finalPointWasSolved_(false)
141 const RCP<const EpetraExt::ModelEvaluator> &epetraModel,
142 const RCP<LinearOpWithSolveFactoryBase<double> > &W_factory
145 using Teuchos::implicit_cast;
159 EpetraExt::ModelEvaluator::InArgs inArgs =
epetraModel_->createInArgs();
162 for(
int l = 0; l < implicit_cast<int>(
p_space_.size()); ++l ) {
163 RCP<const Epetra_Map>
166 TEUCHOS_TEST_FOR_EXCEPTION(
167 is_null(p_map_l), std::logic_error,
168 "Error, the the map p["<<l<<
"] for the model \"" 169 <<epetraModel->description()<<
"\" can not be null!");
176 EpetraExt::ModelEvaluator::OutArgs outArgs =
epetraModel_->createOutArgs();
179 for(
int j = 0; j < implicit_cast<int>(
g_space_.size()); ++j ) {
180 RCP<const Epetra_Map>
196 RCP<const EpetraExt::ModelEvaluator>
204 const ModelEvaluatorBase::InArgs<double>& nominalValues
213 const RCP<const Epetra_Vector> &stateVariableScalingVec
217 typedef ModelEvaluatorBase MEB;
218 TEUCHOS_TEST_FOR_EXCEPT( !this->
createInArgs().supports(MEB::IN_ARG_x) );
226 RCP<const Epetra_Vector>
233 RCP<const Epetra_Vector>
242 const RCP<const Epetra_Vector> &stateFunctionScalingVec
249 RCP<const Epetra_Vector>
257 RCP<const EpetraExt::ModelEvaluator> *epetraModel,
258 RCP<LinearOpWithSolveFactoryBase<double> > *W_factory
272 const ModelEvaluatorBase::InArgs<double>&
290 std::ostringstream oss;
291 oss <<
"Thyra::EpetraModelEvaluator{";
292 oss <<
"epetraModel=";
297 oss <<
",W_factory=";
311 RCP<Teuchos::ParameterList>
const& paramList
314 TEUCHOS_TEST_FOR_EXCEPT(is_null(paramList));
319 *
paramList_, StateFunctionScaling_name, StateFunctionScaling_default
323 Teuchos::readVerboseObjectSublist(&*
paramList_,
this);
326 #endif // TEUCHOS_DEBUG 330 RCP<Teuchos::ParameterList>
337 RCP<Teuchos::ParameterList>
340 RCP<Teuchos::ParameterList> _paramList =
paramList_;
346 RCP<const Teuchos::ParameterList>
353 RCP<const Teuchos::ParameterList>
357 using Teuchos::StringToIntegralParameterEntryValidator;
358 using Teuchos::tuple;
359 using Teuchos::rcp_implicit_cast;
360 typedef Teuchos::ParameterEntryValidator PEV;
361 static RCP<const Teuchos::ParameterList> validPL;
362 if(is_null(validPL)) {
363 RCP<Teuchos::ParameterList>
364 pl = Teuchos::rcp(
new Teuchos::ParameterList());
365 stateFunctionScalingValidator = rcp(
366 new StringToIntegralParameterEntryValidator<EStateFunctionScaling>(
372 "Do not scale the state function f(...) in this class.",
374 "Scale the state function f(...) and all its derivatives\n" 375 "using the row sum scaling from the initial Jacobian\n" 376 "W=d(f)/d(x). Note, this only works with Epetra_CrsMatrix\n" 379 tuple<EStateFunctionScaling>(
383 StateFunctionScaling_name
386 pl->set(StateFunctionScaling_name,StateFunctionScaling_default,
387 "Determines if and how the state function f(...) and all of its\n" 388 "derivatives are scaled. The scaling is done explicitly so there should\n" 389 "be no impact on the meaning of inner products or tolerances for\n" 391 rcp_implicit_cast<const PEV>(stateFunctionScalingValidator)
393 Teuchos::setupVerboseObjectSublist(&*pl);
415 RCP<const VectorSpaceBase<double> >
422 RCP<const VectorSpaceBase<double> >
429 RCP<const VectorSpaceBase<double> >
433 TEUCHOS_ASSERT_IN_RANGE_UPPER_EXCLUSIVE( l, 0, this->
Np() );
439 RCP<const Teuchos::Array<std::string> >
443 TEUCHOS_ASSERT_IN_RANGE_UPPER_EXCLUSIVE( l, 0, this->
Np() );
449 RCP<const VectorSpaceBase<double> >
452 TEUCHOS_TEST_FOR_EXCEPT( ! ( 0 <= j && j < this->
Ng() ) );
457 Teuchos::ArrayView<const std::string>
461 TEUCHOS_ASSERT_IN_RANGE_UPPER_EXCLUSIVE( j, 0, this->
Ng() );
467 ModelEvaluatorBase::InArgs<double>
475 ModelEvaluatorBase::InArgs<double>
483 ModelEvaluatorBase::InArgs<double>
491 RCP<LinearOpBase<double> >
498 RCP<PreconditionerBase<double> >
501 return Teuchos::null;
505 RCP<const LinearOpWithSolveFactoryBase<double> >
521 const ModelEvaluatorBase::InArgs<double> &finalPoint,
534 RCP<LinearOpBase<double> >
537 TEUCHOS_TEST_FOR_EXCEPT(
true);
538 TEUCHOS_UNREACHABLE_RETURN(Teuchos::null);
542 RCP<LinearOpBase<double> >
545 TEUCHOS_TEST_FOR_EXCEPT(
true);
546 TEUCHOS_UNREACHABLE_RETURN(Teuchos::null);
550 RCP<LinearOpBase<double> >
553 TEUCHOS_TEST_FOR_EXCEPT(
true);
554 TEUCHOS_UNREACHABLE_RETURN(Teuchos::null);
558 RCP<LinearOpBase<double> >
561 TEUCHOS_TEST_FOR_EXCEPT(
true);
562 TEUCHOS_UNREACHABLE_RETURN(Teuchos::null);
566 ModelEvaluatorBase::OutArgs<double>
577 const ModelEvaluatorBase::InArgs<double>& inArgs_in,
578 const ModelEvaluatorBase::OutArgs<double>& outArgs
583 using Teuchos::rcp_const_cast;
584 using Teuchos::rcp_dynamic_cast;
585 using Teuchos::OSTab;
586 using Teuchos::includesVerbLevel;
587 typedef EpetraExt::ModelEvaluator EME;
605 inArgs.setArgs(inArgs_in);
611 if (inArgs.supports(Thyra::ModelEvaluatorBase::IN_ARG_x_dot)) {
612 if (is_null(inArgs_in.get_x_dot()))
613 inArgs.set_x_dot(Teuchos::null);
617 typedef double Scalar;
618 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_BEGIN(
619 "Thyra::EpetraModelEvaluator",inArgs,outArgs,Teuchos::null
623 const bool firstTimeStateFuncScaling
629 typedef Teuchos::VerboseObjectTempState<LinearOpWithSolveFactoryBase<double> > VOTSLOWSF;
630 VOTSLOWSF W_factory_outputTempState(
W_factory_,out,verbLevel);
632 Teuchos::Time timer(
"");
643 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
644 *out <<
"\nSetting-up/creating input arguments ...\n";
648 EME::InArgs epetraScaledInArgs =
epetraModel_->createInArgs();
653 EME::InArgs epetraInArgs =
epetraModel_->createInArgs();
654 EpetraExt::unscaleModelVars(
660 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
661 OSTab(out).o() <<
"\nTime to setup InArgs = "<<timer.totalElapsedTime()<<
" sec\n";
667 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
668 *out <<
"\nSetting-up/creating output arguments ...\n";
673 EME::OutArgs epetraUnscaledOutArgs =
epetraModel_->createOutArgs();
677 RCP<LinearOpBase<double> > W_op;
678 RCP<EpetraLinearOp> efwdW;
679 RCP<Epetra_Operator> eW;
685 &epetraUnscaledOutArgs,
693 if (firstTimeStateFuncScaling) {
698 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
700 <<
"\nTime to setup OutArgs = " 701 << timer.totalElapsedTime() <<
" sec\n";
707 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
708 *out <<
"\nEvaluating the Epetra output functions ...\n";
711 epetraModel_->evalModel(epetraInArgs,epetraUnscaledOutArgs);
714 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
716 <<
"\nTime to evaluate Epetra output functions = " 717 << timer.totalElapsedTime() <<
" sec\n";
727 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
728 *out <<
"\nCompute scale factors if needed ...\n";
731 if (firstTimeStateFuncScaling) {
736 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
738 <<
"\nTime to compute scale factors = " 739 << timer.totalElapsedTime() <<
" sec\n";
745 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
746 *out <<
"\nScale the output objects ...\n";
749 EME::OutArgs epetraOutArgs =
epetraModel_->createOutArgs();
750 bool allFuncsWhereScaled =
false;
751 EpetraExt::scaleModelFuncs(
753 &epetraOutArgs, &allFuncsWhereScaled,
758 TEUCHOS_TEST_FOR_EXCEPTION(
759 !allFuncsWhereScaled, std::logic_error,
760 "Error, we can not currently handle epetra output objects that could not be" 761 " scaled. Special code will have to be added to handle this (i.e. using" 762 " implicit diagonal and multiplied linear operators to implicitly do" 767 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
769 <<
"\nTime to scale the output objects = " 770 << timer.totalElapsedTime() <<
" sec\n";
777 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
778 *out <<
"\nFinish processing and wrapping the output objects ...\n";
782 epetraOutArgs, W_op, efwdW, eW,
787 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW))
789 <<
"\nTime to finish processing and wrapping the output objects = " 790 << timer.totalElapsedTime() <<
" sec\n";
796 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_END();
805 const EpetraExt::ModelEvaluator::InArgs &epetraInArgs,
806 ModelEvaluatorBase::InArgs<double> *inArgs
810 using Teuchos::implicit_cast;
811 typedef ModelEvaluatorBase MEB;
813 TEUCHOS_TEST_FOR_EXCEPT(!inArgs);
815 if(inArgs->supports(MEB::IN_ARG_x)) {
819 if(inArgs->supports(MEB::IN_ARG_x_dot)) {
823 if(inArgs->supports(MEB::IN_ARG_x_mp)) {
824 inArgs->set_x_mp( epetraInArgs.get_x_mp() );
827 if(inArgs->supports(MEB::IN_ARG_x_dot_mp)) {
828 inArgs->set_x_dot_mp( epetraInArgs.get_x_dot_mp() );
831 const int l_Np = inArgs->Np();
832 for(
int l = 0; l < l_Np; ++l ) {
835 for(
int l = 0; l < l_Np; ++l ) {
836 if(inArgs->supports(MEB::IN_ARG_p_mp, l))
837 inArgs->set_p_mp( l, epetraInArgs.get_p_mp(l) );
840 if(inArgs->supports(MEB::IN_ARG_t)) {
841 inArgs->set_t(epetraInArgs.get_t());
848 const ModelEvaluatorBase::InArgs<double> &inArgs,
849 EpetraExt::ModelEvaluator::InArgs *epetraInArgs
854 using Teuchos::rcp_const_cast;
855 #ifdef HAVE_THYRA_ME_POLYNOMIAL 856 using Teuchos::Polynomial;
857 #endif // HAVE_THYRA_ME_POLYNOMIAL 860 TEUCHOS_TEST_FOR_EXCEPT(0==epetraInArgs);
862 RCP<const VectorBase<double> > x_dot;
863 if( inArgs.supports(IN_ARG_x_dot) && (x_dot = inArgs.get_x_dot()).
get() ) {
865 epetraInArgs->set_x_dot(e_x_dot);
867 RCP<const Stokhos::ProductEpetraVector > x_dot_mp;
868 if( inArgs.supports(IN_ARG_x_dot_mp) && (x_dot_mp = inArgs.get_x_dot_mp()).
get() ) {
869 epetraInArgs->set_x_dot_mp(x_dot_mp);
872 RCP<const VectorBase<double> > x;
873 if( inArgs.supports(IN_ARG_x) && (x = inArgs.get_x()).
get() ) {
875 epetraInArgs->set_x(e_x);
877 RCP<const Stokhos::ProductEpetraVector > x_mp;
878 if( inArgs.supports(IN_ARG_x_mp) && (x_mp = inArgs.get_x_mp()).
get() ) {
879 epetraInArgs->set_x_mp(x_mp);
882 RCP<const VectorBase<double> > p_l;
883 for(
int l = 0; l < inArgs.Np(); ++l ) {
884 p_l = inArgs.get_p(l);
887 RCP<const Stokhos::ProductEpetraVector > p_mp_l;
888 for(
int l = 0; l < inArgs.Np(); ++l ) {
889 if (inArgs.supports(IN_ARG_p_mp,l)) {
890 p_mp_l = inArgs.get_p_mp(l);
891 if(p_mp_l.get()) epetraInArgs->set_p_mp(l,p_mp_l);
895 #ifdef HAVE_THYRA_ME_POLYNOMIAL 897 RCP<const Polynomial< VectorBase<double> > > x_dot_poly;
898 RCP<Epetra_Vector> epetra_ptr;
900 inArgs.supports(IN_ARG_x_dot_poly)
901 && (x_dot_poly = inArgs.get_x_dot_poly()).
get()
904 RCP<Polynomial<Epetra_Vector> > epetra_x_dot_poly =
905 rcp(
new Polynomial<Epetra_Vector>(x_dot_poly->degree()));
906 for (
unsigned int i=0; i<=x_dot_poly->degree(); i++) {
907 epetra_ptr = rcp_const_cast<Epetra_Vector>(
909 epetra_x_dot_poly->setCoefficientPtr(i,epetra_ptr);
911 epetraInArgs->set_x_dot_poly(epetra_x_dot_poly);
914 RCP<const Polynomial< VectorBase<double> > > x_poly;
916 inArgs.supports(IN_ARG_x_poly)
917 && (x_poly = inArgs.get_x_poly()).
get()
920 RCP<Polynomial<Epetra_Vector> > epetra_x_poly =
921 rcp(
new Polynomial<Epetra_Vector>(x_poly->degree()));
922 for (
unsigned int i=0; i<=x_poly->degree(); i++) {
923 epetra_ptr = rcp_const_cast<Epetra_Vector>(
925 epetra_x_poly->setCoefficientPtr(i,epetra_ptr);
927 epetraInArgs->set_x_poly(epetra_x_poly);
930 #endif // HAVE_THYRA_ME_POLYNOMIAL 932 if( inArgs.supports(IN_ARG_t) )
933 epetraInArgs->set_t(inArgs.get_t());
935 if( inArgs.supports(IN_ARG_alpha) )
936 epetraInArgs->set_alpha(inArgs.get_alpha());
938 if( inArgs.supports(IN_ARG_beta) )
939 epetraInArgs->set_beta(inArgs.get_beta());
941 if( inArgs.supports(IN_ARG_step_size) )
942 epetraInArgs->set_step_size(inArgs.get_step_size());
944 if( inArgs.supports(IN_ARG_stage_number) )
945 epetraInArgs->set_stage_number(inArgs.get_stage_number());
950 const ModelEvaluatorBase::OutArgs<double> &outArgs,
951 EpetraExt::ModelEvaluator::OutArgs *epetraUnscaledOutArgs_inout,
952 RCP<LinearOpBase<double> > *W_op_out,
953 RCP<EpetraLinearOp> *efwdW_out,
954 RCP<Epetra_Operator> *eW_out
959 using Teuchos::rcp_const_cast;
960 using Teuchos::rcp_dynamic_cast;
961 using Teuchos::OSTab;
962 using Teuchos::implicit_cast;
968 TEUCHOS_ASSERT(epetraUnscaledOutArgs_inout);
969 TEUCHOS_ASSERT(W_op_out);
970 TEUCHOS_ASSERT(efwdW_out);
971 TEUCHOS_ASSERT(eW_out);
975 EpetraExt::ModelEvaluator::OutArgs &epetraUnscaledOutArgs = *epetraUnscaledOutArgs_inout;
976 RCP<LinearOpBase<double> > &W_op = *W_op_out;
977 RCP<EpetraLinearOp> &efwdW = *efwdW_out;
978 RCP<Epetra_Operator> &eW = *eW_out;
982 RCP<VectorBase<double> > f;
983 if( outArgs.supports(OUT_ARG_f) && (f = outArgs.get_f()).
get() )
985 RCP<Stokhos::ProductEpetraVector > f_mp;
986 if( outArgs.supports(OUT_ARG_f_mp) && (f_mp = outArgs.get_f_mp()).
get() )
987 epetraUnscaledOutArgs.set_f_mp(f_mp);
992 RCP<VectorBase<double> > g_j;
993 for(
int j = 0; j < outArgs.Ng(); ++j ) {
994 g_j = outArgs.get_g(j);
997 RCP<Stokhos::ProductEpetraVector > g_mp_j;
998 for(
int j = 0; j < outArgs.Ng(); ++j ) {
999 if (outArgs.supports(OUT_ARG_g_mp,j)) {
1000 g_mp_j = outArgs.get_g_mp(j);
1001 if(g_mp_j.get()) epetraUnscaledOutArgs.set_g_mp(j,g_mp_j);
1008 RCP<Stokhos::ProductEpetraOperator > W_mp;
1009 if( outArgs.supports(OUT_ARG_W_mp) && (W_mp = outArgs.get_W_mp()).
get() )
1010 epetraUnscaledOutArgs.set_W_mp(W_mp);
1016 if (outArgs.supports(OUT_ARG_W_op) && nonnull(W_op = outArgs.get_W_op())) {
1017 if (nonnull(W_op) && is_null(efwdW)) {
1023 if (nonnull(efwdW)) {
1028 eW = efwdW->epetra_op();
1029 epetraUnscaledOutArgs.set_W(eW);
1038 Derivative<double> DfDp_l;
1039 for(
int l = 0; l < outArgs.Np(); ++l ) {
1040 if( !outArgs.supports(OUT_ARG_DfDp,l).none()
1041 && !(DfDp_l = outArgs.get_DfDp(l)).isEmpty() )
1046 MPDerivative DfDp_mp_l;
1047 for(
int l = 0; l < outArgs.Np(); ++l ) {
1048 if( !outArgs.supports(OUT_ARG_DfDp_mp,l).none()
1049 && !(DfDp_mp_l = outArgs.get_DfDp_mp(l)).isEmpty() )
1058 Derivative<double> DgDx_dot_j;
1059 for(
int j = 0; j < outArgs.Ng(); ++j ) {
1060 if( !outArgs.supports(OUT_ARG_DgDx_dot,j).none()
1061 && !(DgDx_dot_j = outArgs.get_DgDx_dot(j)).isEmpty() )
1066 MPDerivative DgDx_dot_mp_j;
1067 for(
int j = 0; j < outArgs.Ng(); ++j ) {
1068 if( !outArgs.supports(OUT_ARG_DgDx_dot_mp,j).none()
1069 && !(DgDx_dot_mp_j = outArgs.get_DgDx_dot_mp(j)).isEmpty() )
1078 Derivative<double> DgDx_j;
1079 for(
int j = 0; j < outArgs.Ng(); ++j ) {
1080 if( !outArgs.supports(OUT_ARG_DgDx,j).none()
1081 && !(DgDx_j = outArgs.get_DgDx(j)).isEmpty() )
1086 MPDerivative DgDx_mp_j;
1087 for(
int j = 0; j < outArgs.Ng(); ++j ) {
1088 if( !outArgs.supports(OUT_ARG_DgDx_mp,j).none()
1089 && !(DgDx_mp_j = outArgs.get_DgDx_mp(j)).isEmpty() )
1098 DerivativeSupport DgDp_j_l_support;
1099 Derivative<double> DgDp_j_l;
1100 for (
int j = 0; j < outArgs.Ng(); ++j ) {
1101 for (
int l = 0; l < outArgs.Np(); ++l ) {
1102 if (!(DgDp_j_l_support = outArgs.supports(OUT_ARG_DgDp,j,l)).none()
1103 && !(DgDp_j_l = outArgs.get_DgDp(j,l)).isEmpty() )
1109 DerivativeSupport DgDp_mp_j_l_support;
1110 MPDerivative DgDp_mp_j_l;
1111 for (
int j = 0; j < outArgs.Ng(); ++j ) {
1112 for (
int l = 0; l < outArgs.Np(); ++l ) {
1113 if (!(DgDp_mp_j_l_support = outArgs.supports(OUT_ARG_DgDp_mp,j,l)).none()
1114 && !(DgDp_mp_j_l = outArgs.get_DgDp_mp(j,l)).isEmpty() )
1122 #ifdef HAVE_THYRA_ME_POLYNOMIAL 1125 RCP<const Teuchos::Polynomial< VectorBase<double> > > f_poly;
1126 if( outArgs.supports(OUT_ARG_f_poly) && (f_poly = outArgs.get_f_poly()).
get() )
1128 RCP<Teuchos::Polynomial<Epetra_Vector> > epetra_f_poly =
1129 Teuchos::rcp(
new Teuchos::Polynomial<Epetra_Vector>(f_poly->degree()));
1130 for (
unsigned int i=0; i<=f_poly->degree(); i++) {
1131 RCP<Epetra_Vector> epetra_ptr
1133 f_poly->getCoefficient(i)));
1134 epetra_f_poly->setCoefficientPtr(i,epetra_ptr);
1136 epetraUnscaledOutArgs.set_f_poly(epetra_f_poly);
1139 #endif // HAVE_THYRA_ME_POLYNOMIAL 1145 EpetraExt::ModelEvaluator::InArgs *epetraInArgs_inout,
1146 EpetraExt::ModelEvaluator::OutArgs *epetraUnscaledOutArgs_inout,
1147 const RCP<Teuchos::FancyOStream> &out,
1148 const Teuchos::EVerbosityLevel verbLevel
1152 typedef EpetraExt::ModelEvaluator EME;
1154 #ifdef TEUCHOS_DEBUG 1155 TEUCHOS_ASSERT(epetraInArgs_inout);
1156 TEUCHOS_ASSERT(epetraUnscaledOutArgs_inout);
1159 EpetraExt::ModelEvaluator::InArgs
1160 &epetraInArgs = *epetraInArgs_inout;
1161 EpetraExt::ModelEvaluator::OutArgs
1162 &epetraUnscaledOutArgs = *epetraUnscaledOutArgs_inout;
1168 epetraUnscaledOutArgs.supports(EME::OUT_ARG_f)
1170 epetraUnscaledOutArgs.funcOrDerivesAreSet(EME::OUT_ARG_f)
1174 epetraUnscaledOutArgs.supports(EME::OUT_ARG_W)
1176 is_null(epetraUnscaledOutArgs.get_W())
1189 if(out.get() && verbLevel >= Teuchos::VERB_LOW)
1191 <<
"\nCreating a temporary Epetra W to compute scale factors" 1192 <<
" for f(...) ...\n";
1193 epetraUnscaledOutArgs.set_W(create_and_assert_W(*
epetraModel_));
1194 if( epetraInArgs.supports(EME::IN_ARG_beta) )
1195 epetraInArgs.set_beta(1.0);
1196 if( epetraInArgs.supports(EME::IN_ARG_alpha) )
1197 epetraInArgs.set_alpha(0.0);
1198 if( epetraInArgs.supports(EME::IN_ARG_step_size) )
1199 epetraInArgs.set_step_size(0.0);
1200 if( epetraInArgs.supports(EME::IN_ARG_stage_number) )
1201 epetraInArgs.set_stage_number(1.0);
1208 const EpetraExt::ModelEvaluator::OutArgs &epetraUnscaledOutArgs,
1209 const RCP<Teuchos::FancyOStream> &out,
1210 const Teuchos::EVerbosityLevel verbLevel
1214 using Teuchos::OSTab;
1216 using Teuchos::rcp_const_cast;
1217 using Teuchos::includesVerbLevel;
1226 const RCP<Epetra_RowMatrix>
1227 ermW = get_Epetra_RowMatrix(epetraUnscaledOutArgs);
1234 invRowSums = rcp(
new Epetra_Vector(ermW->OperatorRangeMap()));
1238 ermW->InvRowSums(*invRowSums);
1240 if (out.get() && includesVerbLevel(verbLevel,Teuchos::VERB_LOW)) {
1242 <<
"\nComputed inverse row sum scaling from W that" 1243 " will be used to scale f(...) and its derivatives:\n";
1244 double minVal = 0, maxVal = 0, avgVal = 0;
1245 invRowSums->MinValue(&minVal);
1246 invRowSums->MaxValue(&maxVal);
1247 invRowSums->MeanValue(&avgVal);
1250 <<
"min(invRowSums) = " << minVal <<
"\n" 1251 <<
"max(invRowSums) = " << maxVal <<
"\n" 1252 <<
"avg(invRowSums) = " << avgVal <<
"\n";
1262 TEUCHOS_TEST_FOR_EXCEPT(
"Should never get here!");
1275 const EpetraExt::ModelEvaluator::OutArgs &epetraOutArgs,
1276 RCP<LinearOpBase<double> > &W_op,
1277 RCP<EpetraLinearOp> &efwdW,
1278 RCP<Epetra_Operator> &eW,
1279 const ModelEvaluatorBase::OutArgs<double> &outArgs
1283 using Teuchos::rcp_dynamic_cast;
1286 if (nonnull(efwdW)) {
1287 efwdW->setFullyInitialized(
true);
1291 if (nonnull(W_op)) {
1292 if (W_op.shares_resource(efwdW)) {
1296 rcp_dynamic_cast<
EpetraLinearOp>(W_op,
true)->setFullyInitialized(
true);
1307 using Teuchos::implicit_cast;
1309 typedef EpetraExt::ModelEvaluator EME;
1315 EME::InArgs epetraOrigNominalValues;
1316 EpetraExt::gatherModelNominalValues(
1319 EME::InArgs epetraOrigLowerBounds;
1320 EME::InArgs epetraOrigUpperBounds;
1321 EpetraExt::gatherModelBounds(
1322 *
epetraModel_, &epetraOrigLowerBounds, &epetraOrigUpperBounds );
1331 if( epetraOrigNominalValues.supports(EME::IN_ARG_x_dot) ) {
1334 if( epetraOrigNominalValues.supports(EME::IN_ARG_x) ) {
1341 EME::InArgs epetraScaledNominalValues =
epetraModel_->createInArgs();
1342 EpetraExt::scaleModelVars(
1346 EME::InArgs epetraScaledLowerBounds =
epetraModel_->createInArgs();
1347 EME::InArgs epetraScaledUpperBounds =
epetraModel_->createInArgs();
1348 EpetraExt::scaleModelBounds(
1349 epetraOrigLowerBounds, epetraOrigUpperBounds,
epetraModel_->getInfBound(),
1351 &epetraScaledLowerBounds, &epetraScaledUpperBounds
1379 typedef EpetraExt::ModelEvaluator EME;
1381 const EpetraExt::ModelEvaluator &epetraModel = *
epetraModel_;
1382 EME::InArgs epetraInArgs = epetraModel.createInArgs();
1383 EME::OutArgs epetraOutArgs = epetraModel.createOutArgs();
1384 const int l_Np = epetraOutArgs.Np();
1385 const int l_Ng = epetraOutArgs.Ng();
1391 InArgsSetup<double> inArgs;
1392 inArgs.setModelEvalDescription(this->
description());
1393 inArgs.set_Np(epetraInArgs.Np());
1394 inArgs.setSupports(IN_ARG_x_dot, epetraInArgs.supports(EME::IN_ARG_x_dot));
1395 inArgs.setSupports(IN_ARG_x, epetraInArgs.supports(EME::IN_ARG_x));
1396 inArgs.setSupports(IN_ARG_x_dot_mp, epetraInArgs.supports(EME::IN_ARG_x_dot_mp));
1397 inArgs.setSupports(IN_ARG_x_mp, epetraInArgs.supports(EME::IN_ARG_x_mp));
1398 #ifdef HAVE_THYRA_ME_POLYNOMIAL 1399 inArgs.setSupports(IN_ARG_x_dot_poly,
1400 epetraInArgs.supports(EME::IN_ARG_x_dot_poly));
1401 inArgs.setSupports(IN_ARG_x_poly, epetraInArgs.supports(EME::IN_ARG_x_poly));
1402 #endif // HAVE_THYRA_ME_POLYNOMIAL 1403 inArgs.setSupports(IN_ARG_t, epetraInArgs.supports(EME::IN_ARG_t));
1404 inArgs.setSupports(IN_ARG_alpha, epetraInArgs.supports(EME::IN_ARG_alpha));
1405 inArgs.setSupports(IN_ARG_beta, epetraInArgs.supports(EME::IN_ARG_beta));
1406 inArgs.setSupports(IN_ARG_step_size, epetraInArgs.supports(EME::IN_ARG_step_size));
1407 inArgs.setSupports(IN_ARG_stage_number, epetraInArgs.supports(EME::IN_ARG_stage_number));
1408 for(
int l=0; l<l_Np; ++l) {
1409 inArgs.setSupports(IN_ARG_p_mp, l, epetraInArgs.supports(EME::IN_ARG_p_mp, l));
1417 OutArgsSetup<double> outArgs;
1418 outArgs.setModelEvalDescription(this->
description());
1419 outArgs.set_Np_Ng(l_Np, l_Ng);
1421 outArgs.setSupports(OUT_ARG_f, epetraOutArgs.supports(EME::OUT_ARG_f));
1422 outArgs.setSupports(OUT_ARG_f_mp, epetraOutArgs.supports(EME::OUT_ARG_f_mp));
1423 if (outArgs.supports(OUT_ARG_f)) {
1425 outArgs.setSupports(OUT_ARG_W_op, epetraOutArgs.supports(EME::OUT_ARG_W));
1426 outArgs.set_W_properties(
convert(epetraOutArgs.get_W_properties()));
1428 for(
int l=0; l<l_Np; ++l) {
1429 outArgs.setSupports(OUT_ARG_DfDp, l,
1430 convert(epetraOutArgs.supports(EME::OUT_ARG_DfDp, l)));
1431 if(!outArgs.supports(OUT_ARG_DfDp, l).none())
1432 outArgs.set_DfDp_properties(l,
1433 convert(epetraOutArgs.get_DfDp_properties(l)));
1434 if (outArgs.supports(OUT_ARG_f_mp))
1436 outArgs.setSupports(OUT_ARG_DfDp_mp, l,
1437 convert(epetraOutArgs.supports(EME::OUT_ARG_DfDp_mp, l)));
1438 if(!outArgs.supports(OUT_ARG_DfDp_mp, l).none())
1439 outArgs.set_DfDp_mp_properties(l,
1440 convert(epetraOutArgs.get_DfDp_mp_properties(l)));
1445 for(
int j=0; j<l_Ng; ++j) {
1446 if (inArgs.supports(IN_ARG_x_dot))
1447 outArgs.setSupports(OUT_ARG_DgDx_dot, j,
1448 convert(epetraOutArgs.supports(EME::OUT_ARG_DgDx_dot, j)));
1449 if(!outArgs.supports(OUT_ARG_DgDx_dot, j).none())
1450 outArgs.set_DgDx_dot_properties(j,
1451 convert(epetraOutArgs.get_DgDx_dot_properties(j)));
1452 if (inArgs.supports(IN_ARG_x))
1453 outArgs.setSupports(OUT_ARG_DgDx, j,
1454 convert(epetraOutArgs.supports(EME::OUT_ARG_DgDx, j)));
1455 if(!outArgs.supports(OUT_ARG_DgDx, j).none())
1456 outArgs.set_DgDx_properties(j,
1457 convert(epetraOutArgs.get_DgDx_properties(j)));
1458 if (inArgs.supports(IN_ARG_x_dot_mp))
1459 outArgs.setSupports(OUT_ARG_DgDx_dot_mp, j,
1460 convert(epetraOutArgs.supports(EME::OUT_ARG_DgDx_dot_mp, j)));
1461 if(!outArgs.supports(OUT_ARG_DgDx_dot_mp, j).none())
1462 outArgs.set_DgDx_dot_mp_properties(j,
1463 convert(epetraOutArgs.get_DgDx_dot_mp_properties(j)));
1464 if (inArgs.supports(IN_ARG_x_mp))
1465 outArgs.setSupports(OUT_ARG_DgDx_mp, j,
1466 convert(epetraOutArgs.supports(EME::OUT_ARG_DgDx_mp, j)));
1467 if(!outArgs.supports(OUT_ARG_DgDx_mp, j).none())
1468 outArgs.set_DgDx_mp_properties(j,
1469 convert(epetraOutArgs.get_DgDx_mp_properties(j)));
1472 for(
int j=0; j < l_Ng; ++j)
for(
int l=0; l < l_Np; ++l) {
1473 const EME::DerivativeSupport epetra_DgDp_j_l_support =
1474 epetraOutArgs.supports(EME::OUT_ARG_DgDp, j, l);
1475 outArgs.setSupports(OUT_ARG_DgDp, j, l,
1476 convert(epetra_DgDp_j_l_support));
1477 if(!outArgs.supports(OUT_ARG_DgDp, j, l).none())
1478 outArgs.set_DgDp_properties(j, l,
1479 convert(epetraOutArgs.get_DgDp_properties(j, l)));
1480 const EME::DerivativeSupport epetra_DgDp_mp_j_l_support =
1481 epetraOutArgs.supports(EME::OUT_ARG_DgDp_mp, j, l);
1482 outArgs.setSupports(OUT_ARG_DgDp_mp, j, l,
1483 convert(epetra_DgDp_mp_j_l_support));
1484 if(!outArgs.supports(OUT_ARG_DgDp_mp, j, l).none())
1485 outArgs.set_DgDp_mp_properties(j, l,
1486 convert(epetraOutArgs.get_DgDp_mp_properties(j, l)));
1488 for(
int j=0; j<l_Ng; ++j) {
1489 outArgs.setSupports(OUT_ARG_g_mp, j, epetraOutArgs.supports(EME::OUT_ARG_g_mp, j));
1491 #ifdef HAVE_THYRA_ME_POLYNOMIAL 1492 outArgs.setSupports(OUT_ARG_f_poly,
1493 epetraOutArgs.supports(EME::OUT_ARG_f_poly));
1494 #endif // HAVE_THYRA_ME_POLYNOMIAL 1506 return Thyra::partialNonconstEpetraLinearOp(
1521 Teuchos::RCP<Thyra::EpetraModelEvaluator>
1522 Thyra::epetraModelEvaluator(
1523 const RCP<const EpetraExt::ModelEvaluator> &epetraModel,
1524 const RCP<LinearOpWithSolveFactoryBase<double> > &W_factory
1527 return Teuchos::rcp(
new EpetraModelEvaluator(epetraModel,W_factory));
1531 Thyra::ModelEvaluatorBase::EDerivativeMultiVectorOrientation
1533 const EpetraExt::ModelEvaluator::EDerivativeMultiVectorOrientation &mvOrientation
1536 switch(mvOrientation) {
1537 case EpetraExt::ModelEvaluator::DERIV_MV_BY_COL :
1538 return ModelEvaluatorBase::DERIV_MV_BY_COL;
1539 case EpetraExt::ModelEvaluator::DERIV_TRANS_MV_BY_ROW :
1540 return ModelEvaluatorBase::DERIV_TRANS_MV_BY_ROW;
1542 TEUCHOS_TEST_FOR_EXCEPT(
true);
1544 TEUCHOS_UNREACHABLE_RETURN(ModelEvaluatorBase::DERIV_MV_BY_COL);
1548 EpetraExt::ModelEvaluator::EDerivativeMultiVectorOrientation
1550 const ModelEvaluatorBase::EDerivativeMultiVectorOrientation &mvOrientation
1553 switch(mvOrientation) {
1554 case ModelEvaluatorBase::DERIV_MV_BY_COL :
1555 return EpetraExt::ModelEvaluator::DERIV_MV_BY_COL;
1556 case ModelEvaluatorBase::DERIV_TRANS_MV_BY_ROW :
1557 return EpetraExt::ModelEvaluator::DERIV_TRANS_MV_BY_ROW;
1559 TEUCHOS_TEST_FOR_EXCEPT(
true);
1561 TEUCHOS_UNREACHABLE_RETURN(EpetraExt::ModelEvaluator::DERIV_MV_BY_COL);
1565 Thyra::ModelEvaluatorBase::DerivativeProperties
1567 const EpetraExt::ModelEvaluator::DerivativeProperties &derivativeProperties
1570 ModelEvaluatorBase::EDerivativeLinearity linearity;
1571 switch(derivativeProperties.linearity) {
1572 case EpetraExt::ModelEvaluator::DERIV_LINEARITY_UNKNOWN:
1573 linearity = ModelEvaluatorBase::DERIV_LINEARITY_UNKNOWN;
1575 case EpetraExt::ModelEvaluator::DERIV_LINEARITY_CONST:
1576 linearity = ModelEvaluatorBase::DERIV_LINEARITY_CONST;
1578 case EpetraExt::ModelEvaluator::DERIV_LINEARITY_NONCONST:
1579 linearity = ModelEvaluatorBase::DERIV_LINEARITY_NONCONST;
1582 TEUCHOS_TEST_FOR_EXCEPT(
true);
1584 ModelEvaluatorBase::ERankStatus rank;
1585 switch(derivativeProperties.rank) {
1586 case EpetraExt::ModelEvaluator::DERIV_RANK_UNKNOWN:
1587 rank = ModelEvaluatorBase::DERIV_RANK_UNKNOWN;
1589 case EpetraExt::ModelEvaluator::DERIV_RANK_FULL:
1590 rank = ModelEvaluatorBase::DERIV_RANK_FULL;
1592 case EpetraExt::ModelEvaluator::DERIV_RANK_DEFICIENT:
1593 rank = ModelEvaluatorBase::DERIV_RANK_DEFICIENT;
1596 TEUCHOS_TEST_FOR_EXCEPT(
true);
1598 return ModelEvaluatorBase::DerivativeProperties(
1599 linearity,rank,derivativeProperties.supportsAdjoint);
1603 Thyra::ModelEvaluatorBase::DerivativeSupport
1605 const EpetraExt::ModelEvaluator::DerivativeSupport &derivativeSupport
1608 ModelEvaluatorBase::DerivativeSupport ds;
1609 if(derivativeSupport.supports(EpetraExt::ModelEvaluator::DERIV_LINEAR_OP))
1610 ds.plus(ModelEvaluatorBase::DERIV_LINEAR_OP);
1611 if(derivativeSupport.supports(EpetraExt::ModelEvaluator::DERIV_MV_BY_COL))
1612 ds.plus(ModelEvaluatorBase::DERIV_MV_BY_COL);
1613 if(derivativeSupport.supports(EpetraExt::ModelEvaluator::DERIV_TRANS_MV_BY_ROW))
1614 ds.plus(ModelEvaluatorBase::DERIV_TRANS_MV_BY_ROW);
1619 EpetraExt::ModelEvaluator::Derivative
1621 const ModelEvaluatorBase::Derivative<double> &derivative,
1622 const RCP<const Epetra_Map> &fnc_map,
1623 const RCP<const Epetra_Map> &var_map
1626 typedef ModelEvaluatorBase MEB;
1627 if(derivative.getLinearOp().get()) {
1628 return EpetraExt::ModelEvaluator::Derivative(
1629 Teuchos::rcp_const_cast<Epetra_Operator>(
1630 Teuchos::dyn_cast<const EpetraLinearOp>(*derivative.getLinearOp()).epetra_op()
1634 else if(derivative.getDerivativeMultiVector().getMultiVector().get()) {
1635 return EpetraExt::ModelEvaluator::Derivative(
1636 EpetraExt::ModelEvaluator::DerivativeMultiVector(
1638 ( derivative.getDerivativeMultiVector().getOrientation() == MEB::DERIV_MV_BY_COL
1642 ,derivative.getDerivativeMultiVector().getMultiVector()
1644 ,
convert(derivative.getDerivativeMultiVector().getOrientation())
1648 return EpetraExt::ModelEvaluator::Derivative();
1650 EpetraExt::ModelEvaluator::MPDerivative
1652 const ModelEvaluatorBase::MPDerivative &derivative,
1653 const RCP<const Epetra_Map> &fnc_map,
1654 const RCP<const Epetra_Map> &var_map
1658 if(derivative.getLinearOp().get()) {
1659 return EpetraExt::ModelEvaluator::MPDerivative(
1660 derivative.getLinearOp()
1663 else if(derivative.getDerivativeMultiVector().getMultiVector().get()) {
1664 return EpetraExt::ModelEvaluator::MPDerivative(
1665 EpetraExt::ModelEvaluator::MPDerivativeMultiVector(
1666 derivative.getDerivativeMultiVector().getMultiVector()
1667 ,
convert(derivative.getDerivativeMultiVector().getOrientation())
1671 return EpetraExt::ModelEvaluator::MPDerivative();
RCP< Epetra_MultiVector > get_Epetra_MultiVector(const Epetra_Map &map, const RCP< MultiVectorBase< double > > &mv)
Get a non-const Epetra_MultiVector view from a non-const MultiVectorBase object if possible...
void preEvalScalingSetup(EpetraExt::ModelEvaluator::InArgs *epetraInArgs, EpetraExt::ModelEvaluator::OutArgs *epetraUnscaledOutArgs, const RCP< Teuchos::FancyOStream > &out, const Teuchos::EVerbosityLevel verbLevel) const
void setNominalValues(const ModelEvaluatorBase::InArgs< double > &nominalValues)
Set the nominal values.
RCP< const EpetraExt::ModelEvaluator > getEpetraModel() const
bool finalPointWasSolved() const
Concrete LinearOpBase adapter subclass for Epetra_Operator object.
RCP< const VectorSpaceBase< double > > get_g_space(int j) const
RCP< const Epetra_Map > x_map_
void reportFinalPoint(const ModelEvaluatorBase::InArgs< double > &finalPoint, const bool wasSolved)
RCP< EpetraLinearOp > create_epetra_W_op() const
RCP< LinearOpBase< double > > create_W_op() const
void evalModelImpl(const ModelEvaluatorBase::InArgs< double > &inArgs, const ModelEvaluatorBase::OutArgs< double > &outArgs) const
void updateInArgsOutArgs() const
RCP< const VectorSpaceBase< double > > get_x_space() const
RCP< Teuchos::ParameterList > getNonconstParameterList()
p_map_is_local_t g_map_is_local_
RCP< LinearOpWithSolveFactoryBase< double > > W_factory_
RCP< const VectorSpaceBase< double > > create_VectorSpace(const RCP< const Epetra_Map > &epetra_map)
Create an VectorSpaceBase object given an Epetra_Map object.
EStateFunctionScaling stateFunctionScaling_
std::string description() const
void setStateVariableScalingVec(const RCP< const Epetra_Vector > &stateVariableScalingVec)
Set the state variable scaling vector s_x (see above).
void convertInArgsFromThyraToEpetra(const ModelEvaluatorBase::InArgs< double > &inArgs, EpetraExt::ModelEvaluator::InArgs *epetraInArgs) const
RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
RCP< const Teuchos::ParameterList > getParameterList() const
ModelEvaluatorBase::OutArgs< double > createOutArgsImpl() const
const ModelEvaluatorBase::InArgs< double > & getFinalPoint() const
void convertOutArgsFromThyraToEpetra(const ModelEvaluatorBase::OutArgs< double > &outArgs, EpetraExt::ModelEvaluator::OutArgs *epetraUnscaledOutArgs, RCP< LinearOpBase< double > > *W_op, RCP< EpetraLinearOp > *efwdW, RCP< Epetra_Operator > *eW) const
EpetraExt::ModelEvaluator::OutArgs epetraOutArgsScaling_
RCP< const VectorSpaceBase< double > > x_space_
ModelEvaluatorBase::OutArgs< double > prototypeOutArgs_
RCP< const Epetra_Vector > getStateVariableInvScalingVec() const
Get the state variable scaling vector s_x (see above).
ModelEvaluatorBase::InArgs< double > getNominalValues() const
RCP< LinearOpBase< double > > create_DgDx_dot_op_impl(int j) const
EpetraExt::ModelEvaluator::MPDerivative convert(const ModelEvaluatorBase::MPDerivative &derivative, const RCP< const Epetra_Map > &fnc_map, const RCP< const Epetra_Map > &var_map)
void finishConvertingOutArgsFromEpetraToThyra(const EpetraExt::ModelEvaluator::OutArgs &epetraOutArgs, RCP< LinearOpBase< double > > &W_op, RCP< EpetraLinearOp > &efwdW, RCP< Epetra_Operator > &eW, const ModelEvaluatorBase::OutArgs< double > &outArgs) const
RCP< VectorBase< double > > create_Vector(const RCP< Epetra_Vector > &epetra_v, const RCP< const VectorSpaceBase< double > > &space=Teuchos::null)
Create a non-const VectorBase object from a non-const Epetra_Vector object.
RCP< const VectorSpaceBase< double > > f_space_
ModelEvaluatorBase::InArgs< double > finalPoint_
void setStateFunctionScalingVec(const RCP< const Epetra_Vector > &stateFunctionScalingVec)
Set the state function scaling vector s_f (see above).
void postEvalScalingSetup(const EpetraExt::ModelEvaluator::OutArgs &epetraUnscaledOutArgs, const RCP< Teuchos::FancyOStream > &out, const Teuchos::EVerbosityLevel verbLevel) const
ModelEvaluatorBase::InArgs< double > lowerBounds_
RCP< Epetra_Vector > get_Epetra_Vector(const Epetra_Map &map, const RCP< VectorBase< double > > &v)
Get a non-const Epetra_Vector view from a non-const VectorBase object if possible.
void initialize(const RCP< const EpetraExt::ModelEvaluator > &epetraModel, const RCP< LinearOpWithSolveFactoryBase< double > > &W_factory)
ModelEvaluatorBase::InArgs< double > getLowerBounds() const
EpetraExt::ModelEvaluator::InArgs epetraInArgsScaling_
bool currentInArgsOutArgs_
bool finalPointWasSolved_
void setParameterList(RCP< Teuchos::ParameterList > const ¶mList)
void updateNominalValuesAndBounds() const
RCP< const Epetra_Vector > stateFunctionScalingVec_
ModelEvaluatorBase::EDerivativeMultiVectorOrientation convert(const EpetraExt::ModelEvaluator::EDerivativeMultiVectorOrientation &mvOrientation)
void uninitialize(RCP< const EpetraExt::ModelEvaluator > *epetraModel=NULL, RCP< LinearOpWithSolveFactoryBase< double > > *W_factory=NULL)
bool nominalValuesAndBoundsAreUpdated_
RCP< LinearOpBase< double > > create_DfDp_op_impl(int l) const
void convertInArgsFromEpetraToThyra(const EpetraExt::ModelEvaluator::InArgs &epetraInArgs, ModelEvaluatorBase::InArgs< double > *inArgs) const
ModelEvaluatorBase::InArgs< double > prototypeInArgs_
ModelEvaluatorBase::InArgs< double > getUpperBounds() const
RCP< const Epetra_Map > f_map_
RCP< LinearOpBase< double > > create_DgDp_op_impl(int j, int l) const
RCP< const Epetra_Vector > stateVariableScalingVec_
RCP< const EpetraExt::ModelEvaluator > epetraModel_
RCP< Teuchos::ParameterList > paramList_
ModelEvaluatorBase::InArgs< double > nominalValues_
RCP< PreconditionerBase< double > > create_W_prec() const
Returns null currently.
p_map_is_local_t p_map_is_local_
RCP< const Epetra_Vector > getStateFunctionScalingVec() const
Get the state function scaling vector s_f (see above).
RCP< const LinearOpWithSolveFactoryBase< double > > get_W_factory() const
Teuchos::ArrayView< const std::string > get_g_names(int j) const
RCP< LinearOpBase< double > > create_DgDx_op_impl(int j) const
ModelEvaluatorBase::InArgs< double > createInArgs() const
RCP< const VectorSpaceBase< double > > get_f_space() const
RCP< const VectorSpaceBase< double > > get_p_space(int l) const
RCP< const Epetra_Vector > getStateVariableScalingVec() const
Get the inverse state variable scaling vector inv_s_x (see above).
RCP< Teuchos::ParameterList > unsetParameterList()
RCP< const Teuchos::ParameterList > getValidParameters() const
RCP< const Epetra_Vector > invStateVariableScalingVec_
ModelEvaluatorBase::InArgs< double > upperBounds_