#include <CardiacNewtonSolver.hpp>
Public Member Functions | |
void | Solve (AbstractBackwardEulerCardiacCell< SIZE > &rCell, double rCurrentGuess[SIZE]) |
Static Public Member Functions | |
static CardiacNewtonSolver < SIZE > * | Instance () |
Protected Member Functions | |
CardiacNewtonSolver (const CardiacNewtonSolver< SIZE > &) | |
CardiacNewtonSolver< SIZE > & | operator= (const CardiacNewtonSolver< SIZE > &) |
double | ComputeNorm (double vector[SIZE]) |
void | SolveLinearSystem () |
Private Attributes | |
double | mResidual [SIZE] |
double | mJacobian [SIZE][SIZE] |
double | mUpdate [SIZE] |
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 BackwardEulerLuoRudyIModel1991.
Definition at line 48 of file CardiacNewtonSolver.hpp.
static CardiacNewtonSolver<SIZE>* CardiacNewtonSolver< SIZE >::Instance | ( | ) | [inline, static] |
Call this method to obtain a solver instance.
Definition at line 56 of file CardiacNewtonSolver.hpp.
Referenced by BackwardEulerLuoRudyIModel1991::ComputeOneStepExceptVoltage(), and BackwardEulerFoxModel2002Modified::ComputeOneStepExceptVoltage().
void CardiacNewtonSolver< SIZE >::Solve | ( | AbstractBackwardEulerCardiacCell< SIZE > & | rCell, | |
double | rCurrentGuess[SIZE] | |||
) | [inline] |
Use Newton's method to solve the given cell for the next timestep.
rCell | the cell to solve | |
rCurrentGuess | the current guess at a solution. Will be mUpdated on exit. |
Definition at line 68 of file CardiacNewtonSolver.hpp.
References AbstractBackwardEulerCardiacCell< SIZE >::ComputeJacobian(), CardiacNewtonSolver< SIZE >::ComputeNorm(), AbstractBackwardEulerCardiacCell< SIZE >::ComputeResidual(), CardiacNewtonSolver< SIZE >::mJacobian, CardiacNewtonSolver< SIZE >::mResidual, CardiacNewtonSolver< SIZE >::mUpdate, and CardiacNewtonSolver< SIZE >::SolveLinearSystem().
Referenced by BackwardEulerLuoRudyIModel1991::ComputeOneStepExceptVoltage(), and BackwardEulerFoxModel2002Modified::ComputeOneStepExceptVoltage().
double CardiacNewtonSolver< SIZE >::ComputeNorm | ( | double | vector[SIZE] | ) | [inline, protected] |
Compute a norm of a vector.
Definition at line 194 of file CardiacNewtonSolver.hpp.
Referenced by CardiacNewtonSolver< SIZE >::Solve().
void CardiacNewtonSolver< SIZE >::SolveLinearSystem | ( | ) | [inline, protected] |
Solve a linear system to calculate the Newton update step
Definition at line 210 of file CardiacNewtonSolver.hpp.
References CardiacNewtonSolver< SIZE >::mJacobian, CardiacNewtonSolver< SIZE >::mResidual, and CardiacNewtonSolver< SIZE >::mUpdate.
Referenced by CardiacNewtonSolver< SIZE >::Solve().
double CardiacNewtonSolver< SIZE >::mResidual[SIZE] [private] |
Working memory : residual vector
Definition at line 239 of file CardiacNewtonSolver.hpp.
Referenced by CardiacNewtonSolver< SIZE >::Solve(), and CardiacNewtonSolver< SIZE >::SolveLinearSystem().
double CardiacNewtonSolver< SIZE >::mJacobian[SIZE][SIZE] [private] |
Working memory : Jacobian matrix
Definition at line 241 of file CardiacNewtonSolver.hpp.
Referenced by CardiacNewtonSolver< SIZE >::Solve(), and CardiacNewtonSolver< SIZE >::SolveLinearSystem().
double CardiacNewtonSolver< SIZE >::mUpdate[SIZE] [private] |
Working memory : update vector
Definition at line 243 of file CardiacNewtonSolver.hpp.
Referenced by CardiacNewtonSolver< SIZE >::Solve(), and CardiacNewtonSolver< SIZE >::SolveLinearSystem().