Tempus  Version of the Day
Time Integration
Tempus_IntegratorObserverLogging_decl.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_IntegratorObserverLogging_decl_hpp
10 #define Tempus_IntegratorObserverLogging_decl_hpp
11 
13 #include <list>
14 
15 namespace Tempus {
16 
17 /** \brief This observer logs calls to observer functions.
18  * This observer simply logs and counts the calls to each of the
19  * observer functions. This is useful in monirtoring and debugging
20  * the time integration.
21  */
22 template<class Scalar>
24  : virtual public Tempus::IntegratorObserver<Scalar>
25 {
26 public:
27 
28  /// Constructor
30 
31  /// Destructor
33 
34  /// \name Override IntegratorObserver basic methods
35  //@{
36  /// Observe the beginning of the time integrator.
37  virtual void observeStartIntegrator(const Integrator<Scalar>& integrator) override;
38 
39  /// Observe the beginning of the time step loop.
40  virtual void observeStartTimeStep(const Integrator<Scalar>& integrator) override;
41 
42  /// Observe after the next time step size is selected.
43  virtual void observeNextTimeStep(const Integrator<Scalar>& integrator) override;
44 
45  /// Observe before Stepper takes step.
46  virtual void observeBeforeTakeStep(const Integrator<Scalar>& integrator) override;
47 
48  /// Observe after Stepper takes step.
49  virtual void observeAfterTakeStep(const Integrator<Scalar>& integrator) override;
50 
51  /// Observe after accepting time step.
52  virtual void observeAcceptedTimeStep(const Integrator<Scalar>& integrator) override;
53 
54  /// Observe the end of the time integrator.
55  virtual void observeEndIntegrator(const Integrator<Scalar>& integrator) override;
56  //@}
57 
58  void resetLogCounters();
59 
60  Teuchos::RCP<const std::map<std::string,int> > getCounters();
61 
62  Teuchos::RCP<const std::list<std::string> > getOrder();
63 
64  /** \name String names logged in map
65  Use these strings to validate a call stack with this observer
66  */
67  //@{
68  const std::string nameObserveStartIntegrator_;
69  const std::string nameObserveStartTimeStep_;
70  const std::string nameObserveNextTimeStep_;
71  const std::string nameObserveBeforeTakeStep_;
72  const std::string nameObserveAfterTakeStep_;
73  const std::string nameObserveAcceptedTimeStep_;
74  const std::string nameObserveEndIntegrator_;
75  //@}
76 
77 private:
78 
79  /** \brief Asserts next call on the stack is correct and removes from stack
80 
81  This is a const method so that it can be called from the
82  derived IntegratorObserver methods that are const.
83  */
84  void logCall(const std::string call) const;
85 
86  Teuchos::RCP< std::map<std::string,int> > counters_;
87  Teuchos::RCP< std::list<std::string> > order_;
88 
89 };
90 
91 } // namespace Tempus
92 #endif // Tempus_IntegratorObserverLogging_decl_hpp
Tempus::IntegratorObserverLogging::observeBeforeTakeStep
virtual void observeBeforeTakeStep(const Integrator< Scalar > &integrator) override
Observe before Stepper takes step.
Definition: Tempus_IntegratorObserverLogging_impl.hpp:52
Tempus::IntegratorObserverLogging::observeStartTimeStep
virtual void observeStartTimeStep(const Integrator< Scalar > &integrator) override
Observe the beginning of the time step loop.
Definition: Tempus_IntegratorObserverLogging_impl.hpp:42
Tempus::IntegratorObserverLogging::getCounters
Teuchos::RCP< const std::map< std::string, int > > getCounters()
Definition: Tempus_IntegratorObserverLogging_impl.hpp:85
Tempus::IntegratorObserverLogging::nameObserveEndIntegrator_
const std::string nameObserveEndIntegrator_
Definition: Tempus_IntegratorObserverLogging_decl.hpp:74
Tempus::IntegratorObserverLogging::getOrder
Teuchos::RCP< const std::list< std::string > > getOrder()
Definition: Tempus_IntegratorObserverLogging_impl.hpp:90
Tempus::IntegratorObserverLogging::observeStartIntegrator
virtual void observeStartIntegrator(const Integrator< Scalar > &integrator) override
Observe the beginning of the time integrator.
Definition: Tempus_IntegratorObserverLogging_impl.hpp:37
Tempus::IntegratorObserverLogging::counters_
Teuchos::RCP< std::map< std::string, int > > counters_
Definition: Tempus_IntegratorObserverLogging_decl.hpp:86
Tempus::IntegratorObserverLogging::nameObserveNextTimeStep_
const std::string nameObserveNextTimeStep_
Definition: Tempus_IntegratorObserverLogging_decl.hpp:70
Tempus::IntegratorObserverLogging
This observer logs calls to observer functions. This observer simply logs and counts the calls to eac...
Definition: Tempus_IntegratorObserverLogging_decl.hpp:23
Tempus::IntegratorObserverLogging::observeNextTimeStep
virtual void observeNextTimeStep(const Integrator< Scalar > &integrator) override
Observe after the next time step size is selected.
Definition: Tempus_IntegratorObserverLogging_impl.hpp:47
Tempus::IntegratorObserverLogging::resetLogCounters
void resetLogCounters()
Definition: Tempus_IntegratorObserverLogging_impl.hpp:71
Tempus::IntegratorObserverLogging::order_
Teuchos::RCP< std::list< std::string > > order_
Definition: Tempus_IntegratorObserverLogging_decl.hpp:87
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::IntegratorObserverLogging::nameObserveStartIntegrator_
const std::string nameObserveStartIntegrator_
Definition: Tempus_IntegratorObserverLogging_decl.hpp:68
Tempus::Integrator
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
Definition: Tempus_Integrator.hpp:62
Tempus::IntegratorObserverLogging::IntegratorObserverLogging
IntegratorObserverLogging()
Constructor.
Definition: Tempus_IntegratorObserverLogging_impl.hpp:18
Tempus::IntegratorObserverLogging::logCall
void logCall(const std::string call) const
Asserts next call on the stack is correct and removes from stack.
Definition: Tempus_IntegratorObserverLogging_impl.hpp:94
Tempus::IntegratorObserverLogging::nameObserveBeforeTakeStep_
const std::string nameObserveBeforeTakeStep_
Definition: Tempus_IntegratorObserverLogging_decl.hpp:71
Tempus::IntegratorObserver
IntegratorObserver class for time integrators.
Definition: Tempus_IntegratorObserver.hpp:41
Tempus_IntegratorObserver.hpp
Tempus::IntegratorObserverLogging::~IntegratorObserverLogging
virtual ~IntegratorObserverLogging()
Destructor.
Definition: Tempus_IntegratorObserverLogging_impl.hpp:33
Tempus::IntegratorObserverLogging::nameObserveStartTimeStep_
const std::string nameObserveStartTimeStep_
Definition: Tempus_IntegratorObserverLogging_decl.hpp:69
Tempus::IntegratorObserverLogging::nameObserveAcceptedTimeStep_
const std::string nameObserveAcceptedTimeStep_
Definition: Tempus_IntegratorObserverLogging_decl.hpp:73
Tempus::IntegratorObserverLogging::observeEndIntegrator
virtual void observeEndIntegrator(const Integrator< Scalar > &integrator) override
Observe the end of the time integrator.
Definition: Tempus_IntegratorObserverLogging_impl.hpp:67
Tempus::IntegratorObserverLogging::observeAfterTakeStep
virtual void observeAfterTakeStep(const Integrator< Scalar > &integrator) override
Observe after Stepper takes step.
Definition: Tempus_IntegratorObserverLogging_impl.hpp:57
Tempus::IntegratorObserverLogging::nameObserveAfterTakeStep_
const std::string nameObserveAfterTakeStep_
Definition: Tempus_IntegratorObserverLogging_decl.hpp:72
Tempus::IntegratorObserverLogging::observeAcceptedTimeStep
virtual void observeAcceptedTimeStep(const Integrator< Scalar > &integrator) override
Observe after accepting time step.
Definition: Tempus_IntegratorObserverLogging_impl.hpp:62