fdScheme.hpp
1 #ifndef MARIAN_FDSCHEME_HPP
2 #define MARIAN_FDSCHEME_HPP
3 
4 #include <vector>
5 #include <utils/smartPointer.hpp>
6 #include <FDM/tridiagonalSolver.hpp>
7 #include <FDM/boundaryConditions/boundaryCondition.hpp>
8 
9 namespace marian {
10 
32  class FDScheme {
33  public:
34 
37  virtual void setSolver(const SmartPointer<TridiagonalSolver>& solver) = 0;
46  virtual std::vector<double> solve(std::vector<double> f,
47  const std::vector<SmartPointer<BoundaryCondition> >& bcs,
48  const std::vector<double>& time_grid,
49  const TridiagonalOperator& L) = 0;
50 
61  virtual std::vector<double> solveAndSave(std::vector<double> f,
62  const std::vector<SmartPointer<BoundaryCondition> >& bcs,
63  const std::vector<double>& spatial_grid,
64  const std::vector<double>& time_grid,
65  const TridiagonalOperator& L,
66  const std::string file_name) = 0;
67 
70  virtual std::string info() const = 0;
71 
74  virtual FDScheme* clone() const = 0;
75 
78  virtual ~FDScheme(){};
79  };
80 
93  template<typename T>
94  class DCFDScheme : public FDScheme {
95  public:
98  virtual FDScheme* clone() const {
99  return new T(static_cast<const T&>(*this));
100  }
101  };
102 } // namespace marian
103 
104 
105 #endif /* MARIAN_FDSCHEME_HPP */
Deeply copyable BoundaryCondition.
Definition: fdScheme.hpp:94
virtual void setSolver(const SmartPointer< TridiagonalSolver > &solver)=0
Provides a solver used in implicit scheme.
Class implements interface for differential schemes.
Definition: fdScheme.hpp:32
virtual ~FDScheme()
Deconstructor.
Definition: fdScheme.hpp:78
virtual FDScheme * clone() const
Virtual copy constructor.
Definition: fdScheme.hpp:98
Template of deep-coping smart pointer.
Definition: smartPointer.hpp:9
Definition: backwardKolmogorovEq.cpp:5
virtual 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)=0
Solves PDE defined by provided linear operator L and initial and boundary conditions. Additionally saves solution to CSV file.
TridiagonalOperator is used to define differentiating operator for PDE being solved.
Definition: tridiagonalOperator.hpp:35
virtual FDScheme * clone() const =0
Virtual copy constructor.
virtual std::vector< double > solve(std::vector< double > f, const std::vector< SmartPointer< BoundaryCondition > > &bcs, const std::vector< double > &time_grid, const TridiagonalOperator &L)=0
Solves PDE defined by provided linear operator L and initial and boundary conditions.
virtual std::string info() const =0
Returns scheme name.