45 #include "Teuchos_ScalarTraits.hpp" 46 #include "Epetra_SerialComm.h" 47 #include "Epetra_CrsMatrix.h" 49 #include "Epetra_MpiComm.h" 53 inline double sqr(
const double& s ) {
return s*s; }
58 Teuchos::RCP<Epetra_Comm> epetra_comm
70 :isInitialized_(false), epetra_comm_(epetra_comm),
71 xt0_(xt0),xt1_(xt1),pt0_(pt0),pt1_(pt1),d_(d)
75 const int nx = 2, np = 2, ng = 1, nq = 1;
83 const double inf = 1e+50;
85 xL_ = rcp(
new Epetra_Vector(*
map_x_));
xL_->PutScalar(-inf);
86 xU_ = rcp(
new Epetra_Vector(*
map_x_));
xU_->PutScalar(+inf);
87 x0_ = rcp(
new Epetra_Vector(*
map_x_)); (*x0_)[0] = x00; (*x0_)[1] = x01;
88 pL_ = rcp(
new Epetra_Vector(*
map_p_));
pL_->PutScalar(-inf);
89 pU_ = rcp(
new Epetra_Vector(*
map_p_));
pU_->PutScalar(+inf);
90 p0_ = rcp(
new Epetra_Vector(*
map_p_)); (*p0_)[0] = p00; (*p0_)[1] = p01;
91 gL_ = rcp(
new Epetra_Vector(*
map_g_));
gL_->PutScalar(-inf);
92 gU_ = rcp(
new Epetra_Vector(*
map_g_));
gU_->PutScalar(+inf);
93 q_ = rcp(
new Epetra_Vector(*
map_q_)); (*q_)[0] = q0;
94 qL_ = rcp(
new Epetra_Vector(*
map_q_)); (*qL_)[0] = -inf;
95 qU_ = rcp(
new Epetra_Vector(*
map_q_)); (*qU_)[0] = inf;
100 int indices[nx] = { 0, 1 };
101 for(
int i = 0; i < nx; ++i )
102 W_graph_->InsertGlobalIndices(i,nx,indices);
111 double pL0,
double pL1,
double pU0,
double pU1
121 double xL0,
double xL1,
double xU0,
double xU1
132 Teuchos::RCP<const Epetra_Map>
138 Teuchos::RCP<const Epetra_Map>
144 Teuchos::RCP<const Epetra_Map>
147 TEUCHOS_TEST_FOR_EXCEPT(l>1);
152 Teuchos::RCP<const Epetra_Map>
155 TEUCHOS_TEST_FOR_EXCEPT(j!=0);
159 Teuchos::RCP<const Epetra_Vector>
165 Teuchos::RCP<const Epetra_Vector>
168 TEUCHOS_TEST_FOR_EXCEPT(l>1);
169 if (l==0)
return p0_;
173 Teuchos::RCP<const Epetra_Vector>
179 Teuchos::RCP<const Epetra_Vector>
185 Teuchos::RCP<const Epetra_Vector>
188 TEUCHOS_TEST_FOR_EXCEPT(l>1);
189 if (l==0)
return pL_;
193 Teuchos::RCP<const Epetra_Vector>
196 TEUCHOS_TEST_FOR_EXCEPT(l>1);
197 if (l==0)
return pU_;
201 Teuchos::RCP<Epetra_Operator>
204 return Teuchos::rcp(
new Epetra_CrsMatrix(::Copy,*
W_graph_));
261 using Teuchos::dyn_cast;
262 using Teuchos::rcp_dynamic_cast;
266 Teuchos::RCP<const Epetra_Vector> p_in = inArgs.
get_p(0);
267 Teuchos::RCP<const Epetra_Vector> q_in = inArgs.
get_p(1);
268 const Epetra_Vector &p = (p_in.get() ? *p_in : *
p0_);
269 const Epetra_Vector &q = (q_in.get() ? *q_in : *
q_);
270 const Epetra_Vector &x = *inArgs.
get_x();
274 Epetra_Vector *f_out = outArgs.
get_f().get();
275 Epetra_Vector *g_out = outArgs.
get_g(0).get();
276 Epetra_Operator *W_out = outArgs.
get_W().get();
277 Epetra_MultiVector *DfDp_out =
get_DfDp_mv(0,outArgs).get();
284 Epetra_Vector &f = *f_out;
287 f[0] = x[0] + x[1]*x[1] - p[0] + q[0];
288 f[1] =
d_ * ( x[0]*x[0] - x[1] - p[1] );
291 Epetra_Vector &g = *g_out;
292 g[0] = 0.5 * ( sqr(x[0]-
xt0_) + sqr(x[1]-
xt1_) + sqr(p[0]-
pt0_) + sqr(p[1]-
pt1_) );
295 Epetra_CrsMatrix &DfDx = dyn_cast<Epetra_CrsMatrix>(*W_out);
306 values[0] = 1.0; indexes[0] = 0;
307 values[1] = 2.0*x[1]; indexes[1] = 1;
308 DfDx.SumIntoGlobalValues( 0, 2, values, indexes );
310 values[0] = 2.0*
d_*x[0]; indexes[0] = 0;
311 values[1] = -
d_; indexes[1] = 1;
312 DfDx.SumIntoGlobalValues( 1, 2, values, indexes );
315 Epetra_MultiVector &DfDp = *DfDp_out;
321 Epetra_Vector &DgDx_trans = *(*DgDx_trans_out)(0);
322 DgDx_trans[0] = x[0]-
xt0_;
323 DgDx_trans[1] = x[1]-
xt1_;
326 Epetra_Vector &DgDp_trans = *(*DgDp_trans_out)(0);
327 DgDp_trans[0] = p[0]-
pt0_;
328 DgDp_trans[1] = p[1]-
pt1_;
void set_W_properties(const DerivativeProperties &properties)
Teuchos::RCP< const Epetra_Map > get_p_map(int l) const
.
Teuchos::RCP< Epetra_Vector > qU_
void setSupports(EOutArgsMembers arg, bool supports=true)
Teuchos::RCP< Epetra_MultiVector > get_DgDp_mv(const int j, const int l, const ModelEvaluator::OutArgs &outArgs, const ModelEvaluator::EDerivativeMultiVectorOrientation mvOrientation)
Teuchos::RCP< Epetra_Vector > gL_
Teuchos::RCP< const Epetra_Map > map_p_
void setSupports(EInArgsMembers arg, bool supports=true)
Teuchos::RCP< Epetra_Vector > gU_
Teuchos::RCP< Epetra_Vector > q_
Teuchos::RCP< const Epetra_Vector > get_x_upper_bounds() const
Teuchos::RCP< const Epetra_Vector > get_x() const
Set solution vector Taylor polynomial.
void set_DgDp_properties(int j, int l, const DerivativeProperties &properties)
Teuchos::RCP< const Epetra_Map > map_g_
InArgs createInArgs() const
Teuchos::RCP< const Epetra_Map > get_f_map() const
void set_DfDp_properties(int l, const DerivativeProperties &properties)
Teuchos::RCP< const Epetra_Vector > get_x_lower_bounds() const
void setModelEvalDescription(const std::string &modelEvalDescription)
Teuchos::RCP< const Epetra_Vector > get_p_upper_bounds(int l) const
Teuchos::RCP< const Epetra_Vector > get_p_lower_bounds(int l) const
Teuchos::RCP< Epetra_MultiVector > get_DfDp_mv(const int l, const ModelEvaluator::OutArgs &outArgs)
Teuchos::RCP< Epetra_Operator > get_W() const
Teuchos::RCP< const Epetra_Vector > get_x_init() const
Teuchos::RCP< Epetra_MultiVector > get_DgDx_mv(const int j, const ModelEvaluator::OutArgs &outArgs, const ModelEvaluator::EDerivativeMultiVectorOrientation mvOrientation)
Teuchos::RCP< Epetra_Vector > xL_
void setModelEvalDescription(const std::string &modelEvalDescription)
void set_p_bounds(double pL0, double pL1, double pU0, double pU1)
Teuchos::RCP< Epetra_Vector > xU_
Teuchos::RCP< const Epetra_Vector > get_p_init(int l) const
Teuchos::RCP< const Epetra_Map > map_x_
Teuchos::RCP< Epetra_Vector > x0_
Teuchos::RCP< const Epetra_Vector > get_p(int l) const
EpetraMultiPointModelEval4DOpt(Teuchos::RCP< Epetra_Comm > epetra_comm, const double xt0=1.0, const double xt1=1.0, const double pt0=2.0, const double pt1=0.0, const double d=10.0, const double x00=1.0, const double x01=1.0, const double p00=2.0, const double p01=0.0, const double q0=0.0)
Teuchos::RCP< Epetra_Vector > qL_
OutArgs createOutArgs() const
Teuchos::RCP< const Epetra_Comm > epetra_comm_
Teuchos::RCP< Epetra_Vector > p0_
Teuchos::RCP< const Epetra_Map > get_x_map() const
Teuchos::RCP< const Epetra_Map > get_g_map(int j) const
.
Teuchos::RCP< Epetra_Vector > pU_
Teuchos::RCP< Epetra_Operator > create_W() const
Evaluation< Epetra_Vector > get_g(int j) const
Get g(j) where 0 <= j && j < this->Ng().
void set_DgDx_properties(int j, const DerivativeProperties &properties)
void set_x_bounds(double xL0, double xL1, double xU0, double xU1)
void evalModel(const InArgs &inArgs, const OutArgs &outArgs) const
Evaluation< Epetra_Vector > get_f() const
Teuchos::RCP< Epetra_CrsGraph > W_graph_
Teuchos::RCP< const Epetra_Map > map_q_
void set_Np_Ng(int Np, int Ng)
Teuchos::RCP< Epetra_Vector > pL_