47 #include "Teuchos_UnitTestHarness.hpp" 55 typedef Thyra::ModelEvaluatorBase MEB;
65 RCP<Simple2DTpetraModelEvaluator<Scalar> > model = simple2DTpetraModelEvaluator<Scalar>();
66 TEST_ASSERT(model != null);
67 TEST_EQUALITY(model->Np(), 0);
68 TEST_EQUALITY(model->Ng(), 0);
69 TEST_ASSERT(model->get_x_space() != null);
70 TEST_EQUALITY(model->get_x_space()->dim(), 2);
71 TEST_ASSERT(model->get_f_space() != null);
72 TEST_EQUALITY(model->get_f_space()->dim(), 2);
73 TEST_ASSERT(nonnull(model->getNominalValues().get_x()));
74 TEST_ASSERT(model->create_W_op() != null);
76 MEB::InArgs<Scalar> inArgs = model->createInArgs();
77 TEST_ASSERT(inArgs.supports(MEB::IN_ARG_x));
78 TEST_EQUALITY(inArgs.Np(), 0);
81 #if !defined(HAVE_TPETRA_EXPLICIT_INSTANTIATION) || defined(HAVE_TPETRA_INST_DOUBLE) 82 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(
86 #if !defined(HAVE_TPETRA_EXPLICIT_INSTANTIATION) || defined(HAVE_TPETRA_INST_FLOAT) 87 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(
94 using Thyra::LinearOpBase;
95 using Thyra::VectorBase;
96 using Teuchos::ArrayRCP;
97 using Teuchos::ArrayView;
99 using Teuchos::rcp_dynamic_cast;
100 using Teuchos::tuple;
102 typedef Tpetra::Map<>::local_ordinal_type LO;
103 typedef Teuchos::ScalarTraits<Scalar> ST;
104 typedef typename ST::magnitudeType ScalarMag;
105 typedef Teuchos::ScalarTraits<ScalarMag> SMT;
107 RCP<Simple2DTpetraModelEvaluator<Scalar> > model = simple2DTpetraModelEvaluator<Scalar>();
109 const Scalar d = 7.0;
112 const Scalar p_0 = 2.0, p_1 = 6.0;
113 model->set_p(tuple<Scalar>(p_0, p_1));
115 const Scalar x_0 = 3.0, x_1 = 4.0;
116 model->set_x0(tuple<Scalar>(x_0, x_1));
118 MEB::InArgs<Scalar> inArgs = model->getNominalValues();
119 MEB::OutArgs<Scalar> outArgs = model->createOutArgs();
120 const RCP<VectorBase<Scalar> > f = createMember(model->get_f_space());
121 const RCP<LinearOpBase<Scalar> > W_op = model->create_W_op();
123 outArgs.set_W_op(W_op);
124 model->evalModel(inArgs, outArgs);
126 const ScalarMag tol = 100.0 * SMT::eps();
128 const RCP<const Tpetra::Vector<Scalar> > f_tpetra =
129 ConverterT::getConstTpetraVector(f);
131 const ArrayRCP<const Scalar> f_tpetra_vals = f_tpetra->get1dView();
132 TEST_FLOATING_EQUALITY(f_tpetra_vals[0], as<Scalar>(x_0 + x_1*x_1 - p_0), tol);
133 TEST_FLOATING_EQUALITY(f_tpetra_vals[1], as<Scalar>(d * (x_0*x_0 - x_1 - p_1)), tol);
135 const RCP<const Tpetra::CrsMatrix<Scalar> > W_tpetra =
136 rcp_dynamic_cast<Tpetra::CrsMatrix<Scalar> >(
137 ConverterT::getTpetraOperator(W_op));
139 ArrayView<const LO> row_indices;
140 ArrayView<const Scalar> row_values;
142 W_tpetra->getLocalRowView(0, row_indices, row_values);
146 TEST_EQUALITY( row_indices[0], static_cast<LO> (0) );
147 TEST_EQUALITY( row_indices[1], static_cast<LO> (1) );
148 TEST_FLOATING_EQUALITY( row_values[0], as<Scalar>(1.0), tol );
149 TEST_FLOATING_EQUALITY( row_values[1], as<Scalar>(2.0*x_1), tol );
151 W_tpetra->getLocalRowView(1, row_indices, row_values);
152 TEST_EQUALITY( row_indices[0], static_cast<LO> (0) );
153 TEST_EQUALITY( row_indices[1], static_cast<LO> (1) );
154 TEST_FLOATING_EQUALITY( row_values[0], as<Scalar>(d*2.0*x_0), tol );
155 TEST_FLOATING_EQUALITY( row_values[1], as<Scalar>(-d), tol );
159 #if !defined(HAVE_TPETRA_EXPLICIT_INSTANTIATION) || defined(HAVE_TPETRA_INST_DOUBLE) 160 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(
164 #if !defined(HAVE_TPETRA_EXPLICIT_INSTANTIATION) || defined(HAVE_TPETRA_INST_FLOAT) 165 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(
Simple 2d simulation only ModelEvaluator for f(x) = 0 using Tpetra objects.
TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL(TpetraThyraWrappers, convertTpetraToThyraComm, Scalar)