/* basics.C */
#include "../MSMD.h"
#define MYDEBUG 0
/*--------------------------------------------------------------------*/
/*
-----------------------
constructor
created -- 96feb25, cca
-----------------------
*/
MSMDinfo *
MSMDinfo_new (
void
) {
MSMDinfo *info ;
ALLOCATE(info, struct _MSMDinfo, 1) ;
MSMDinfo_setDefaultFields(info) ;
return(info) ; }
/*--------------------------------------------------------------------*/
/*
---------------------------
set the default data fields
created -- 96feb25, cca
---------------------------
*/
void
MSMDinfo_setDefaultFields(
MSMDinfo *info
) {
info->compressFlag = 1 ;
info->prioType = 1 ;
info->stepType = 1.0 ;
info->seed = 0 ;
info->msglvl = 0 ;
info->msgFile = stdout ;
info->maxnbytes = 0 ;
info->nbytes = 0 ;
info->istage = 0 ;
info->nstage = 0 ;
info->stageInfo = NULL ;
info->totalCPU = 0.0 ;
return ; }
/*--------------------------------------------------------------------*/
/*
-----------------------
clear the data fields
created -- 96feb25, cca
-----------------------
*/
void
MSMDinfo_clearData (
MSMDinfo *info
) {
if ( info->stageInfo != NULL ) {
FREE(info->stageInfo ) ;
}
MSMDinfo_setDefaultFields(info) ;
return ; }
/*--------------------------------------------------------------------*/
/*
-----------------------
destructor
created -- 96feb25, cca
-----------------------
*/
void
MSMDinfo_free (
MSMDinfo *info
) {
MSMDinfo_clearData(info) ;
FREE(info) ;
return ; }
/*--------------------------------------------------------------------*/
/*
------------------------------------
purpose -- print the MSMDinfo object
created -- 96feb25, cca
------------------------------------
*/
void
MSMDinfo_print (
MSMDinfo *info,
FILE *fp
) {
int istage ;
MSMDstageInfo *stageinfo ;
if ( info == NULL || fp == NULL ) {
fprintf(stderr, "\n fatal error in MSMDinfo_print(%p,%p)"
"\n bad input\n", info, fp) ;
exit(-1) ;
}
fprintf(fp, "\n\n MSMDinfo :") ;
fprintf(fp, "\n compressFlag = %d : ", info->compressFlag) ;
if ( info->compressFlag / 4 >= 1 ) {
fprintf(fp, "compress graph, ") ;
}
switch ( info->compressFlag % 4 ) {
case 0 :
fprintf(fp, "during elimination do not compress") ;
break ;
case 1 :
fprintf(fp, "during elimination compress 2-adj nodes") ;
break ;
case 2 :
fprintf(fp, "during elimination compress all nodes") ;
break ;
default :
fprintf(fp, "\n unknown type") ;
break ;
}
fprintf(fp, "\n prioType = %d : ", info->prioType) ;
switch ( info->prioType ) {
case 1 :
fprintf(fp, " true updates") ;
break ;
case 2 :
fprintf(fp, " approximate updates") ;
break ;
case 3 :
fprintf(fp, " true updates for 2-adj nodes, others approximate") ;
break ;
default :
fprintf(fp, " unknown type") ;
break ;
}
fprintf(fp, "\n stepType = %f : ", info->stepType) ;
if ( info->stepType < 1.0 ) {
fprintf(fp, " single elimination") ;
} else if ( info->stepType == 1.0 ) {
fprintf(fp, " multiple elimination of nodes of mininum degree") ;
} else {
fprintf(fp, " multiple elimination in range [mindeg, %f*mindeg]",
info->stepType) ;
}
fprintf(fp, "\n msglvl = %d ", info->msglvl) ;
fprintf(fp, "\n maxnbytes = %d ", info->maxnbytes) ;
fprintf(fp, "\n ordering cpu = %8.3f ", info->totalCPU) ;
fprintf(fp, "\n stage information") ;
fprintf(fp,
"\n\n stage #steps #fronts #weight #frontind nzf ops CPU") ;
for ( istage = 0, stageinfo = info->stageInfo ;
istage <= info->nstage ; istage++, stageinfo++ ) {
fprintf(fp, "\n %3d %5d %6d %7d %9d %10d %12.0f %8.3f",
istage, stageinfo->nstep, stageinfo->nfront,
stageinfo->welim, stageinfo->nfind, stageinfo->nzf,
stageinfo->ops, stageinfo->cpu) ;
}
fprintf(fp, "\n total %5d %6d %7d %9d %10d %12.0f ",
stageinfo->nstep, stageinfo->nfront,
stageinfo->welim, stageinfo->nfind, stageinfo->nzf,
stageinfo->ops) ;
fprintf(fp,
"\n\n stage #nexact2 #exact3 #approx #check #indst #outmatched") ;
for ( istage = 0, stageinfo = info->stageInfo ;
istage <= info->nstage ; istage++, stageinfo++ ) {
fprintf(fp, "\n %3d %6d %7d %6d %7d %8d %8d",
istage, stageinfo->nexact2, stageinfo->nexact3,
stageinfo->napprox, stageinfo->ncheck, stageinfo->nindst,
stageinfo->noutmtch) ;
}
fprintf(fp, "\n total %6d %7d %6d %7d %8d %8d",
stageinfo->nexact2, stageinfo->nexact3,
stageinfo->napprox, stageinfo->ncheck, stageinfo->nindst,
stageinfo->noutmtch) ;
return ; }
/*--------------------------------------------------------------------*/
/*
-----------------------------------------
determine if the MSMDinfo object is valid
created -- 96feb25, cca
-----------------------------------------
*/
int
MSMDinfo_isValid (
MSMDinfo *info
) {
int rc ;
if ( info == NULL
|| info->compressFlag < 0
|| info->compressFlag == 3
|| info->compressFlag > 6
|| info->prioType < 1
|| info->prioType > 4 ) {
rc = 0 ;
} else {
rc = 1 ;
}
return(rc) ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1