sparse_sys.h File Reference
#include <stddef.h>
#include <stdio.h>
Include dependency graph for sparse_sys.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  CSRMatrix
 

Functions

struct CSRMatrixcsrmatrix_new_count_nnz (size_t m)
 
struct CSRMatrixcsrmatrix_new_known_nnz (size_t m, size_t nnz)
 
size_t csrmatrix_new_elms_pushback (struct CSRMatrix *A)
 
size_t csrmatrix_elm_index (int i, int j, const struct CSRMatrix *A)
 
void csrmatrix_sortrows (struct CSRMatrix *A)
 
void csrmatrix_delete (struct CSRMatrix *A)
 
void csrmatrix_zero (struct CSRMatrix *A)
 
void vector_zero (size_t n, double *v)
 
void csrmatrix_write (const struct CSRMatrix *A, const char *fn)
 
void csrmatrix_write_stream (const struct CSRMatrix *A, FILE *fp)
 
void vector_write (size_t n, const double *v, const char *fn)
 
void vector_write_stream (size_t n, const double *v, FILE *fp)
 

Detailed Description

Data structure and operations to manage sparse matrices in CSR formats.

Function Documentation

void csrmatrix_delete ( struct CSRMatrix A)

Dispose of memory resources obtained through prior calls to allocation routines.

Parameters
[in,out]AMatrix obtained from csrmatrix_new_count_nnz() + csrmatrix_new_elms_pushback() or csrmatrix_new_known_nnz().

The pointer A is invalid following a call to csrmatrix_delete().

size_t csrmatrix_elm_index ( int  i,
int  j,
const struct CSRMatrix A 
)

Compute non-zero index of specified matrix element.

Parameters
[in]iRow index.
[in]jColumn index. Must be in the structural non-zero element set of row i.
[in]AMatrix.
Returns
Non-zero index, into A->ja and A->sa, of the (i,j) matrix element.

Referenced by Opm::ImplicitTransportDefault::MatrixBlockAssembler< struct CSRMatrix >::assembleBlock().

struct CSRMatrix* csrmatrix_new_count_nnz ( size_t  m)

Allocate a matrix structure and corresponding row pointers, ia, sufficiently initialised to support "count and push-back" construction scheme.

The matrix will be fully formed in csrmatrix_new_elms_pushback().

Parameters
[in]mNumber of matrix rows.
Returns
Allocated matrix structure with allocated row pointers and valid m field. The row pointer elements are initialised all zero to simplify the non-zero element counting procedure. The ja and sa fields are NULL. This function returns NULL in case of allocation failure.
size_t csrmatrix_new_elms_pushback ( struct CSRMatrix A)

Set row pointers and allocate column index and matrix element arrays of a matrix previous obtained from csrmatrix_new_count_nnz().

The memory resources should be released through the csrmatrix_delete() function.

This function assumes that, on input, the total number of structurally non-zero elements of row i are stored in A->ia[i+1] for all i = 0, ..., A->m - 1 and that A->ia[0] == 0. If successful, then on output the row end pointers A->ia[i+1] are positioned at the start of the corresponding rows. If not, then the A->ja and A->sa arrays remain unallocated.

Parameters
[in,out]AMatrix.
Returns
Total number of allocated non-zeros, A->nnz == A->ia[A->m] if successful and zero in case of allocation failure.
struct CSRMatrix* csrmatrix_new_known_nnz ( size_t  m,
size_t  nnz 
)

Allocate a matrix structure and all constituent fields to hold a sparse matrix with a specified number of (structural) non-zero elements.

The contents of the individual matrix arrays is undefined. In particular, the sparsity pattern must be constructed through some other, external, means prior to using the matrix in (e.g.,) a global system assembly process.

The memory resources should be released through the csrmatrix_delete() function.

Parameters
[in]mNumber of matrix rows.
[in]nnzNumber of structural non-zeros.
Returns
Allocated matrix structure and constituent element arrays. NULL in case of allocation failure.
void csrmatrix_sortrows ( struct CSRMatrix A)

Sort column indices within each matrix row in ascending order.

The corresponding matrix elements (i.e., sa) are not referenced. Consequently, following a call to csrmatrix_sortrows(), all relations to any pre-existing matrix elements are lost and must be rebuilt.

After a call to csrmatrix_sortrows(), the following relation holds A->ja[k] < A->ja[k+1] for all k = A->ia[i], ..., A->ia[i+1]-2 in each row i = 0, ..., A->m - 1.

Parameters
[in,out]AMatrix.
void csrmatrix_write ( const struct CSRMatrix A,
const char *  fn 
)

Print matrix to file.

The matrix content is printed in coordinate format with row and column indices ranging from 1 to A->m. This output format facilitates simple processing through the spconvert function in MATLABĀ© or Octave.

This function is implemented in terms of csrmatrix_write_stream().

Parameters
[in]AMatrix.
[in]fnName of file to which matrix contents will be output.
void csrmatrix_write_stream ( const struct CSRMatrix A,
FILE *  fp 
)

Print matrix to stream.

The matrix content is printed in coordinate format with row and column indices ranging from 1 to A->m. This output format facilitates simple processing through the spconvert function in MATLABĀ© or Octave.

Parameters
[in]AMatrix.
[in,out]fpOpen (text) stream to which matrix contents will be output.
void csrmatrix_zero ( struct CSRMatrix A)

Zero all matrix elements, typically in preparation of elemental assembly.

Parameters
[in,out]AMatrix for which to zero the elements.

Referenced by Opm::ImplicitTransportDefault::MatrixZero< struct CSRMatrix >::zero().

void vector_write ( size_t  n,
const double *  v,
const char *  fn 
)

Print vector to file.

Elements are printed with one line (separated by '
'
) per vector element.

This function is implemented in terms of vector_write_stream().

Parameters
[in]nNumber of vector elements.
[in]vVector.
[in]fnName of file to which vector contents will be output.
void vector_write_stream ( size_t  n,
const double *  v,
FILE *  fp 
)

Print vector to stream.

Elements are printed with one line (separated by '
'
) per vector element.

Parameters
[in]nNumber of vector elements.
[in]vVector.
[in,out]fpOpen (text) stream to which vector contents will be output.
void vector_zero ( size_t  n,
double *  v 
)

Zero all vector elements.

Parameters
[in]nNumber of vector elements.
[out]vVector for which to zero the elements.