42 #ifndef THYRA_EPETRA_MODEL_EVALUATOR_HPP 43 #define THYRA_EPETRA_MODEL_EVALUATOR_HPP 45 #include "Thyra_ModelEvaluatorDefaultBase.hpp" 47 #include "Thyra_LinearOpWithSolveFactoryBase.hpp" 48 #include "EpetraExt_ModelEvaluator.h" 49 #include "Epetra_Map.h" 50 #include "Teuchos_Array.hpp" 177 virtual public Teuchos::ParameterListAcceptor
189 const RCP<const EpetraExt::ModelEvaluator> &epetraModel,
195 const RCP<const EpetraExt::ModelEvaluator> &epetraModel,
217 const RCP<const Epetra_Vector> &stateVariableScalingVec
222 RCP<const Epetra_Vector>
227 RCP<const Epetra_Vector>
233 const RCP<const Epetra_Vector> &stateFunctionScalingVec
238 RCP<const Epetra_Vector>
243 RCP<const EpetraExt::ModelEvaluator> *epetraModel = NULL,
287 RCP<const VectorSpaceBase<double> >
get_x_space()
const;
289 RCP<const VectorSpaceBase<double> >
get_f_space()
const;
291 RCP<const VectorSpaceBase<double> >
get_p_space(
int l)
const;
293 RCP<const Teuchos::Array<std::string> >
get_p_names(
int l)
const;
295 RCP<const VectorSpaceBase<double> >
get_g_space(
int j)
const;
297 Teuchos::ArrayView<const std::string>
get_g_names(
int j)
const;
309 RCP<const LinearOpWithSolveFactoryBase<double> >
get_W_factory()
const;
315 ,
const bool wasSolved
322 enum EStateFunctionScaling { STATE_FUNC_SCALING_NONE, STATE_FUNC_SCALING_ROW_SUM };
330 RCP<LinearOpBase<double> > create_DfDp_op_impl(
int l)
const;
332 RCP<LinearOpBase<double> > create_DgDx_dot_op_impl(
int j)
const;
334 RCP<LinearOpBase<double> > create_DgDx_op_impl(
int j)
const;
336 RCP<LinearOpBase<double> > create_DgDp_op_impl(
int j,
int l)
const;
352 typedef Teuchos::Array<RCP<const Epetra_Map> > p_map_t;
353 typedef Teuchos::Array<RCP<const Epetra_Map> > g_map_t;
354 typedef std::vector<bool> p_map_is_local_t;
355 typedef std::vector<bool> g_map_is_local_t;
357 typedef Teuchos::Array<RCP<const VectorSpaceBase<double> > >
359 typedef Teuchos::Array<RCP<const VectorSpaceBase<double> > >
365 RCP<const EpetraExt::ModelEvaluator> epetraModel_;
367 RCP<Teuchos::ParameterList> paramList_;
369 RCP<LinearOpWithSolveFactoryBase<double> > W_factory_;
371 RCP<const Epetra_Map> x_map_;
374 p_map_is_local_t p_map_is_local_;
375 p_map_is_local_t g_map_is_local_;
376 RCP<const Epetra_Map> f_map_;
378 RCP<const VectorSpaceBase<double> > x_space_;
380 RCP<const VectorSpaceBase<double> > f_space_;
386 mutable bool nominalValuesAndBoundsAreUpdated_;
390 EStateFunctionScaling stateFunctionScaling_;
391 mutable RCP<const Epetra_Vector> stateFunctionScalingVec_;
393 RCP<const Epetra_Vector> stateVariableScalingVec_;
394 mutable RCP<const Epetra_Vector> invStateVariableScalingVec_;
395 mutable EpetraExt::ModelEvaluator::InArgs epetraInArgsScaling_;
396 mutable EpetraExt::ModelEvaluator::OutArgs epetraOutArgsScaling_;
398 mutable RCP<Epetra_Vector> x_unscaled_;
399 mutable RCP<Epetra_Vector> x_dot_unscaled_;
403 mutable bool currentInArgsOutArgs_;
405 bool finalPointWasSolved_;
411 void convertInArgsFromEpetraToThyra(
412 const EpetraExt::ModelEvaluator::InArgs &epetraInArgs,
417 void convertInArgsFromThyraToEpetra(
419 EpetraExt::ModelEvaluator::InArgs *epetraInArgs
423 void convertOutArgsFromThyraToEpetra(
427 EpetraExt::ModelEvaluator::OutArgs *epetraUnscaledOutArgs,
430 RCP<EpetraLinearOp> *efwdW,
432 RCP<Epetra_Operator> *eW
436 void preEvalScalingSetup(
437 EpetraExt::ModelEvaluator::InArgs *epetraInArgs,
438 EpetraExt::ModelEvaluator::OutArgs *epetraUnscaledOutArgs,
439 const RCP<Teuchos::FancyOStream> &out,
440 const Teuchos::EVerbosityLevel verbLevel
444 void postEvalScalingSetup(
445 const EpetraExt::ModelEvaluator::OutArgs &epetraUnscaledOutArgs,
446 const RCP<Teuchos::FancyOStream> &out,
447 const Teuchos::EVerbosityLevel verbLevel
451 void finishConvertingOutArgsFromEpetraToThyra(
452 const EpetraExt::ModelEvaluator::OutArgs &epetraOutArgs,
454 RCP<EpetraLinearOp> &efwdW,
455 RCP<Epetra_Operator> &eW,
463 void updateNominalValuesAndBounds()
const;
466 void updateInArgsOutArgs()
const;
469 RCP<EpetraLinearOp> create_epetra_W_op()
const;
482 RCP<EpetraModelEvaluator>
483 epetraModelEvaluator(
484 const RCP<const EpetraExt::ModelEvaluator> &epetraModel,
493 convert(
const EpetraExt::ModelEvaluator::EDerivativeMultiVectorOrientation &mvOrientation );
499 EpetraExt::ModelEvaluator::EDerivativeMultiVectorOrientation
507 convert(
const EpetraExt::ModelEvaluator::DerivativeProperties &derivativeProperties );
514 convert(
const EpetraExt::ModelEvaluator::DerivativeSupport &derivativeSupport );
520 EpetraExt::ModelEvaluator::Derivative
523 const RCP<const Epetra_Map> &fnc_map,
524 const RCP<const Epetra_Map> &var_map
527 EpetraExt::ModelEvaluator::MPDerivative
530 const RCP<const Epetra_Map> &fnc_map,
531 const RCP<const Epetra_Map> &var_map
537 #endif // THYRA_EPETRA_MODEL_EVALUATOR_HPP void setNominalValues(const ModelEvaluatorBase::InArgs< double > &nominalValues)
Set the nominal values.
RCP< const EpetraExt::ModelEvaluator > getEpetraModel() const
bool finalPointWasSolved() const
RCP< const VectorSpaceBase< double > > get_g_space(int j) const
Default base class for concrete model evaluators.
void reportFinalPoint(const ModelEvaluatorBase::InArgs< double > &finalPoint, const bool wasSolved)
RCP< LinearOpBase< double > > create_W_op() const
RCP< const VectorSpaceBase< double > > get_x_space() const
RCP< Teuchos::ParameterList > getNonconstParameterList()
EDerivativeMultiVectorOrientation
Simple aggregate class that stores a derivative object as a general linear operator or as a multi-vec...
std::string description() const
void setStateVariableScalingVec(const RCP< const Epetra_Vector > &stateVariableScalingVec)
Set the state variable scaling vector s_x (see above).
RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
RCP< const Teuchos::ParameterList > getParameterList() const
const ModelEvaluatorBase::InArgs< double > & getFinalPoint() const
RCP< const Epetra_Vector > getStateVariableInvScalingVec() const
Get the state variable scaling vector s_x (see above).
ModelEvaluatorBase::InArgs< double > getNominalValues() const
void setStateFunctionScalingVec(const RCP< const Epetra_Vector > &stateFunctionScalingVec)
Set the state function scaling vector s_f (see above).
void initialize(const RCP< const EpetraExt::ModelEvaluator > &epetraModel, const RCP< LinearOpWithSolveFactoryBase< double > > &W_factory)
ModelEvaluatorBase::InArgs< double > getLowerBounds() const
Simple public strict containing properties of a derivative object.
Concrete Adapter subclass that takes an EpetraExt::ModelEvaluator object and wraps it as a Thyra::Mod...
void setParameterList(RCP< Teuchos::ParameterList > const ¶mList)
void uninitialize(RCP< const EpetraExt::ModelEvaluator > *epetraModel=NULL, RCP< LinearOpWithSolveFactoryBase< double > > *W_factory=NULL)
ModelEvaluatorBase::InArgs< double > getUpperBounds() const
Determines the forms of a general derivative that are supported.
RCP< PreconditionerBase< double > > create_W_prec() const
Returns null currently.
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
Simple aggregate class that stores a derivative object as a general linear operator or as a multi-vec...
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