1 /* Simple matrix operations.
2  *
3  * Compare:
4  *    esl_vectorops: simple vector operations.
5  *    esl_dmatrix:   matrix algebra, double precision
6  *
7  * Note:
8  * We deliberately don't use <const> qualifiers on input matrices.
9  * The rules in C for using const qualifiers on nested pointers (like
10  * <int **foo>) are arcane and unhelpful.
11  */
12 #ifndef eslMATRIXOPS_INCLUDED
13 #define eslMATRIXOPS_INCLUDED
14 #include "esl_config.h"
15 
16 extern double **esl_mat_DCreate(int M, int N);
17 extern float  **esl_mat_FCreate(int M, int N);
18 extern int    **esl_mat_ICreate(int M, int N);
19 extern char   **esl_mat_CCreate(int M, int N);
20 
21 extern double **esl_mat_DClone(double **A, int M, int N);
22 extern float  **esl_mat_FClone(float **A,  int M, int N);
23 extern int    **esl_mat_IClone(int **A,    int M, int N);
24 
25 extern int      esl_mat_DGrowTo(double ***ret_A, int M, int N);
26 extern int      esl_mat_FGrowTo(float  ***ret_A, int M, int N);
27 extern int      esl_mat_IGrowTo(int    ***ret_A, int M, int N);
28 extern int      esl_mat_CGrowTo(char   ***ret_A, int M, int N);
29 
30 extern size_t   esl_mat_DSizeof(int M, int N);
31 extern size_t   esl_mat_FSizeof(int M, int N);
32 extern size_t   esl_mat_ISizeof(int M, int N);
33 extern size_t   esl_mat_CSizeof(int M, int N);
34 
35 extern void     esl_mat_DSet(double **A, int M, int N, double value);
36 extern void     esl_mat_FSet(float  **A, int M, int N, float  value);
37 extern void     esl_mat_ISet(int    **A, int M, int N, int    value);
38 
39 extern void     esl_mat_DScale(double **A, int M, int N, double x);
40 extern void     esl_mat_FScale(float **A,  int M, int N, float x);
41 extern void     esl_mat_IScale(int **A, int M, int N, int x);
42 
43 extern void     esl_mat_DCopy(double  **src, int M, int N, double  **dest);
44 extern void     esl_mat_FCopy(float   **src, int M, int N, float   **dest);
45 extern void     esl_mat_ICopy(int     **src, int M, int N, int     **dest);
46 extern void     esl_mat_WCopy(int16_t **src, int M, int N, int16_t **dest);
47 extern void     esl_mat_BCopy(int8_t  **src, int M, int N, int8_t  **dest);
48 
49 extern double   esl_mat_DMax(double **A, int M, int N);
50 extern float    esl_mat_FMax(float  **A, int M, int N);
51 extern int      esl_mat_IMax(int    **A, int M, int N);
52 
53 extern int      esl_mat_DCompare(double **A, double **B, int M, int N, double tol);
54 extern int      esl_mat_FCompare(float  **A, float  **B, int M, int N, float  tol);
55 extern int      esl_mat_ICompare(int    **A, int    **B, int M, int N);
56 
57 extern void     esl_mat_DDestroy(double **A);
58 extern void     esl_mat_FDestroy(float  **A);
59 extern void     esl_mat_IDestroy(int    **A);
60 extern void     esl_mat_CDestroy(char   **A);
61 
62 extern int      esl_mat_DDump(double **A, int M, int N);
63 extern int      esl_mat_FDump( float **A, int M, int N);
64 extern int      esl_mat_IDump(   int **A, int M, int N);
65 
66 
67 #endif // eslMATRIXOPS_INCLUDED
68