crankNicolsonScheme.hpp
1 #ifndef MARIAN_CRANKNICOLSONSCHEME_HPP
2 #define MARIAN_CRANKNICOLSONSCHEME_HPP
3 
4 #include <FDM/schemes/fdScheme.hpp>
5 #include <FDM/tridiagonalSolver.hpp>
6 
7 namespace marian {
15  class CrankNicolsonScheme : public DCFDScheme<CrankNicolsonScheme> {
16  public:
23 
24  void setSolver(const SmartPointer<TridiagonalSolver>& solver) override {
25  solver_ = solver;
26  }
27  std::vector<double> solve(std::vector<double> f,
28  const std::vector<SmartPointer<BoundaryCondition> >& bcs,
29  const std::vector<double>& time_grid,
30  const TridiagonalOperator& L) override;
31  std::vector<double> solveAndSave(std::vector<double> f,
32  const std::vector<SmartPointer<BoundaryCondition> >& bcs,
33  const std::vector<double>& spatial_grid,
34  const std::vector<double>& time_grid,
35  const TridiagonalOperator& L,
36  const std::string file_name) override;
37  std::string info() const override {
38  return "CrankNicolson";
39  }
40  private:
42  };
43 
44 } // namespace marian
45 
46 
47 #endif /* MARIAN_CRANKNICOLSONSCHEME_HPP */
Deeply copyable BoundaryCondition.
Definition: fdScheme.hpp:94
Template of deep-coping smart pointer.
Definition: smartPointer.hpp:9
Definition: backwardKolmogorovEq.cpp:5
SmartPointer< TridiagonalSolver > solver_
Sovler used in implicit step.
Definition: crankNicolsonScheme.hpp:41
std::vector< double > solveAndSave(std::vector< double > f, const std::vector< SmartPointer< BoundaryCondition > > &bcs, const std::vector< double > &spatial_grid, const std::vector< double > &time_grid, const TridiagonalOperator &L, const std::string file_name) override
Solves PDE defined by provided linear operator L and initial and boundary conditions. Additionally saves solution to CSV file.
Definition: crankNicolsonScheme.cpp:54
CrankNicolsonScheme(SmartPointer< TridiagonalSolver > solver)
Provides a solver used in implicit scheme.
Definition: crankNicolsonScheme.hpp:22
Class implements Crank-Nicolson Scheme.
Definition: crankNicolsonScheme.hpp:15
TridiagonalOperator is used to define differentiating operator for PDE being solved.
Definition: tridiagonalOperator.hpp:35
std::string info() const override
Returns scheme name.
Definition: crankNicolsonScheme.hpp:37
std::vector< double > solve(std::vector< double > f, const std::vector< SmartPointer< BoundaryCondition > > &bcs, const std::vector< double > &time_grid, const TridiagonalOperator &L) override
Solves PDE defined by provided linear operator L and initial and boundary conditions.
Definition: crankNicolsonScheme.cpp:14
CrankNicolsonScheme()
Constructor.
Definition: crankNicolsonScheme.hpp:19
void setSolver(const SmartPointer< TridiagonalSolver > &solver) override
Provides a solver used in implicit scheme.
Definition: crankNicolsonScheme.hpp:24