/* init.c */
#include "../PatchAndGoInfo.h"
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------
purpose -- to initialize the patch-and-go information object
strategy -- type of patch-and-go strategy
1 -- used with optimization matrices
if ( |a_{i,i}| <= toosmall ) {
set a_{i,i} = 1.0
set offdiagonals = 0.0
}
2 -- used with structural analysis matrices
if ( |a_{i,i}| <= fudge ) {
set a_{i,i} = fudge * max (1, |a_{i,*}|, |a_{*,i}|)
}
toosmall -- tolerance for first strategy
fudge -- fudge factor for second strategy
storeids -- if nonzero, the row and column numbers where
patches have been applied are stored in an IV object
storevalues -- if nonzero and strategy 2, the differences
between the old and new diagonal magnitudes will be
stored in a DV object
created -- 98aug27, cca
------------------------------------------------------------
*/
void
PatchAndGoInfo_init (
PatchAndGoInfo *info,
int strategy,
double toosmall,
double fudge,
int storeids,
int storevalues
) {
/*
---------------
check the input
---------------
*/
if ( info == NULL || strategy < 1 || strategy > 2
|| toosmall < 0.0 || fudge < 0.0 ) {
fprintf(stderr, "\n fatal error in PatchAndGoInfo_init()"
"\n bad input\n") ;
exit(-1) ;
}
PatchAndGoInfo_clearData(info) ;
info->strategy = strategy ;
info->toosmall = toosmall ;
info->fudge = fudge ;
if ( storeids != 0 ) {
info->fudgeIV = IV_new() ;
}
if ( strategy == 2 && storevalues != 0 ) {
info->fudgeDV = DV_new() ;
}
return ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1