Class implements implicit schemes. More...

#include <explicitScheme.hpp>

Inheritance diagram for marian::ExplicitScheme:
marian::DCFDScheme< ExplicitScheme > marian::FDScheme

Public Member Functions

void setSolver (const SmartPointer< TridiagonalSolver > &) override
 Provides a solver used in implicit scheme. More...
 
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. More...
 
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. More...
 
std::string info () const override
 Returns scheme name.
 
- Public Member Functions inherited from marian::DCFDScheme< ExplicitScheme >
virtual FDSchemeclone () const
 Virtual copy constructor.
 
- Public Member Functions inherited from marian::FDScheme
virtual ~FDScheme ()
 Deconstructor.
 

Detailed Description

When we solve following parabolic PDE:

\[\frac{df(x,t)}{dt} = L f(x,t)\]

where L is linear operator, we can use different time discretization scheme, for example:

\[ \begin{aligned} \text{in case of Forward Equation: }\frac{f(x_i,t_{j+1})-f(x_i,t_{j})}{t_{j+1}-t_{j}} & = \hat{L} f(x_i,t_{j+1}) \Rightarrow f(x_i,t_{j+1})= (I + (t_{j+1}-t_{j})\hat{L}) f(x_i,t_{j}) \\ \text{in case of Backward Equation: }\frac{f(x_i,t_{j+1})-f(x_i,t_{j})}{t_{j+1}-t_{j}} & = \hat{L} f(x_i,t_{j}) \Rightarrow f(x_i,t_{j+1})= (I - (t_{j+1}-t_{j})\hat{L}) f(x_i,t_{j+1}) \end{aligned} \]

For more information see [2] [5] [10] .

Examples:
convergenceExample.cpp.

Member Function Documentation

void marian::ExplicitScheme::setSolver ( const SmartPointer< TridiagonalSolver > &  )
inlineoverridevirtual

For explicit method this method is empty.

Implements marian::FDScheme.

std::vector< double > marian::ExplicitScheme::solve ( std::vector< double >  f,
const std::vector< SmartPointer< BoundaryCondition > > &  bcs,
const std::vector< double > &  time_grid,
const TridiagonalOperator L 
)
overridevirtual
Parameters
fInitial condition
bcsBoundary conditions
time_gridTime grid used in
LLinear operator defining PDE
Returns
Solution in form of std::vector

Implements marian::FDScheme.

std::vector< double > marian::ExplicitScheme::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 
)
overridevirtual
Parameters
fInitial condition
bcsBoundary conditions
spatial_gridSpatial grid corresponding to initial conditions (used only to save the solution to CSV file)
time_gridTime grid used for time dimension of FDM
LLinear operator defining PDE
file_nameName of CSV file
Returns
Solution in form of std::vector

Implements marian::FDScheme.


The documentation for this class was generated from the following files:
  • C:/Unix/home/OEM/fdm/src/FDM/schemes/explicitScheme.hpp
  • C:/Unix/home/OEM/fdm/src/FDM/schemes/explicitScheme.cpp