programmer's documentation
Data Structures | Enumerations | Functions
cs_cdo_toolbox.h File Reference
#include <stdio.h>
Include dependency graph for cs_cdo_toolbox.h:

Go to the source code of this file.

Data Structures

struct  cs_tmpbuf_t
 
struct  cs_locmat_t
 
struct  cs_connect_index_t
 
union  cs_data_t
 
struct  cs_data_info_t
 

Enumerations

enum  cs_toolbox_type_sum_t {
  CS_TOOLBOX_SUM, CS_TOOLBOX_WSUM, CS_TOOLBOX_SUMABS, CS_TOOLBOX_WSUMABS,
  CS_TOOLBOX_SUM2, CS_TOOLBOX_WSUM2, CS_TOOLBOX_N_SUM_TYPES
}
 

Functions

double _dp3 (const cs_real_3_t u, const cs_real_3_t v)
 Compute a dot product for vector of dimension 3. More...
 
double _n3 (const cs_real_3_t v)
 Compute the euclidean norm of a vector of dimension 3. More...
 
double _length3 (const cs_real_3_t xa, const cs_real_3_t xb)
 Compute the length (euclidien norm) between two points xa and xb in a cartesian coordinate system of dimension 3. More...
 
void _lenunit3 (const cs_real_3_t xa, const cs_real_3_t xb, cs_real_t *len, cs_real_3_t *unit)
 Compute the length (euclidien norm) between two points xa and xb in a cartesian coordinate system of dimension 3. More...
 
void _cp3 (const cs_real_3_t u, const cs_real_3_t v, cs_real_3_t *w)
 Compute the cross product of a vector of dimension 3. More...
 
void _mv3 (const cs_real_t m[3][3], const cs_real_t v[3], cs_real_t mv[3])
 Compute the 3x3 matrice by vector product. More...
 
cs_real_t _detmat33 (const cs_real_t m[3][3])
 Compute the determinant of a 3x3 matrix. More...
 
void _invmat33 (const cs_real_t in[3][3], cs_real_t inv[3][3])
 Inverse a 3x3 matrix. More...
 
void cs_toolbox_init (cs_lnum_t ref_size)
 Allocate and initialize a private structure for this file used for reducing round-off errors during summation. More...
 
void cs_toolbox_finalize (void)
 Free a private structure for this file used for reducing round-off errors during summation. More...
 
void cs_eigen_mat33 (const cs_real_t m[3][3], cs_real_t *eig_ratio, cs_real_t *eig_max)
 Compute the eigenvalues of a 3x3 matrix which is symmetric and real -> Oliver K. Smith "eigenvalues of a symmetric 3x3 matrix", Communication of the ACM (April 1961) -> Wikipedia article entitled "Eigenvalue algorithm". More...
 
double cs_surftri (const cs_real_3_t xv, const cs_real_3_t xe, const cs_real_3_t xf)
 Compute the area of the convex_hull generated by 3 points. This corresponds to the computation of the surface of a triangle. More...
 
double cs_voltet (const cs_real_3_t xv, const cs_real_3_t xe, const cs_real_3_t xf, const cs_real_3_t xc)
 Compute the volume of the convex_hull generated by 4 points. This is equivalent to the computation of the volume of a tetrahedron. More...
 
void cs_daxpy (int size, double alpha, const cs_real_t x[], cs_real_t beta, const cs_real_t y[], cs_real_t *p_z[], bool reset)
 Compute alpha*x + beta*y = p_z. More...
 
double cs_dp (int size, const double v[], const double w[])
 Compute the dot product of two vectors of dimension "size" This algorithm tries to reduce round-off error thanks to intermediate sums. More...
 
double cs_euclidean_norm (int len, const double v[])
 Compute the euclidean norm 2 of a vector of size len This algorithm tries to reduce round-off error thanks to intermediate sums. More...
 
double cs_sum (cs_lnum_t size, const double v[], const double w[], cs_toolbox_type_sum_t op)
 Compute by default the sum of the elements of an array of double Additional operation are also possible: square, abs This algorithm tries to reduce round-off errors thanks to intermediate sums. More...
 
void cs_tmpbuf_alloc (size_t bufsize, cs_tmpbuf_t **p_tb)
 Allocate or reallocate a temporary buffer structure. More...
 
cs_tmpbuf_tcs_tmpbuf_free (cs_tmpbuf_t *tb)
 Free a temporary buffer structure. More...
 
cs_data_info_t cs_analysis_data (cs_lnum_t n_elts, int stride, cs_datatype_t datatype, const void *indata, bool do_abs)
 Compute some simple statistics from an array. More...
 
