GRASS GIS 8 Programmer's Manual 8.3.2(2024)-exported
Loading...
Searching...
No Matches
sparse_matrix.c File Reference
#include <assert.h>
#include <stdlib.h>
#include <math.h>
#include <grass/gmath.h>
#include <grass/gis.h>
Include dependency graph for sparse_matrix.c:

Go to the source code of this file.

Functions

int G_math_add_spvector (G_math_spvector **Asp, G_math_spvector *spvector, int row)
 Adds a sparse vector to a sparse matrix at position row.
 
G_math_spvector ** G_math_alloc_spmatrix (int rows)
 Allocate memory for a sparse matrix.
 
G_math_spvector * G_math_alloc_spvector (int cols)
 Allocate memory for a sparse vector.
 
void G_math_free_spvector (G_math_spvector *spvector)
 Release the memory of the sparse vector.
 
void G_math_free_spmatrix (G_math_spvector **Asp, int rows)
 Release the memory of the sparse matrix.
 
void G_math_print_spmatrix (G_math_spvector **Asp, int rows)
 print the sparse matrix Asp to stdout
 
double ** G_math_Asp_to_A (G_math_spvector **Asp, int rows)
 Convert a sparse matrix into a quadratic matrix.
 
double ** G_math_Asp_to_sband_matrix (G_math_spvector **Asp, int rows, int bandwidth)
 Convert a symmetric sparse matrix into a symmetric band matrix.
 
G_math_spvector ** G_math_A_to_Asp (double **A, int rows, double epsilon)
 Convert a quadratic matrix into a sparse matrix.
 
G_math_spvector ** G_math_sband_matrix_to_Asp (double **A, int rows, int bandwidth, double epsilon)
 Convert a symmetric band matrix into a sparse matrix.
 
void G_math_Ax_sparse (G_math_spvector **Asp, double *x, double *y, int rows)
 Compute the matrix - vector product of sparse matrix **Asp and vector x.
 

Function Documentation

◆ G_math_A_to_Asp()

G_math_spvector ** G_math_A_to_Asp ( double ** A,
int rows,
double epsilon )

Convert a quadratic matrix into a sparse matrix.

This function is multi-threaded with OpenMP. It creates its own parallel OpenMP region.

Parameters
A(double **)
rows(int)
epsilon(double) – non-zero values are greater then epsilon
Returns
(G_math_spvector **)

Definition at line 260 of file sparse_matrix.c.

References count, G_math_add_spvector(), G_math_alloc_spmatrix(), G_math_alloc_spvector(), and NULL.

◆ G_math_add_spvector()

int G_math_add_spvector ( G_math_spvector ** Asp,
G_math_spvector * spvector,
int row )

Adds a sparse vector to a sparse matrix at position row.

Return 1 for success and -1 for failure

Parameters
AspG_math_spvector **
spvectorG_math_spvector *
rowint
Returns
int 1 success, -1 failure

Definition at line 35 of file sparse_matrix.c.

References G_debug(), and NULL.

Referenced by G_math_A_to_Asp(), G_math_sband_matrix_to_Asp(), N_assemble_les_2d_param(), and N_assemble_les_3d_param().

◆ G_math_alloc_spmatrix()

G_math_spvector ** G_math_alloc_spmatrix ( int rows)

Allocate memory for a sparse matrix.

Parameters
rowsint
Returns
G_math_spvector **

Definition at line 59 of file sparse_matrix.c.

References G_debug().

Referenced by G_math_A_to_Asp(), G_math_sband_matrix_to_Asp(), and N_alloc_les_param().

◆ G_math_alloc_spvector()

G_math_spvector * G_math_alloc_spvector ( int cols)

Allocate memory for a sparse vector.

Parameters
colsint
Returns
G_math_spvector *

Definition at line 77 of file sparse_matrix.c.

References G_debug().

Referenced by G_math_A_to_Asp(), G_math_sband_matrix_to_Asp(), N_assemble_les_2d_param(), and N_assemble_les_3d_param().

◆ G_math_Asp_to_A()

double ** G_math_Asp_to_A ( G_math_spvector ** Asp,
int rows )

Convert a sparse matrix into a quadratic matrix.

This function is multi-threaded with OpenMP. It creates its own parallel OpenMP region.

Parameters
Asp(G_math_spvector **)
rows(int)
Returns
(double **)

Definition at line 181 of file sparse_matrix.c.

References G_alloc_matrix(), and NULL.

◆ G_math_Asp_to_sband_matrix()

double ** G_math_Asp_to_sband_matrix ( G_math_spvector ** Asp,
int rows,
int bandwidth )

Convert a symmetric sparse matrix into a symmetric band matrix.

Symmetric matrix with bandwidth of 3

5 2 1 0
2 5 2 1
1 2 5 2
0 1 2 5

will be converted into the band matrix

5 2 1
5 2 1
5 2 0
5 0 0
Parameters
Asp(G_math_spvector **)
rows(int)
bandwidth(int)
Returns
(double **) the resulting ymmetric band matrix [rows][bandwidth]

Definition at line 224 of file sparse_matrix.c.

References assert, G_alloc_matrix(), and NULL.

◆ G_math_Ax_sparse()

void G_math_Ax_sparse ( G_math_spvector ** Asp,
double * x,
double * y,
int rows )

Compute the matrix - vector product of sparse matrix **Asp and vector x.

This function is multi-threaded with OpenMP and can be called within a parallel OpenMP region.

y = A * x

Parameters
Asp(G_math_spvector **)
x(double) *)
y(double * )
rows(int)
Returns
(void)

Definition at line 369 of file sparse_matrix.c.

References x.

Referenced by N_les_integrate_dirichlet_2d(), and N_les_integrate_dirichlet_3d().

◆ G_math_free_spmatrix()

void G_math_free_spmatrix ( G_math_spvector ** Asp,
int rows )

Release the memory of the sparse matrix.

Parameters
AspG_math_spvector **
rowsint
Returns
void

Definition at line 122 of file sparse_matrix.c.

References G_free(), G_math_free_spvector(), and NULL.

Referenced by N_free_les().

◆ G_math_free_spvector()

void G_math_free_spvector ( G_math_spvector * spvector)

Release the memory of the sparse vector.

Parameters
spvectorG_math_spvector *
Returns
void

Definition at line 99 of file sparse_matrix.c.

References G_free(), and NULL.

Referenced by G_math_free_spmatrix().

◆ G_math_print_spmatrix()

void G_math_print_spmatrix ( G_math_spvector ** Asp,
int rows )

print the sparse matrix Asp to stdout

Parameters
Asp(G_math_spvector **)
rows(int)
Returns
void

Definition at line 147 of file sparse_matrix.c.

◆ G_math_sband_matrix_to_Asp()

G_math_spvector ** G_math_sband_matrix_to_Asp ( double ** A,
int rows,
int bandwidth,
double epsilon )

Convert a symmetric band matrix into a sparse matrix.

WARNING: This function is experimental, do not use. Only the upper triangle matrix of the band structure is copied.

Parameters
A(double **) the symmetric band matrix
rows(int)
bandwidth(int)
epsilon(double) – non-zero values are greater then epsilon
Returns
(G_math_spvector **)

Definition at line 309 of file sparse_matrix.c.

References count, G_math_add_spvector(), G_math_alloc_spmatrix(), G_math_alloc_spvector(), and NULL.