Tempus  Version of the Day
Time Integration
Tempus_IntegratorObserverBasic_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_IntegratorObserverBasic_impl_hpp
10 #define Tempus_IntegratorObserverBasic_impl_hpp
11 
12 #include "Tempus_Stepper.hpp"
13 
14 namespace Tempus {
15 
16 template<class Scalar>
18 
19 template<class Scalar>
21 
22 template<class Scalar>
25 
26  std::time_t begin = std::time(nullptr);
27  const Teuchos::RCP<Teuchos::FancyOStream> out = integrator.getOStream();
28  Teuchos::OSTab ostab(out,0,"ScreenOutput");
29  *out << "\nTempus - IntegratorBasic\n"
30  << std::asctime(std::localtime(&begin)) << "\n"
31  << " Stepper = " << integrator.getStepper()->description() << "\n"
32  << " Simulation Time Range [" << integrator.getTimeStepControl()->getInitTime()
33  << ", " << integrator.getTimeStepControl()->getFinalTime() << "]\n"
34  << " Simulation Index Range [" << integrator.getTimeStepControl()->getInitIndex()
35  << ", " << integrator.getTimeStepControl()->getFinalIndex() << "]\n"
36  << "============================================================================\n"
37  << " Step Time dt Abs Error Rel Error Order nFail dCompTime"
38  << std::endl;
39 }
40 
41 template<class Scalar>
44 
45 template<class Scalar>
48 
49 template<class Scalar>
52 
53 template<class Scalar>
56 
57 template<class Scalar>
60 
61  using Teuchos::RCP;
62  RCP<SolutionStateMetaData<Scalar> > csmd =
63  integrator.getSolutionHistory()->getCurrentState()->getMetaData();
64 
65  if ((csmd->getOutputScreen() == true) or
66  (csmd->getOutput() == true) or
67  (csmd->getTime() == integrator.getTimeStepControl()->getFinalTime())) {
68 
69  const Scalar steppertime = integrator.getStepperTimer()->totalElapsedTime();
70  // reset the stepper timer
71  integrator.getStepperTimer()->reset();
72 
73  const Teuchos::RCP<Teuchos::FancyOStream> out = integrator.getOStream();
74  Teuchos::OSTab ostab(out,0,"ScreenOutput");
75  *out<<std::scientific<<std::setw( 6)<<std::setprecision(3)<<csmd->getIStep()
76  <<std::setw(11)<<std::setprecision(3)<<csmd->getTime()
77  <<std::setw(11)<<std::setprecision(3)<<csmd->getDt()
78  <<std::setw(11)<<std::setprecision(3)<<csmd->getErrorAbs()
79  <<std::setw(11)<<std::setprecision(3)<<csmd->getErrorRel()
80  <<std::fixed <<std::setw( 7)<<std::setprecision(1)<<csmd->getOrder()
81  <<std::scientific<<std::setw( 7)<<std::setprecision(3)<<csmd->getNFailures()
82  <<std::setw(11)<<std::setprecision(3)<<steppertime
83  <<std::endl;
84  }
85 
86 }
87 
88 template<class Scalar>
91 
92  std::string exitStatus;
93  //const Scalar runtime = integrator.getIntegratorTimer()->totalElapsedTime();
94  if (integrator.getSolutionHistory()->getCurrentState()->getSolutionStatus() ==
95  Status::FAILED or integrator.getStatus() == Status::FAILED) {
96  exitStatus = "Time integration FAILURE!";
97  } else {
98  exitStatus = "Time integration complete.";
99  }
100  std::time_t end = std::time(nullptr);
101  const Scalar runtime = integrator.getIntegratorTimer()->totalElapsedTime();
102  const Teuchos::RCP<Teuchos::FancyOStream> out = integrator.getOStream();
103  Teuchos::OSTab ostab(out,0,"ScreenOutput");
104  *out << "============================================================================\n"
105  << " Total runtime = " << runtime << " sec = "
106  << runtime/60.0 << " min\n"
107  << std::asctime(std::localtime(&end))
108  << exitStatus << "\n"
109  << std::endl;
110 }
111 
112 } // namespace Tempus
113 #endif // Tempus_IntegratorObserverBasic_impl_hpp
Tempus::IntegratorObserverBasic::observeAcceptedTimeStep
virtual void observeAcceptedTimeStep(const Integrator< Scalar > &integrator) override
Observe after accepting time step.
Definition: Tempus_IntegratorObserverBasic_impl.hpp:59
Tempus::IntegratorObserverBasic::observeEndIntegrator
virtual void observeEndIntegrator(const Integrator< Scalar > &integrator) override
Observe the end of the time integrator.
Definition: Tempus_IntegratorObserverBasic_impl.hpp:90
Tempus::IntegratorObserverBasic::observeBeforeTakeStep
virtual void observeBeforeTakeStep(const Integrator< Scalar > &integrator) override
Observe before Stepper takes step.
Definition: Tempus_IntegratorObserverBasic_impl.hpp:51
Tempus::Integrator::getIntegratorTimer
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const =0
Returns the IntegratorTimer_ for this Integrator.
Tempus::IntegratorObserverBasic::observeStartIntegrator
virtual void observeStartIntegrator(const Integrator< Scalar > &integrator) override
Observe the beginning of the time integrator.
Definition: Tempus_IntegratorObserverBasic_impl.hpp:24
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::Integrator
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
Definition: Tempus_Integrator.hpp:62
Tempus::IntegratorObserverBasic::IntegratorObserverBasic
IntegratorObserverBasic()
Constructor.
Definition: Tempus_IntegratorObserverBasic_impl.hpp:17
Tempus::Integrator::getStepper
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const =0
Get the stepper.
Tempus::Integrator::getSolutionHistory
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const =0
Returns the SolutionHistory for this Integrator.
Tempus_Stepper.hpp
Tempus::IntegratorObserverBasic::~IntegratorObserverBasic
virtual ~IntegratorObserverBasic()
Destructor.
Definition: Tempus_IntegratorObserverBasic_impl.hpp:20
Tempus::FAILED
Definition: Tempus_Types.hpp:18
Tempus::Integrator::getTimeStepControl
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const =0
Returns the TimeStepControl for this Integrator.
Tempus::Integrator::getStatus
virtual Tempus::Status getStatus() const =0
Get the Status.
Tempus::Integrator::getStepperTimer
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const =0
Tempus::IntegratorObserverBasic::observeNextTimeStep
virtual void observeNextTimeStep(const Integrator< Scalar > &integrator) override
Observe after the next time step size is selected.
Definition: Tempus_IntegratorObserverBasic_impl.hpp:47
Tempus::IntegratorObserverBasic::observeAfterTakeStep
virtual void observeAfterTakeStep(const Integrator< Scalar > &integrator) override
Observe after Stepper takes step.
Definition: Tempus_IntegratorObserverBasic_impl.hpp:55
Tempus::IntegratorObserverBasic::observeStartTimeStep
virtual void observeStartTimeStep(const Integrator< Scalar > &integrator) override
Observe the beginning of the time step loop.
Definition: Tempus_IntegratorObserverBasic_impl.hpp:43