10#ifndef Tempus_IntegratorObserverBasic_impl_hpp
11#define Tempus_IntegratorObserverBasic_impl_hpp
13#include "Tempus_Stepper.hpp"
17template <
class Scalar>
22template <
class Scalar>
27template <
class Scalar>
31 std::time_t begin = std::time(
nullptr);
32 const Teuchos::RCP<Teuchos::FancyOStream> out = integrator.getOStream();
33 out->setOutputToRootOnly(0);
34 Teuchos::OSTab ostab(out, 0,
"ScreenOutput");
35 *out <<
"\nTempus - IntegratorBasic\n"
36 << std::asctime(std::localtime(&begin)) <<
"\n"
37 <<
" Stepper = " << integrator.
getStepper()->description() <<
"\n"
38 <<
" Simulation Time Range ["
41 <<
" Simulation Index Range ["
44 <<
"===================================================================="
46 <<
" Step Time dt Abs Error Rel Error Order nFail "
51template <
class Scalar>
57template <
class Scalar>
63template <
class Scalar>
69template <
class Scalar>
75template <
class Scalar>
81template <
class Scalar>
88 if ((cs->getOutputScreen() ==
true) || (cs->getOutput() ==
true) ||
90 const Scalar steppertime = integrator.
getStepperTimer()->totalElapsedTime();
94 const Teuchos::RCP<Teuchos::FancyOStream> out = integrator.getOStream();
95 out->setOutputToRootOnly(0);
96 Teuchos::OSTab ostab(out, 0,
"ScreenOutput");
97 *out << std::scientific << std::setw(6) << std::setprecision(3)
98 << cs->getIndex() << std::setw(11) << std::setprecision(3)
99 << cs->getTime() << std::setw(11) << std::setprecision(3)
100 << cs->getTimeStep() << std::setw(11) << std::setprecision(3)
101 << cs->getErrorAbs() << std::setw(11) << std::setprecision(3)
102 << cs->getErrorRel() << std::fixed << std::setw(7)
103 << std::setprecision(1) << cs->getOrder() << std::scientific
104 << std::setw(7) << std::setprecision(3) << cs->getNFailures()
105 << std::setw(11) << std::setprecision(3) << steppertime << std::endl;
109template <
class Scalar>
113 std::string exitStatus;
118 exitStatus =
"Time integration FAILURE!";
121 exitStatus =
"Time integration complete.";
123 std::time_t end = std::time(
nullptr);
125 const Teuchos::RCP<Teuchos::FancyOStream> out = integrator.getOStream();
126 out->setOutputToRootOnly(0);
127 Teuchos::OSTab ostab(out, 0,
"ScreenOutput");
128 *out <<
"===================================================================="
130 <<
" Total runtime = " << runtime <<
" sec = " << runtime / 60.0
132 << std::asctime(std::localtime(&end)) <<
"\nNumber of Accepted Steps = "
134 <<
"\nNumber of Failures = "
138 ->getNRunningFailures()
140 << exitStatus <<
"\n"
virtual ~IntegratorObserverBasic()
Destructor.
virtual void observeEndIntegrator(const Integrator< Scalar > &integrator) override
Observe the end of the time integrator.
virtual void observeEndTimeStep(const Integrator< Scalar > &integrator) override
Observe the end of the time step loop.
virtual void observeStartIntegrator(const Integrator< Scalar > &integrator) override
Observe the beginning of the time integrator.
virtual void observeBeforeTakeStep(const Integrator< Scalar > &integrator) override
Observe before Stepper takes step.
virtual void observeNextTimeStep(const Integrator< Scalar > &integrator) override
Observe after the next time step size is selected.
IntegratorObserverBasic()
Constructor.
virtual void observeAfterTakeStep(const Integrator< Scalar > &integrator) override
Observe after Stepper takes step.
virtual void observeStartTimeStep(const Integrator< Scalar > &integrator) override
Observe the beginning of the time step loop.
virtual void observeAfterCheckTimeStep(const Integrator< Scalar > &integrator) override
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const =0
Returns the IntegratorTimer_ for this Integrator.
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const =0
Returns the SolutionHistory for this Integrator.
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const =0
Returns the TimeStepControl for this Integrator.
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const =0
Get the stepper.
virtual Tempus::Status getStatus() const =0
Get the Status.
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const =0