39 RCP<const VectorSpace> space = Thyra::defaultSpmdVectorSpace<double>(3);
41 RCP<Vector> v = Thyra::createMember(space);
43 op->getRowStat(ROW_STAT_ROW_SUM, v.ptr());
44 TEST_FLOATING_EQUALITY(Thyra::min(*v), 2.0,
tol);
45 TEST_FLOATING_EQUALITY(Thyra::max(*v), 2.0,
tol);
46 op->getRowStat(ROW_STAT_COL_SUM, v.ptr());
47 TEST_FLOATING_EQUALITY(Thyra::min(*v), 2.0,
tol);
48 TEST_FLOATING_EQUALITY(Thyra::max(*v), 2.0,
tol);
49 op->getRowStat(ROW_STAT_INV_ROW_SUM, v.ptr());
50 TEST_FLOATING_EQUALITY(Thyra::min(*v), 0.5,
tol);
51 TEST_FLOATING_EQUALITY(Thyra::max(*v), 0.5,
tol);
52 op->getRowStat(ROW_STAT_INV_COL_SUM, v.ptr());
53 TEST_FLOATING_EQUALITY(Thyra::min(*v), 0.5,
tol);
54 TEST_FLOATING_EQUALITY(Thyra::max(*v), 0.5,
tol);
57 TEST_ASSERT(op->rowStatIsSupported(ROW_STAT_ROW_SUM));
58 TEST_ASSERT(!op->rowStatIsSupported(ROW_STAT_INV_ROW_SUM));
59 TEST_ASSERT(!op->rowStatIsSupported(ROW_STAT_INV_COL_SUM));
66 RCP<const VectorSpace> space = Thyra::defaultSpmdVectorSpace<double>(3);
68 TEST_ASSERT(op->supportsScaleLeft());
69 TEST_ASSERT(op->supportsScaleRight());
71 RCP<Vector> d = Thyra::createMember(space);
72 Thyra::put_scalar(3.0, d.ptr());
74 TEST_FLOATING_EQUALITY(op->scale(), -6.0,
tol);
75 Thyra::put_scalar(0.5, d.ptr());
77 TEST_FLOATING_EQUALITY(op->scale(), -3.0,
tol);
80 RCP<Vector> x = Thyra::createMember(space);
81 for (
int i = 0; i < 3; ++i) Thyra::set_ele(i, i + 1.0, x.ptr());
82 RCP<Vector> y = Thyra::createMember(space);
83 Thyra::apply<double>(*op, Thyra::NOTRANS, *x, y.ptr());
84 RCP<Vector> r = y->clone_v();
85 Thyra::Vp_StV(r.ptr(), 3.0, *x);
86 TEST_COMPARE(Thyra::norm_inf(*r), <=,
tol);
87 RCP<Vector> z = Thyra::createMember(space);
88 op->solve(Thyra::NOTRANS, *y, z.ptr());
89 Thyra::Vp_StV(z.ptr(), -1.0, *x);
90 TEST_COMPARE(Thyra::norm_inf(*z), <=,
tol);
93 Thyra::set_ele(1, 4.0, d.ptr());
94 TEST_THROW(op->scaleLeft(*d), std::logic_error);
95 TEST_THROW(op->scaleRight(*d), std::logic_error);
96 TEST_FLOATING_EQUALITY(op->scale(), -3.0,
tol);
106 RCP<const VectorSpace> space = Thyra::defaultSpmdVectorSpace<double>(2);
107 RCP<Thyra::MultiVectorBase<double> > A = Thyra::createMembers(space, 2);
109 Thyra::DetachedMultiVectorView<double> Av(*A);
115 const int num_adjoint = 2;
117 RCP<const VectorSpace> z_space = Thyra::defaultSpmdVectorSpace<double>(3);
118 const double alpha = -4.0;
120 RCP<Thyra::LinearOpBase<double> > null_op;
121 RCP<Thyra::LinearOpBase<double> > W =
122 Thyra::nonconstBlock2x2<double>(mv_op, null_op, null_op, si_op);
124 RCP<const Thyra::RowStatLinearOpBase<double> > W_rs =
125 rcp_dynamic_cast<const Thyra::RowStatLinearOpBase<double> >(W,
true);
126 RCP<Thyra::ScaledLinearOpBase<double> > W_sc =
127 rcp_dynamic_cast<Thyra::ScaledLinearOpBase<double> >(W,
true);
128 TEST_ASSERT(W_rs->rowStatIsSupported(ROW_STAT_INV_ROW_SUM));
129 TEST_ASSERT(W_sc->supportsScaleLeft());
131 RCP<Vector> inv_row_sum = Thyra::createMember(W->range());
132 W_rs->getRowStat(ROW_STAT_INV_ROW_SUM, inv_row_sum.ptr());
133 W_sc->scaleLeft(*inv_row_sum);
135 RCP<Vector> row_sum = Thyra::createMember(W->range());
136 W_rs->getRowStat(ROW_STAT_ROW_SUM, row_sum.ptr());
137 TEST_FLOATING_EQUALITY(Thyra::min(*row_sum), 1.0,
tol);
138 TEST_FLOATING_EQUALITY(Thyra::max(*row_sum), 1.0,
tol);
139 TEST_FLOATING_EQUALITY(si_op->scale(), -1.0,
tol);
RCP< MultiVectorLinearOp< Scalar > > nonconstMultiVectorLinearOp(const RCP< LinearOpBase< Scalar > > &op, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
Nonmember constructor function.