VertexCFD  0.0-dev
VertexCFD_TempusObserver_WriteRestart_impl.hpp
1 #ifndef VERTEXCFD_TEMPUSOBSERVER_WRITERESTART_IMPL_HPP
2 #define VERTEXCFD_TEMPUSOBSERVER_WRITERESTART_IMPL_HPP
3 
4 #include <string>
5 #include <vector>
6 
7 namespace VertexCFD
8 {
9 namespace TempusObserver
10 {
11 //---------------------------------------------------------------------------//
12 template<class Scalar>
13 WriteRestart<Scalar>::WriteRestart(
14  const Teuchos::RCP<Mesh::RestartWriter>& restart_writer,
15  const Teuchos::ParameterList& output_params)
16  : _restart_writer(restart_writer)
17 {
18  if (output_params.isType<int>("Restart Write Frequency"))
19  {
20  _write_frequency
21  = output_params.template get<int>("Restart Write Frequency");
22  }
23 }
24 
25 //---------------------------------------------------------------------------//
26 template<class Scalar>
28  const Tempus::Integrator<Scalar>&)
29 {
30 }
31 
32 //---------------------------------------------------------------------------//
33 template<class Scalar>
34 void WriteRestart<Scalar>::observeStartTimeStep(const Tempus::Integrator<Scalar>&)
35 {
36 }
37 
38 //---------------------------------------------------------------------------//
39 template<class Scalar>
40 void WriteRestart<Scalar>::observeNextTimeStep(const Tempus::Integrator<Scalar>&)
41 {
42 }
43 
44 //---------------------------------------------------------------------------//
45 template<class Scalar>
47  const Tempus::Integrator<Scalar>&)
48 {
49 }
50 
51 //---------------------------------------------------------------------------//
52 template<class Scalar>
53 void WriteRestart<Scalar>::observeAfterTakeStep(const Tempus::Integrator<Scalar>&)
54 {
55 }
56 
57 //---------------------------------------------------------------------------//
58 template<class Scalar>
60  const Tempus::Integrator<Scalar>&)
61 {
62 }
63 
64 //---------------------------------------------------------------------------//
65 template<class Scalar>
67  const Tempus::Integrator<Scalar>& integrator)
68 {
69  // Only write solution at specified time step intervals.
70  if (0 == integrator.getIndex() % _write_frequency)
71  {
72  writeSolution(integrator);
73  }
74 }
75 
76 //---------------------------------------------------------------------------//
77 template<class Scalar>
79  const Tempus::Integrator<Scalar>& integrator)
80 {
81  // Write out final solution, but only if this time step has not been
82  // written already.
83  if (integrator.getIndex() > _last_index)
84  {
85  writeSolution(integrator);
86  }
87 }
88 
89 //---------------------------------------------------------------------------//
90 template<class Scalar>
92  const Tempus::Integrator<Scalar>& integrator)
93 {
94  auto time = integrator.getTime();
95  auto solution = integrator.getSolutionHistory()->findState(time)->getX();
96  auto solution_dot
97  = integrator.getSolutionHistory()->findState(time)->getXDot();
98  _last_index = integrator.getIndex();
99  _restart_writer->writeSolution(solution, solution_dot, _last_index, time);
100 }
101 
102 //---------------------------------------------------------------------------//
103 
104 } // end namespace TempusObserver
105 } // end namespace VertexCFD
106 
107 #endif // end VERTEXCFD_TEMPUSOBSERVER_WRITERESTART_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23
VertexCFD::TempusObserver::WriteRestart::observeStartIntegrator
void observeStartIntegrator(const Tempus::Integrator< Scalar > &integrator) override
Observe the beginning of the time integrator.
Definition: VertexCFD_TempusObserver_WriteRestart_impl.hpp:27
VertexCFD::TempusObserver::WriteRestart::observeAfterCheckTimeStep
void observeAfterCheckTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Definition: VertexCFD_TempusObserver_WriteRestart_impl.hpp:59
VertexCFD::TempusObserver::WriteRestart::observeNextTimeStep
void observeNextTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Definition: VertexCFD_TempusObserver_WriteRestart_impl.hpp:40
VertexCFD::TempusObserver::WriteRestart::observeStartTimeStep
void observeStartTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe the beginning of the time step loop.
Definition: VertexCFD_TempusObserver_WriteRestart_impl.hpp:34
VertexCFD::TempusObserver::WriteRestart
Definition: VertexCFD_TempusObserver_WriteRestart.hpp:24
VertexCFD::TempusObserver::WriteRestart::observeEndTimeStep
void observeEndTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe the end of the time step loop.
Definition: VertexCFD_TempusObserver_WriteRestart_impl.hpp:66
VertexCFD::TempusObserver::WriteRestart::observeAfterTakeStep
void observeAfterTakeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe after Stepper takes step.
Definition: VertexCFD_TempusObserver_WriteRestart_impl.hpp:53
VertexCFD::TempusObserver::WriteRestart::observeEndIntegrator
void observeEndIntegrator(const Tempus::Integrator< Scalar > &integrator) override
Observe the end of the time integrator.
Definition: VertexCFD_TempusObserver_WriteRestart_impl.hpp:78
VertexCFD::TempusObserver::WriteRestart::observeBeforeTakeStep
void observeBeforeTakeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe before Stepper takes step.
Definition: VertexCFD_TempusObserver_WriteRestart_impl.hpp:46