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