Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_IntegratorObserverSubcycling_impl.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_IntegratorObserverSubcycling_impl_hpp
10#define Tempus_IntegratorObserverSubcycling_impl_hpp
11
12#include "Tempus_Stepper.hpp"
13
14namespace Tempus {
15
16template<class Scalar>
18
19template<class Scalar>
21
22template<class Scalar>
24observeStartIntegrator(const Integrator<Scalar>& integrator){
25
26 const Teuchos::RCP<Teuchos::FancyOStream> out = integrator.getOStream();
27 out->setOutputToRootOnly(0);
28 Teuchos::OSTab ostab(out, 0, "ScreenOutput");
29 *out << "\n Begin Subcycling -------------------------------------------------------\n";
30 // << " Step Time dt Abs Error Rel Error Order nFail dCompTime"
31 // << std::endl;
32}
33
34template<class Scalar>
36observeStartTimeStep(const Integrator<Scalar>& /* integrator */){}
37
38template<class Scalar>
40observeNextTimeStep(const Integrator<Scalar>& /* integrator */){}
41
42template<class Scalar>
44observeBeforeTakeStep(const Integrator<Scalar>& /* integrator */){}
45
46template<class Scalar>
48observeAfterTakeStep(const Integrator<Scalar>& /* integrator */){}
49
50template<class Scalar>
52observeAfterCheckTimeStep(const Integrator<Scalar>& /* integrator */){}
53
54template<class Scalar>
56observeEndTimeStep(const Integrator<Scalar>& integrator){
57
58 using Teuchos::RCP;
59 auto cs = integrator.getSolutionHistory()->getCurrentState();
60
61 if ((cs->getOutputScreen() == true) ||
62 (cs->getOutput() == true) ||
63 (cs->getTime() == integrator.getTimeStepControl()->getFinalTime())) {
64
65 const Scalar steppertime = integrator.getStepperTimer()->totalElapsedTime();
66 // reset the stepper timer
67 integrator.getStepperTimer()->reset();
68
69 const Teuchos::RCP<Teuchos::FancyOStream> out = integrator.getOStream();
70 out->setOutputToRootOnly(0);
71 Teuchos::OSTab ostab(out, 0, "ScreenOutput");
72 *out<<std::scientific
73 <<std::setw( 6)<<std::setprecision(3)<<cs->getIndex()
74 <<std::setw(11)<<std::setprecision(3)<<cs->getTime()
75 <<std::setw(11)<<std::setprecision(3)<<cs->getTimeStep()
76 <<std::setw(11)<<std::setprecision(3)<<cs->getErrorAbs()
77 <<std::setw(11)<<std::setprecision(3)<<cs->getErrorRel()
78 <<std::fixed <<std::setw( 7)<<std::setprecision(1)<<cs->getOrder()
79 <<std::scientific<<std::setw( 7)<<std::setprecision(3)<<cs->getNFailures()
80 <<std::setw(11)<<std::setprecision(3)<<steppertime
81 <<std::endl;
82 }
83
84}
85
86template<class Scalar>
88observeEndIntegrator(const Integrator<Scalar>& integrator){
89
90 const Teuchos::RCP<Teuchos::FancyOStream> out = integrator.getOStream();
91 out->setOutputToRootOnly(0);
92 Teuchos::OSTab ostab(out, 0, "ScreenOutput");
93 *out << " End Subcycling ---------------------------------------------------------\n\n";
94}
95
96} // namespace Tempus
97#endif // Tempus_IntegratorObserverSubcycling_impl_hpp
virtual void observeEndIntegrator(const Integrator< Scalar > &integrator) override
Observe the end of the time integrator.
virtual void observeAfterCheckTimeStep(const Integrator< Scalar > &integrator) override
Observe after checking time step. Observer can still fail the time step here.
virtual void observeStartTimeStep(const Integrator< Scalar > &integrator) override
Observe the beginning of the time step loop.
virtual void observeEndTimeStep(const Integrator< Scalar > &integrator) override
Observe the end of the time step loop.
virtual void observeBeforeTakeStep(const Integrator< Scalar > &integrator) override
Observe before Stepper takes step.
virtual void observeAfterTakeStep(const Integrator< Scalar > &integrator) override
Observe after Stepper takes step.
virtual void observeNextTimeStep(const Integrator< Scalar > &integrator) override
Observe after the next time step size is selected.
virtual void observeStartIntegrator(const Integrator< Scalar > &integrator) override
Observe the beginning of the time integrator.