Tempus
Version of the Day
Time Integration
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Tempus_WrapCombinedFSAModelEvaluator.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 Tempus_WrapCombinedFSAModelEvaluator_hpp
10
#define Tempus_WrapCombinedFSAModelEvaluator_hpp
11
12
#include "Tempus_config.hpp"
13
#include "
Tempus_WrapperModelEvaluatorPairIMEX_CombinedFSA.hpp
"
14
#include "Tempus_WrapperModelEvaluatorPairPartIMEX_CombinedFSA.hpp"
15
16
namespace
Tempus
{
17
23
template
<
typename
Scalar>
24
Teuchos::RCP< SensitivityModelEvaluatorBase<Scalar> >
25
wrapCombinedFSAModelEvaluator
(
26
const
Teuchos::RCP<
const
Thyra::ModelEvaluator<Scalar>
> & model,
27
const
Teuchos::RCP<
const
Thyra::ModelEvaluator<Scalar>
>& sens_residual_model,
28
const
Teuchos::RCP<
const
Thyra::ModelEvaluator<Scalar>
>& sens_solve_model,
29
const
Teuchos::RCP<const Teuchos::ParameterList>& pList = Teuchos::null)
30
{
31
using
Teuchos::RCP;
32
using
Teuchos::rcp_dynamic_cast;
33
34
RCP<SensitivityModelEvaluatorBase<Scalar> > wrapped_model;
35
36
// Test if model is an IMEX pair
37
RCP<const WrapperModelEvaluatorPairIMEX_Basic<Scalar> > modelPairIMEX =
38
rcp_dynamic_cast<const WrapperModelEvaluatorPairIMEX_Basic<Scalar> >(model);
39
RCP<const WrapperModelEvaluatorPairPartIMEX_Basic<Scalar> > modelPairPartIMEX =
40
rcp_dynamic_cast<const WrapperModelEvaluatorPairPartIMEX_Basic<Scalar> >(model);
41
42
// It isn't clear how to handle separate sensitivity and solve model
43
// evaluators in the IMEX case, so punt for now. Would they also be IMEX MEs?
44
if
((modelPairIMEX != Teuchos::null || modelPairPartIMEX != Teuchos::null) &&
45
(model.ptr() != sens_residual_model.ptr()) &&
46
(model.ptr() != sens_solve_model.ptr()))
47
TEUCHOS_TEST_FOR_EXCEPTION(
true
, std::logic_error,
"Unique model evaluators for state, sensitivity residual, and sensitivity solve is not supported for IMEX"
);
48
49
if
(modelPairIMEX != Teuchos::null) {
50
wrapped_model =
51
rcp(
new
WrapperModelEvaluatorPairIMEX_CombinedFSA<Scalar>
(
52
modelPairIMEX, pList));
53
}
54
else
if
(modelPairPartIMEX != Teuchos::null) {
55
wrapped_model =
56
rcp(
new
WrapperModelEvaluatorPairPartIMEX_CombinedFSA<Scalar>
(
57
modelPairPartIMEX, pList));
58
}
59
else
{
60
wrapped_model =
61
rcp(
new
CombinedForwardSensitivityModelEvaluator<Scalar>
(
62
model, sens_residual_model, sens_solve_model, pList));
63
}
64
65
return
wrapped_model;
66
}
67
68
template
<
typename
Scalar>
69
Teuchos::RCP< SensitivityModelEvaluatorBase<Scalar> >
70
wrapCombinedFSAModelEvaluator
(
71
const
Teuchos::RCP<
Thyra::ModelEvaluator<Scalar>
> & model,
72
const
Teuchos::RCP<
Thyra::ModelEvaluator<Scalar>
>& sens_residual_model,
73
const
Teuchos::RCP<
Thyra::ModelEvaluator<Scalar>
>& sens_solve_model,
74
const
Teuchos::RCP<const Teuchos::ParameterList>& pList = Teuchos::null)
75
{
76
Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > cmodel = model;
77
Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > csens_residual_model = sens_residual_model;
78
Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > csens_solve_model = sens_solve_model;
79
return
wrapCombinedFSAModelEvaluator
(
80
cmodel, csens_residual_model, csens_solve_model, pList);
81
}
82
83
}
// namespace Tempus
84
85
#endif
Tempus_WrapperModelEvaluatorPairIMEX_CombinedFSA.hpp
Tempus::CombinedForwardSensitivityModelEvaluator
Transform a ModelEvaluator's sensitivity equations to its residual.
Definition
Tempus_CombinedForwardSensitivityModelEvaluator_decl.hpp:41
Tempus::WrapperModelEvaluatorPairIMEX_CombinedFSA
Specialization of IMEX ME for "combined" FSA method.
Definition
Tempus_WrapperModelEvaluatorPairIMEX_CombinedFSA.hpp:30
Tempus::WrapperModelEvaluatorPairPartIMEX_CombinedFSA
Specialization of IMEX-Part ME for "combined" FSA method.
Definition
Tempus_WrapperModelEvaluatorPairPartIMEX_CombinedFSA_decl.hpp:35
Thyra::ModelEvaluator
Tempus
Definition
Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:21
Tempus::wrapCombinedFSAModelEvaluator
Teuchos::RCP< SensitivityModelEvaluatorBase< Scalar > > wrapCombinedFSAModelEvaluator(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &sens_residual_model, const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &sens_solve_model, const Teuchos::RCP< const Teuchos::ParameterList > &pList=Teuchos::null)
Definition
Tempus_WrapCombinedFSAModelEvaluator.hpp:25
Generated by
1.17.0