/* basics.c */
#include "../SemiImplMtx.h"
#define MYDEBUG 0
/*--------------------------------------------------------------------*/
/*
-----------------------
simplest constructor
created -- 98oct16, cca
-----------------------
*/
SemiImplMtx *
SemiImplMtx_new (
void
) {
SemiImplMtx *mtx ;
ALLOCATE(mtx, struct _SemiImplMtx, 1) ;
SemiImplMtx_setDefaultFields(mtx) ;
return(mtx) ; }
/*--------------------------------------------------------------------*/
/*
-----------------------
set the default fields
return code --
1 -- normal return
-1 -- mtx is NULL
created -- 98oct16, cca
-----------------------
*/
int
SemiImplMtx_setDefaultFields (
SemiImplMtx *mtx
) {
if ( mtx == NULL ) {
fprintf(stderr, "\n fatal error in SemiImplMtx_setDefaultFields(%p)"
"\n bad input", mtx) ;
return(-1) ;
}
mtx->neqns = 0 ;
mtx->type = SPOOLES_REAL ;
mtx->symmetryflag = SPOOLES_SYMMETRIC ;
mtx->ndomeqns = 0 ;
mtx->nschureqns = 0 ;
mtx->domainMtx = NULL ;
mtx->schurMtx = NULL ;
mtx->A21 = NULL ;
mtx->A12 = NULL ;
mtx->domRowsIV = NULL ;
mtx->schurRowsIV = NULL ;
mtx->domColsIV = NULL ;
mtx->schurColsIV = NULL ;
return(1) ; }
/*--------------------------------------------------------------------*/
/*
--------------------------------------------------
clear the data fields, releasing allocated storage
return code --
1 -- normal return
-1 -- mtx is NULL
created -- 98oct16, cca
--------------------------------------------------
*/
int
SemiImplMtx_clearData (
SemiImplMtx *mtx
) {
int ieqn, neqns ;
/*
---------------
check the input
---------------
*/
if ( mtx == NULL ) {
fprintf(stderr, "\n fatal error in SemiImplMtx_clearData(%p)"
"\n bad input\n", mtx) ;
return(-1) ;
}
if ( (neqns = mtx->neqns) <= 0 ) {
return(1) ;
}
if ( mtx->domainMtx != NULL ) {
ETree *etree = mtx->domainMtx->frontETree ;
IVL *symbfacIVL = mtx->domainMtx->symbfacIVL ;
FrontMtx_free(mtx->domainMtx) ;
ETree_free(etree) ;
IVL_free(symbfacIVL) ;
}
if ( mtx->schurMtx != NULL ) {
ETree *etree = mtx->schurMtx->frontETree ;
IVL *symbfacIVL = mtx->schurMtx->symbfacIVL ;
FrontMtx_free(mtx->schurMtx) ;
ETree_free(etree) ;
IVL_free(symbfacIVL) ;
}
if ( mtx->A12 != NULL ) {
InpMtx_free(mtx->A12) ;
}
if ( mtx->domRowsIV != NULL ) {
IV_free(mtx->domRowsIV) ;
}
if ( mtx->domColsIV != NULL ) {
IV_free(mtx->domColsIV) ;
}
if ( mtx->schurRowsIV != NULL ) {
IV_free(mtx->schurRowsIV) ;
}
if ( mtx->schurColsIV != NULL ) {
IV_free(mtx->schurColsIV) ;
}
if ( mtx->symmetryflag == SPOOLES_NONSYMMETRIC ) {
if ( mtx->A21 != NULL ) {
InpMtx_free(mtx->A21) ;
}
}
/*
----------------------
set the default fields
----------------------
*/
SemiImplMtx_setDefaultFields(mtx) ;
return(-1) ; }
/*--------------------------------------------------------------------*/
/*
------------------------------------------
destructor, free's the object and its data
return code --
1 -- normal return
-1 -- mtx is NULL
created -- 98oct16, cca
------------------------------------------
*/
int
SemiImplMtx_free (
SemiImplMtx *mtx
) {
if ( mtx == NULL ) {
fprintf(stderr, "\n fatal error in SemiImplMtx_free(%p)"
"\n bad input\n", mtx) ;
return(-1) ;
}
SemiImplMtx_clearData(mtx) ;
FREE(mtx) ;
return(1) ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1