Rythmos - Transient Integration for Differential Equations Version of the Day
Loading...
Searching...
No Matches
Rythmos_StepControlInfo.hpp
1
2#ifndef RYTHMOS_STEP_CONTROL_INFO_HPP
3#define RYTHMOS_STEP_CONTROL_INFO_HPP
4
5// disable clang warnings
6#ifdef __clang__
7#pragma clang system_header
8#endif
9
10#include "Rythmos_StepperSupportTypes.hpp"
11
12namespace Rythmos {
13
14
17template<class Scalar>
20 Scalar stepSize;
22 StepSizeType stepType;
27 EBreakPointType breakPointType;
30 :stepSize(-1.0), stepType(STEP_TYPE_FIXED),
32 breakPointType(BREAK_POINT_TYPE_SOFT)
33 {}
34};
35
36
38template<class Scalar>
39std::ostream& operator<<(
40 std::ostream &out, const StepControlInfo<Scalar> &stepCtrlInfo
41 )
42{
43 using std::endl;
44 out
45 << "stepType = " << toString(stepCtrlInfo.stepType) << endl
46 << "stepSize = " << stepCtrlInfo.stepSize << endl
47 << "limitedByBreakPoint = " << stepCtrlInfo.limitedByBreakPoint << endl
48 << "breakPointType = " << toString(stepCtrlInfo.breakPointType) << endl;
49 return out;
50}
51
52
60template<class Scalar>
61StepControlInfo<Scalar>
63 const StepControlInfo<Scalar> &trialStepCtrlInfo,
64 const Scalar &stepSizeTaken
65 )
66{
67 typedef Teuchos::ScalarTraits<Scalar> ST;
68 const Scalar zero = ST::zero();
69 StepControlInfo<Scalar> stepCtrlInfo = trialStepCtrlInfo;
70 stepCtrlInfo.stepSize = stepSizeTaken;
71 if ( trialStepCtrlInfo.stepSize > zero && stepSizeTaken > zero ) {
72 if (stepSizeTaken < trialStepCtrlInfo.stepSize) {
73 stepCtrlInfo.limitedByBreakPoint = false;
74 }
75 }
76 else {
77 stepCtrlInfo.limitedByBreakPoint = false;
78 }
79 return stepCtrlInfo;
80}
81
82
83// 2007/09/14: rabartl: ToDo: Above: Move this function into
84// Rythmos_IntegratorBaseHelpers.hpp once created!
85
86
87} // namespace Rythmos
88
89
90#endif // RYTHMOS_STEP_CONTROL_INFO_HPP
Simple struct to aggregate integration/stepper control information.
bool limitedByBreakPoint
True if step size is limited by a breakpoint.
Scalar stepSize
The size of the time step.
EBreakPointType breakPointType
True if the time integrator should restart when passing over the breakpoint.
StepControlInfo()
Initialize to invalid state.
StepControlInfo< Scalar > stepCtrlInfoTaken(const StepControlInfo< Scalar > &trialStepCtrlInfo, const Scalar &stepSizeTaken)
Return a step control info object for a step actually taken.
StepSizeType stepType
The type of time step.