43#include "Teuchos_implicit_cast.hpp"
67 TEUCHOS_TEST_FOR_EXCEPTION(
88 TEUCHOS_TEST_FOR_EXCEPTION(
110 TEUCHOS_TEST_FOR_EXCEPTION(
112 ,
"EpetraExt::ModelEvaluator::InArgs::assert_supports(arg): model = \'"<<
modelEvalDescription_<<
"\': Error, "
113 "The argument arg = " <<
toString(arg) <<
" is not supported!"
120 TEUCHOS_TEST_FOR_EXCEPTION(
122 ,
"EpetraExt::ModelEvaluator::InArgs::assert_supports(IN_ARG_p_sg,l): "
124 "The argument p_sg(l) with index l = " << l <<
" is not supported!"
131 TEUCHOS_TEST_FOR_EXCEPTION(
133 ,
"EpetraExt::ModelEvaluator::InArgs::assert_supports(IN_ARG_p_mp,l): "
135 "The argument p_mp(l) with index l = " << l <<
" is not supported!"
142 TEUCHOS_TEST_FOR_EXCEPTION(
143 !( 0 <= l && l <
Np() ), std::logic_error
145 "The parameter l = " << l <<
" is not in the range [0,"<<
Np()-1<<
"]!"
165 TEUCHOS_TEST_FOR_EXCEPTION(
306 using Teuchos::implicit_cast;
310 if (!is_null(
f_)) areSet =
true;
311 if (!is_null(
W_)) areSet =
true;
312 for (
int l = 0; l < implicit_cast<int>(
DfDp_.size()); ++l )
313 if(!
DfDp_[l].isEmpty()) areSet =
true;
317 TEUCHOS_TEST_FOR_EXCEPTION(
true,std::logic_error,
318 "ModelEvaluator::OutArgs::funcOrDerivesAreSet(arg): Error, we can not handle"
319 " the argument " <<
toString(arg) <<
"yet!");
418 const int NpNg = Np_in*Ng_in;
441 TEUCHOS_TEST_FOR_EXCEPTION(
674 TEUCHOS_TEST_FOR_EXCEPTION(
676 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(arg): "
678 "The argument arg = " <<
toString(arg) <<
" is not supported!"
686 TEUCHOS_TEST_FOR_EXCEPTION(
688 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DfDp,l): "
690 "The argument DfDp(l) with index l = " << l <<
" is not supported!"
698 TEUCHOS_TEST_FOR_EXCEPTION(
700 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDx_dot,j): "
702 "The argument DgDx_dot(j) with index j = " << j <<
" is not supported!"
710 TEUCHOS_TEST_FOR_EXCEPTION(
712 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDx_dotdot,j): "
714 "The argument DgDx_dotdot(j) with index j = " << j <<
" is not supported!"
722 TEUCHOS_TEST_FOR_EXCEPTION(
724 ,
"TEpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDx,j): "
726 "The argument DgDx(j) with index j = " << j <<
" is not supported!"
735 TEUCHOS_TEST_FOR_EXCEPTION(
737 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDp,j,l): "
739 "The argument DgDp(j,l) with indexes j = " << j <<
" and l = " << l <<
" is not supported!"
746 TEUCHOS_TEST_FOR_EXCEPTION(
748 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_g_sg,j): "
750 "The argument g_sg(j) with index j = " << j <<
" is not supported!"
757 TEUCHOS_TEST_FOR_EXCEPTION(
759 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DfDp_sg,l): "
761 "The argument DfDp_sg(l) with index l = " << l <<
" is not supported!"
769 TEUCHOS_TEST_FOR_EXCEPTION(
771 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDx_dot_sg,j): "
773 "The argument DgDx_dot_sg(j) with index j = " << j <<
" is not supported!"
781 TEUCHOS_TEST_FOR_EXCEPTION(
783 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDx_dotdot_sg,j): "
785 "The argument DgDx_dotdot_sg(j) with index j = " << j <<
" is not supported!"
793 TEUCHOS_TEST_FOR_EXCEPTION(
795 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDx_sg,j): "
797 "The argument DgDx_sg(j) with index j = " << j <<
" is not supported!"
805 TEUCHOS_TEST_FOR_EXCEPTION(
807 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDp_sg,j,l): "
809 "The argument DgDp_sg(j,l) with indexes j = " << j <<
" and l = " << l <<
" is not supported!"
816 TEUCHOS_TEST_FOR_EXCEPTION(
818 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_g_mp,j): "
820 "The argument g_mp(j) with index j = " << j <<
" is not supported!"
827 TEUCHOS_TEST_FOR_EXCEPTION(
829 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DfDp_mp,l): "
831 "The argument DfDp_mp(l) with index l = " << l <<
" is not supported!"
839 TEUCHOS_TEST_FOR_EXCEPTION(
841 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDx_dot_mp,j): "
843 "The argument DgDx_dot_mp(j) with index j = " << j <<
" is not supported!"
851 TEUCHOS_TEST_FOR_EXCEPTION(
853 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDx_dotdot_mp,j): "
855 "The argument DgDx_dotdot_mp(j) with index j = " << j <<
" is not supported!"
863 TEUCHOS_TEST_FOR_EXCEPTION(
865 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDx_mp,j): "
867 "The argument DgDx_mp(j) with index j = " << j <<
" is not supported!"
875 TEUCHOS_TEST_FOR_EXCEPTION(
877 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_supports(OUT_ARG_DgDp_mp,j,l): "
879 "The argument DgDp_mp(j,l) with indexes j = " << j <<
" and l = " << l <<
" is not supported!"
886 TEUCHOS_TEST_FOR_EXCEPTION(
887 Np()==0, std::logic_error
889 "no auxiliary parameters subvectors p(l) are supported!!"
891 TEUCHOS_TEST_FOR_EXCEPTION(
892 !( 0 <= l && l <
Np() ), std::logic_error
893 ,
"EpetraExt::ModelEvaluator::OutArgs::assert_l(l): "
895 "The parameter subvector p(l) index l = " << l <<
" is not in the range [0,"<<
Np()-1<<
"]!"
902 TEUCHOS_TEST_FOR_EXCEPTION(
903 Ng()==0, std::logic_error
905 "no auxiliary functions g(j) are supported!!"
907 TEUCHOS_TEST_FOR_EXCEPTION(
908 !( 0 <= j && j <
Ng() ), std::logic_error
910 "The auxiliary function g(j) index j = " << j <<
" is not in the range [0,"<<
Ng()-1<<
"]!"
930Teuchos::RCP<const Epetra_Map>
932{
return Teuchos::null; }
934Teuchos::RCP<const Teuchos::Array<std::string> >
936{
return Teuchos::null; }
938Teuchos::RCP<const Epetra_Map>
940{
return Teuchos::null; }
942Teuchos::ArrayView<const std::string>
944{
return Teuchos::null; }
950Teuchos::RCP<const Epetra_Vector>
952{
return Teuchos::null; }
954Teuchos::RCP<const Epetra_Vector>
956{
return Teuchos::null; }
958Teuchos::RCP<const Epetra_Vector>
960{
return Teuchos::null; }
962Teuchos::RCP<const Epetra_Vector>
964{
return Teuchos::null; }
979Teuchos::RCP<const Epetra_Vector>
981{
return Teuchos::null; }
984Teuchos::RCP<const Epetra_Vector>
986{
return Teuchos::null; }
989Teuchos::RCP<const Epetra_Vector>
991{
return Teuchos::null; }
994Teuchos::RCP<const Epetra_Vector>
996{
return Teuchos::null; }
1010Teuchos::RCP<Epetra_Operator>
1012{
return Teuchos::null; }
1014Teuchos::RCP<EpetraExt::ModelEvaluator::Preconditioner>
1016{
return Teuchos::null; }
1018Teuchos::RCP<Epetra_Operator>
1020{
return Teuchos::null; }
1022Teuchos::RCP<Epetra_Operator>
1024{
return Teuchos::null; }
1026Teuchos::RCP<Epetra_Operator>
1028{
return Teuchos::null; }
1030Teuchos::RCP<Epetra_Operator>
1032{
return Teuchos::null; }
1034Teuchos::RCP<Epetra_Operator>
1036{
return Teuchos::null; }
1050 switch(orientation) {
1052 return "DERIV_MV_BY_COL";
1054 return "DERIV_TRANS_MV_BY_ROW";
1056 TEUCHOS_TEST_FOR_EXCEPT(
true);
1058 TEUCHOS_UNREACHABLE_RETURN(
"");
1066 return "IN_ARG_x_dot";
1068 return "IN_ARG_x_dotdot";
1072 return "IN_ARG_x_dot_poly";
1074 return "IN_ARG_x_dotdot_poly";
1076 return "IN_ARG_x_poly";
1078 return "IN_ARG_x_dot_sg";
1080 return "IN_ARG_x_dotdot_sg";
1082 return "IN_ARG_x_sg";
1084 return "IN_ARG_x_dot_mp";
1086 return "IN_ARG_x_dotdot_mp";
1088 return "IN_ARG_x_mp";
1092 return "IN_ARG_alpha";
1094 return "IN_ARG_omega";
1096 return "IN_ARG_beta";
1098 return "IN_ARG_step_size";
1100 return "IN_ARG_stage_number";
1102 TEUCHOS_TEST_FOR_EXCEPT(
"Invalid inArg!");
1104 TEUCHOS_UNREACHABLE_RETURN(
"");
1116 return "OUT_ARG_WPrec";
1118 return "OUT_ARG_f_poly";
1120 return "OUT_ARG_f_sg";
1122 return "OUT_ARG_W_sg";
1124 return "OUT_ARG_f_mp";
1126 return "OUT_ARG_W_mp";
1128 TEUCHOS_TEST_FOR_EXCEPT(
"Invalid outArg!");
1130 TEUCHOS_UNREACHABLE_RETURN(
"");
1134Teuchos::RCP<Epetra_Operator>
1136 const std::string &modelEvalDescription,
1138 const std::string &derivName
1141 TEUCHOS_TEST_FOR_EXCEPTION(
1143 ,
"For model \'" << modelEvalDescription <<
"\' the derivative \'"
1144 << derivName <<
"\' is of type Epetra_MultiVector and not of type Epetra_Operator!"
1150Teuchos::RCP<Epetra_MultiVector>
1152 const std::string &modelEvalDescription,
1154 const std::string &derivName,
1158 TEUCHOS_TEST_FOR_EXCEPTION(
1159 deriv.
getLinearOp().get() != NULL, std::logic_error
1160 ,
"For model \'" << modelEvalDescription <<
"\' the derivative \'"
1161 << derivName <<
"\' is of type Epetra_Operator and not of type Epetra_MultiVector!"
1163 Teuchos::RCP<Epetra_MultiVector>
1166 TEUCHOS_TEST_FOR_EXCEPTION(
1168 ,
"For model \'" << modelEvalDescription <<
"\' the derivative \'"
1169 << derivName <<
"\' if not the orientation \'" <<
toString(mvOrientation)
1177Teuchos::RCP<Epetra_Operator>
1183 std::ostringstream derivName; derivName <<
"DfDp("<<l<<
")";
1192Teuchos::RCP<Epetra_MultiVector>
1198 std::ostringstream derivName; derivName <<
"DfDp("<<l<<
")";
1208Teuchos::RCP<Epetra_MultiVector>
1215 std::ostringstream derivName; derivName <<
"DgDx_dot("<<j<<
")";
1225Teuchos::RCP<Epetra_MultiVector>
1232 std::ostringstream derivName; derivName <<
"DgDx_dotdot("<<j<<
")";
1242Teuchos::RCP<Epetra_MultiVector>
1249 std::ostringstream derivName; derivName <<
"DgDx("<<j<<
")";
1259Teuchos::RCP<Epetra_MultiVector>
1267 std::ostringstream derivName; derivName <<
"DgDp("<<j<<
","<<l<<
")";
Simple aggregate class that stores a derivative object as a general linear operator or as a multi-vec...
Teuchos::RCP< Epetra_MultiVector > getMultiVector() const
Teuchos::RCP< Epetra_Operator > getLinearOp() const
EDerivativeMultiVectorOrientation getMultiVectorOrientation() const
bool supports(EInArgsMembers arg) const
bool supports_[NUM_E_IN_ARGS_MEMBERS]
supports_p_sg_t supports_p_mp_
std::string modelEvalDescription_
void assert_l(int l) const
void assert_supports(EInArgsMembers arg) const
void _setSupports(EInArgsMembers arg, bool supports)
supports_p_sg_t supports_p_sg_
Simple aggregate class that stores a derivative object as a general linear operator or as a multi-vec...
void assert_j(int j) const
void _set_Np_Ng(int Np, int Ng)
deriv_properties_t DfDp_sg_properties_
supports_t supports_DgDp_sg_
void _set_DgDp_mp_properties(int j, int l, const DerivativeProperties &properties)
deriv_properties_t DgDx_dot_properties_
bool supports(EOutArgsMembers arg) const
std::string modelEvalDescription_
bool funcOrDerivesAreSet(EOutArgsMembers arg) const
Return true if the function or its derivatives are set.
supports_t supports_DfDp_
deriv_properties_t DfDp_mp_properties_
void _set_W_properties(const DerivativeProperties &W_properties)
void _set_DgDx_dotdot_properties(int j, const DerivativeProperties &properties)
supports_t supports_DgDx_dotdot_mp_
void _set_DgDx_mp_properties(int j, const DerivativeProperties &properties)
deriv_properties_t DgDx_sg_properties_
deriv_properties_t DgDx_mp_properties_
void _set_DgDx_dot_sg_properties(int j, const DerivativeProperties &properties)
deriv_properties_t DgDx_dotdot_properties_
supports_t supports_DgDx_dot_mp_
void _set_DgDp_sg_properties(int j, int l, const DerivativeProperties &properties)
Derivative get_DfDp(int l) const
sg_deriv_t DgDx_dotdot_sg_
void setFailed() const
Set that the evaluation as a whole failed.
supports_t supports_DgDp_
DerivativeProperties WPrec_properties_
bool supports_[NUM_E_OUT_ARGS_MEMBERS]
deriv_properties_t DgDx_dotdot_mp_properties_
Evaluation< Epetra_Vector > f_
supports_t supports_DfDp_sg_
void assert_supports(EOutArgsMembers arg) const
void _set_DfDp_properties(int l, const DerivativeProperties &properties)
supports_t supports_DgDx_dotdot_sg_
supports_t supports_DgDx_mp_
supports_t supports_DgDx_sg_
deriv_properties_t DgDx_dot_mp_properties_
deriv_properties_t DgDp_sg_properties_
deriv_properties_t DgDx_properties_
Derivative get_DgDx(int j) const
supports_g_sg_t supports_g_mp_
void _set_DgDx_dot_properties(int j, const DerivativeProperties &properties)
void _setModelEvalDescription(const std::string &modelEvalDescription)
DerivativeProperties W_properties_
deriv_properties_t DgDp_mp_properties_
supports_t supports_DgDx_dot_
void _set_DgDx_dotdot_mp_properties(int j, const DerivativeProperties &properties)
deriv_properties_t DgDx_dot_sg_properties_
void _set_DgDx_properties(int j, const DerivativeProperties &properties)
void assert_l(int l) const
void _set_DgDx_sg_properties(int j, const DerivativeProperties &properties)
supports_t supports_DgDp_mp_
void _set_DgDx_dot_mp_properties(int j, const DerivativeProperties &properties)
void _set_DfDp_sg_properties(int l, const DerivativeProperties &properties)
deriv_properties_t DfDp_properties_
void _set_DgDx_dotdot_sg_properties(int j, const DerivativeProperties &properties)
Teuchos::RCP< Epetra_Operator > W_
mp_deriv_t DgDx_dotdot_mp_
supports_t supports_DfDp_mp_
Derivative get_DgDx_dotdot(int j) const
deriv_properties_t DgDx_dotdot_sg_properties_
supports_t supports_DgDx_
void _set_WPrec_properties(const DerivativeProperties &WPrec_properties)
void _setSupports(EOutArgsMembers arg, bool supports)
supports_t supports_DgDx_dot_sg_
Derivative get_DgDp(int j, int l) const
supports_g_sg_t supports_g_sg_
supports_t supports_DgDx_dotdot_
void _set_DfDp_mp_properties(int l, const DerivativeProperties &properties)
bool isFailed() const
Return if the evaluation failed or not.
void _set_DgDp_properties(int j, int l, const DerivativeProperties &properties)
Derivative get_DgDx_dot(int j) const
std::string modelEvalDescription() const
deriv_properties_t DgDp_properties_
Simple aggregate class that stores a derivative object as a general linear operator or as a multi-vec...
virtual double get_t_upper_bound() const
virtual Teuchos::RCP< const Epetra_Vector > get_p_upper_bounds(int l) const
EDerivativeMultiVectorOrientation
virtual double get_t_init() const
virtual Teuchos::RCP< Epetra_Operator > create_DfDp_op(int l) const
virtual Teuchos::RCP< Epetra_Operator > create_DgDp_op(int j, int l) const
virtual double get_t_lower_bound() const
@ IN_ARG_x_sg
Stochastic Galerkin solution vector polynomial.
@ IN_ARG_x_dotdot_sg
Stochastic Galerkin time second derivative vector polynomial.
@ IN_ARG_x_dot_mp
Multi-point time derivative vector.
@ IN_ARG_x_poly
Solution vector Taylor polynomial.
@ IN_ARG_x_mp
Multi-point solution vector.
@ IN_ARG_x_dot_sg
Stochastic Galerkin time derivative vector polynomial.
@ IN_ARG_x_dotdot_mp
Multi-point time second derivative vector.
@ IN_ARG_x_dot_poly
Time derivative vector Taylor polynomial.
@ IN_ARG_x_dotdot_poly
Time second derivative vector Taylor polynomial.
@ IN_ARG_omega
Coeff of second derivative term d(x_dotdot)/dx.
virtual ~ModelEvaluator()
virtual Teuchos::RCP< EpetraExt::ModelEvaluator::Preconditioner > create_WPrec() const
static const int NUM_E_OUT_ARGS_MEMBERS
virtual Teuchos::RCP< const Epetra_Vector > get_x_lower_bounds() const
virtual Teuchos::RCP< const Epetra_Map > get_g_map(int j) const
\breif .
virtual Teuchos::RCP< const Epetra_Vector > get_x_dotdot_init() const
virtual Teuchos::RCP< Epetra_Operator > create_DgDx_op(int j) const
static const int NUM_E_IN_ARGS_MEMBERS
virtual Teuchos::ArrayView< const std::string > get_g_names(int j) const
Get the names of the response functions associated with response subvector j if available.
@ OUT_ARG_f_mp
Multi-point residual vector.
@ OUT_ARG_W_sg
Stochastic Galerkin "W" operator polyomial.
@ OUT_ARG_f_poly
Residual vector Taylor polynomial.
@ OUT_ARG_WPrec
Preconditioner operator (approx Jacobian).
@ OUT_ARG_W_mp
Multi-point "W" operator.
@ OUT_ARG_f_sg
Stochastic Galerkin residual vector polynomial.
virtual Teuchos::RCP< Epetra_Operator > create_W() const
If supported, create a Epetra_Operator object for W to be evaluated.
virtual Teuchos::RCP< const Epetra_Vector > get_p_lower_bounds(int l) const
virtual Teuchos::RCP< const Epetra_Vector > get_x_upper_bounds() const
virtual Teuchos::RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
Get the names of the parameters associated with parameter subvector l if available.
virtual Teuchos::RCP< const Epetra_Vector > get_x_dot_init() const
virtual Teuchos::RCP< Epetra_Operator > create_DgDx_dot_op(int j) const
virtual Teuchos::RCP< const Epetra_Vector > get_p_init(int l) const
virtual double getInfBound() const
Return the value of an infinite bound.
virtual Teuchos::RCP< const Epetra_Map > get_p_map(int l) const
\breif .
virtual Teuchos::RCP< const Epetra_Vector > get_x_init() const
virtual Teuchos::RCP< Epetra_Operator > create_DgDx_dotdot_op(int j) const
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.
Teuchos::RCP< Epetra_MultiVector > get_DgDx_dot_mv(const int j, const ModelEvaluator::OutArgs &outArgs, const ModelEvaluator::EDerivativeMultiVectorOrientation mvOrientation)
Teuchos::RCP< Epetra_Operator > getLinearOp(const std::string &modelEvalDescription, const ModelEvaluator::Derivative &deriv, const std::string &derivName)
Teuchos::RCP< Epetra_Operator > get_DfDp_op(const int l, const ModelEvaluator::OutArgs &outArgs)
Teuchos::RCP< Epetra_MultiVector > get_DgDp_mv(const int j, const int l, const ModelEvaluator::OutArgs &outArgs, const ModelEvaluator::EDerivativeMultiVectorOrientation mvOrientation)
Teuchos::RCP< Epetra_MultiVector > get_DgDx_mv(const int j, const ModelEvaluator::OutArgs &outArgs, const ModelEvaluator::EDerivativeMultiVectorOrientation mvOrientation)
Teuchos::RCP< Epetra_MultiVector > get_DfDp_mv(const int l, const ModelEvaluator::OutArgs &outArgs)
Teuchos::RCP< Epetra_MultiVector > get_DgDx_dotdot_mv(const int j, const ModelEvaluator::OutArgs &outArgs, const ModelEvaluator::EDerivativeMultiVectorOrientation mvOrientation)
std::string toString(const int &x)
Teuchos::RCP< Epetra_MultiVector > getMultiVector(const std::string &modelEvalDescription, const ModelEvaluator::Derivative &deriv, const std::string &derivName, const ModelEvaluator::EDerivativeMultiVectorOrientation mvOrientation)