Class implements Crank-Nicolson Scheme. More...

#include <crankNicolsonScheme.hpp>

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

Public Member Functions

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

Private Attributes

SmartPointer< TridiagonalSolversolver_
 Sovler used in implicit step.
 

Detailed Description

Crank-Nicolson is a combination of the implicit method and the explicit Euler method. In each time step, two steps: explicit and implicit are performed. The Crank-Nicolson scheme is unconditionally stable and have better convergence that implicit schemes and explicit schemes alone.

Examples:
convergenceExample.cpp, EuroOptExample.cpp, and FokkerPlanckEqExample.cpp.

Member Function Documentation

std::vector< double > marian::CrankNicolsonScheme::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::CrankNicolsonScheme::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/crankNicolsonScheme.hpp
  • C:/Unix/home/OEM/fdm/src/FDM/schemes/crankNicolsonScheme.cpp