45#include "Teuchos_Assert.hpp"
46#include "EpetraExt_BlockUtility.h"
47#include "EpetraExt_BlockMultiVector.h"
57 const Teuchos::RCP<EpetraExt::ModelEvaluator>& me_,
58 const Teuchos::RCP<Stokhos::AdaptivityManager> & am,
61 const Teuchos::RCP<const Stokhos::ParallelData>& sg_parallel_data_,
62 bool onlyUseLinear_,
int kExpOrder_,
63 const Teuchos::RCP<Teuchos::ParameterList>& params_)
65 sg_basis(am->getMasterStochasticBasis()),
104 if (
x_map != Teuchos::null)
118 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
121 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
125 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
128 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
157 (*sg_x_init)[0] = *(
me->get_x_init());
167 std::string W_expansion_type =
168 params->get(
"Jacobian Expansion Type",
"Full");
169 if (W_expansion_type ==
"Linear")
174 Teuchos::RCP<Epetra_BlockMap> W_overlap_map =
191 InArgs me_inargs =
me->createInArgs();
192 OutArgs me_outargs =
me->createOutArgs();
193 num_p = me_inargs.Np();
196 for (
int i=0; i<
num_p; i++) {
197 if (me_inargs.supports(IN_ARG_p_sg, i))
207 std::string p_expansion_type =
208 params->get(
"Parameter Expansion Type",
"Full");
209 if (p_expansion_type ==
"Linear")
222 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
225 Teuchos::RCP<const Teuchos::Array<std::string> > p_names =
227 if (p_names != Teuchos::null) {
229 Teuchos::rcp(
new Teuchos::Array<std::string>(
num_sg_blocks*(p_names->size())));
230 for (
int j=0;
j<p_names->size();
j++) {
231 std::stringstream ss;
232 ss << (*p_names)[
j] <<
" -- SG Coefficient " << i;
244 num_g = me_outargs.Ng();
247 for (
int i=0; i<
num_g; i++) {
248 if (me_outargs.supports(OUT_ARG_g_sg, i))
261 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
287 const Teuchos::RCP<EpetraExt::ModelEvaluator>& me_,
292 const Teuchos::RCP<const Stokhos::ParallelData>& sg_parallel_data_,
293 bool onlyUseLinear_,
int kExpOrder_,
294 const Teuchos::RCP<Teuchos::ParameterList>& params_,
335 if (
x_map != Teuchos::null)
352 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
355 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
359 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
362 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
391 (*sg_x_init)[0] = *(
me->get_x_init());
401 std::string W_expansion_type =
402 params->get(
"Jacobian Expansion Type",
"Full");
403 if (W_expansion_type ==
"Linear")
408 Teuchos::RCP<Epetra_BlockMap> W_overlap_map =
425 InArgs me_inargs =
me->createInArgs();
426 OutArgs me_outargs =
me->createOutArgs();
427 num_p = me_inargs.Np();
430 for (
int i=0; i<
num_p; i++) {
431 if (me_inargs.supports(IN_ARG_p_sg, i))
441 std::string p_expansion_type =
442 params->get(
"Parameter Expansion Type",
"Full");
443 if (p_expansion_type ==
"Linear")
456 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
459 Teuchos::RCP<const Teuchos::Array<std::string> > p_names =
461 if (p_names != Teuchos::null) {
463 Teuchos::rcp(
new Teuchos::Array<std::string>(
num_sg_blocks*(p_names->size())));
464 for (
int j=0;
j<p_names->size();
j++) {
465 std::stringstream ss;
466 ss << (*p_names)[
j] <<
" -- SG Coefficient " << i;
478 num_g = me_outargs.Ng();
481 for (
int i=0; i<
num_g; i++) {
482 if (me_outargs.supports(OUT_ARG_g_sg, i))
495 Teuchos::rcp(EpetraExt::BlockUtility::GenerateBlockMap(
522Teuchos::RCP<const Epetra_Map>
528Teuchos::RCP<const Epetra_Map>
534Teuchos::RCP<const Epetra_Map>
537 TEUCHOS_TEST_FOR_EXCEPTION(l < 0 || l >=
num_p +
num_p_sg, std::logic_error,
538 "Error! Invalid p map index " << l);
540 return me->get_p_map(l);
544 return Teuchos::null;
547Teuchos::RCP<const Epetra_Map>
550 TEUCHOS_TEST_FOR_EXCEPTION(l < 0 || l >=
num_g_sg, std::logic_error,
551 "Error! Invalid g map index " << l);
555Teuchos::RCP<const Teuchos::Array<std::string> >
558 TEUCHOS_TEST_FOR_EXCEPTION(l < 0 || l >=
num_p +
num_p_sg, std::logic_error,
559 "Error! Invalid p map index " << l);
561 return me->get_p_names(l);
565 return Teuchos::null;
568Teuchos::RCP<const Epetra_Vector>
578Teuchos::RCP<const Epetra_Vector>
581 TEUCHOS_TEST_FOR_EXCEPTION(l < 0 || l >=
num_p +
num_p_sg, std::logic_error,
582 "Error! Invalid p map index " << l);
584 return me->get_p_init(l);
588 return Teuchos::null;
591Teuchos::RCP<Epetra_Operator>
595 Teuchos::RCP<Teuchos::ParameterList> sgOpParams =
596 Teuchos::rcp(&(
params->sublist(
"SG Operator")),
false);
598 Teuchos::RCP<Epetra_CrsMatrix> W_crs
599 = Teuchos::rcp_dynamic_cast<Epetra_CrsMatrix>(
me->create_W(),
true);
609 return Teuchos::null;
612EpetraExt::ModelEvaluator::InArgs
616 InArgs me_inargs =
me->createInArgs();
618 inArgs.setModelEvalDescription(this->description());
620 inArgs.setSupports(IN_ARG_x_dot, me_inargs.supports(IN_ARG_x_dot_sg));
621 inArgs.setSupports(IN_ARG_x, me_inargs.supports(IN_ARG_x_sg));
622 inArgs.setSupports(IN_ARG_t, me_inargs.supports(IN_ARG_t));
623 inArgs.setSupports(IN_ARG_alpha, me_inargs.supports(IN_ARG_alpha));
624 inArgs.setSupports(IN_ARG_beta, me_inargs.supports(IN_ARG_beta));
625 inArgs.setSupports(IN_ARG_sg_basis, me_inargs.supports(IN_ARG_sg_basis));
626 inArgs.setSupports(IN_ARG_sg_quadrature,
627 me_inargs.supports(IN_ARG_sg_quadrature));
628 inArgs.setSupports(IN_ARG_sg_expansion,
629 me_inargs.supports(IN_ARG_sg_expansion));
634EpetraExt::ModelEvaluator::OutArgs
637 OutArgsSetup outArgs;
638 OutArgs me_outargs =
me->createOutArgs();
640 outArgs.setModelEvalDescription(this->description());
643 outArgs.setSupports(OUT_ARG_f, me_outargs.supports(OUT_ARG_f_sg));
644 outArgs.setSupports(OUT_ARG_W, me_outargs.supports(OUT_ARG_W_sg));
645 outArgs.setSupports(OUT_ARG_WPrec,
false);
647 outArgs.setSupports(OUT_ARG_DfDp,
j,
648 me_outargs.supports(OUT_ARG_DfDp_sg,
j));
657 outArgs.setSupports(OUT_ARG_DgDp, i,
j,
658 me_outargs.supports(OUT_ARG_DgDp_sg, ii,
j));
669 const OutArgs& outArgs)
const
672 Teuchos::RCP<const Epetra_Vector> x;
673 if (inArgs.supports(IN_ARG_x)) {
675 if (x != Teuchos::null)
678 Teuchos::RCP<const Epetra_Vector> x_dot;
679 if (inArgs.supports(IN_ARG_x_dot))
680 x_dot = inArgs.get_x_dot();
683 EpetraExt::ModelEvaluator::Evaluation<Epetra_Vector> f_out;
684 if (outArgs.supports(OUT_ARG_f))
685 f_out = outArgs.get_f();
686 Teuchos::RCP<Epetra_Operator> W_out;
687 if (outArgs.supports(OUT_ARG_W))
688 W_out = outArgs.get_W();
691 InArgs me_inargs =
me->createInArgs();
692 if (x != Teuchos::null) {
697 if (x_dot != Teuchos::null) {
702 if (me_inargs.supports(IN_ARG_alpha))
703 me_inargs.set_alpha(inArgs.get_alpha());
704 if (me_inargs.supports(IN_ARG_beta))
705 me_inargs.set_beta(inArgs.get_beta());
706 if (me_inargs.supports(IN_ARG_t))
707 me_inargs.set_t(inArgs.get_t());
708 if (me_inargs.supports(IN_ARG_sg_basis)) {
709 if (inArgs.get_sg_basis() != Teuchos::null)
710 me_inargs.set_sg_basis(inArgs.get_sg_basis());
714 if (me_inargs.supports(IN_ARG_sg_quadrature)) {
715 if (inArgs.get_sg_quadrature() != Teuchos::null)
716 me_inargs.set_sg_quadrature(inArgs.get_sg_quadrature());
718 me_inargs.set_sg_quadrature(
sg_quad);
720 if (me_inargs.supports(IN_ARG_sg_expansion)) {
721 if (inArgs.get_sg_expansion() != Teuchos::null)
722 me_inargs.set_sg_expansion(inArgs.get_sg_expansion());
724 me_inargs.set_sg_expansion(
sg_exp);
728 for (
int i=0; i<
num_p; i++)
729 me_inargs.set_p(i, inArgs.get_p(i));
731 Teuchos::RCP<const Epetra_Vector> p = inArgs.get_p(i+
num_p);
735 if (p == Teuchos::null)
739 Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly> p_sg =
745 OutArgs me_outargs =
me->createOutArgs();
748 if (f_out != Teuchos::null) {
759 for (
int i=0; i<
num_p; i++) {
760 if (!outArgs.supports(OUT_ARG_DfDp, i).none()) {
761 Derivative dfdp = outArgs.get_DfDp(i);
762 if (dfdp.getMultiVector() != Teuchos::null) {
763 Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly> dfdp_sg;
764 if (dfdp.getMultiVectorOrientation() == DERIV_MV_BY_COL)
769 me->get_p_map(i)->NumMyElements()));
770 else if (dfdp.getMultiVectorOrientation() == DERIV_TRANS_MV_BY_ROW)
775 me->get_f_map()->NumMyElements()));
776 me_outargs.set_DfDp_sg(i,
777 SGDerivative(dfdp_sg,
778 dfdp.getMultiVectorOrientation()));
780 TEUCHOS_TEST_FOR_EXCEPTION(dfdp.getLinearOp() != Teuchos::null, std::logic_error,
781 "Error! Stokhos::SGModelEvaluator_Adaptive::evalModel " <<
782 "cannot handle operator form of df/dp!");
791 Teuchos::RCP<Epetra_Vector>
g = outArgs.get_g(i);
792 if (
g != Teuchos::null) {
793 Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly> g_sg =
795 me_outargs.set_g_sg(ii, g_sg);
799 if (outArgs.supports(OUT_ARG_DgDx_dot, i).supports(DERIV_LINEAR_OP)) {
800 Derivative dgdx_dot = outArgs.get_DgDx_dot(i);
801 if (dgdx_dot.getLinearOp() != Teuchos::null) {
802 Teuchos::RCP<Stokhos::SGOperator> op =
803 Teuchos::rcp_dynamic_cast<Stokhos::SGOperator>(
804 dgdx_dot.getLinearOp(),
true);
805 Teuchos::RCP< Stokhos::EpetraOperatorOrthogPoly > sg_blocks =
806 op->getSGPolynomial();
807 if (me_outargs.supports(OUT_ARG_DgDx, ii).supports(DERIV_LINEAR_OP))
808 me_outargs.set_DgDx_dot_sg(ii, sg_blocks);
811 Teuchos::RCP<Epetra_MultiVector> mv =
812 Teuchos::rcp_dynamic_cast<Stokhos::EpetraMultiVectorOperator>(
813 sg_blocks->getCoeffPtr(k),
true)->getMultiVector();
816 if (me_outargs.supports(OUT_ARG_DgDx_dot_sg, ii).supports(DERIV_MV_BY_COL))
821 DERIV_TRANS_MV_BY_ROW));
824 TEUCHOS_TEST_FOR_EXCEPTION(dgdx_dot.getLinearOp() == Teuchos::null &&
825 dgdx_dot.isEmpty() ==
false,
827 "Error! Stokhos::SGModelEvaluator_Adaptive::evalModel: " <<
828 "Operator form of dg/dxdot is required!");
832 if (outArgs.supports(OUT_ARG_DgDx, i).supports(DERIV_LINEAR_OP)) {
833 Derivative dgdx = outArgs.get_DgDx(i);
834 if (dgdx.getLinearOp() != Teuchos::null) {
835 Teuchos::RCP<Stokhos::SGOperator> op =
836 Teuchos::rcp_dynamic_cast<Stokhos::SGOperator>(
837 dgdx.getLinearOp(),
true);
838 Teuchos::RCP< Stokhos::EpetraOperatorOrthogPoly > sg_blocks =
839 op->getSGPolynomial();
840 if (me_outargs.supports(OUT_ARG_DgDx, ii).supports(DERIV_LINEAR_OP))
841 me_outargs.set_DgDx_sg(ii, sg_blocks);
844 Teuchos::RCP<Epetra_MultiVector> mv =
845 Teuchos::rcp_dynamic_cast<Stokhos::EpetraMultiVectorOperator>(
846 sg_blocks->getCoeffPtr(k),
true)->getMultiVector();
849 if (me_outargs.supports(OUT_ARG_DgDx_sg, ii).supports(DERIV_MV_BY_COL))
854 DERIV_TRANS_MV_BY_ROW));
857 TEUCHOS_TEST_FOR_EXCEPTION(dgdx.getLinearOp() == Teuchos::null &&
858 dgdx.isEmpty() ==
false,
860 "Error! Stokhos::SGModelEvaluator_Adaptive::evalModel: " <<
861 "Operator form of dg/dxdot is required!");
867 if (!outArgs.supports(OUT_ARG_DgDp, i,
j).none()) {
868 Derivative dgdp = outArgs.get_DgDp(i,
j);
869 if (dgdp.getMultiVector() != Teuchos::null) {
870 Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly> dgdp_sg;
871 if (dgdp.getMultiVectorOrientation() == DERIV_MV_BY_COL)
876 View, *(dgdp.getMultiVector())));
877 else if (dgdp.getMultiVectorOrientation() == DERIV_TRANS_MV_BY_ROW) {
878 Teuchos::RCP<const Epetra_BlockMap> product_map =
879 Teuchos::rcp(&(dgdp.getMultiVector()->Map()),
false);
884 View, *(dgdp.getMultiVector())));
886 me_outargs.set_DgDp_sg(ii,
j,
887 SGDerivative(dgdp_sg,
888 dgdp.getMultiVectorOrientation()));
890 TEUCHOS_TEST_FOR_EXCEPTION(dgdp.getLinearOp() != Teuchos::null,
892 "Error! Stokhos::SGModelEvaluator_Adaptive::evalModel " <<
893 "cannot handle operator form of dg/dp!");
900 me->evalModel(me_inargs, me_outargs);
903 if ((W_out != Teuchos::null || (
eval_W_with_f && f_out != Teuchos::null)) ) {
905 Teuchos::RCP<Epetra_Operator> W;
906 if (W_out != Teuchos::null)
911 Teuchos::RCP<Epetra_CrsMatrix> W_sg = Teuchos::rcp_dynamic_cast<Epetra_CrsMatrix>(W,
true);
916 if (f_out!=Teuchos::null){
918 for (
int i=0; i<
sg_basis->size(); i++)
925 for (
int i=0; i<
num_p; i++) {
926 if (!outArgs.supports(OUT_ARG_DfDp, i).none()) {
927 Derivative dfdp = outArgs.get_DfDp(i);
928 SGDerivative dfdp_sg = me_outargs.get_DfDp_sg(i);
929 if (dfdp.getMultiVector() != Teuchos::null) {
931 dfdp.getMultiVector()->Export(
932 *(dfdp_sg.getMultiVector()->getBlockMultiVector()),
946Teuchos::RCP<const Stokhos::EpetraVectorOrthogPoly>
959Teuchos::RCP<const Stokhos::EpetraVectorOrthogPoly>
977Teuchos::Array< Teuchos::RCP<const Epetra_Map> >
980 Teuchos::Array< Teuchos::RCP<const Epetra_Map> > base_maps(
num_g);
981 for (
int i=0; i<
num_g; i++)
982 base_maps[i] =
me->get_g_map(i);
986Teuchos::RCP<const Epetra_BlockMap>
992Teuchos::RCP<const Epetra_BlockMap>
998Teuchos::RCP<const Epetra_Import>
1004Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly>
1008 Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly> sg_x;
1019Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly>
1023 Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly> sg_x;
1035Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly>
1039 Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly> sg_x;
1051Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly>
1057 Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly> sg_x;
1069Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly>
1073 Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly> sg_p;
1074 Teuchos::Array<int>::const_iterator it = std::find(
sg_p_index_map.begin(),
1077 TEUCHOS_TEST_FOR_EXCEPTION(it ==
sg_p_index_map.end(), std::logic_error,
1078 "Error! Invalid p map index " << l);
1091Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly>
1095 Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly> sg_f;
1106Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly>
1110 Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly> sg_f;
1122Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly>
1128 Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly> sg_f;
1140Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly>
1146 Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly> sg_f;
1158Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly>
1162 Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly> sg_g;
1163 Teuchos::Array<int>::const_iterator it = std::find(
sg_g_index_map.begin(),
1166 TEUCHOS_TEST_FOR_EXCEPTION(it ==
sg_g_index_map.end(), std::logic_error,
1167 "Error! Invalid g map index " << l);
1182Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly>
1187 Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly> sg_g;
1188 Teuchos::Array<int>::const_iterator it = std::find(
sg_g_index_map.begin(),
1191 TEUCHOS_TEST_FOR_EXCEPTION(it ==
sg_g_index_map.end(), std::logic_error,
1192 "Error! Invalid g map index " << l);
A container class storing an orthogonal polynomial whose coefficients are vectors,...
A container class storing an orthogonal polynomial whose coefficients are vectors,...
A container class storing an orthogonal polynomial whose coefficients are vectors,...
Abstract base class for multivariate orthogonal polynomials.
Abstract base class for orthogonal polynomial-based expansions.
Abstract base class for multivariate orthogonal polynomials generated from tensor products of univari...
Abstract base class for quadrature methods.
Teuchos::RCP< const Epetra_Vector > get_x_init() const
Return initial solution.
Teuchos::RCP< Stokhos::OrthogPolyExpansion< int, double > > sg_exp
Stochastic Galerkin expansion.
Teuchos::RCP< const Epetra_Import > get_x_sg_importer() const
Return x sg importer.
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > create_f_sg(Epetra_DataAccess CV=Copy, const Epetra_Vector *v=NULL) const
Create vector orthog poly using f map and owned sg map.
unsigned int num_sg_blocks
Number of stochastic blocks.
void evalModel(const InArgs &inArgs, const OutArgs &outArgs) const
Evaluate model on InArgs.
Teuchos::RCP< const Epetra_Vector > get_p_init(int l) const
Return initial parameters.
Teuchos::RCP< Stokhos::EpetraMultiVectorOrthogPoly > create_x_mv_sg(int num_vecs, Epetra_DataAccess CV=Copy, const Epetra_MultiVector *v=NULL) const
Create vector orthog poly using x map and owned sg map.
OutArgs createOutArgs() const
Create OutArgs.
Teuchos::Array< Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > > sg_p_init
SG initial p.
SGModelEvaluator_Adaptive(const Teuchos::RCP< EpetraExt::ModelEvaluator > &me_, const Teuchos::RCP< Stokhos::AdaptivityManager > &am, const Teuchos::RCP< const Stokhos::Quadrature< int, double > > &sg_quad_, const Teuchos::RCP< Stokhos::OrthogPolyExpansion< int, double > > &sg_exp_, const Teuchos::RCP< const Stokhos::ParallelData > &sg_parallel_data_, bool onlyUseLinear_, int kExpOrder_, const Teuchos::RCP< Teuchos::ParameterList > ¶ms_)
Teuchos::RCP< const Epetra_Map > sg_f_map
Block SG residual map.
Teuchos::Array< Teuchos::RCP< Teuchos::Array< std::string > > > sg_p_names
SG coefficient parameter names.
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > f_sg_blocks
f stochastic Galerkin components
Teuchos::RCP< const Stokhos::EpetraVectorOrthogPoly > get_x_sg_init() const
Return initial SG x.
Teuchos::Array< Teuchos::RCP< Stokhos::EpetraMultiVectorOrthogPoly > > dgdx_dot_sg_blocks
dg/dxdot stochastic Galerkin components
Teuchos::RCP< const Epetra_BlockMap > stoch_row_map
Map for stochastic blocks.
Teuchos::Array< Teuchos::RCP< Stokhos::EpetraMultiVectorOrthogPoly > > dgdx_sg_blocks
dg/dx stochastic Galerkin components
Teuchos::Array< int > sg_p_index_map
Index map between block-p and p_sg maps.
bool eval_W_with_f
Whether to always evaluate W with f.
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > x_sg_blocks
x stochastic Galerkin components
Teuchos::RCP< EpetraExt::ModelEvaluator > me
Underlying model evaluator.
std::vector< Teuchos::RCP< const Stokhos::ProductBasis< int, double > > > sg_row_dof_basis
Teuchos::RCP< const Epetra_Map > get_x_map() const
Return solution vector map.
Teuchos::RCP< Stokhos::EpetraOperatorOrthogPoly > W_sg_blocks
W stochastic Galerkin components.
Teuchos::RCP< const Epetra_BlockMap > get_overlap_stochastic_map() const
Return overlap stochastic map.
Teuchos::RCP< const Epetra_BlockMap > overlapped_stoch_row_map
Overlapped map for stochastic blocks (local map).
Teuchos::RCP< const Epetra_Map > f_map
Underlying residual map.
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > create_x_sg_overlap(Epetra_DataAccess CV=Copy, const Epetra_Vector *v=NULL) const
Create vector orthog poly using x map and overlap sg map.
int num_g_sg
Number of stochastic response vectors.
Teuchos::Array< Teuchos::RCP< const Epetra_Map > > sg_g_map
Block SG response map.
void set_p_sg_init(int i, const Stokhos::EpetraVectorOrthogPoly &p_sg_in)
Set initial parameter polynomial.
Teuchos::RCP< const Epetra_Map > get_g_map(int l) const
Return response map.
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > create_g_sg(int l, Epetra_DataAccess CV=Copy, const Epetra_Vector *v=NULL) const
Create vector orthog poly using g map.
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > create_f_sg_overlap(Epetra_DataAccess CV=Copy, const Epetra_Vector *v=NULL) const
Create vector orthog poly using f map and overlap sg map.
Teuchos::Array< Teuchos::RCP< const Epetra_Map > > sg_p_map
Block SG parameter map.
Teuchos::RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
Return array of parameter names.
Teuchos::RCP< Epetra_Import > adapted_overlapped_x_importer
Importer from SG to SG-overlapped maps.
unsigned int num_p_blocks
Number of p stochastic blocks (may be smaller than num_sg_blocks).
Teuchos::Array< Teuchos::RCP< const Epetra_Map > > get_g_sg_base_maps() const
Get base maps of SG responses.
Teuchos::RCP< const Epetra_Map > adapted_overlapped_f_map
Adapted block SG overlapped residual map.
unsigned int num_W_blocks
Number of W stochastic blocks (may be smaller than num_sg_blocks).
Teuchos::RCP< const Epetra_Map > sg_overlapped_f_map
Block SG overlapped residual map.
Teuchos::RCP< const Stokhos::ParallelData > sg_parallel_data
Parallel SG data.
Teuchos::RCP< Epetra_Vector > my_x
x pointer for evaluating preconditioner
InArgs createInArgs() const
Create InArgs.
Teuchos::Array< int > get_g_sg_map_indices() const
Get indices of SG responses.
Teuchos::RCP< const Epetra_Map > sg_overlapped_x_map
Block SG overlapped unknown map.
Teuchos::RCP< const Epetra_Map > adapted_f_map
Adapted block SG residual map.
Teuchos::RCP< Stokhos::AdaptivityManager > adaptMngr
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > create_x_sg(Epetra_DataAccess CV=Copy, const Epetra_Vector *v=NULL) const
Create vector orthog poly using x map and owned sg map.
Teuchos::RCP< Epetra_CrsMatrix > my_W
W pointer for evaluating W with f.
Teuchos::Array< int > sg_g_index_map
Index map between block-g and g_sg maps.
Teuchos::RCP< const Stokhos::OrthogPolyBasis< int, double > > sg_basis
Stochastic Galerkin basis.
Teuchos::RCP< const Epetra_Map > x_map
Underlying unknown map.
Teuchos::RCP< Stokhos::EpetraMultiVectorOrthogPoly > create_f_mv_sg(int num_vecs, Epetra_DataAccess CV=Copy, const Epetra_MultiVector *v=NULL) const
Create multi-vector orthog poly using f map and owned sg map.
Teuchos::RCP< const Stokhos::Quadrature< int, double > > sg_quad
Stochastic Galerkin quadrature.
Teuchos::RCP< const Stokhos::EpetraVectorOrthogPoly > get_p_sg_init(int l) const
Return initial SG parameters.
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > x_dot_sg_blocks
x_dot stochastic Galerkin components
Teuchos::RCP< const Epetra_Map > get_f_map() const
Return residual vector map.
Teuchos::RCP< const Stokhos::Sparse3Tensor< int, double > > Cijk
int num_p_sg
Number of stochastic parameter vectors.
Teuchos::RCP< Teuchos::ParameterList > params
Algorithmic parameters.
Teuchos::RCP< Epetra_Operator > create_W() const
Create W = alpha*M + beta*J matrix.
Teuchos::RCP< const Epetra_BlockMap > get_x_sg_overlap_map() const
Return x sg overlap map.
int num_g
Number of response vectors of underlying model evaluator.
Teuchos::RCP< const Epetra_Map > get_p_map(int l) const
Return parameter vector map.
Teuchos::Array< int > get_p_sg_map_indices() const
Get indices of SG parameters.
Teuchos::RCP< const Epetra_Map > adapted_x_map
Adapted lock SG unknown map.
Teuchos::RCP< const Epetra_Map > sg_x_map
Block SG unknown map.
void set_x_sg_init(const Stokhos::EpetraVectorOrthogPoly &x_sg_in)
Set initial solution polynomial.
Teuchos::RCP< const EpetraExt::MultiComm > sg_comm
Parallel SG communicator.
Teuchos::RCP< Stokhos::EpetraMultiVectorOrthogPoly > create_f_mv_sg_overlap(int num_vecs, Epetra_DataAccess CV=Copy, const Epetra_MultiVector *v=NULL) const
Create multi-vector orthog poly using f map and overlap sg map.
Teuchos::RCP< const Epetra_Map > adapted_overlapped_x_map
Adapated block SG overlapped unknown map.
Teuchos::RCP< Stokhos::EpetraMultiVectorOrthogPoly > create_x_mv_sg_overlap(int num_vecs, Epetra_DataAccess CV=Copy, const Epetra_MultiVector *v=NULL) const
Create vector orthog poly using x map and overlap sg map.
Teuchos::RCP< const Epetra_BlockMap > overlapped_stoch_p_map
Overlapped map for p stochastic blocks (local map).
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > create_p_sg(int l, Epetra_DataAccess CV=Copy, const Epetra_Vector *v=0) const
Create vector orthog poly using p map.
int num_p
Number of parameter vectors of underlying model evaluator.
Teuchos::RCP< Stokhos::EpetraMultiVectorOrthogPoly > create_g_mv_sg(int l, int num_vecs, Epetra_DataAccess CV=Copy, const Epetra_MultiVector *v=NULL) const
Create multi-vector orthog poly using g map.
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > sg_x_init
SG initial x.
bool supports_x
Whether we support x (and thus f and W).
Teuchos::RCP< Epetra_Export > adapted_overlapped_f_exporter
Exporter from SG-overlapped to SG maps.
Teuchos::RCP< const Stokhos::EpetraSparse3Tensor > serialCijk
Serial Epetra Cijk for dgdx*.
Teuchos::RCP< const Stokhos::EpetraSparse3Tensor > epetraCijk
Epetra Cijk.
ScalarType g(const Teuchos::Array< ScalarType > &x, const ScalarType &y)