void cs_data_info_dump (const char *name, FILE *f, cs_lnum_t n_elts, cs_datatype_t datatype, const cs_data_info_t dinfo)
 Dump a cs_data_info_t structure. More...
 
cs_connect_index_tcs_index_create (int n)
 Create an index structure of size n. More...
 
cs_connect_index_tcs_index_map (int n, int *idx, int *ids)
 Map arrays into an index structure of size n (owner = false) More...
 
void cs_index_free (cs_connect_index_t **pidx)
 Destroy a cs_connect_index_t structure. More...
 
cs_connect_index_tcs_index_compose (int nc, const cs_connect_index_t *a2b, const cs_connect_index_t *b2c)
 From 2 indexes : A -> B and B -> C create a new index A -> C. More...
 
cs_connect_index_tcs_index_transpose (int nb, const cs_connect_index_t *a2b)
 From a cs_connect_index_t struct. A -> B create a new index B -> A. More...
 
void cs_index_sort (cs_connect_index_t *x)
 Sort each list related to an entry in a cs_connect_index_t structure. More...
 
void cs_index_dump (const char *name, FILE *_f, cs_connect_index_t *x)
 Dump a cs_connect_index_t structure to a file or into the standard output. More...
 
cs_locmat_tcs_locmat_create (int n_max_ent)
 Allocate and initialize a cs_locmat_t structure. More...
 
cs_locmat_tcs_locmat_free (cs_locmat_t *lm)
 Free a cs_locmat_t structure. More...
 
void cs_locmat_copy (cs_locmat_t *recv, const cs_locmat_t *send)
 Copy a cs_locmat_t structure into another cs_locmat_t structure which has been already allocated. More...
 
void cs_locmat_matvec (const cs_locmat_t *loc, const cs_real_t *vec, cs_real_t *matvec)
 Compute a local dense matrix-vector product matvec has been previously allocated. More...
 
void cs_locmat_add (cs_locmat_t *loc, const cs_locmat_t *add)
 Add two local dense matrices: loc += add. More...
 
void cs_locmat_add_transpose (cs_locmat_t *loc, cs_locmat_t *tr)
 Define a new matrix by adding a local matrix with its transpose. Keep the transposed matrix for future use. More...
 
void cs_locmat_dump (int parent_id, const cs_locmat_t *lm)
 Dump a local discrete Hodge operator. More...
 

Enumeration Type Documentation

Enumerator
CS_TOOLBOX_SUM 
CS_TOOLBOX_WSUM 
CS_TOOLBOX_SUMABS 
CS_TOOLBOX_WSUMABS 
CS_TOOLBOX_SUM2 
CS_TOOLBOX_WSUM2 
CS_TOOLBOX_N_SUM_TYPES 

Function Documentation

void _cp3 ( const cs_real_3_t  u,
const cs_real_3_t  v,
cs_real_3_t w 
)
inline

Compute the cross product of a vector of dimension 3.

Parameters
[in]ufirst vector
[in]vsecond vector
[out]wresult of u x v
cs_real_t _detmat33 ( const cs_real_t  m[3][3])
inline

Compute the determinant of a 3x3 matrix.

Parameters
[in]m3x3 matrix
Returns
the determinant
Parameters
[in]mmatrix
Returns
the determinant
double _dp3 ( const cs_real_3_t  u,
const cs_real_3_t  v 
)
inline

Compute a dot product for vector of dimension 3.

Parameters
[in]ufirst vector
[in]vsecond vector
Returns
the value of the dot product
void _invmat33 ( const cs_real_t  in[3][3],
cs_real_t  inv[3][3] 
)
inline

Inverse a 3x3 matrix.

Parameters
[in]inmatrix to inverse
[out]invinversed matrix
double _length3 ( const cs_real_3_t  xa,
const cs_real_3_t  xb 
)
inline

Compute the length (euclidien norm) between two points xa and xb in a cartesian coordinate system of dimension 3.

Parameters
[in]xafirst coordinate
[in]xbsecond coordinate
Returns
the length (in euclidean norm) between two points xa and xb
void _lenunit3 ( const cs_real_3_t  xa,
const cs_real_3_t  xb,
cs_real_t len,
cs_real_3_t unit 
)
inline

Compute the length (euclidien norm) between two points xa and xb in a cartesian coordinate system of dimension 3.

Parameters
[in]xacoordinate of the first extremity
[in]xbcoordinate of the second extremity
[out]lenpointer to the length of the vector va -> vb
[out]unitunitary vector anlong va -> vb
void _mv3 ( const cs_real_t  m[3][3],
const cs_real_t  v[3],
cs_real_t  mv[3] 
)
inline

Compute the 3x3 matrice by vector product.

Parameters
[in]ma 3x3 matrix
[in]va vector
[in,out]mvpointer to the vector resulting of the matrix-vector op.
double _n3 ( const cs_real_3_t  v)
inline

Compute the euclidean norm of a vector of dimension 3.

Parameters
[in]v
Returns
the norm value
cs_data_info_t cs_analysis_data ( cs_lnum_t  n_elts,
int  stride,
cs_datatype_t  datatype,
const void *  indata,
bool  do_abs 
)

Compute some simple statistics from an array.

Parameters
[in]n_eltsnumber of couples in data
[in]stridesize of a couple of data
[in]datatypedatatype
[in]indatabuffer containing input data
[in]do_absanalyse the absolute value of indata
Returns
a cs_data_info_t structure
void cs_data_info_dump ( const char *  name,
FILE *  f,
cs_lnum_t  n_elts,
cs_datatype_t  datatype,
const cs_data_info_t  dinfo 
)

Dump a cs_data_info_t structure.

Parameters
[in]namefilename if not NULL
[in]foutput file if not NULL
[in]n_eltsnumber of couples in data
[in]datatypedatatype
[in]dinfocs_data_info_t structure
void cs_daxpy ( int  size,
double  alpha,
const cs_real_t  x[],
cs_real_t  beta,
const cs_real_t  y[],
cs_real_t p_z[],
bool  reset 
)

Compute alpha*x + beta*y = p_z.

Parameters
[in]sizevector dimension
[in]alphacoefficient for x vector
[in]xfirst vector
[in]betacoefficient for y vector
[in]ysecond vector
[in,out]p_zresulting vector (allocated if NULL)
[in]resetreset z vector before computation
double cs_dp ( int  size,
const double  v[],
const double  w[] 
)

Compute the dot product of two vectors of dimension "size" This algorithm tries to reduce round-off error thanks to intermediate sums.

Parameters
[in]sizevector dimension
[in]vfirst vector
[in]wsecond vector
Returns
the dot product of two vectors
void cs_eigen_mat33 ( const cs_real_t  m[3][3],
cs_real_t eig_ratio,
cs_real_t eig_max 
)

Compute the eigenvalues of a 3x3 matrix which is symmetric and real -> Oliver K. Smith "eigenvalues of a symmetric 3x3 matrix", Communication of the ACM (April 1961) -> Wikipedia article entitled "Eigenvalue algorithm".

Parameters
[in]m3x3 matrix
[out]eig_ratiomax/min
[out]eig_maxmax. eigenvalue
double cs_euclidean_norm ( int  len,
const double  v[] 
)

Compute the euclidean norm 2 of a vector of size len This algorithm tries to reduce round-off error thanks to intermediate sums.

Parameters
[in]lenvector dimension
[in]vvector
Returns
the euclidean norm of a vector
cs_connect_index_t* cs_index_compose ( int  nc,
const cs_connect_index_t a2b,
const cs_connect_index_t b2c 
)

From 2 indexes : A -> B and B -> C create a new index A -> C.

Parameters
[in]ncnumber of elements in C set
[in]a2bpointer to the index A -> B
[in]b2cpointer to the index B -> C
Returns
a pointer to the cs_connect_index_t structure A -> C
cs_connect_index_t* cs_index_create ( int  n)

Create an index structure of size n.

Parameters
[in]nnumber of entries of the indexed list
Returns
a pointer to a cs_connect_index_t
void cs_index_dump ( const char *  name,
FILE *  _f,
cs_connect_index_t x 
)

Dump a cs_connect_index_t structure to a file or into the standard output.

Parameters
[in]namename of the dump file. Can be set to NULL
[in]_fpointer to a FILE structure. Can be set to NULL.
[in]xpointer to a cs_connect_index_t structure
void cs_index_free ( cs_connect_index_t **  pidx)

Destroy a cs_connect_index_t structure.

Parameters
[in]pidxpointer of pointer to a cs_connect_index_t structure
cs_connect_index_t* cs_index_map ( int  n,
int *  idx,
int *  ids 
)

Map arrays into an index structure of size n (owner = false)

Parameters
[in]nnumber of entries of the indexed list
[in]idxarray of size n+1
[in]idsarray of size idx[n]
Returns
a pointer to a cs_connect_index_t
void cs_index_sort ( cs_connect_index_t x)

Sort each list related to an entry in a cs_connect_index_t structure.

Parameters
[in]xpointer to a cs_connect_index_t structure

Sort each list related to an entry in a cs_connect_index_t structure.

Parameters
[in]xpointer to a cs_connect_index_t structure
cs_connect_index_t* cs_index_transpose ( int  nb,
const cs_connect_index_t a2b 
)

From a cs_connect_index_t struct. A -> B create a new index B -> A.

Parameters
[in]nbsize of the "b" set
[in]a2bpointer to the index A -> B
Returns
a new pointer to the cs_connect_index_t structure B -> A

From a cs_connect_index_t struct. A -> B create a new index B -> A.

Parameters
[in]nbsize of the "b" set
[in]a2bpointer to the index A -> B
Returns
a new pointer to the cs_connect_index_t structure B -> A
void cs_locmat_add ( cs_locmat_t loc,
const cs_locmat_t add 
)

Add two local dense matrices: loc += add.

Parameters
[in,out]loclocal matrix storing the result
[in]addvalues to add to loc
void cs_locmat_add_transpose ( cs_locmat_t loc,
cs_locmat_t tr 
)

Define a new matrix by adding a local matrix with its transpose. Keep the transposed matrix for future use.

Parameters
[in,out]loclocal matrix to transpose and add
[in,out]trtransposed of the local matrix
void cs_locmat_copy ( cs_locmat_t recv,
const cs_locmat_t send 
)

Copy a cs_locmat_t structure into another cs_locmat_t structure which has been already allocated.

Parameters
[in,out]recvpointer to a cs_locmat_t struct.
[in]sendpointer to a cs_locmat_t struct.
cs_locmat_t* cs_locmat_create ( int  n_max_ent)

Allocate and initialize a cs_locmat_t structure.

Parameters
[in]n_max_entmax number of entities
Returns
a new allocated cs_locmat_t structure
void cs_locmat_dump ( int  parent_id,
const cs_locmat_t lm 
)

Dump a local discrete Hodge operator.

Parameters
[in]parent_idid of the related parent entity
[in]lmpointer to the cs_sla_locmat_t struct.
cs_locmat_t* cs_locmat_free ( cs_locmat_t lm)

Free a cs_locmat_t structure.

Parameters
[in]lmpointer to a cs_locmat_t struct. to free
Returns
a NULL pointer
void cs_locmat_matvec ( const cs_locmat_t loc,
const cs_real_t vec,
cs_real_t matvec 
)

Compute a local dense matrix-vector product matvec has been previously allocated.

Parameters
[in]loclocal matrix to use
[in]veclocal vector to use
[in,out]matvecresult of the local matrix-vector product
double cs_sum ( cs_lnum_t  size,
const double  v[],
const double  w[],
cs_toolbox_type_sum_t  op 
)

Compute by default the sum of the elements of an array of double Additional operation are also possible: square, abs This algorithm tries to reduce round-off errors thanks to intermediate sums.

Parameters
[in]sizearray dimension
[in]vvalues
[in]wweights (possibly NULL)
[in]opoperation to do when doing the sum
Returns
the sum (with possibly additional op) of a vector
double cs_surftri ( const cs_real_3_t  xv,
const cs_real_3_t  xe,
const cs_real_3_t  xf 
)

Compute the area of the convex_hull generated by 3 points. This corresponds to the computation of the surface of a triangle.

Parameters
[in]xv
[in]xe
[in]xf
Returns
the surface of a triangle
void cs_tmpbuf_alloc ( size_t  bufsize,
cs_tmpbuf_t **  p_tb 
)

Allocate or reallocate a temporary buffer structure.

Parameters
[in]bufsizereference size
[in,out]p_tbpointer to the temporary structure to allocate
cs_tmpbuf_t* cs_tmpbuf_free ( cs_tmpbuf_t tb)

Free a temporary buffer structure.

Parameters
[in]tbpointer to the temporary structure to free
Returns
NULL pointer
void cs_toolbox_finalize ( void  )

Free a private structure for this file used for reducing round-off errors during summation.

void cs_toolbox_init ( cs_lnum_t  ref_size)

Allocate and initialize a private structure for this file used for reducing round-off errors during summation.

Parameters
[in]ref_sizereference array dimension
double cs_voltet ( const cs_real_3_t  xv,
const cs_real_3_t  xe,
const cs_real_3_t  xf,
const cs_real_3_t  xc 
)

Compute the volume of the convex_hull generated by 4 points. This is equivalent to the computation of the volume of a tetrahedron.

Parameters
[in]xv
[in]xe
[in]xf
[in]xc
Returns
the volume of the tetrahedron.