#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 |
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 50 of file CardiacNewtonSolver.hpp.
CardiacNewtonSolver< SIZE, CELLTYPE >::CardiacNewtonSolver | ( | ) | [inline, protected] |
Singleton pattern - protected default constructor.
Definition at line 155 of file CardiacNewtonSolver.hpp.
CardiacNewtonSolver< SIZE, CELLTYPE >::CardiacNewtonSolver | ( | const CardiacNewtonSolver< SIZE, CELLTYPE > & | ) | [protected] |
Singleton pattern - protected copy constructor. Not implemented.
static CardiacNewtonSolver<SIZE, CELLTYPE>* CardiacNewtonSolver< SIZE, CELLTYPE >::Instance | ( | ) | [inline, static] |
Call this method to obtain a solver instance.
Definition at line 58 of file CardiacNewtonSolver.hpp.
void CardiacNewtonSolver< SIZE, CELLTYPE >::Solve | ( | CELLTYPE & | rCell, | |
double | time, | |||
double | rCurrentGuess[SIZE] | |||
) | [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 71 of file CardiacNewtonSolver.hpp.
References EXCEPTION, CardiacNewtonSolver< SIZE, CELLTYPE >::mJacobian, CardiacNewtonSolver< SIZE, CELLTYPE >::mResidual, CardiacNewtonSolver< SIZE, CELLTYPE >::mUpdate, and CardiacNewtonSolver< SIZE, CELLTYPE >::SolveLinearSystem().
CardiacNewtonSolver<SIZE, CELLTYPE>& CardiacNewtonSolver< SIZE, CELLTYPE >::operator= | ( | const CardiacNewtonSolver< SIZE, CELLTYPE > & | ) | [protected] |
Singleton pattern - protected assignment operator. Not implemented.
void CardiacNewtonSolver< SIZE, CELLTYPE >::SolveLinearSystem | ( | ) | [inline, protected] |
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 171 of file CardiacNewtonSolver.hpp.
References CardiacNewtonSolver< SIZE, CELLTYPE >::mJacobian, CardiacNewtonSolver< SIZE, CELLTYPE >::mResidual, and CardiacNewtonSolver< SIZE, CELLTYPE >::mUpdate.
Referenced by CardiacNewtonSolver< SIZE, CELLTYPE >::Solve().
c_vector<double, SIZE> CardiacNewtonSolver< SIZE, CELLTYPE >::mResidual [private] |
Working memory : residual vector
Definition at line 198 of file CardiacNewtonSolver.hpp.
Referenced by CardiacNewtonSolver< SIZE, CELLTYPE >::Solve(), and CardiacNewtonSolver< SIZE, CELLTYPE >::SolveLinearSystem().
double CardiacNewtonSolver< SIZE, CELLTYPE >::mJacobian[SIZE][SIZE] [private] |
Working memory : Jacobian matrix
Definition at line 200 of file CardiacNewtonSolver.hpp.
Referenced by CardiacNewtonSolver< SIZE, CELLTYPE >::Solve(), and CardiacNewtonSolver< SIZE, CELLTYPE >::SolveLinearSystem().
c_vector<double, SIZE> CardiacNewtonSolver< SIZE, CELLTYPE >::mUpdate [private] |
Working memory : update vector
Definition at line 202 of file CardiacNewtonSolver.hpp.
Referenced by CardiacNewtonSolver< SIZE, CELLTYPE >::Solve(), and CardiacNewtonSolver< SIZE, CELLTYPE >::SolveLinearSystem().