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