ConjugateGradientSolver Class Reference

#include <ConjugateGradientSolver.h>

Inheritance diagram for ConjugateGradientSolver:
Solver

Public Member Functions

 ConjugateGradientSolver ()
 
 ~ConjugateGradientSolver ()
 
int init (int num_nodes, int num_elements, mesh_node *node, tetra_element_linear *elem, SimulationParams *params, int num_pinned_nodes, int *pinned_nodes_list, set< int > bsite_pinned_node_list)
 
int solve (vector3 *x)
 
void apply_matrix (scalar *in, scalar *result)
 
- Public Member Functions inherited from Solver
 Solver ()
 
virtual ~Solver ()
 

Private Member Functions

scalar conjugate_gradient_residual_assume_x_zero (vector3 *b)
 
scalar parallel_sparse_matrix_apply ()
 
void parallel_vector_add_self (vector3 *v1, scalar a, vector3 *v2, int vec_size)
 
void parallel_vector_add (vector3 *v1, scalar a, vector3 *v2, int vec_size)
 
scalar parallel_apply_preconditioner ()
 
scalar residual2 ()
 

Private Attributes

scalar epsilon2
 
int i_max
 
int num_rows
 
sparse_entryentry
 
int * key
 
scalarpreconditioner
 
vector3d
 
vector3r
 
vector3q
 
vector3s
 
vector3f
 

Constructor & Destructor Documentation

◆ ConjugateGradientSolver()

ConjugateGradientSolver::ConjugateGradientSolver ( )

Constructor

◆ ~ConjugateGradientSolver()

ConjugateGradientSolver::~ConjugateGradientSolver ( )

Destructor

Member Function Documentation

◆ apply_matrix()

void ConjugateGradientSolver::apply_matrix ( scalar in,
scalar result 
)
virtual

Applies the mass matrix to the given vector, 'in', putting the result in 'result'

Implements Solver.

◆ conjugate_gradient_residual_assume_x_zero()

scalar ConjugateGradientSolver::conjugate_gradient_residual_assume_x_zero ( vector3 b)
private

Referenced by solve().

◆ init()

int ConjugateGradientSolver::init ( int  num_nodes,
int  num_elements,
mesh_node node,
tetra_element_linear elem,
SimulationParams params,
int  num_pinned_nodes,
int *  pinned_nodes_list,
set< int >  bsite_pinned_node_list 
)
virtual

Builds the sparse mass matrix and allocates the various work vectors required for conjugate gradient

Implements Solver.

◆ parallel_apply_preconditioner()

scalar ConjugateGradientSolver::parallel_apply_preconditioner ( )
private

Referenced by solve().

◆ parallel_sparse_matrix_apply()

scalar ConjugateGradientSolver::parallel_sparse_matrix_apply ( )
private

Referenced by solve().

◆ parallel_vector_add()

void ConjugateGradientSolver::parallel_vector_add ( vector3 v1,
scalar  a,
vector3 v2,
int  vec_size 
)
private

Referenced by solve().

◆ parallel_vector_add_self()

void ConjugateGradientSolver::parallel_vector_add_self ( vector3 v1,
scalar  a,
vector3 v2,
int  vec_size 
)
private

Referenced by solve().

◆ residual2()

scalar ConjugateGradientSolver::residual2 ( )
private

Referenced by solve().

◆ solve()

int ConjugateGradientSolver::solve ( vector3 x)
virtual

Applies conjugate gradient with a Jacobi preconditioner to solve the system Mx = f

Implements Solver.

Field Documentation

◆ d

◆ entry

sparse_entry* ConjugateGradientSolver::entry
private

Array of all non-zero entries comprising the mass matrix, in the order they appear in the matrix when scanned left to right across rows first (and columns secondary)

Referenced by apply_matrix(), ConjugateGradientSolver(), init(), parallel_sparse_matrix_apply(), and ~ConjugateGradientSolver().

◆ epsilon2

scalar ConjugateGradientSolver::epsilon2
private

Error tolerance threshold (normalised and squared) to determine when solution has converged

Referenced by ConjugateGradientSolver(), init(), solve(), and ~ConjugateGradientSolver().

◆ f

◆ i_max

int ConjugateGradientSolver::i_max
private

Maximum number of iterations the solver should use before giving up (as solution is not converging)

Referenced by ConjugateGradientSolver(), init(), solve(), and ~ConjugateGradientSolver().

◆ key

int* ConjugateGradientSolver::key
private

Array of size (num_nodes+1) containing the index (in the sparse_entry array above) of the first non-zero entry in each row of the original matrix. The final entry in this vector, key[num_nodes], is the total number of non-zero entries in the entire matrix.

Referenced by apply_matrix(), ConjugateGradientSolver(), init(), parallel_sparse_matrix_apply(), and ~ConjugateGradientSolver().

◆ num_rows

◆ preconditioner

scalar* ConjugateGradientSolver::preconditioner
private

Jacobi preconditioner (inverse of the mass matrix diagonal)

Referenced by conjugate_gradient_residual_assume_x_zero(), ConjugateGradientSolver(), init(), parallel_apply_preconditioner(), and ~ConjugateGradientSolver().

◆ q

◆ r

◆ s


The documentation for this class was generated from the following files: