51 #include "Epetra_Map.h" 52 #include "Epetra_Vector.h" 53 #include "Teuchos_TimeMonitor.hpp" 54 #include "Teuchos_Assert.hpp" 58 const Teuchos::RCP<EpetraExt::ModelEvaluator>& me_,
59 const Teuchos::RCP<const EpetraExt::MultiComm>& mp_comm_,
60 const Teuchos::RCP<const Epetra_Map>& mp_block_map_) :
63 mp_block_map(mp_block_map_),
83 Teuchos::RCP<const Epetra_Map> x_map;
84 Teuchos::RCP<const Epetra_Map> f_map;
87 InArgs me_inargs =
me->createInArgs();
88 if (me_inargs.supports(IN_ARG_x_dot)) {
89 x_map =
me->get_x_map();
93 if (me_inargs.supports(IN_ARG_x)) {
94 x_map =
me->get_x_map();
100 num_p = me_inargs.Np();
101 for (
int i=0; i<
num_p; i++) {
102 if (me_inargs.supports(IN_ARG_p_mp, i))
114 OutArgs me_outargs =
me->createOutArgs();
117 if (me_outargs.supports(OUT_ARG_f)) {
118 f_map =
me->get_f_map();
123 if (me_outargs.supports(OUT_ARG_W)) {
126 for (
int i=0; i<num_qp; i++)
127 W_mp->setCoeffPtr(i,
me->create_W());
133 for (
int i=0; i<
num_p; i++) {
134 Teuchos::RCP<const Epetra_Map> p_map =
me->get_p_map(i);
135 DerivativeSupport ds = me_outargs.supports(OUT_ARG_DfDp_mp,i);
136 if (ds.supports(DERIV_MV_BY_COL))
137 dfdp_mp[i] = EpetraExt::ModelEvaluator::MPDerivative(
140 p_map->NumGlobalElements())));
141 else if (ds.supports(DERIV_TRANS_MV_BY_ROW))
142 dfdp_mp[i] = EpetraExt::ModelEvaluator::MPDerivative(
145 f_map->NumGlobalElements())));
146 else if (ds.supports(DERIV_LINEAR_OP)) {
147 Teuchos::RCP< ProductEpetraOperator > dfdp_mp_op =
151 for (
int j=0;
j<num_qp;
j++)
152 dfdp_mp_op->setCoeffPtr(
j,
me->create_DfDp_op(i));
153 dfdp_mp[i] = EpetraExt::ModelEvaluator::MPDerivative(dfdp_mp_op);
159 num_g = me_outargs.Ng();
160 for (
int i=0; i<
num_g; i++) {
161 if (me_outargs.supports(OUT_ARG_g_mp, i))
172 Teuchos::RCP<const Epetra_Map> g_map =
me->get_g_map(ii);
179 DerivativeSupport ds_x = me_outargs.supports(OUT_ARG_DgDx_mp, ii);
180 if (ds_x.supports(DERIV_TRANS_MV_BY_ROW))
181 dgdx_mp[i] = EpetraExt::ModelEvaluator::MPDerivative(
183 g_map->NumGlobalElements())));
184 else if (ds_x.supports(DERIV_MV_BY_COL))
185 dgdx_mp[i] = EpetraExt::ModelEvaluator::MPDerivative(
187 x_map->NumGlobalElements())));
188 else if (ds_x.supports(DERIV_LINEAR_OP)) {
189 Teuchos::RCP<ProductEpetraOperator> dgdx_mp_op =
192 for (
int j=0;
j<num_qp;
j++)
193 dgdx_mp_op->setCoeffPtr(
j,
me->create_DgDx_op(ii));
194 dgdx_mp[i] = EpetraExt::ModelEvaluator::MPDerivative(dgdx_mp_op);
198 DerivativeSupport ds_xdot = me_outargs.supports(OUT_ARG_DgDx_dot_mp, ii);
199 if (ds_xdot.supports(DERIV_TRANS_MV_BY_ROW))
200 dgdx_dot_mp[i] = EpetraExt::ModelEvaluator::MPDerivative(
202 g_map->NumGlobalElements())));
203 else if (ds_xdot.supports(DERIV_MV_BY_COL))
204 dgdx_dot_mp[i] = EpetraExt::ModelEvaluator::MPDerivative(
206 x_map->NumGlobalElements())));
207 else if (ds_xdot.supports(DERIV_LINEAR_OP)) {
208 Teuchos::RCP< ProductEpetraOperator > dgdx_dot_mp_op =
211 for (
int j=0;
j<num_qp;
j++)
212 dgdx_dot_mp_op->setCoeffPtr(
j,
me->create_DgDx_dot_op(ii));
213 dgdx_dot_mp[i] = EpetraExt::ModelEvaluator::MPDerivative(dgdx_dot_mp_op);
220 Teuchos::RCP<const Epetra_Map> p_map =
me->get_p_map(
j);
221 DerivativeSupport ds_p = me_outargs.supports(OUT_ARG_DgDp_mp, ii,
j);
222 if (ds_p.supports(DERIV_TRANS_MV_BY_ROW))
223 dgdp_mp[i][
j] = EpetraExt::ModelEvaluator::MPDerivative(
226 g_map->NumGlobalElements())));
227 else if (ds_p.supports(DERIV_MV_BY_COL))
228 dgdp_mp[i][
j] = EpetraExt::ModelEvaluator::MPDerivative(
231 p_map->NumGlobalElements())));
232 else if (ds_p.supports(DERIV_LINEAR_OP)) {
233 Teuchos::RCP<ProductEpetraOperator> dgdp_mp_op =
236 for (
int k=0; k<num_qp; k++)
237 dgdp_mp_op->setCoeffPtr(k,
me->create_DgDp_op(ii,
j));
238 dgdp_mp[i][
j] = EpetraExt::ModelEvaluator::MPDerivative(dgdp_mp_op);
246 Teuchos::RCP<const Epetra_Map>
250 return me->get_x_map();
253 Teuchos::RCP<const Epetra_Map>
257 return me->get_f_map();
260 Teuchos::RCP<const Epetra_Map>
264 return me->get_p_map(l);
267 Teuchos::RCP<const Epetra_Map>
271 return me->get_g_map(l);
274 Teuchos::RCP<const Teuchos::Array<std::string> >
278 return me->get_p_names(l);
281 Teuchos::RCP<const Epetra_Vector>
285 return me->get_x_init();
288 Teuchos::RCP<const Epetra_Vector>
292 return me->get_p_init(l);
295 Teuchos::RCP<Epetra_Operator>
299 return me->create_W();
302 EpetraExt::ModelEvaluator::InArgs
307 InArgs me_inargs = me->createInArgs();
309 inArgs.setModelEvalDescription(this->description());
310 inArgs.set_Np(num_p);
311 inArgs.setSupports(IN_ARG_x_dot, me_inargs.supports(IN_ARG_x_dot));
312 inArgs.setSupports(IN_ARG_x, me_inargs.supports(IN_ARG_x));
313 inArgs.setSupports(IN_ARG_t, me_inargs.supports(IN_ARG_t));
314 inArgs.setSupports(IN_ARG_alpha, me_inargs.supports(IN_ARG_alpha));
315 inArgs.setSupports(IN_ARG_beta, me_inargs.supports(IN_ARG_beta));
317 for (
int i=0; i<num_p_mp; i++)
318 inArgs.setSupports(IN_ARG_p_sg, mp_p_index_map[i],
true);
319 inArgs.setSupports(IN_ARG_x_sg, me_inargs.supports(IN_ARG_x));
320 inArgs.setSupports(IN_ARG_x_dot_sg, me_inargs.supports(IN_ARG_x_dot));
321 inArgs.setSupports(IN_ARG_sg_basis,
true);
322 inArgs.setSupports(IN_ARG_sg_quadrature,
true);
327 EpetraExt::ModelEvaluator::OutArgs
331 OutArgsSetup outArgs;
332 OutArgs me_outargs = me->createOutArgs();
334 outArgs.setModelEvalDescription(this->description());
335 outArgs.set_Np_Ng(num_p, num_g);
336 outArgs.setSupports(OUT_ARG_f, me_outargs.supports(OUT_ARG_f));
337 outArgs.setSupports(OUT_ARG_W, me_outargs.supports(OUT_ARG_W));
338 for (
int j=0;
j<num_p;
j++)
339 outArgs.setSupports(OUT_ARG_DfDp,
j,
340 me_outargs.supports(OUT_ARG_DfDp,
j));
341 for (
int i=0; i<num_g; i++) {
342 outArgs.setSupports(OUT_ARG_DgDx, i,
343 me_outargs.supports(OUT_ARG_DgDx, i));
344 outArgs.setSupports(OUT_ARG_DgDx_dot, i,
345 me_outargs.supports(OUT_ARG_DgDx_dot, i));
346 for (
int j=0;
j<num_p;
j++)
347 outArgs.setSupports(OUT_ARG_DgDp, i,
j,
348 me_outargs.supports(OUT_ARG_DgDp, i,
j));
351 outArgs.setSupports(OUT_ARG_f_sg, me_outargs.supports(OUT_ARG_f_mp));
352 if (me_outargs.supports(OUT_ARG_W_mp)) {
353 outArgs.set_W_properties(me_outargs.get_W_properties());
354 outArgs.setSupports(OUT_ARG_W_sg,
true);
356 for (
int i=0; i<num_g_mp; i++)
357 outArgs.setSupports(OUT_ARG_g_sg, mp_g_index_map[i],
true);
358 for (
int j=0;
j<num_p;
j++)
359 outArgs.setSupports(OUT_ARG_DfDp_sg,
j,
360 me_outargs.supports(OUT_ARG_DfDp_mp,
j));
361 for (
int i=0; i<num_g_mp; i++) {
362 int ii = mp_g_index_map[i];
363 outArgs.setSupports(OUT_ARG_DgDx_sg, ii,
364 me_outargs.supports(OUT_ARG_DgDx_mp, ii));
365 outArgs.setSupports(OUT_ARG_DgDx_dot_sg, ii,
366 me_outargs.supports(OUT_ARG_DgDx_dot_mp, ii));
367 for (
int j=0;
j<num_p;
j++)
368 outArgs.setSupports(OUT_ARG_DgDp_sg, ii,
j,
369 me_outargs.supports(OUT_ARG_DgDp_mp, ii,
j));
377 evalModel(
const InArgs& inArgs,
const OutArgs& outArgs)
const 380 InArgs me_inargs = me->createInArgs();
381 if (me_inargs.supports(IN_ARG_x))
382 me_inargs.set_x(inArgs.get_x());
383 if (me_inargs.supports(IN_ARG_x_dot))
384 me_inargs.set_x_dot(inArgs.get_x_dot());
385 if (me_inargs.supports(IN_ARG_alpha))
386 me_inargs.set_alpha(inArgs.get_alpha());
387 if (me_inargs.supports(IN_ARG_beta))
388 me_inargs.set_beta(inArgs.get_beta());
389 if (me_inargs.supports(IN_ARG_t))
390 me_inargs.set_t(inArgs.get_t());
391 for (
int i=0; i<num_p; i++)
392 me_inargs.set_p(i, inArgs.get_p(i));
395 OutArgs me_outargs = me->createOutArgs();
396 if (me_outargs.supports(OUT_ARG_f))
397 me_outargs.set_f(outArgs.get_f());
398 if (me_outargs.supports(OUT_ARG_W))
399 me_outargs.set_W(outArgs.get_W());
400 for (
int j=0;
j<num_p;
j++)
401 if (!outArgs.supports(OUT_ARG_DfDp,
j).none())
402 me_outargs.set_DfDp(
j, outArgs.get_DfDp(
j));
403 for (
int i=0; i<num_g; i++) {
404 me_outargs.set_g(i, outArgs.get_g(i));
405 if (!outArgs.supports(OUT_ARG_DgDx, i).none())
406 me_outargs.set_DgDx(i, outArgs.get_DgDx(i));
407 if (!outArgs.supports(OUT_ARG_DgDx_dot, i).none())
408 me_outargs.set_DgDx(i, outArgs.get_DgDx_dot(i));
409 for (
int j=0;
j<outArgs.Np();
j++)
410 if (!outArgs.supports(OUT_ARG_DgDp, i,
j).none())
411 me_outargs.set_DgDp(i,
j, outArgs.get_DgDp(i,
j));
414 bool do_quad =
false;
415 InArgs::sg_const_vector_t x_sg;
416 InArgs::sg_const_vector_t x_dot_sg;
417 Teuchos::Array<InArgs::sg_const_vector_t> p_sg(num_p_mp);
418 OutArgs::sg_vector_t f_sg;
419 OutArgs::sg_operator_t W_sg;
420 Teuchos::Array<SGDerivative> dfdp_sg(num_p);
421 Teuchos::Array<OutArgs::sg_vector_t> g_sg(num_g_mp);
422 Teuchos::Array<SGDerivative> dgdx_sg(num_g_mp);
423 Teuchos::Array<SGDerivative> dgdx_dot_sg(num_g_mp);
424 Teuchos::Array< Teuchos::Array<SGDerivative> > dgdp_sg(num_g_mp);
425 TEUCHOS_TEST_FOR_EXCEPTION(inArgs.get_sg_basis() == Teuchos::null,
427 "Error! Stokhos::SGQuadModelEvaluator::evalModel(): " <<
428 "SG basis inArg cannot be null!");
429 TEUCHOS_TEST_FOR_EXCEPTION(inArgs.get_sg_quadrature() == Teuchos::null,
431 "Error! Stokhos::SGQuadModelEvaluator::evalModel(): " <<
432 "SG quadrature inArg cannot be null!");
433 Teuchos::RCP<const Stokhos::OrthogPolyBasis<int,double> > basis =
434 inArgs.get_sg_basis();
435 Teuchos::RCP< const Stokhos::Quadrature<int,double> > quad =
436 inArgs.get_sg_quadrature();
438 if (inArgs.supports(IN_ARG_x_sg)) {
439 x_sg = inArgs.get_x_sg();
440 if (x_sg != Teuchos::null) {
444 if (inArgs.supports(IN_ARG_x_dot_sg)) {
445 x_dot_sg = inArgs.get_x_dot_sg();
446 if (x_dot_sg != Teuchos::null) {
450 for (
int i=0; i<num_p_mp; i++) {
451 p_sg[i] = inArgs.get_p_sg(mp_p_index_map[i]);
452 if (p_sg[i] != Teuchos::null) {
456 if (outArgs.supports(OUT_ARG_f_sg)) {
457 f_sg = outArgs.get_f_sg();
458 if (f_sg != Teuchos::null)
461 if (outArgs.supports(OUT_ARG_W_sg)) {
462 W_sg = outArgs.get_W_sg();
463 if (W_sg != Teuchos::null)
466 for (
int i=0; i<num_p; i++) {
467 if (!outArgs.supports(OUT_ARG_DfDp_sg, i).none()) {
468 dfdp_sg[i] = outArgs.get_DfDp_sg(i);
469 if (dfdp_sg[i].getMultiVector() != Teuchos::null)
470 dfdp_sg[i].getMultiVector()->init(0.0);
471 else if (dfdp_sg[i].getLinearOp() != Teuchos::null)
472 dfdp_sg[i].getLinearOp()->init(0.0);
476 for (
int i=0; i<num_g_mp; i++) {
477 int ii = mp_g_index_map[i];
478 g_sg[i] = outArgs.get_g_sg(ii);
479 if (g_sg[i] != Teuchos::null)
482 if (!outArgs.supports(OUT_ARG_DgDx_sg, ii).none()) {
483 dgdx_sg[i] = outArgs.get_DgDx_sg(ii);
484 if (dgdx_sg[i].getMultiVector() != Teuchos::null)
485 dgdx_sg[i].getMultiVector()->init(0.0);
486 else if (dgdx_sg[i].getLinearOp() != Teuchos::null)
487 dgdx_sg[i].getLinearOp()->init(0.0);
490 if (!outArgs.supports(OUT_ARG_DgDx_dot_sg, ii).none()) {
491 dgdx_dot_sg[i] = outArgs.get_DgDx_dot_sg(ii);
492 if (dgdx_dot_sg[i].getMultiVector() != Teuchos::null)
493 dgdx_dot_sg[i].getMultiVector()->init(0.0);
494 else if (dgdx_dot_sg[i].getLinearOp() != Teuchos::null)
495 dgdx_dot_sg[i].getLinearOp()->init(0.0);
498 dgdp_sg[i].resize(num_p);
499 for (
int j=0;
j<num_p;
j++) {
500 if (!outArgs.supports(OUT_ARG_DgDp_sg, ii,
j).none()) {
501 dgdp_sg[i][
j] = outArgs.get_DgDp_sg(ii,
j);
502 if (dgdp_sg[i][
j].getMultiVector() != Teuchos::null)
503 dgdp_sg[i][
j].getMultiVector()->init(0.0);
504 else if (dgdp_sg[i][
j].getLinearOp() != Teuchos::null)
505 dgdp_sg[i][
j].getLinearOp()->init(0.0);
512 const Teuchos::Array<double>& quad_weights =
513 quad->getQuadWeights();
514 const Teuchos::Array< Teuchos::Array<double> > & quad_values =
515 quad->getBasisAtQuadPoints();
516 const Teuchos::Array<double>& basis_norms = basis->norm_squared();
519 int nqp = mp_block_map->NumMyElements();
520 for (
int qp=0; qp<nqp; qp++) {
521 #ifdef STOKHOS_TEUCHOS_TIME_MONITOR 522 TEUCHOS_FUNC_TIME_MONITOR_DIFF(
523 "Stokhos: SGQuadMPModelEvaluator -- Polynomial Evaluation",
527 int gqp = mp_block_map->GID(qp);
529 if (x_sg != Teuchos::null) {
530 x_sg->evaluate(quad_values[gqp], (*x_mp)[qp]);
531 me_inargs.set_x_mp(x_mp);
533 if (x_dot_sg != Teuchos::null) {
534 x_dot_sg->evaluate(quad_values[gqp], (*x_dot_mp)[qp]);
535 me_inargs.set_x_dot_mp(x_mp);
537 for (
int i=0; i<num_p_mp; i++) {
538 if (p_sg[i] != Teuchos::null) {
539 p_sg[i]->evaluate(quad_values[gqp], (*(p_mp[i]))[qp]);
540 me_inargs.set_p_mp(mp_p_index_map[i], p_mp[i]);
547 if (f_sg != Teuchos::null)
548 me_outargs.set_f_mp(f_mp);
549 if (W_sg != Teuchos::null)
550 me_outargs.set_W_mp(W_mp);
551 for (
int i=0; i<num_p_mp; i++) {
552 if (!dfdp_sg[i].isEmpty())
553 me_outargs.set_DfDp_mp(i, dfdp_mp[i]);
555 for (
int i=0; i<num_g_mp; i++) {
556 int ii = mp_g_index_map[i];
557 if (g_sg[i] != Teuchos::null)
558 me_outargs.set_g_mp(ii, g_mp[i]);
559 if (!dgdx_dot_sg[i].isEmpty())
560 me_outargs.set_DgDx_dot_mp(ii, dgdx_dot_mp[i]);
561 if (!dgdx_sg[i].isEmpty())
562 me_outargs.set_DgDx_mp(ii, dgdx_mp[i]);
563 for (
int j=0;
j<num_p;
j++)
564 if (!dgdp_sg[i][
j].isEmpty())
565 me_outargs.set_DgDp_mp(ii,
j, dgdp_mp[i][
j]);
570 #ifdef STOKHOS_TEUCHOS_TIME_MONITOR 571 TEUCHOS_FUNC_TIME_MONITOR(
"Stokhos: SGQuadMPModelEvaluator -- Model Evaluation");
575 me->evalModel(me_inargs, me_outargs);
580 for (
int qp=0; qp<nqp; qp++) {
581 #ifdef STOKHOS_TEUCHOS_TIME_MONITOR 582 TEUCHOS_FUNC_TIME_MONITOR_DIFF(
583 "Stokhos: SGQuadMPModelEvaluator -- Polynomial Integration", Integration);
586 int gqp = mp_block_map->GID(qp);
589 if (f_sg != Teuchos::null) {
590 f_sg->sumIntoAllTerms(quad_weights[gqp], quad_values[gqp], basis_norms,
593 if (W_sg != Teuchos::null) {
594 W_sg->sumIntoAllTerms(quad_weights[gqp], quad_values[gqp], basis_norms,
597 for (
int j=0;
j<num_p;
j++) {
598 if (!dfdp_sg[
j].isEmpty()) {
599 if (dfdp_sg[
j].getMultiVector() != Teuchos::null) {
600 dfdp_sg[
j].getMultiVector()->sumIntoAllTerms(
601 quad_weights[gqp], quad_values[gqp], basis_norms,
602 (*(dfdp_mp[
j].getMultiVector()))[qp]);
604 else if (dfdp_sg[
j].getLinearOp() != Teuchos::null) {
605 dfdp_sg[
j].getLinearOp()->sumIntoAllTerms(
606 quad_weights[gqp], quad_values[gqp], basis_norms,
607 (*(dfdp_mp[
j].getLinearOp()))[qp]);
611 for (
int i=0; i<num_g_mp; i++) {
612 if (g_sg[i] != Teuchos::null) {
613 g_sg[i]->sumIntoAllTerms(quad_weights[gqp], quad_values[gqp],
614 basis_norms, (*g_mp[i])[qp]);
616 if (!dgdx_dot_sg[i].isEmpty()) {
617 if (dgdx_dot_sg[i].getMultiVector() != Teuchos::null) {
618 dgdx_dot_sg[i].getMultiVector()->sumIntoAllTerms(
619 quad_weights[gqp], quad_values[gqp], basis_norms,
620 (*(dgdx_dot_mp[i].getMultiVector()))[qp]);
622 else if (dgdx_dot_sg[i].getLinearOp() != Teuchos::null) {
623 dgdx_dot_sg[i].getLinearOp()->sumIntoAllTerms(
624 quad_weights[gqp], quad_values[gqp], basis_norms,
625 (*(dgdx_dot_mp[i].getLinearOp()))[qp]);
628 if (!dgdx_sg[i].isEmpty()) {
629 if (dgdx_sg[i].getMultiVector() != Teuchos::null) {
630 dgdx_sg[i].getMultiVector()->sumIntoAllTerms(
631 quad_weights[gqp], quad_values[gqp], basis_norms,
632 (*(dgdx_mp[i].getMultiVector()))[qp]);
634 else if (dgdx_sg[i].getLinearOp() != Teuchos::null) {
635 dgdx_sg[i].getLinearOp()->sumIntoAllTerms(
636 quad_weights[gqp], quad_values[gqp], basis_norms,
637 (*(dgdx_mp[i].getLinearOp()))[qp]);
640 for (
int j=0;
j<num_p;
j++) {
641 if (!dgdp_sg[i][
j].isEmpty()) {
642 if (dgdp_sg[i][
j].getMultiVector() != Teuchos::null) {
643 dgdp_sg[i][
j].getMultiVector()->sumIntoAllTerms(
644 quad_weights[gqp], quad_values[gqp], basis_norms,
645 (*(dgdp_mp[i][
j].getMultiVector()))[qp]);
647 else if (dgdp_sg[i][
j].getLinearOp() != Teuchos::null) {
648 dgdp_sg[i][
j].getLinearOp()->sumIntoAllTerms(
649 quad_weights[gqp], quad_values[gqp], basis_norms,
650 (*(dgdp_mp[i][
j].getLinearOp()))[qp]);
659 if (mp_block_map->DistributedGlobal()) {
660 for (
int i=0; i<num_g_mp; i++) {
661 if (g_sg[i] != Teuchos::null) {
672 me->evalModel(me_inargs, me_outargs);
mp_vector_t x_dot_mp
Time derivative vector.
int num_g
Number of response vectors.
Teuchos::Array< mp_vector_t > p_mp
Parameter vectors.
OutArgs createOutArgs() const
Create OutArgs.
SGQuadMPModelEvaluator(const Teuchos::RCP< EpetraExt::ModelEvaluator > &me, const Teuchos::RCP< const EpetraExt::MultiComm > &mp_comm, const Teuchos::RCP< const Epetra_Map > &mp_block_map)
Teuchos::RCP< const Epetra_Vector > get_x_init() const
Return initial solution.
A container class for products of Epetra_Vector's.
Teuchos::Array< int > mp_p_index_map
Index map between block-p and p_mp maps.
mp_operator_t W_mp
W operator.
Teuchos::RCP< const EpetraExt::MultiComm > mp_comm
Parallel MP communicator.
Teuchos::RCP< const Epetra_Map > get_x_map() const
Return solution vector map.
mp_vector_t x_mp
Solution vector.
Teuchos::RCP< const Epetra_Map > get_g_map(int l) const
Return observation vector map.
Teuchos::Array< MPDerivative > dgdx_dot_mp
Response derivative.
int num_g_mp
Number of multipoint response vectors.
Teuchos::Array< MPDerivative > dfdp_mp
Residual derivatives.
Teuchos::RCP< Epetra_Operator > create_W() const
Create W = alpha*M + beta*J matrix.
A container class for products of Epetra_Vector's.
Teuchos::RCP< const Epetra_Map > mp_block_map
Map for layout of parallel MP blocks.
A container class storing products of Epetra_MultiVector's.
Teuchos::RCP< const Epetra_Vector > get_p_init(int l) const
Return initial parameters.
Teuchos::Array< int > mp_g_index_map
Index map between block-g and g_mp maps.
void evalModel(const InArgs &inArgs, const OutArgs &outArgs) const
Evaluate model on InArgs.
Teuchos::RCP< const Epetra_Map > get_p_map(int l) const
Return parameter vector map.
Teuchos::RCP< const Epetra_Map > get_f_map() const
Return residual vector map.
Teuchos::RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
Return array of parameter names.
Teuchos::RCP< EpetraExt::ModelEvaluator > me
Underlying model evaluator.
int num_p_mp
Number of multipoint parameter vectors.
Teuchos::Array< mp_vector_t > g_mp
Response vectors.
Teuchos::Array< MPDerivative > dgdx_mp
Response derivative.
mp_vector_t f_mp
Residual vector.
InArgs createInArgs() const
Create InArgs.
int num_p
Number of parameter vectors.
Teuchos::Array< Teuchos::Array< MPDerivative > > dgdp_mp
Response sensitivities.