/* SubMtx.h */
#include "../cfiles.h"
#include "../A2.h"
#include "../ZV.h"
#include "../DV.h"
#include "../SPOOLES.h"
/*--------------------------------------------------------------------*/
/*
---------------------------------------------------------------
structure to hold a block of a block matrix.
e.g., the block partition would be by supernodes.
type -- type of matrix
1 -- real
2 -- complex
mode -- storage mode of matrix
0 -- dense stored by rows
1 -- dense stored by columns
2 -- sparse stored by rows
3 -- sparse stored by columns
4 -- sparse stored by triples
5 -- sparse stored by dense subrows
6 -- sparse stored by dense subcolumns
7 -- diagonal
8 -- block diagonal symmetric
(upper part of each block stored by rows)
9 -- block diagonal hermitian (complex only)
(upper part of each block stored by rows)
rowid -- block row to which this matrix belongs
colid -- block column to which this matrix belongs
nrow -- number of rows
ncol -- number of columns
nent -- number of entries
entries -- pointer to the entries
wrkDV -- DV object that manages workspace
next -- pointer to next SubMtx object in a singly linked list
created -- 98jan29, cca
-----------------------------------------------------------------
*/
typedef struct _SubMtx SubMtx ;
struct _SubMtx {
int type ;
int mode ;
int rowid ;
int colid ;
int nrow ;
int ncol ;
int nent ;
double *entries ;
DV wrkDV ;
SubMtx *next ;
} ;
/*
------------------------
real/complex type macros
------------------------
*/
#define SUBMTX_IS_REAL(chv) ((chv)->type == SPOOLES_REAL)
#define SUBMTX_IS_COMPLEX(chv) ((chv)->type == SPOOLES_COMPLEX)
/*
-------------------
storage mode macros
-------------------
*/
#define SUBMTX_DENSE_ROWS 0
#define SUBMTX_DENSE_COLUMNS 1
#define SUBMTX_SPARSE_ROWS 2
#define SUBMTX_SPARSE_COLUMNS 3
#define SUBMTX_SPARSE_TRIPLES 4
#define SUBMTX_DENSE_SUBROWS 5
#define SUBMTX_DENSE_SUBCOLUMNS 6
#define SUBMTX_DIAGONAL 7
#define SUBMTX_BLOCK_DIAGONAL_SYM 8
#define SUBMTX_BLOCK_DIAGONAL_HERM 9
#define SUBMTX_IS_DENSE_ROWS(chv) \
((chv)->mode == SUBMTX_DENSE_ROWS)
#define SUBMTX_IS_DENSE_COLUMNS(chv) \
((chv)->mode == SUBMTX_DENSE_COLUMNS)
#define SUBMTX_IS_SPARSE_ROWS(chv) \
((chv)->mode == SUBMTX_SPARSE_ROWS)
#define SUBMTX_IS_SPARSE_COLUMNS(chv) \
((chv)->mode == SUBMTX_SPARSE_COLUMNS)
#define SUBMTX_IS_SPARSE_TRIPLES(chv) \
((chv)->mode == SUBMTX_SPARSE_TRIPLES)
#define SUBMTX_IS_DENSE_SUBROWS(chv) \
((chv)->mode == SUBMTX_DENSE_SUBROWS)
#define SUBMTX_IS_DENSE_SUBCOLUMNS(chv) \
((chv)->mode == SUBMTX_DENSE_SUBCOLUMNS)
#define SUBMTX_IS_DIAGONAL(chv) \
((chv)->mode == SUBMTX_DIAGONAL)
#define SUBMTX_IS_BLOCK_DIAGONAL_SYM(chv) \
((chv)->mode == SUBMTX_BLOCK_DIAGONAL_SYM)
#define SUBMTX_IS_BLOCK_DIAGONAL_HERM(chv) \
((chv)->mode == SUBMTX_BLOCK_DIAGONAL_HERM)
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in basics.c ----------------------------------------
------------------------------------------------------------------------
*/
/*
-----------------------
simplest constructor
created -- 98may01, cca
-----------------------
*/
SubMtx *
SubMtx_new (
void
) ;
/*
-----------------------
set the default fields
created -- 98may01, cca
-----------------------
*/
void
SubMtx_setDefaultFields (
SubMtx *mtx
) ;
/*
--------------------------------------------------
clear the data fields, releasing allocated storage
created -- 98may01, cca
--------------------------------------------------
*/
void
SubMtx_clearData (
SubMtx *mtx
) ;
/*
------------------------------------------
destructor, free's the object and its data
created -- 98may01, cca
------------------------------------------
*/
void
SubMtx_free (
SubMtx *mtx
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in instance.c --------------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------
purpose -- fill *prowid with the row id
and *pcolid with the column id
created -- 98may01, cca
------------------------------------------
*/
void
SubMtx_ids (
SubMtx *mtx,
int *prowid,
int *pcolid
) ;
/*
-------------------------------------
purpose -- set the row and column ids
created -- 98may01, cca
-------------------------------------
*/
void
SubMtx_setIds (
SubMtx *mtx,
int rowid,
int colid
) ;
/*
---------------------------------------------------
purpose -- fill *pnrow with the # of rows
and *pncol with the # of columns
and *pnent with the # of matrix entries
created -- 98may01, cca
---------------------------------------------------
*/
void
SubMtx_dimensions (
SubMtx *mtx,
int *pnrow,
int *pncol,
int *pnent
) ;
/*
------------------------------------------------------------
purpose --
fill *pnrow with the number of rows
if prowind != NULL then
fill *prowind with the base location of the row indices
endif
created -- 98may01, cca
------------------------------------------------------------
*/
void
SubMtx_rowIndices (
SubMtx *mtx,
int *pnrow,
int **prowind
) ;
/*
---------------------------------------------------------------
purpose --
fill *pncol with the number of column
if pcolind != NULL then
fill *prowind with the base location of the column indices
endif
created -- 98may01, cca
---------------------------------------------------------------
*/
void
SubMtx_columnIndices (
SubMtx *mtx,
int *pncol,
int **pcolind
) ;
/*
---------------------------------
purpose -- for dense storage
*pnrow with mtx->nrow
*pncol with mtx->ncol
*pinc1 with row increment
*pinc2 with column increment
*pentries with mtx->entries
created -- 98may01, cca
---------------------------------
*/
void
SubMtx_denseInfo (
SubMtx *mtx,
int *pnrow,
int *pncol,
int *pinc1,
int *pinc2,
double **pentries
) ;
/*
---------------------------------------------
purpose -- for sparse rows, fill
*pnrow with # of rows
*pnent with # of indices
*psizes with sizes[] of rows
*pindices with indices[] for column indices
*pentries with entries[] for matrix entries
created -- 98may01, cca
---------------------------------------------
*/
void
SubMtx_sparseRowsInfo (
SubMtx *mtx,
int *pnrow,
int *pnent,
int **psizes,
int **pindices,
double **pentries
) ;
/*
----------------------------------------------
purpose -- for sparse columns, fill
*pncol with # of columns
*pnent with # of matrix entries
*psizes with sizes[ncol], column sizes
*pindices with indices[nent], matrix row ids
*pentries with entries[nent], matrix entries
created -- 98may01, cca
----------------------------------------------
*/
void
SubMtx_sparseColumnsInfo (
SubMtx *mtx,
int *pncol,
int *pnent,
int **psizes,
int **pindices,
double **pentries
) ;
/*
----------------------------------------------------
purpose -- for sparse triples, fill
*pnent with # of matrix entries
*prowids with rowids[nent], row ids of entries
*prowids with colids[nent], column ids of entries
*pentries with entries[nent], matrix entries
created -- 98may01, cca
----------------------------------------------------
*/
void
SubMtx_sparseTriplesInfo (
SubMtx *mtx,
int *pnent,
int **prowids,
int **pcolids,
double **pentries
) ;
/*
-----------------------------------------------------------
purpose -- for dense subrows, fill
*pnrow with # of rows
*pnent with # of matrix entries
*pfirstlocs with firstlocs[nrow], column of first nonzero
*psizes with sizes[nrow], number of nonzero columns
*pentries with entries[nent], matrix entries
created -- 98may01, cca
-----------------------------------------------------------
*/
void
SubMtx_denseSubrowsInfo (
SubMtx *mtx,
int *pnrow,
int *pnent,
int **pfirstlocs,
int **psizes,
double **pentries
) ;
/*
-----------------------------------------------------------
purpose -- for dense subcolumns, fill
*pncol with # of columns
*pnent with # of matrix entries
*pfirstlocs with firstlocs[ncol], row of first nonzero
*psizes with sizes[ncol], number of nonzero rows
*pentries with entries[nent], matrix entries
created -- 98may01, cca
-----------------------------------------------------------
*/
void
SubMtx_denseSubcolumnsInfo (
SubMtx *mtx,
int *pncol,
int *pnent,
int **pfirstlocs,
int **psizes,
double **pentries
) ;
/*
------------------------------------------------
purpose -- for a diagonal matrix, fill
*pncol with # of columns
*pentries with entries[nent], matrix entries
created -- 98may01, cca
------------------------------------------------
*/
void
SubMtx_diagonalInfo (
SubMtx *mtx,
int *pncol,
double **pentries
) ;
/*
------------------------------------------------------
purpose -- for a block diagonal symmetric matrix, fill
*pncol with # of columns
*pnent with # of entries
*ppivotsizes with pivotsizes[ncol]
*pentries with entries[nent], matrix entries
created -- 98may01, cca
------------------------------------------------------
*/
void
SubMtx_blockDiagonalInfo (
SubMtx *mtx,
int *pncol,
int *pnent,
int **ppivotsizes,
double **pentries
) ;
/*
-------------------------------------------------------
purpose -- to find matrix entry (irow,jcol) if present.
return value --
if entry (irow,jcol) is not present then
*pValue is 0.0
return value is -1
else entry (irow,jcol) is present then
*pValue is the matrix entry
return value is offset into entries array
endif
created -- 98may01, cca
-------------------------------------------------------
*/
int
SubMtx_realEntry (
SubMtx *mtx,
int irow,
int jcol,
double *pValue
) ;
/*
-------------------------------------------------------
purpose -- to find matrix entry (irow,jcol) if present.
return value --
if entry (irow,jcol) is not present then
*pReal and *pImag are 0.0
return value is -1
else entry (irow,jcol) is present then
(*pReal,*pImag) is the matrix entry
return value is offset into entries array
endif
created -- 98may01, cca
-------------------------------------------------------
*/
int
SubMtx_complexEntry (
SubMtx *mtx,
int irow,
int jcol,
double *pReal,
double *pImag
) ;
/*
-------------------------------------------------
purpose -- to return a pointer to the location of
matrix entry (irow,jcol) if present.
if entry (irow,jcol) is not present then
*ppValue is NULL
else entry (irow,jcol) is present then
*ppValue is the location of the matrix entry
endif
created -- 98may01, cca
-------------------------------------------------
*/
void
SubMtx_locationOfRealEntry (
SubMtx *mtx,
int irow,
int jcol,
double **ppValue
) ;
/*
--------------------------------------------------------
purpose -- to return a pointer to the location of
matrix entry (irow,jcol) if present.
if entry (irow,jcol) is not present then
(*ppReal,*ppImag) is (NULL,NULL)
else entry (irow,jcol) is present then
(*ppReal,*ppImag) is the location of the matrix entry
endif
created -- 98may01, cca
--------------------------------------------------------
*/
void
SubMtx_locationOfComplexEntry (
SubMtx *mtx,
int irow,
int jcol,
double **ppReal,
double **ppImag
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in init.c ------------------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------------------------
return the number of bytes needed for an object of this size
created -- 98may01, cca
------------------------------------------------------------
*/
int
SubMtx_nbytesNeeded (
int type,
int mode,
int nrow,
int ncol,
int nent
) ;
/*
------------------------------------
return the number of bytes in use in
the workspace owned by this object
created -- 98may01, cca
------------------------------------
*/
int
SubMtx_nbytesInUse (
SubMtx *mtx
) ;
/*
------------------------------------------------------
return a pointer to the workspace owned by this object
created -- 98may01, cca
------------------------------------------------------
*/
void *
SubMtx_workspace (
SubMtx *mtx
) ;
/*
----------------------------------------------------------------
return the number of bytes in the workspace owned by this object
created -- 98may01, cca
----------------------------------------------------------------
*/
int
SubMtx_nbytesInWorkspace (
SubMtx *mtx
) ;
/*
-------------------------------------------------------------
set the number of bytes in the workspace owned by this object
created -- 98may01, cca
-------------------------------------------------------------
*/
void
SubMtx_setNbytesInWorkspace (
SubMtx *mtx,
int nbytes
) ;
/*
---------------------------------------
purpose -- set the fields of the object
created -- 98may01, cca
---------------------------------------
*/
void
SubMtx_setFields (
SubMtx *mtx,
int type,
int mode,
int rowid,
int colid,
int nrow,
int ncol,
int nent
) ;
/*
----------------------------
purpose -- basic initializer
created -- 98may01, cca
----------------------------
*/
void
SubMtx_init (
SubMtx *mtx,
int type,
int mode,
int rowid,
int colid,
int nrow,
int ncol,
int nent
) ;
/*
---------------------------------------------------------
purpose -- initialize the object from its working storage
used when the object is a MPI message
created -- 98may01, cca
---------------------------------------------------------
*/
void
SubMtx_initFromBuffer (
SubMtx *mtx
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in initRandom.c ------------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------------
purpose -- to initialize a matrix object with
random entries and possibly random structure.
created -- 98feb16, cca
------------------------------------------------
*/
void
SubMtx_initRandom (
SubMtx *mtx,
int type,
int mode,
int rowid,
int colid,
int nrow,
int ncol,
int nent,
int seed
) ;
/*
------------------------------------------------
purpose -- to initialize a matrix object with
random entries in the upper triangle
strict = 1 --> strict upper triangle
created -- 98feb16, cca
------------------------------------------------
*/
void
SubMtx_initRandomUpperTriangle (
SubMtx *mtx,
int type,
int mode,
int rowid,
int colid,
int nrow,
int ncol,
int nent,
int seed,
int strict
) ;
/*
------------------------------------------------
purpose -- to initialize a matrix object with
random entries in the lower triangle
strict = 1 --> strict lower triangle
created -- 98feb16, cca
------------------------------------------------
*/
void
SubMtx_initRandomLowerTriangle (
SubMtx *mtx,
int type,
int mode,
int rowid,
int colid,
int nrow,
int ncol,
int nent,
int seed,
int strict
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in scalevec.c --------------------------------------
------------------------------------------------------------------------
*/
/*
-----------------------------------
purpose -- compute [y0] := A * [x0]
created -- 98apr17, cca
-----------------------------------
*/
void
SubMtx_scale1vec (
SubMtx *mtxA,
double y0[],
double x0[]
) ;
/*
-------------------------------------
purpose -- compute [y0 y1] := [x0 x1]
created -- 98apr17, cca
-------------------------------------
*/
void
SubMtx_scale2vec (
SubMtx *mtxA,
double y0[],
double y1[],
double x0[],
double x1[]
) ;
/*
-----------------------------------------------
purpose -- compute [y0 y1 y2] := A * [x0 x1 x2]
created -- 98apr17, cca
-----------------------------------------------
*/
void
SubMtx_scale3vec (
SubMtx *mtxA,
double y0[],
double y1[],
double y2[],
double x0[],
double x1[],
double x2[]
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in solve.c -----------------------------------------
------------------------------------------------------------------------
*/
/*
-----------------------------------------------------------------
purpose -- solve A X = B,
where
(1) X overwrites B
(2) A must be lower or upper triangular,
diagonal or block diagonal
(3) if A is strict lower or upper triangular,
then we solve (I + A) X = B
(4) columns(A) = rows(X)
(5) rows(A) = rows(B)
(6) B has type SUBMTX_DENSE_COLUMNS
(7) if A is SUBMTX_DENSE_SUBROWS or SUBMTX_SPARSE_ROWS
then A must be strict lower triangular
(8) if A is SUBMTX_DENSE_SUBCOLUMNS or SUBMTX_SPARSE_COLUMNS
then A must be strict upper triangular
(9) A can be SUBMTX_DIAGONAL, SUBMTX_BLOCK_DIAGONAL_SYM
or SUBMTX_BLOCK_DIAGONAL_HERM
created -- 98may01, cca
-----------------------------------------------------------------
*/
void
SubMtx_solve (
SubMtx *mtxA,
SubMtx *mtxB
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in solveT.c ----------------------------------------
------------------------------------------------------------------------
*/
/*
-----------------------------------------------------------------
purpose -- solve (A^T + I) X = B,
where
(1) X overwrites B
(2) A must be strict lower or upper triangular
(3) columns(A) = rows(X)
(4) rows(A) = rows(B)
(5) B has type SUBMTX_DENSE_COLUMNS
(6) if A is SUBMTX_DENSE_SUBROWS or SUBMTX_SPARSE_ROWS
then A must be strict lower triangular
(7) if A is SUBMTX_DENSE_SUBCOLUMNS or SUBMTX_SPARSE_COLUMNS
then A must be strict upper triangular
created -- 98may01, cca
-----------------------------------------------------------------
*/
void
SubMtx_solveT (
SubMtx *mtxA,
SubMtx *mtxB
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in solveH.c ----------------------------------------
------------------------------------------------------------------------
*/
/*
-------------------------------------------------------------
purpose -- solve (A^H + I) X = B,
where
(1) X overwrites B
(2) A must be strict lower or upper triangular
(2) A, B and X are complex
(4) columns(A) = rows(X)
(5) rows(A) = rows(B)
(6) B has mode SUBMTX_DENSE_COLUMNS
(7) if A is SUBMTX_DENSE_SUBROWS or SUBMTX_SPARSE_ROWS
then A must be strict lower triangular
(8) if A is SUBMTX_DENSE_SUBCOLUMNS or SUBMTX_SPARSE_COLUMNS
then A must be strict upper triangular
created -- 98may01, cca
-------------------------------------------------------------
*/
void
SubMtx_solveH (
SubMtx *mtxA,
SubMtx *mtxB
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in solveupd.c --------------------------------------
------------------------------------------------------------------------
*/
/*
----------------------------------------------------
purpose -- perform the matrix-matrix multiply
Y := Y - A * X used in the forward and backsolves
where
(1) rows(A) \subseteq rows(Y)
(2) rows(A) are local w.r.t. rows(Y)
(3) cols(A) \subseteq rows(X)
(4) cols(A) are local w.r.t. rows(X)
(5) cols(Y) = cols(X)
(6) Y and X have mode SUBMTX_DENSE_COLUMNS
created -- 98may02, cca
----------------------------------------------------
*/
void
SubMtx_solveupd (
SubMtx *mtxY,
SubMtx *mtxA,
SubMtx *mtxX
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in solveupdT.c -------------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------------------
purpose -- perform the matrix-matrix multiply
Y := Y - A^T * X used in the forward and backsolves
where
(1) rows(A) \subseteq rows(Y)
(2) rows(A) are local w.r.t. rows(Y)
(3) cols(A) \subseteq rows(X)
(4) cols(A) are local w.r.t. rows(X)
(5) cols(Y) = cols(X)
(6) Y and X have type SUBMTX_DENSE_COLUMNS
created -- 98may02, cca
-----------------------------------------------------
*/
void
SubMtx_solveupdT (
SubMtx *mtxY,
SubMtx *mtxA,
SubMtx *mtxX
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in solveupdH.c -------------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------------------
purpose -- perform the matrix-matrix multiply
Y := Y - A^H * X used in the forward and backsolves
where
(1) rows(A) \subseteq rows(Y)
(2) rows(A) are local w.r.t. rows(Y)
(3) cols(A) \subseteq rows(X)
(4) cols(A) are local w.r.t. rows(X)
(5) cols(Y) = cols(X)
(6) Y and X have type SUBMTX_DENSE_COLUMNS
created -- 98may02, cca
-----------------------------------------------------
*/
void
SubMtx_solveupdH (
SubMtx *mtxY,
SubMtx *mtxA,
SubMtx *mtxX
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in sort.c ------------------------------------------
------------------------------------------------------------------------
*/
/*
-----------------------------------------------------------
purpose -- sort the rows of the matrix into ascending order
created -- 98mar02, cca
-----------------------------------------------------------
*/
void
SubMtx_sortRowsUp (
SubMtx *mtx
) ;
/*
--------------------------------------------------------------
purpose -- sort the columns of the matrix into ascending order
created -- 98mar02, cca
--------------------------------------------------------------
*/
void
SubMtx_sortColumnsUp (
SubMtx *mtx
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in util.c ------------------------------------------
------------------------------------------------------------------------
*/
/*
-----------------------------------------
purpose -- to fill rowDV with the entries
in row irow of the matrix
created -- 98may01, cca
-----------------------------------------
*/
void
SubMtx_fillRowDV (
SubMtx *mtx,
int irow,
DV *rowDV
) ;
/*
-----------------------------------------
purpose -- to fill rowZV with the entries
in row irow of the matrix
created -- 98may01, cca
-----------------------------------------
*/
void
SubMtx_fillRowZV (
SubMtx *mtx,
int irow,
ZV *rowZV
) ;
/*
-----------------------------------------
purpose -- to fill colDV with the entries
in column icol of the matrix
created -- 98may01, cca
-----------------------------------------
*/
void
SubMtx_fillColumnDV (
SubMtx *mtx,
int icol,
DV *colDV
) ;
/*
-----------------------------------------
purpose -- to fill colZV with the entries
in column icol of the matrix
created -- 98may01, cca
-----------------------------------------
*/
void
SubMtx_fillColumnZV (
SubMtx *mtx,
int icol,
ZV *colZV
) ;
/*
------------------------------------------------------
purpose -- return the magnitude of the largest element
created -- 98may01, cca
------------------------------------------------------
*/
double
SubMtx_maxabs (
SubMtx *mtx
) ;
/*
-----------------------------------------
purpose -- zero the entries in the matrix
created -- 98may04, cca
-----------------------------------------
*/
void
SubMtx_zero (
SubMtx *mtx
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in IO.c --------------------------------------------
------------------------------------------------------------------------
*/
/*
--------------------------------------------------
purpose -- to read in an SubMtx object from a file
input --
fn -- filename, must be *.submtxb or *.submtxf
return value -- 1 if success, 0 if failure
created -- 98feb15, cca
--------------------------------------------------
*/
int
SubMtx_readFromFile (
SubMtx *mtx,
char *fn
) ;
/*
-------------------------------------------------------
purpose -- to read an SubMtx object from a formatted file
return value -- 1 if success, 0 if failure
created -- 96jun23, cca
-------------------------------------------------------
*/
int
SubMtx_readFromFormattedFile (
SubMtx *mtx,
FILE *fp
) ;
/*
------------------------------------------------------
purpose -- to read an SubMtx object from a binary file
return value -- 1 if success, 0 if failure
created -- 96jun23, cca
------------------------------------------------------
*/
int
SubMtx_readFromBinaryFile (
SubMtx *mtx,
FILE *fp
) ;
/*
----------------------------------------------
purpose -- to write an SubMtx object to a file
input --
fn -- filename
*.submtxb -- binary
*.submtxf -- formatted
anything else -- for human eye
return value -- 1 if success, 0 otherwise
created -- 96jun23, cca
----------------------------------------------
*/
int
SubMtx_writeToFile (
SubMtx *mtx,
char *fn
) ;
/*
--------------------------------------------------------
purpose -- to write an SubMtx object to a formatted file
return value -- 1 if success, 0 otherwise
created -- 96jun23, cca
--------------------------------------------------------
*/
int
SubMtx_writeToFormattedFile (
SubMtx *mtx,
FILE *fp
) ;
/*
-----------------------------------------------------
purpose -- to write an SubMtx object to a binary file
return value -- 1 if success, 0 otherwise
created -- 96jun23, cca
-----------------------------------------------------
*/
int
SubMtx_writeToBinaryFile (
SubMtx *mtx,
FILE *fp
) ;
/*
-------------------------------------------------------
purpose -- write a SubMtx object in human readable form
created -- 98feb07, cca
-------------------------------------------------------
*/
int
SubMtx_writeForHumanEye (
SubMtx *mtx,
FILE *fp
) ;
/*
-------------------------------------------------------------------
purpose -- write the header and scalar quantities for a SubMtx object
created -- 98feb07, cca
-------------------------------------------------------------------
*/
int
SubMtx_writeStats (
SubMtx *mtx,
FILE *fp
) ;
/*
--------------------------------------------------
purpose -- write the matrix entries out for matlab
created -- 98feb07, cca
--------------------------------------------------
*/
void
SubMtx_writeForMatlab (
SubMtx *mtx,
char *mtxname,
FILE *fp
) ;
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1