VertexCFD  0.0-dev
VertexCFD_TempusObserver_ErrorNormOutput.hpp
1 #ifndef VERTEXCFD_TEMPUSOBSERVER_ERRORNORMOUTPUT_HPP
2 #define VERTEXCFD_TEMPUSOBSERVER_ERRORNORMOUTPUT_HPP
3 
4 #include <observers/VertexCFD_Compute_ErrorNorms.hpp>
5 
6 #include <Tempus_Integrator.hpp>
7 #include <Tempus_IntegratorObserver.hpp>
8 
9 #include <Teuchos_FancyOStream.hpp>
10 #include <Teuchos_ParameterList.hpp>
11 #include <Teuchos_RCP.hpp>
12 
13 #include <limits>
14 #include <string>
15 
16 namespace VertexCFD
17 {
18 namespace TempusObserver
19 {
20 //---------------------------------------------------------------------------//
21 template<class Scalar>
22 class ErrorNormOutput : virtual public Tempus::IntegratorObserver<Scalar>
23 {
24  public:
26  const Teuchos::ParameterList& error_norm_list,
27  Teuchos::RCP<ComputeErrorNorms::ErrorNorms<Scalar>> error_norm);
28 
31  const Tempus::Integrator<Scalar>& integrator) override;
32 
34  void
35  observeStartTimeStep(const Tempus::Integrator<Scalar>& integrator) override;
36 
39  void
40  observeNextTimeStep(const Tempus::Integrator<Scalar>& integrator) override;
41 
43  void
44  observeBeforeTakeStep(const Tempus::Integrator<Scalar>& integrator) override;
45 
47  void
48  observeAfterTakeStep(const Tempus::Integrator<Scalar>& integrator) override;
49 
53  const Tempus::Integrator<Scalar>& integrator) override;
54 
56  void
57  observeEndTimeStep(const Tempus::Integrator<Scalar>& integrator) override;
58 
60  void
61  observeEndIntegrator(const Tempus::Integrator<Scalar>& integrator) override;
62 
63  private:
65  void
66  print_error_norms(const std::string& heading,
67  const std::vector<typename ComputeErrorNorms::ErrorNorms<
68  Scalar>::DofErrorNorm>& error_norm,
69  const double scaling = 1.0);
70 
71  int _output_freq;
72  bool _compute_time_error;
73  Teuchos::FancyOStream _ostream;
74  Teuchos::RCP<ComputeErrorNorms::ErrorNorms<Scalar>> _error_norm;
75  static constexpr int prec = std::numeric_limits<double>::digits10 + 1;
76  std::vector<typename ComputeErrorNorms::ErrorNorms<Scalar>::DofErrorNorm>
77  _L1_time_error_norms;
78  std::vector<typename ComputeErrorNorms::ErrorNorms<Scalar>::DofErrorNorm>
79  _L2_time_error_norms;
80 };
81 
82 //---------------------------------------------------------------------------//
83 
84 } // end namespace TempusObserver
85 } // end namespace VertexCFD
86 
87 #include "VertexCFD_TempusObserver_ErrorNormOutput_impl.hpp"
88 
89 #endif // end VERTEXCFD_TEMPUSOBSERVER_ERRORNORMOUTPUT_HPP
VertexCFD::TempusObserver::ErrorNormOutput::observeBeforeTakeStep
void observeBeforeTakeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe before Stepper takes step.
Definition: VertexCFD_TempusObserver_ErrorNormOutput_impl.hpp:79
VertexCFD::ComputeErrorNorms::ErrorNorms
Definition: VertexCFD_Compute_ErrorNorms.hpp:28
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23
VertexCFD::TempusObserver::ErrorNormOutput::observeStartIntegrator
void observeStartIntegrator(const Tempus::Integrator< Scalar > &integrator) override
Observe the beginning of the time integrator.
Definition: VertexCFD_TempusObserver_ErrorNormOutput_impl.hpp:49
VertexCFD::TempusObserver::ErrorNormOutput::observeAfterTakeStep
void observeAfterTakeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe after Stepper takes step.
Definition: VertexCFD_TempusObserver_ErrorNormOutput_impl.hpp:86
VertexCFD::TempusObserver::ErrorNormOutput::observeNextTimeStep
void observeNextTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Definition: VertexCFD_TempusObserver_ErrorNormOutput_impl.hpp:72
VertexCFD::TempusObserver::ErrorNormOutput::observeEndTimeStep
void observeEndTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe the end of the time step loop.
Definition: VertexCFD_TempusObserver_ErrorNormOutput_impl.hpp:100
VertexCFD::TempusObserver::ErrorNormOutput
Definition: VertexCFD_TempusObserver_ErrorNormOutput.hpp:23
VertexCFD::TempusObserver::ErrorNormOutput::observeStartTimeStep
void observeStartTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe the beginning of the time step loop.
Definition: VertexCFD_TempusObserver_ErrorNormOutput_impl.hpp:65
VertexCFD::TempusObserver::ErrorNormOutput::observeEndIntegrator
void observeEndIntegrator(const Tempus::Integrator< Scalar > &integrator) override
Observe the end of the time integrator.
Definition: VertexCFD_TempusObserver_ErrorNormOutput_impl.hpp:150
VertexCFD::TempusObserver::ErrorNormOutput::observeAfterCheckTimeStep
void observeAfterCheckTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Definition: VertexCFD_TempusObserver_ErrorNormOutput_impl.hpp:93