/* init.c */
#include "../ILUMtx.h"
#define MYDEBUG 0
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*
---------------------------------------------
purpose -- initialize the ILUMtx object
return values ---
1 -- normal return
-1 -- mtx is NULL
-2 -- neqns <= 0
-3 -- bad type for mtx
-4 -- bad symmetryflag for mtx
-5 -- storage mode of L is invalid
-6 -- storage mode of U is invalid
-7 -- matrix is symmetric or hermitian
and storage modes are not compatible
created -- 98oct03, cca
---------------------------------------------
*/
int
ILUMtx_init (
ILUMtx *mtx,
int neqns,
int type,
int symmetryflag,
int LstorageMode,
int UstorageMode
) {
/*
---------------
check the input
---------------
*/
if ( mtx == NULL ) {
fprintf(stderr, "\n error in ILUM_init(), mtx = NULL\n") ;
return(-1) ;
}
if ( neqns <= 0 ) {
fprintf(stderr, "\n error in ILUM_init()"
"\n neqns = %d\n", neqns) ;
return(-2) ;
}
if ( type != SPOOLES_REAL && type != SPOOLES_COMPLEX ) {
fprintf(stderr, "\n error in ILUM_init()"
"\n type = %d\n", type) ;
return(-3) ;
}
if ( symmetryflag != SPOOLES_SYMMETRIC
&& symmetryflag != SPOOLES_HERMITIAN
&& symmetryflag != SPOOLES_NONSYMMETRIC ) {
fprintf(stderr, "\n error in ILUMinit()"
"\n symmetry = %d\n", symmetryflag) ;
return(-4) ;
}
if ( LstorageMode != SPOOLES_BY_ROWS
&& LstorageMode != SPOOLES_BY_COLUMNS ) {
fprintf(stderr, "\n error in ILUM_init()"
"\n LstorageMode = %d\n", LstorageMode) ;
return(-5) ;
}
if ( UstorageMode != SPOOLES_BY_ROWS
&& UstorageMode != SPOOLES_BY_COLUMNS ) {
fprintf(stderr, "\n error in ILUM_init()"
"\n UstorageMode = %d\n", UstorageMode) ;
return(-6) ;
}
if ( ( symmetryflag == SPOOLES_SYMMETRIC
|| symmetryflag == SPOOLES_HERMITIAN)
&& (LstorageMode == UstorageMode) ) {
fprintf(stderr, "\n error in ILUM_init()"
"\n symmetryflag %d, LstorageMode %d, UstorageMode %d",
symmetryflag, LstorageMode, UstorageMode) ;
return(-7) ;
}
/*--------------------------------------------------------------------*/
/*
--------------
clear the data
--------------
*/
ILUMtx_clearData(mtx) ;
/*
---------------------
set the scalar fields
---------------------
*/
mtx->neqns = neqns ;
mtx->type = type ;
mtx->symmetryflag = symmetryflag ;
mtx->LstorageMode = LstorageMode ;
mtx->UstorageMode = UstorageMode ;
#if MYDEBUG > 0
fprintf(stdout,
"\n mtx->neqns = %d"
"\n mtx->type = %d"
"\n mtx->symmetryflag = %d"
"\n mtx->LstorageMode = %d"
"\n mtx->UstorageMode = %d",
mtx->neqns, mtx->type, mtx->symmetryflag,
mtx->LstorageMode, mtx->UstorageMode) ;
fflush(stdout) ;
#endif
/*
--------------------
allocate the vectors
--------------------
*/
mtx->sizesU = IVinit(neqns, 0) ;
mtx->p_indU = PIVinit(neqns) ;
mtx->p_entU = PDVinit(neqns) ;
if ( type == SPOOLES_REAL ) {
mtx->entD = DVinit(neqns, 0.0) ;
} else {
mtx->entD = DVinit(2*neqns, 0.0) ;
}
if ( symmetryflag == SPOOLES_NONSYMMETRIC ) {
mtx->sizesL = IVinit(neqns, 0) ;
mtx->p_indL = PIVinit(neqns) ;
mtx->p_entL = PDVinit(neqns) ;
} else {
mtx->sizesL = NULL ;
mtx->p_indL = NULL ;
mtx->p_entL = NULL ;
}
/*--------------------------------------------------------------------*/
return(1) ; }
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
syntax highlighted by Code2HTML, v. 0.9.1