Tempus
Version of the Day
Time Integration
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Thyra_ImplicitAdjointModelEvaluator.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ****************************************************************************
3
// Tempus: Copyright (2017) Sandia Corporation
4
//
5
// Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6
// ****************************************************************************
7
// @HEADER
8
9
#ifndef Thyra_ImplicitAdjointModelEvaluator_hpp
10
#define Thyra_ImplicitAdjointModelEvaluator_hpp
11
12
#include "Thyra_ModelEvaluatorDelegatorBase.hpp"
13
#include "Thyra_DefaultScaledAdjointLinearOp.hpp"
14
#include "Thyra_DefaultAdjointLinearOpWithSolve.hpp"
15
#include "
Thyra_AdjointLinearOpWithSolveFactory.hpp
"
16
#include "
Thyra_AdjointPreconditionerFactory.hpp
"
17
18
namespace
Thyra
{
19
24
template
<
typename
Scalar>
25
class
ImplicitAdjointModelEvaluator
:
26
public
ModelEvaluatorDelegatorBase<Scalar>{
27
public
:
28
30
ImplicitAdjointModelEvaluator
(
31
const
RCP<
const
ModelEvaluator<Scalar>
>& model) :
32
ModelEvaluatorDelegatorBase<Scalar>(model) {}
33
35
ImplicitAdjointModelEvaluator
(
36
const
RCP<
ModelEvaluator<Scalar>
>& model) :
37
ModelEvaluatorDelegatorBase<Scalar>(model) {}
38
40
virtual
~ImplicitAdjointModelEvaluator
() =
default
;
41
43
RCP<LinearOpWithSolveBase<Scalar> >
create_W
()
const
{
44
return
nonconstAdjointLows(this->getUnderlyingModel()->
create_W
());
45
}
46
48
RCP<LinearOpBase<Scalar> >
create_W_op
()
const
{
49
return
nonconstAdjoint(this->getUnderlyingModel()->
create_W_op
());
50
}
51
53
RCP<PreconditionerBase<Scalar> >
create_W_prec
()
const
{
54
return
nonconstAdjointPreconditioner
(
55
this->getUnderlyingModel()->
create_W_prec
());
56
}
57
59
RCP<const LinearOpWithSolveFactoryBase<Scalar> >
get_W_factory
()
const
{
60
return
adjointLinearOpWithSolveFactory
(
61
this->getUnderlyingModel()->
get_W_factory
());
62
}
63
64
private
:
65
66
void
evalModelImpl
(
67
const
ModelEvaluatorBase::InArgs<Scalar> &inArgs,
68
const
ModelEvaluatorBase::OutArgs<Scalar> &outArgs)
const
69
{
70
typedef
Thyra::ModelEvaluatorBase MEB;
71
MEB::OutArgs<Scalar> model_outArgs =
72
this->getUnderlyingModel()->createOutArgs();;
73
74
if
(model_outArgs.supports(MEB::OUT_ARG_W) &&
75
outArgs.get_W() != Teuchos::null) {
76
RCP<DefaultAdjointLinearOpWithSolve<Scalar> > adjoint_op =
77
Teuchos::rcp_dynamic_cast<DefaultAdjointLinearOpWithSolve<Scalar> >(
78
outArgs.get_W(),
true
);
79
model_outArgs.set_W(adjoint_op->getNonconstOp());
80
}
81
82
if
(model_outArgs.supports(MEB::OUT_ARG_W_op) &&
83
outArgs.get_W_op() != Teuchos::null) {
84
RCP<DefaultScaledAdjointLinearOp<Scalar> > adjoint_op =
85
Teuchos::rcp_dynamic_cast<DefaultScaledAdjointLinearOp<Scalar> >(
86
outArgs.get_W_op(),
true
);
87
model_outArgs.set_W_op(adjoint_op->getNonconstOp());
88
}
89
90
if
(model_outArgs.supports(MEB::OUT_ARG_W_prec) &&
91
outArgs.get_W_prec() != Teuchos::null) {
92
RCP<AdjointPreconditioner<Scalar> > adjoint_op =
93
Teuchos::rcp_dynamic_cast<AdjointPreconditioner<Scalar> >(
94
outArgs.get_W_prec(),
true
);
95
model_outArgs.set_W_prec(adjoint_op->getNonconstPreconditioner());
96
}
97
98
this->getUnderlyingModel()->evalModel(inArgs, model_outArgs);
99
}
100
101
};
102
103
template
<
typename
Scalar>
104
RCP<ImplicitAdjointModelEvaluator<Scalar> >
implicitAdjointModelEvaluator
(
105
const
RCP<
const
ModelEvaluator<Scalar>
>& model)
106
{
107
return
Teuchos::rcp(
new
ImplicitAdjointModelEvaluator<Scalar>
(model));
108
}
109
110
template
<
typename
Scalar>
111
RCP<ImplicitAdjointModelEvaluator<Scalar> >
implicitAdjointModelEvaluator
(
112
const
RCP<
ModelEvaluator<Scalar>
>& model)
113
{
114
return
Teuchos::rcp(
new
ImplicitAdjointModelEvaluator<Scalar>
(model));
115
}
116
117
}
// namespace Thyra
118
119
#endif
Thyra_AdjointLinearOpWithSolveFactory.hpp
Thyra_AdjointPreconditionerFactory.hpp
Thyra::AdjointLinearOpWithSolveFactory::adjointLinearOpWithSolveFactory
RCP< const AdjointLinearOpWithSolveFactory< Scalar > > adjointLinearOpWithSolveFactory(const RCP< const LinearOpWithSolveFactoryBase< Scalar > > &lowsf)
Nonmember constructor.
Definition
Thyra_AdjointLinearOpWithSolveFactory.hpp:178
Thyra::AdjointPreconditioner::nonconstAdjointPreconditioner
RCP< AdjointPreconditioner< Scalar > > nonconstAdjointPreconditioner(const RCP< PreconditionerBase< Scalar > > &prec)
Nonmember constructor function.
Definition
Thyra_AdjointPreconditioner.hpp:132
Thyra::ImplicitAdjointModelEvaluator
An implementation of AdjointModelEvaluatorBase that creates an implicit adjoint from the supplied mod...
Definition
Thyra_ImplicitAdjointModelEvaluator.hpp:26
Thyra::ImplicitAdjointModelEvaluator::create_W
RCP< LinearOpWithSolveBase< Scalar > > create_W() const
Create adjoint solver.
Definition
Thyra_ImplicitAdjointModelEvaluator.hpp:43
Thyra::ImplicitAdjointModelEvaluator::get_W_factory
RCP< const LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
Get adjoint solver factory.
Definition
Thyra_ImplicitAdjointModelEvaluator.hpp:59
Thyra::ImplicitAdjointModelEvaluator::create_W_op
RCP< LinearOpBase< Scalar > > create_W_op() const
Create adjoint op.
Definition
Thyra_ImplicitAdjointModelEvaluator.hpp:48
Thyra::ImplicitAdjointModelEvaluator::ImplicitAdjointModelEvaluator
ImplicitAdjointModelEvaluator(const RCP< const ModelEvaluator< Scalar > > &model)
Constructor.
Definition
Thyra_ImplicitAdjointModelEvaluator.hpp:30
Thyra::ImplicitAdjointModelEvaluator::~ImplicitAdjointModelEvaluator
virtual ~ImplicitAdjointModelEvaluator()=default
Destructor.
Thyra::ImplicitAdjointModelEvaluator::ImplicitAdjointModelEvaluator
ImplicitAdjointModelEvaluator(const RCP< ModelEvaluator< Scalar > > &model)
Constructor.
Definition
Thyra_ImplicitAdjointModelEvaluator.hpp:35
Thyra::ImplicitAdjointModelEvaluator::create_W_prec
RCP< PreconditionerBase< Scalar > > create_W_prec() const
Create adjoint preconditioner.
Definition
Thyra_ImplicitAdjointModelEvaluator.hpp:53
Thyra::ImplicitAdjointModelEvaluator::evalModelImpl
void evalModelImpl(const ModelEvaluatorBase::InArgs< Scalar > &inArgs, const ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
Definition
Thyra_ImplicitAdjointModelEvaluator.hpp:66
Thyra::ModelEvaluator
Thyra
Definition
Thyra_AdjointLinearOpWithSolveFactory.hpp:19
Thyra::implicitAdjointModelEvaluator
RCP< ImplicitAdjointModelEvaluator< Scalar > > implicitAdjointModelEvaluator(const RCP< const ModelEvaluator< Scalar > > &model)
Definition
Thyra_ImplicitAdjointModelEvaluator.hpp:104
Generated by
1.17.0