/* testInput.c */
#include "../../timings.h"
#include "../InpMtx.h"
/*--------------------------------------------------------------------*/
int
main ( int argc, char *argv[] )
/*
-----------------------------------------------
test the InpMtx input methods for Peter Schartz
created -- 98sep04, cca
-----------------------------------------------
*/
{
double estpar, growth, t1, t2 ;
double *entries ;
FILE *msgFile ;
int count, ii, irow, maxsize, msglvl, nent, neqns, n1, n2, n3,
size, size1, size2, type ;
int *indices, *indices1, *indices2, *list ;
InpMtx *mtxA ;
IVL *adjIVL, *fullIVL, *lowerIVL ;
if ( argc != 9 ) {
fprintf(stdout,
"\n\n usage : %s msglvl msgFile n1 n2 n3 estpar growth"
"\n msglvl -- message level"
"\n msgFile -- message file"
"\n type -- type of entries"
"\n 0 -- indices only"
"\n 1 -- real entries"
"\n 2 -- complex entries"
"\n n1 -- # of grid points in first direction"
"\n n2 -- # of grid points in second direction"
"\n n3 -- # of grid points in third direction"
"\n estpar -- estimation for nent"
"\n growth -- growth factor"
"\n", argv[0]) ;
return(0) ;
}
msglvl = atoi(argv[1]) ;
if ( strcmp(argv[2], "stdout") == 0 ) {
msgFile = stdout ;
} else if ( (msgFile = fopen(argv[2], "a")) == NULL ) {
fprintf(stderr, "\n fatal error in %s"
"\n unable to open file %s\n",
argv[0], argv[2]) ;
return(-1) ;
}
type = atoi(argv[3]) ;
n1 = atoi(argv[4]) ;
n2 = atoi(argv[5]) ;
n3 = atoi(argv[6]) ;
estpar = atof(argv[7]) ;
growth = atof(argv[8]) ;
fprintf(msgFile,
"\n %s "
"\n msglvl -- %d"
"\n msgFile -- %s"
"\n type -- %d"
"\n n1 -- %d"
"\n n2 -- %d"
"\n n3 -- %d"
"\n estpar -- %f"
"\n growth -- %f"
"\n",
argv[0], msglvl, argv[2], type, n1, n2, n3, estpar, growth) ;
fflush(msgFile) ;
if ( n1 <= 0 || n2 <= 0 || n3 <= 0 || estpar < 0.0 || growth <= 1.0 ) {
fprintf(stderr, "\n fatal error in testInput, bad input\n") ;
exit(-1) ;
}
/*
-----------------------------------
set up the grid adjacency structure
-----------------------------------
*/
neqns = n1 * n2 * n3 ;
MARKTIME(t1) ;
if ( n1 == 1 ) {
adjIVL = IVL_make9P(n2, n3, 1) ;
} else if ( n2 == 1 ) {
adjIVL = IVL_make9P(n1, n3, 1) ;
} else if ( n3 == 1 ) {
adjIVL = IVL_make9P(n1, n2, 1) ;
} else {
adjIVL = IVL_make27P(n1, n2, n3, 1) ;
}
nent = IVL_tsize(adjIVL) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n\n CPU %8.3f : make full adjacency, %d entries",
t2 - t1, nent) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n\n full adjacency structure, %d entries", nent) ;
IVL_writeForHumanEye(adjIVL, msgFile) ;
}
/*
----------------------------------
make the lower adjacency structure
----------------------------------
*/
MARKTIME(t1) ;
lowerIVL = IVL_new() ;
IVL_init1(lowerIVL, IVL_CHUNKED, neqns) ;
list = IVinit(neqns, -1) ;
for ( irow = 0 ; irow < neqns ; irow++ ) {
IVL_listAndSize(adjIVL, irow, &size, &indices) ;
for ( ii = count = 0 ; ii < size ; ii++ ) {
if ( indices[ii] >= irow ) {
list[count++] = indices[ii] ;
}
}
IVL_setList(lowerIVL, irow, count, list) ;
}
nent = IVL_tsize(lowerIVL) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n\n CPU %8.3f : make lower adjacency, %d entries",
t2 - t1, nent) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n\n lower adjacency structure, %d entries", nent);
IVL_writeForHumanEye(adjIVL, msgFile) ;
}
/*
---------------------------------------------------
create a vector to hold entries,
its size is the maximum size of the lower adjacency
---------------------------------------------------
*/
maxsize = IVL_maxListSize(adjIVL) ;
entries = DVinit(2*maxsize, 0.0) ;
/*
----------------------------
initialize the InpMtx object
----------------------------
*/
MARKTIME(t1) ;
mtxA = InpMtx_new() ;
InpMtx_init(mtxA, INPMTX_BY_COLUMNS, type, estpar*nent, 0) ;
InpMtx_setResizeMultiple(mtxA, growth) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n\n CPU %8.3f : initialize InpMtx", t2 - t1) ;
/*
----------------
load the columns
----------------
*/
MARKTIME(t1) ;
if ( INPMTX_IS_INDICES_ONLY(mtxA) ) {
for ( irow = 0 ; irow < neqns ; irow++ ) {
IVL_listAndSize(lowerIVL, irow, &size, &indices) ;
InpMtx_inputColumn(mtxA, irow, size, indices) ;
}
} else if ( INPMTX_IS_REAL_ENTRIES(mtxA) ) {
for ( irow = 0 ; irow < neqns ; irow++ ) {
IVL_listAndSize(lowerIVL, irow, &size, &indices) ;
InpMtx_inputRealColumn(mtxA, irow, size, indices, entries) ;
}
} else if ( INPMTX_IS_COMPLEX_ENTRIES(mtxA) ) {
for ( irow = 0 ; irow < neqns ; irow++ ) {
IVL_listAndSize(lowerIVL, irow, &size, &indices) ;
InpMtx_inputComplexColumn(mtxA, irow, size, indices, entries) ;
}
}
MARKTIME(t2) ;
fprintf(msgFile, "\n\n CPU %8.3f : load entries by columns", t2 - t1) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n\n mtxA") ;
InpMtx_writeForHumanEye(mtxA, msgFile) ;
}
/*
-----------------------------
sort and compress the entries
-----------------------------
*/
MARKTIME(t1) ;
InpMtx_sortAndCompress(mtxA) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n\n CPU %8.3f : sort and compress", t2 - t1) ;
/*
-------------------
set the vector mode
-------------------
*/
MARKTIME(t1) ;
InpMtx_changeStorageMode(mtxA, INPMTX_BY_VECTORS) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n\n CPU %8.3f : convert to vectors", t2 - t1) ;
/*
--------------------------------------
construct the full adjacency structure
--------------------------------------
*/
MARKTIME(t1) ;
fullIVL = InpMtx_fullAdjacency(mtxA) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n\n CPU %8.3f : construct the full adjacency",
t2 - t1) ;
/*
-----------------------------------------
compare the two full adjacency structures
-----------------------------------------
*/
for ( irow = 0 ; irow < neqns ; irow++ ) {
IVL_listAndSize(adjIVL, irow, &size1, &indices1) ;
IVL_listAndSize(fullIVL, irow, &size2, &indices2) ;
if ( size1 != size2 ) {
fprintf(msgFile, "\n\n error, irow %d, size1 %d, size2 %d",
irow, size1, size2) ;
exit(-1) ;
}
for ( ii = 0 ; ii < size1 ; ii++ ) {
if ( indices1[ii] != indices2[ii] ) {
fprintf(msgFile, "\n\n error, irow %d", irow) ;
fprintf(msgFile, "\n indices1") ;
IVfprintf(msgFile, size1, indices1) ;
fprintf(msgFile, "\n indices2") ;
IVfprintf(msgFile, size1, indices2) ;
exit(-1) ;
}
}
}
/*
------------------------
free the working storage
------------------------
*/
IVL_free(adjIVL) ;
IVL_free(lowerIVL) ;
IVL_free(fullIVL) ;
InpMtx_free(mtxA) ;
DVfree(entries) ;
IVfree(list) ;
fprintf(msgFile, "\n") ;
fclose(msgFile) ;
return(1) ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1