![]() |
Chaste Commit::333233612e3dcc941d260418acd7b5ccdc30390e
|
#include <CardiacNewtonSolver.hpp>
Public Member Functions | |
void | Solve (CELLTYPE &rCell, double time, double rCurrentGuess[SIZE]) |
Static Public Member Functions | |
static CardiacNewtonSolver< SIZE, CELLTYPE > * | Instance () |
Protected Member Functions | |
CardiacNewtonSolver () | |
CardiacNewtonSolver (const CardiacNewtonSolver< SIZE, CELLTYPE > &) | |
CardiacNewtonSolver< SIZE, CELLTYPE > & | operator= (const CardiacNewtonSolver< SIZE, CELLTYPE > &) |
void | SolveLinearSystem () |
Private Attributes | |
c_vector< double, SIZE > | mResidual |
double | mJacobian [SIZE][SIZE] |
c_vector< double, SIZE > | mUpdate |
Specialised Newton solver for solving the nonlinear systems arising when simulating a cardiac cell using Backward Euler.
The class is templated by the size of the nonlinear system, and uses the singleton pattern to ensure only 1 solver for any given system size is created. This allows us to be both computationally and memory efficient.
It would be nice to have a test of this class directly, but you need a cardiac cell in order to test it. So all tests occur when testing particular cardiac cells, e.g. the LuoRudy1991BackwardEuler.
Definition at line 57 of file CardiacNewtonSolver.hpp.
|
inlineprotected |
Singleton pattern - protected default constructor.
Definition at line 162 of file CardiacNewtonSolver.hpp.
|
protected |
Singleton pattern - protected copy constructor. Not implemented.
|
inlinestatic |
Call this method to obtain a solver instance.
Definition at line 65 of file CardiacNewtonSolver.hpp.
|
protected |
Singleton pattern - protected assignment operator. Not implemented.
|
inline |
Use Newton's method to solve the given cell for the next timestep.
rCell | the cell to solve |
time | the current time |
rCurrentGuess | the current guess at a solution. Will be updated on exit. |
Definition at line 78 of file CardiacNewtonSolver.hpp.
References EXCEPTION, CardiacNewtonSolver< SIZE, CELLTYPE >::mJacobian, CardiacNewtonSolver< SIZE, CELLTYPE >::mResidual, CardiacNewtonSolver< SIZE, CELLTYPE >::mUpdate, and CardiacNewtonSolver< SIZE, CELLTYPE >::SolveLinearSystem().
|
inlineprotected |
Solve a linear system to calculate the Newton update step
This is solving Jacbian . update = residual for update given values of the Jacobian matrix and residual
The implementation does Gaussian elimination with no pivotting and no underflow checking
Definition at line 178 of file CardiacNewtonSolver.hpp.
References CardiacNewtonSolver< SIZE, CELLTYPE >::mJacobian, CardiacNewtonSolver< SIZE, CELLTYPE >::mResidual, and CardiacNewtonSolver< SIZE, CELLTYPE >::mUpdate.
Referenced by CardiacNewtonSolver< SIZE, CELLTYPE >::Solve().
|
private |
Working memory : Jacobian matrix
Definition at line 207 of file CardiacNewtonSolver.hpp.
Referenced by CardiacNewtonSolver< SIZE, CELLTYPE >::Solve(), and CardiacNewtonSolver< SIZE, CELLTYPE >::SolveLinearSystem().
|
private |
Working memory : residual vector
Definition at line 205 of file CardiacNewtonSolver.hpp.
Referenced by CardiacNewtonSolver< SIZE, CELLTYPE >::Solve(), and CardiacNewtonSolver< SIZE, CELLTYPE >::SolveLinearSystem().
|
private |
Working memory : update vector
Definition at line 209 of file CardiacNewtonSolver.hpp.
Referenced by CardiacNewtonSolver< SIZE, CELLTYPE >::Solve(), and CardiacNewtonSolver< SIZE, CELLTYPE >::SolveLinearSystem().