42 #ifndef THYRA_MODEL_EVALUATOR_BASE_DECL_HPP
43 #define THYRA_MODEL_EVALUATOR_BASE_DECL_HPP
46 #include "Thyra_LinearOpWithSolveBase.hpp"
47 #include "Teuchos_Describable.hpp"
48 #include "Teuchos_any.hpp"
49 #include "Teuchos_Assert.hpp"
51 #ifdef HAVE_THYRA_ME_POLYNOMIAL
52 # include "Teuchos_Polynomial.hpp"
56 class ProductEpetraVector;
57 class ProductEpetraMultiVector;
58 class ProductEpetraOperator;
158 template<
class Scalar>
205 template<
typename ObjectType>
208 template<
typename ObjectType>
211 template<
typename ObjectType>
214 #ifdef HAVE_THYRA_ME_POLYNOMIAL
225 #endif // HAVE_THYRA_ME_POLYNOMIAL
276 bool cloneObjects =
false
301 template<
typename ObjectType>
310 std::string modelEvalDescription_;
321 #ifdef HAVE_THYRA_ME_POLYNOMIAL
324 #endif // HAVE_THYRA_ME_POLYNOMIAL
330 Scalar W_x_dot_dot_coeff_;
332 Scalar stage_number_;
338 void assert_l(
int l)
const;
339 void assert_j(
int j)
const;
341 std::map<std::string,Teuchos::any> extended_inargs_;
357 template<
class ObjType>
362 : evalType_(EVAL_TYPE_EXACT) {}
367 :
RCP<ObjType>(obj), evalType_(EVAL_TYPE_EXACT) {}
370 :
RCP<ObjType>(obj), evalType_(evalType) {}
375 { this->
operator=(obj); evalType_ = evalType; }
399 :supportsLinearOp_(false), supportsMVByCol_(false), supportsTransMVByRow_(false)
403 :supportsLinearOp_(true), supportsMVByCol_(false), supportsTransMVByRow_(false)
407 :supportsLinearOp_(false), supportsMVByCol_(mvOrientation==
DERIV_MV_BY_COL)
412 { supportsLinearOp_ =
true;
return *
this; }
416 switch(mvOrientation) {
425 {
return ( !supportsLinearOp_ && !supportsMVByCol_ && !supportsTransMVByRow_ ); }
428 {
return supportsLinearOp_; }
432 switch(mvOrientation) {
443 supportsLinearOp_ == derivSupport.supportsLinearOp_
444 && supportsMVByCol_ == derivSupport.supportsMVByCol_
445 && supportsTransMVByRow_ == derivSupport.supportsTransMVByRow_
451 bool supportsLinearOp_;
452 bool supportsMVByCol_;
453 bool supportsTransMVByRow_;
488 bool in_supportsAdjoint
498 template<
class Scalar>
512 { orientation_ = orientation; };
515 { mv_.assert_not_null();
return *
this; }
521 {
return orientation_; }
536 template<
class Scalar>
548 ) : dmv_(mv,orientation) {}
554 {
return ( lo_.get()==NULL && dmv_.getMultiVector().get()==NULL ); }
557 { dmv_.assert_not_null(); lo_.assert_not_null();
return *
this; }
563 {
return dmv_.getMultiVector(); }
566 {
return dmv_.getOrientation(); }
576 if (derivSupport.
none())
612 ) : mv_(mv.
assert_not_null()), orientation_(orientation), paramIndexes_(paramIndexes) {}
615 { orientation_ = orientation; };
624 {
return orientation_; }
627 {
return paramIndexes_; }
654 ) : dmv_(mv,orientation) {}
682 if (derivSupport.
none())
737 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
739 enum EOutArgs_hess_vec_prod_f_xx {
740 OUT_ARG_hess_vec_prod_f_xx
744 enum EOutArgs_hess_vec_prod_f_xp {
745 OUT_ARG_hess_vec_prod_f_xp
749 enum EOutArgs_hess_vec_prod_f_px {
750 OUT_ARG_hess_vec_prod_f_px
754 enum EOutArgs_hess_vec_prod_f_pp {
755 OUT_ARG_hess_vec_prod_f_pp
759 enum EOutArgs_hess_vec_prod_g_xx {
760 OUT_ARG_hess_vec_prod_g_xx
764 enum EOutArgs_hess_vec_prod_g_xp {
765 OUT_ARG_hess_vec_prod_g_xp
769 enum EOutArgs_hess_vec_prod_g_px {
770 OUT_ARG_hess_vec_prod_g_px
774 enum EOutArgs_hess_vec_prod_g_pp {
775 OUT_ARG_hess_vec_prod_g_pp
779 enum EOutArgs_hess_f_xx {
784 enum EOutArgs_hess_f_xp {
789 enum EOutArgs_hess_f_pp {
794 enum EOutArgs_hess_g_xx {
799 enum EOutArgs_hess_g_xp {
804 enum EOutArgs_hess_g_pp {
822 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
901 template<
class Scalar>
927 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
929 bool supports(EOutArgs_hess_vec_prod_f_xx arg)
const;
932 bool supports(EOutArgs_hess_vec_prod_f_xp arg,
int l)
const;
935 bool supports(EOutArgs_hess_vec_prod_f_px arg,
int l)
const;
938 bool supports(EOutArgs_hess_vec_prod_f_pp arg,
int l1,
int l2)
const;
941 bool supports(EOutArgs_hess_vec_prod_g_xx arg,
int j)
const;
944 bool supports(EOutArgs_hess_vec_prod_g_xp arg,
int j,
int l)
const;
947 bool supports(EOutArgs_hess_vec_prod_g_px arg,
int j,
int l)
const;
950 bool supports(EOutArgs_hess_vec_prod_g_pp arg,
int j,
int l1,
int l2)
const;
952 bool supports(EOutArgs_hess_f_xx arg)
const;
955 bool supports(EOutArgs_hess_f_xp arg,
int l)
const;
958 bool supports(EOutArgs_hess_f_pp arg,
int l1,
int l2)
const;
961 bool supports(EOutArgs_hess_g_xx arg,
int j)
const;
964 bool supports(EOutArgs_hess_g_xp arg,
int j,
int l)
const;
967 bool supports(EOutArgs_hess_g_pp arg,
int j,
int l1,
int l2)
const;
969 bool supports(EOutArgs_H_xx arg)
const;
972 bool supports(EOutArgs_H_xp arg,
int l)
const;
975 bool supports(EOutArgs_H_pp arg,
int l1,
int l2)
const;
976 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
992 template<
typename ObjectType>
995 template<
typename ObjectType>
998 template<
typename ObjectType>
1059 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
1135 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
1137 void set_DfDp_mp(
int l,
const MPDerivative &DfDp_mp_l);
1140 void set_DgDx_dot_mp(
int j,
const MPDerivative &DgDx_dot_mp_j);
1143 void set_DgDx_mp(
int j,
const MPDerivative &DgDx_mp_j);
1146 void set_DgDp_mp(
int j,
int l,
const MPDerivative &DgDp_mp_j_l );
1150 #ifdef HAVE_THYRA_ME_POLYNOMIAL
1155 #endif // HAVE_THYRA_ME_POLYNOMIAL
1201 template<
typename ObjectType>
1212 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
1215 void _setSupports( EOutArgs_hess_vec_prod_f_xx arg,
bool supports );
1217 void _setSupports( EOutArgs_hess_vec_prod_f_xp arg,
int l,
bool supports );
1219 void _setSupports( EOutArgs_hess_vec_prod_f_px arg,
int l,
bool supports );
1221 void _setSupports( EOutArgs_hess_vec_prod_f_pp arg,
int l1,
int l2,
bool supports );
1223 void _setSupports( EOutArgs_hess_vec_prod_g_xx arg,
int j,
bool supports );
1225 void _setSupports( EOutArgs_hess_vec_prod_g_xp arg,
int j,
int l,
bool supports );
1227 void _setSupports( EOutArgs_hess_vec_prod_g_px arg,
int j,
int l,
bool supports );
1229 void _setSupports( EOutArgs_hess_vec_prod_g_pp arg,
int j,
int l1,
int l2,
bool supports );
1232 void _setSupports( EOutArgs_hess_f_xx arg,
bool supports );
1234 void _setSupports( EOutArgs_hess_f_xp arg,
int l,
bool supports );
1236 void _setSupports( EOutArgs_hess_f_pp arg,
int l1,
int l2,
bool supports );
1238 void _setSupports( EOutArgs_hess_g_xx arg,
int j,
bool supports );
1240 void _setSupports( EOutArgs_hess_g_xp arg,
int j,
int l,
bool supports );
1242 void _setSupports( EOutArgs_hess_g_pp arg,
int j,
int l1,
int l2,
bool supports );
1246 void _setSupports( EOutArgs_H_xp arg,
int l,
bool supports );
1248 void _setSupports( EOutArgs_H_pp arg,
int l1,
int l2,
bool supports );
1250 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
1280 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
1282 void _setHessianSupports(
const bool supports );
1283 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
1291 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
1295 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
1298 std::string modelEvalDescription_;
1305 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
1307 bool supports_hess_f_xx_;
1308 hess_supports_t supports_hess_f_xp_;
1309 hess_supports_t supports_hess_f_pp_;
1310 hess_supports_t supports_hess_g_xx_;
1311 hess_supports_t supports_hess_g_xp_;
1312 hess_supports_t supports_hess_g_pp_;
1313 bool supports_H_xx_;
1314 hess_supports_t supports_H_xp_;
1315 hess_supports_t supports_H_pp_;
1317 bool supports_hess_vec_prod_f_xx_;
1318 hess_supports_t supports_hess_vec_prod_f_xp_;
1319 hess_supports_t supports_hess_vec_prod_f_px_;
1320 hess_supports_t supports_hess_vec_prod_f_pp_;
1321 hess_supports_t supports_hess_vec_prod_g_xx_;
1322 hess_supports_t supports_hess_vec_prod_g_xp_;
1323 hess_supports_t supports_hess_vec_prod_g_px_;
1324 hess_supports_t supports_hess_vec_prod_g_pp_;
1326 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
1343 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
1356 hess_vec_t hess_vec_prod_f_xp_;
1357 hess_vec_t hess_vec_prod_f_px_;
1358 hess_vec_t hess_vec_prod_f_pp_;
1360 hess_vec_t hess_vec_prod_g_xx_;
1361 hess_vec_t hess_vec_prod_g_xp_;
1362 hess_vec_t hess_vec_prod_g_px_;
1363 hess_vec_t hess_vec_prod_g_pp_;
1365 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
1384 #ifdef HAVE_THYRA_ME_POLYNOMIAL
1386 #endif // HAVE_THYRA_ME_POLYNOMIAL
1387 mutable bool isFailed_;
1389 std::map<std::string,Teuchos::any> extended_outargs_;
1393 void assert_supports(
1397 void assert_supports(
1401 void assert_supports(
1405 void assert_supports(
1410 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
1412 void assert_supports(
1413 EOutArgs_hess_vec_prod_f_xx arg
1415 void assert_supports(
1416 EOutArgs_hess_vec_prod_f_xp arg,
int l
1418 void assert_supports(
1419 EOutArgs_hess_vec_prod_f_px arg,
int l
1421 void assert_supports(
1422 EOutArgs_hess_vec_prod_f_pp arg,
int l1,
int l2
1424 void assert_supports(
1425 EOutArgs_hess_vec_prod_g_xx arg,
int j
1427 void assert_supports(
1428 EOutArgs_hess_vec_prod_g_xp arg,
int j,
int l
1430 void assert_supports(
1431 EOutArgs_hess_vec_prod_g_px arg,
int j,
int l
1433 void assert_supports(
1434 EOutArgs_hess_vec_prod_g_pp arg,
int j,
int l1,
int l2
1437 void assert_supports(
1438 EOutArgs_hess_f_xx arg
1440 void assert_supports(
1441 EOutArgs_hess_f_xp arg,
int l
1443 void assert_supports(
1444 EOutArgs_hess_f_pp arg,
int l1,
int l2
1446 void assert_supports(
1447 EOutArgs_hess_g_xx arg,
int j
1449 void assert_supports(
1450 EOutArgs_hess_g_xp arg,
int j,
int l
1452 void assert_supports(
1453 EOutArgs_hess_g_pp arg,
int j,
int l1,
int l2
1455 void assert_supports(
1458 void assert_supports(
1459 EOutArgs_H_xp arg,
int l
1461 void assert_supports(
1462 EOutArgs_H_pp arg,
int l1,
int l2
1465 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
1468 void assert_supports(
1472 void assert_supports(
1476 void assert_supports(
1480 void assert_supports(
1485 void assert_l(
int l)
const;
1486 void assert_j(
int j)
const;
1492 #ifdef HAVE_PROTECTED_NESTED_TEMPLATE_CLASS_ACCESS
1506 template<
class Scalar>
1524 template<
typename ObjectType>
1539 template<
class Scalar>
1561 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
1577 void setSupports(EOutArgs_hess_vec_prod_g_pp arg,
int j,
int l1,
int l2,
bool supports =
true );
1596 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
1599 template<
typename ObjectType>
1631 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
1633 void setHessianSupports(
const bool supports =
true );
1634 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
1671 getOtherDerivativeMultiVectorOrientation(
1683 template<
class Scalar>
1684 template<
typename ObjectType>
1687 std::map<std::string,Teuchos::any>::const_iterator search =
1688 extended_inargs_.find(
typeid(ObjectType).name());
1690 if (search == extended_inargs_.end())
1696 template<
class Scalar>
1697 template<
typename ObjectType>
1700 std::map<std::string,Teuchos::any>::iterator search = extended_inargs_.find(
typeid(ObjectType).name());
1703 "ERROR: InArgs::set<ObjectType>() was called with unsupported extended data type \""
1704 <<
typeid(ObjectType).name() <<
"\"!");
1709 template<
class Scalar>
1710 template<
typename ObjectType>
1714 std::map<std::string,Teuchos::any>::const_iterator search = extended_inargs_.find(
typeid(ObjectType).name());
1717 "ERROR: InArgs::get<ObjectType>() was called with unsupported extended data type \""
1718 <<
typeid(ObjectType).name() <<
"\"!");
1723 template<
class Scalar>
1724 template<
class ObjectType>
1728 this->
template _setSupports<ObjectType>(in_supports);
1731 template<
class Scalar>
1732 template<
class ObjectType>
1741 this->extended_inargs_[
typeid(ObjectType).name()] =
Teuchos::any();
1744 std::map<std::string,Teuchos::any>::iterator search =
1745 this->extended_inargs_.find(
typeid(ObjectType).name());
1747 if (search != this->extended_inargs_.end())
1748 this->extended_inargs_.erase(
typeid(ObjectType).name());
1753 template<
class Scalar>
1754 template<
typename ObjectType>
1757 std::map<std::string,Teuchos::any>::const_iterator search =
1758 extended_outargs_.find(
typeid(ObjectType).name());
1760 if (search == extended_outargs_.end())
1766 template<
class Scalar>
1767 template<
typename ObjectType>
1770 std::map<std::string,Teuchos::any>::iterator search = extended_outargs_.find(
typeid(ObjectType).name());
1773 "ERROR: OutArgs::set<ObjectType>() was called with unsupported extended data type \""
1774 <<
typeid(ObjectType).name() <<
"\"!");
1779 template<
class Scalar>
1780 template<
typename ObjectType>
1784 std::map<std::string,Teuchos::any>::const_iterator search = extended_outargs_.find(
typeid(ObjectType).name());
1787 "ERROR: OutArgs::get<ObjectType>() was called with unsupported extended data type \""
1788 <<
typeid(ObjectType).name() <<
"\"!");
1793 template<
class Scalar>
1794 template<
class ObjectType>
1798 this->
template _setSupports<ObjectType>(in_supports);
1801 template<
class Scalar>
1802 template<
class ObjectType>
1811 this->extended_outargs_[
typeid(ObjectType).name()] =
Teuchos::any();
1814 std::map<std::string,Teuchos::any>::iterator search =
1815 this->extended_outargs_.find(
typeid(ObjectType).name());
1817 if (search != this->extended_outargs_.end())
1818 this->extended_outargs_.erase(
typeid(ObjectType).name());
1831 case ModelEvaluatorBase::IN_ARG_x_dot_dot:
1832 return "IN_ARG_x_dot_dot";
1833 case ModelEvaluatorBase::IN_ARG_x_dot:
1834 return "IN_ARG_x_dot";
1835 case ModelEvaluatorBase::IN_ARG_x:
1837 case ModelEvaluatorBase::IN_ARG_x_dot_poly:
1838 return "IN_ARG_x_dot_poly";
1839 case ModelEvaluatorBase::IN_ARG_x_poly:
1840 return "IN_ARG_x_poly";
1841 case ModelEvaluatorBase::IN_ARG_x_dot_mp:
1842 return "IN_ARG_x_dot_mp";
1843 case ModelEvaluatorBase::IN_ARG_x_mp:
1844 return "IN_ARG_x_mp";
1845 case ModelEvaluatorBase::IN_ARG_t:
1847 case ModelEvaluatorBase::IN_ARG_alpha:
1848 return "IN_ARG_alpha";
1849 case ModelEvaluatorBase::IN_ARG_beta:
1850 return "IN_ARG_beta";
1851 case ModelEvaluatorBase::IN_ARG_W_x_dot_dot_coeff:
1852 return "IN_ARG_W_x_dot_dot_coeff";
1853 case ModelEvaluatorBase::IN_ARG_step_size:
1854 return "IN_ARG_step_size";
1855 case ModelEvaluatorBase::IN_ARG_stage_number:
1856 return "IN_ARG_stage_number";
1857 #ifdef TEUCHOS_DEBUG
1870 case ModelEvaluatorBase::OUT_ARG_f:
1872 case ModelEvaluatorBase::OUT_ARG_W:
1874 case ModelEvaluatorBase::OUT_ARG_f_mp:
1875 return "OUT_ARG_f_mp";
1876 case ModelEvaluatorBase::OUT_ARG_W_mp:
1877 return "OUT_ARG_W_mp";
1878 case ModelEvaluatorBase::OUT_ARG_W_op:
1879 return "OUT_ARG_W_op";
1880 case ModelEvaluatorBase::OUT_ARG_W_prec:
1881 return "OUT_ARG_W_prec";
1882 case ModelEvaluatorBase::OUT_ARG_f_poly:
1883 return "OUT_ARG_f_poly";
1884 #ifdef TEUCHOS_DEBUG
1895 ModelEvaluatorBase::EDerivativeMultiVectorOrientation orientation
1898 switch(orientation) {
1899 case ModelEvaluatorBase::DERIV_MV_BY_COL:
1900 return "DERIV_MV_BY_COL";
1901 case ModelEvaluatorBase::DERIV_TRANS_MV_BY_ROW:
1902 return "DERIV_TRANS_MV_BY_ROW";
1903 #ifdef TEUCHOS_DEBUG
1914 Thyra::getOtherDerivativeMultiVectorOrientation(
1915 ModelEvaluatorBase::EDerivativeMultiVectorOrientation orientation
1918 switch(orientation) {
1919 case ModelEvaluatorBase::DERIV_MV_BY_COL:
1920 return ModelEvaluatorBase::DERIV_TRANS_MV_BY_ROW;
1921 case ModelEvaluatorBase::DERIV_TRANS_MV_BY_ROW:
1922 return ModelEvaluatorBase::DERIV_MV_BY_COL;
1923 #ifdef TEUCHOS_DEBUG
1928 return ModelEvaluatorBase::DERIV_MV_BY_COL;
1932 #endif // THYRA_MODEL_EVALUATOR_BASE_DECL_HPP
Protected subclass of InArgs that only ModelEvaluator subclasses can access to set up the selection o...
int Ng() const
Return the number of axillary response functions g(j)(...) supported (Ng >= 0).
bool supports(EDerivativeMultiVectorOrientation mvOrientation) const
EDerivativeMultiVectorOrientation getOrientation() const
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Create a more detailed description along about this object and the ModelEvaluator that created it...
RCP< Stokhos::ProductEpetraMultiVector > getMultiVector() const
RCP< MultiVectorBase< Scalar > > getMultiVector() const
std::string description() const
void set_DgDx_properties(int j, const DerivativeProperties &properties)
void _set_Np_Ng(int Np, int Ng)
MPDerivative(const RCP< Stokhos::ProductEpetraOperator > &lo)
void set_DfDp_properties(int l, const DerivativeProperties &properties)
Base class for all linear operators that can support a high-level solve operation.
bool is_null(const boost::shared_ptr< T > &p)
void set_step_size(Scalar step_size)
Precondition: supports(IN_ARG_step_size)==true.
Scalar get_beta() const
Precondition: supports(IN_ARG_beta)==true.
RCP< const VectorBase< Scalar > > get_f_multiplier() const
Precondition: supports(IN_ARG_x)==true.
RCP< Stokhos::ProductEpetraVector > get_g_mp(int j) const
Precondition: supports(OUT_ARG_g_mp)==true..
void set_x_dot_dot(const RCP< const VectorBase< Scalar > > &x_dot_dot)
Precondition: supports(IN_ARG_x_dot_dot)==true.
void setArgs(const OutArgs< Scalar > &outArgs, bool ignoreUnsupported=false)
Set all arguments fron outArgs into *this.
bool supports() const
Determines if an extended input argument of type ObjectType is supported.
ScalarMag get_t() const
.Precondition: supports(IN_ARG_t)==true
static const int NUM_E_IN_ARGS_MEMBERS
void _set_DfDp_properties(int l, const DerivativeProperties &properties)
Concrete aggregate class for all output arguments computable by a ModelEvaluator subclass object...
Derivative< Scalar > get_DfDp(int l) const
Precondition: supports(OUT_ARG_DfDp,l)==true.
void set_g(int j, const Evaluation< VectorBase< Scalar > > &g_j)
Precondition: supports(OUT_ARG_g)==true.
RCP< const VectorBase< Scalar > > get_x_dot() const
Precondition: supports(IN_ARG_x_dot)==true.
EDerivativeMultiVectorOrientation
std::string modelEvalDescription() const
MPDerivative(const RCP< Stokhos::ProductEpetraMultiVector > &mv, const EDerivativeMultiVectorOrientation orientation=DERIV_MV_BY_COL)
static const int NUM_E_OUT_ARGS_MEMBERS
void setModelEvalDescription(const std::string &modelEvalDescription)
void set_W_mp(const RCP< Stokhos::ProductEpetraOperator > &W_mp)
Precondition: supports(OUT_ARG_W_mp)==true.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
void _set_DgDx_dot_properties(int j, const DerivativeProperties &properties)
void set_W_prec(const RCP< PreconditionerBase< Scalar > > &W_prec)
Precondition: supports(OUT_ARG_W_op)==true.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Create a more detailed description along about this object and the ModelEvaluator that created it...
void set_Np_Ng(int Np, int Ng)
EEvalType getType() const
void _setUnsupportsAndRelated(EInArgsMembers arg)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
void set(const RCP< const ObjectType > &uo)
Set an extended output argument of type ObjectType in OutArgs. Precondition: supports()==true.
void changeOrientation(const EDerivativeMultiVectorOrientation orientation)
void describe(Teuchos::FancyOStream &, const Teuchos::EVerbosityLevel) const
MPDerivativeMultiVector()
void set_x_dot_mp(const RCP< const Stokhos::ProductEpetraVector > &x_dot_mp)
Precondition: supports(IN_ARG_x_dot_mp)==true.
void _setUnsupportsAndRelated(EInArgsMembers arg)
Simple aggregate class that stores a derivative object as a general linear operator or as a multi-vec...
void set(const RCP< const ObjectType > &uo)
Set an extended input object of type ObjectType in the InArgs. Precondition: supports()==true.
bool isSameSupport(const DerivativeSupport &derivSupport) const
Evaluation< VectorBase< Scalar > > get_g(int j) const
Precondition: supports(OUT_ARG_g)==true..
DerivativeMultiVector(const RCP< MultiVectorBase< Scalar > > &mv, const EDerivativeMultiVectorOrientation orientation=DERIV_MV_BY_COL)
Evaluation< VectorBase< Scalar > > get_f() const
Precondition: supports(OUT_ARG_f)==true.
Jacobian form DhDz (nz columns of h_space vectors)
RCP< const ObjectType > get() const
Get an extended input object of type ObjectType>/tt> from the InArgs. Precondition: supports()==true...
EDerivativeLinearity linearity
RCP< const Stokhos::ProductEpetraVector > get_x_mp() const
Precondition: supports(IN_ARG_x_mp)==true.
std::string description() const
Do an exact evaluation (default)
void _setSupports(EOutArgsMembers arg, bool supports)
MPDerivative(const MPDerivativeMultiVector &dmv)
Derivative(const RCP< MultiVectorBase< Scalar > > &mv, const EDerivativeMultiVectorOrientation orientation=DERIV_MV_BY_COL)
Evaluation(const RCP< ObjType > &obj)
Implicit conversion from RCP<ObjType>.
Simple interface class to access a precreated preconditioner as one or more linear operators objects ...
DerivativeProperties get_DgDx_dot_properties(int j) const
Return the know properties of DgDx_dot(j) (precondition: supports(OUT_ARG_DgDx_dot,j)==true).
DerivativeSupport & plus(EDerivativeMultiVectorOrientation mvOrientation)
Simple aggregate class for a derivative object represented as a column-wise multi-vector or its trans...
Derivative< Scalar > get_DgDp(int j, int l) const
Precondition: supports(OUT_ARG_DgDp,j,l)==true.
bool isSupportedBy(const DerivativeSupport &derivSupport) const
Returns true if the form of the derivative contained here is supported by deriveSupport.
void changeOrientation(const EDerivativeMultiVectorOrientation orientation)
RCP< const ObjectType > get() const
Get an extended output argument of type ObjectType from OutArgs. Precondition: supports()==true.
Gradient form DhDz^T (nh columns of z_space vectors)
bool isSupportedBy(const DerivativeSupport &derivSupport) const
Returns true if the form of the derivative contained here is supported by deriveSupport.
DerivativeProperties get_DgDx_properties(int j) const
Return the know properties of DgDx(j) (precondition: supports(OUT_ARG_DgDx,j)==true).
Evaluation(const RCP< ObjType > &obj, EEvalType evalType)
MPDerivativeMultiVector getDerivativeMultiVector() const
void set_W_properties(const DerivativeProperties &properties)
void setSupports(EInArgsMembers arg, bool supports=true)
int Np() const
Return the number of parameter subvectors p(l) supported (Np >= 0).
void set_stage_number(Scalar stage_number)
Precondition: supports(IN_ARG_stage_number)==true.
An approx. eval. for a F.D. deriv.
void set_x(const RCP< const VectorBase< Scalar > > &x)
Precondition: supports(IN_ARG_x)==true.
Simple aggregate class for a derivative object represented as a column-wise multi-vector or its trans...
void setUnsupportsAndRelated(EInArgsMembers arg)
Interface for a collection of column vectors called a multi-vector.
void setUnsupportsAndRelated(EInArgsMembers arg)
void setArgs(const InArgs< Scalar > &inArgs, bool ignoreUnsupported=false, bool cloneObjects=false)
Set non-null arguments (does not overwrite non-NULLs with NULLs) .
void set_DgDp(int j, int l, const Derivative< Scalar > &DgDp_j_l)
Precondition: supports(OUT_ARG_DgDp,j,l)==true.
EDerivativeMultiVectorOrientation getMultiVectorOrientation() const
void set_DgDp_properties(int j, int l, const DerivativeProperties &properties)
Teuchos::ScalarTraits< Scalar >::magnitudeType ScalarMag
RCP< Stokhos::ProductEpetraOperator > getLinearOp() const
DerivativeSupport(EDerivativeMultiVectorOrientation mvOrientation)
DerivativeMultiVector< Scalar > getDerivativeMultiVector() const
RCP< const Stokhos::ProductEpetraVector > get_x_dot_mp() const
Precondition: supports(IN_ARG_x_dotmp)==true.
void set_g_multiplier(int j, const RCP< const VectorBase< Scalar > > &g_multiplier)
Precondition: supports(IN_ARG_x)==true.
std::string description() const
Derivative(const DerivativeMultiVector< Scalar > &dmv)
const MPDerivativeMultiVector & assert_not_null() const
void _setModelEvalDescription(const std::string &modelEvalDescription)
Abstract interface for finite-dimensional dense vectors.
void set_Np_Ng(int Np, int Ng)
TEUCHOSCORE_LIB_DLL_EXPORT std::string toString(const EVerbosityLevel verbLevel)
Simple public strict containing properties of a derivative object.
void _setSupports(EInArgsMembers arg, bool supports)
void describe(Teuchos::FancyOStream &, const Teuchos::EVerbosityLevel) const
RCP< T > & operator=(const RCP< T > &r_ptr)
void assertSameSupport(const OutArgs< Scalar > &outArgs) const
Assert that two OutArgs objects have the same support.
EEvalType
The type of an evaluation.
Scalar get_W_x_dot_dot_coeff() const
Precondition: supports(IN_ARG_W_x_dot_dot_coeff)==true.
void set_x_dot(const RCP< const VectorBase< Scalar > > &x_dot)
Precondition: supports(IN_ARG_x_dot)==true.
Base class for all linear operators.
DerivativeSupport(EDerivativeLinearOp)
RCP< Stokhos::ProductEpetraOperator > get_W_mp() const
Precondition: supports(OUT_ARG_W_mp)==true.
DerivativeProperties get_DgDp_properties(int j, int l) const
Return the know properties of DgDp(j,l) (precondition: supports(OUT_ARG_DgDp,j,l)==true).
Derivative(const RCP< LinearOpBase< Scalar > > &lo)
std::string description() const
void set_DgDx_dot_properties(int j, const DerivativeProperties &properties)
bool isFailed() const
Return if the evaluation failed or not.
const RCP< T > & assert_not_null() const
void _set_DgDx_properties(int j, const DerivativeProperties &properties)
void set_g_mp(int j, const RCP< Stokhos::ProductEpetraVector > &g_mp_j)
Precondition: supports(OUT_ARG_g_mp)==true.
DerivativeProperties(EDerivativeLinearity in_linearity, ERankStatus in_rank, bool in_supportsAdjoint)
Base subclass for ModelEvaluator that defines some basic types.
void set_t(ScalarMag t)
Precondition: supports(IN_ARG_t)==true.
void set_p_direction(int l, const RCP< const MultiVectorBase< Scalar > > &p_direction_l)
Precondition: supports(IN_ARG_x)==true.
void set_x_mp(const RCP< const Stokhos::ProductEpetraVector > &x_mp)
Precondition: supports(IN_ARG_x_mp)==true.
void set_DgDx_dot(int j, const Derivative< Scalar > &DgDx_dot_j)
Precondition: supports(OUT_ARG_DgDx_dot,j)==true.
void assertSameSupport(const InArgs< Scalar > &inArgs) const
Assert that two InArgs objects have the same support.
void set_p(int l, const RCP< const VectorBase< Scalar > > &p_l)
Set p(l) where 0 <= l && l < this->Np().
void setSupports(EOutArgsMembers arg, bool supports=true)
RCP< LinearOpWithSolveBase< Scalar > > get_W() const
Precondition: supports(OUT_ARG_W)==true.
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
void _set_DgDp_properties(int j, int l, const DerivativeProperties &properties)
void set_W(const RCP< LinearOpWithSolveBase< Scalar > > &W)
Precondition: supports(OUT_ARG_W)==true.
int Ng() const
Return the number of axillary response functions g(j)(...) supported (Ng >= 0).
Scalar get_alpha() const
Precondition: supports(IN_ARG_alpha)==true.
void setFailed() const
Set that the evaluation as a whole failed.
bool supports() const
Determines if an extended output argument of type ObjectType is supported.
RCP< Stokhos::ProductEpetraMultiVector > getMultiVector() const
void _set_Np_Ng(int Np, int Ng)
Scalar get_stage_number() const
Precondition: supports(IN_ARG_stage_number)==true.
std::string description() const
RCP< Stokhos::ProductEpetraVector > get_f_mp() const
Precondition: supports(OUT_ARG_f_mp)==true.
void set_alpha(Scalar alpha)
Precondition: supports(IN_ARG_alpha)==true.
void set_f_multiplier(const RCP< const VectorBase< Scalar > > &f_multiplier)
Precondition: supports(IN_ARG_x)==true.
void _set_W_properties(const DerivativeProperties &properties)
Derivative< Scalar > get_DgDx_dot(int j) const
Precondition: supports(OUT_ARG_DgDx_dot,j)==true.
void set_DfDp(int l, const Derivative< Scalar > &DfDp_l)
Precondition: supports(OUT_ARG_DfDp,l)==true.
ModelEvaluatorBase()
constructor
EDerivativeMultiVectorOrientation getOrientation() const
RCP< PreconditionerBase< Scalar > > get_W_prec() const
Precondition: supports(OUT_ARG_W_op)==true.
const Derivative< Scalar > & assert_not_null() const
void set_f_mp(const RCP< Stokhos::ProductEpetraVector > &f_mp)
Precondition: supports(OUT_ARG_f_mp)==true.
void set_x_direction(const RCP< const MultiVectorBase< Scalar > > &x_direction)
Precondition: supports(IN_ARG_x)==true.
std::string description() const
Determines the forms of a general derivative that are supported.
std::string description() const
int Np() const
Return the number of parameter subvectors p(l) supported (Np >= 0).
Scalar get_step_size() const
Precondition: supports(IN_ARG_step_size)==true.
RCP< const MultiVectorBase< Scalar > > get_p_direction(int l) const
Get p(l) where 0 <= l && l < this->Np().
RCP< const VectorBase< Scalar > > get_x_dot_dot() const
Precondition: supports(IN_ARG_x_dot_dot)==true.
DerivativeSupport & plus(EDerivativeLinearOp)
RCP< const VectorBase< Scalar > > get_g_multiplier(int j) const
Precondition: supports(IN_ARG_x)==true.
void set_f(const Evaluation< VectorBase< Scalar > > &f)
Precondition: supports(OUT_ARG_f)==true.
void set_beta(Scalar beta)
Precondition: supports(IN_ARG_beta)==true.
void set_DgDx(int j, const Derivative< Scalar > &DgDx_j)
Precondition: supports(OUT_ARG_DgDx,j)==true.
void setModelEvalDescription(const std::string &modelEvalDescription)
Type to embed evaluation accuracy with an RCP-managed object.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
std::string modelEvalDescription() const
Simple aggregate class that stores a derivative object as a general linear operator or as a multi-vec...
const DerivativeMultiVector< Scalar > & assert_not_null() const
void set_W_x_dot_dot_coeff(Scalar W_x_dot_dot_coeff)
Precondition: supports(IN_ARG_W_x_dot_dot_coeff)==true.
MPDerivativeMultiVector(const RCP< Stokhos::ProductEpetraMultiVector > &mv, const EDerivativeMultiVectorOrientation orientation=DERIV_MV_BY_COL, const Teuchos::Array< int > ¶mIndexes=Teuchos::Array< int >())
RCP< LinearOpBase< Scalar > > get_W_op() const
Precondition: supports(OUT_ARG_W_op)==true.
RCP< const MultiVectorBase< Scalar > > get_x_direction() const
Precondition: supports(IN_ARG_x)==true.
bool supports(EDerivativeLinearOp) const
void set_W_op(const RCP< LinearOpBase< Scalar > > &W_op)
Precondition: supports(OUT_ARG_W_op)==true.
EDerivativeMultiVectorOrientation getMultiVectorOrientation() const
DerivativeProperties get_DfDp_properties(int l) const
Return the know properties of DfDp(l) (precondition: supports(OUT_ARG_DfDp,l)==true).
RCP< const VectorBase< Scalar > > get_x() const
Precondition: supports(IN_ARG_x)==true.
void _setModelEvalDescription(const std::string &modelEvalDescription)
const Teuchos::Array< int > & getParamIndexes() const
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
const MPDerivative & assert_not_null() const
RCP< LinearOpBase< Scalar > > getLinearOp() const
RCP< const VectorBase< Scalar > > get_p(int l) const
Get p(l) where 0 <= l && l < this->Np().
Protected subclass of OutArgs that only ModelEvaluator subclasses can access to set up the selection ...
DerivativeProperties get_W_properties() const
Return the known properties of W (precondition: supports(OUT_ARG_f)==true).
RCP< MultiVectorBase< Scalar > > getMultiVector() const
Evaluation(Teuchos::ENull)
Derivative< Scalar > get_DgDx(int j) const
Precondition: supports(OUT_ARG_DgDx,j)==true.
void reset(const RCP< ObjType > &obj, EEvalType evalType)
Concrete aggregate class for all input arguments computable by a ModelEvaluator subclass object...