12#include "Thyra_DefaultProductVectorSpace.hpp"
13#include "Thyra_ProductMultiVectorBase.hpp"
14#include "Thyra_DefaultMultipliedLinearOp.hpp"
15#include "Thyra_MultiVectorStdOps.hpp"
18using Teuchos::ArrayRCP;
19using Teuchos::dyn_cast;
35 using Thyra::productVectorSpace;
56 const LinearOp& tildeInvA00,
const LinearOp& invS)
64 using Thyra::productVectorSpace;
74 const double alpha,
const double beta)
const {
106 applyOp(
A10_, uc, ps, -1.0, 1.0);
107 applyOp(
invS_, ps, pc, -1.0);
108 applyOp(invA00_A01, pc, uc, -1.0, 1.0);
112 update(alpha, uc, beta, u);
113 update(alpha, pc, beta, p);
114 }
else if (alpha != 1.0) {
120void LU2x2InverseOp::describe(Teuchos::FancyOStream& out_arg,
121 const Teuchos::EVerbosityLevel verbLevel)
const {
122 using Teuchos::OSTab;
124 RCP<Teuchos::FancyOStream> out = rcp(&out_arg,
false);
127 case Teuchos::VERB_DEFAULT:
128 case Teuchos::VERB_LOW: *out << this->description() << std::endl;
break;
129 case Teuchos::VERB_MEDIUM:
130 case Teuchos::VERB_HIGH:
131 case Teuchos::VERB_EXTREME: {
132 *out << Teuchos::Describable::description() <<
"{"
133 <<
"rangeDim=" << this->
range()->dim() <<
",domainDim=" << this->
domain()->dim()
137 *out << Teuchos::describe(*
invS_, verbLevel);
139 *out <<
"[hatInvA00]:\n";
140 *out << Teuchos::describe(*
hatInvA00_, verbLevel);
142 *out <<
"[tildeInvA00]:\n";
146 *out << Teuchos::describe(*
A10_, verbLevel);
149 *out << Teuchos::describe(*
A01_, verbLevel);
153 default: TEUCHOS_TEST_FOR_EXCEPT(
true);
MultiVector getBlock(int i, const BlockedMultiVector &bmv)
Get the ith block from a BlockedMultiVector object.
MultiVector deepcopy(const MultiVector &v)
Perform a deep copy of the vector.
const LinearOp hatInvA00_
inverse of
virtual void implicitApply(const BlockedMultiVector &x, BlockedMultiVector &y, const double alpha=1.0, const double beta=0.0) const
Perform a matrix vector multiply with this operator.
const LinearOp tildeInvA00_
inverse of
Teuchos::RCP< const Thyra::ProductVectorSpaceBase< double > > productDomain_
Domain vector space.
virtual VectorSpace domain() const
Domain space of this operator.
Teuchos::RCP< const Thyra::ProductVectorSpaceBase< double > > productRange_
Range vector space.
const LinearOp invS_
inverse of
virtual VectorSpace range() const
Range space of this operator.
const LinearOp A01_
operator
const LinearOp A10_
operator
LU2x2InverseOp(const BlockedLinearOp &A, const LinearOp &invA00, const LinearOp &invS)
This constructor explicitly takes the parts of required to build the inverse operator.
const BlockedLinearOp A_
operator