VertexCFD  0.0-dev
VertexCFD_TempusObserver_WriteMatrix.hpp
1 #ifndef VERTEXCFD_TEMPUSOBSERVER_WRITEMATRIX_HPP
2 #define VERTEXCFD_TEMPUSOBSERVER_WRITEMATRIX_HPP
3 
4 #include <Tempus_Integrator.hpp>
5 #include <Tempus_IntegratorObserver.hpp>
6 
7 #include <Panzer_GlobalIndexer.hpp>
8 #include <Teuchos_ParameterList.hpp>
9 
10 namespace VertexCFD
11 {
12 namespace TempusObserver
13 {
14 //---------------------------------------------------------------------------//
15 template<class Scalar>
16 class WriteMatrix : virtual public Tempus::IntegratorObserver<Scalar>
17 {
18  public:
19  WriteMatrix(const Teuchos::ParameterList& output_params);
20 
23  const Tempus::Integrator<Scalar>& integrator) override;
24 
26  void
27  observeStartTimeStep(const Tempus::Integrator<Scalar>& integrator) override;
28 
31  void
32  observeNextTimeStep(const Tempus::Integrator<Scalar>& integrator) override;
33 
35  void
36  observeBeforeTakeStep(const Tempus::Integrator<Scalar>& integrator) override;
37 
39  void
40  observeAfterTakeStep(const Tempus::Integrator<Scalar>& integrator) override;
41 
45  const Tempus::Integrator<Scalar>& integrator) override;
46 
48  void
49  observeEndTimeStep(const Tempus::Integrator<Scalar>& integrator) override;
50 
52  void
53  observeEndIntegrator(const Tempus::Integrator<Scalar>& integrator) override;
54 
55  private:
56  Teuchos::Array<int> _write_steps;
57  std::string _jacobian_prefix;
58  std::string _residual_prefix;
59  bool _write_residual;
60 
61  // Extract Thyra linear operator from linear solver
62  Teuchos::RCP<const Thyra::LinearOpBase<Scalar>> extractLinearOp(
63  const Teuchos::RCP<const Thyra::LinearOpWithSolveBase<Scalar>>&
64  linear_solver) const;
65 
66  // Extract forward op src (the Jacobian) from a linear op with solve
67  template<class SolverType>
68  Teuchos::RCP<const Thyra::LinearOpBase<Scalar>> tryExtractForwardOp(
69  const Teuchos::RCP<const Thyra::LinearOpWithSolveBase<Scalar>>&
70  linear_solver) const;
71 
72  // Write Jacobian matrix to file, toggling on Epetra vs. Tpetra
73  void
74  write_jacobian(const Teuchos::RCP<const Thyra::LinearOpBase<Scalar>>& matrix,
75  const std::string& filename,
76  const std::string& description) const;
77 
78  // Write residual to file, toggling on Epetra vs. Tpetra
79  void
80  write_residual(const Teuchos::RCP<const Thyra::VectorBase<Scalar>>& vec,
81  const std::string& filename,
82  const std::string& description) const;
83 };
84 
85 //---------------------------------------------------------------------------//
86 
87 } // end namespace TempusObserver
88 } // end namespace VertexCFD
89 
90 #include "VertexCFD_TempusObserver_WriteMatrix_impl.hpp"
91 
92 #endif // end VERTEXCFD_TEMPUSOBSERVER_WRITEMATRIX_HPP
VertexCFD::TempusObserver::WriteMatrix::observeAfterTakeStep
void observeAfterTakeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe after Stepper takes step.
Definition: VertexCFD_TempusObserver_WriteMatrix_impl.hpp:97
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23
VertexCFD::TempusObserver::WriteMatrix::observeNextTimeStep
void observeNextTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Definition: VertexCFD_TempusObserver_WriteMatrix_impl.hpp:85
VertexCFD::TempusObserver::WriteMatrix::observeBeforeTakeStep
void observeBeforeTakeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe before Stepper takes step.
Definition: VertexCFD_TempusObserver_WriteMatrix_impl.hpp:91
VertexCFD::TempusObserver::WriteMatrix::observeStartTimeStep
void observeStartTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe the beginning of the time step loop.
Definition: VertexCFD_TempusObserver_WriteMatrix_impl.hpp:79
VertexCFD::TempusObserver::WriteMatrix::observeStartIntegrator
void observeStartIntegrator(const Tempus::Integrator< Scalar > &integrator) override
Observe the beginning of the time integrator.
Definition: VertexCFD_TempusObserver_WriteMatrix_impl.hpp:72
VertexCFD::TempusObserver::WriteMatrix::observeEndIntegrator
void observeEndIntegrator(const Tempus::Integrator< Scalar > &integrator) override
Observe the end of the time integrator.
Definition: VertexCFD_TempusObserver_WriteMatrix_impl.hpp:179
VertexCFD::TempusObserver::WriteMatrix
Definition: VertexCFD_TempusObserver_WriteMatrix.hpp:17
VertexCFD::TempusObserver::WriteMatrix::observeAfterCheckTimeStep
void observeAfterCheckTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Definition: VertexCFD_TempusObserver_WriteMatrix_impl.hpp:103
VertexCFD::TempusObserver::WriteMatrix::observeEndTimeStep
void observeEndTimeStep(const Tempus::Integrator< Scalar > &integrator) override
Observe the end of the time step loop.
Definition: VertexCFD_TempusObserver_WriteMatrix_impl.hpp:110