/* test_sort.c */
#include "../Utilities.h"
#include "../../Drand.h"
#include "../../timings.h"
/*--------------------------------------------------------------------*/
int
main ( int argc, char *argv[] )
/*
------------------------------------------------------------------
purpose -- to test the sort routines
created -- 98jan28, cca
usage : test_sort msglvl msgFile target sortType n range mod seed
msglvl -- message level
msglvl == 1 --> just timings
msglvl > 1 --> vector(s) before and after sort
msgFile -- message file
target -- domain of sort
IV -- int vector sorts
IV2 -- (int,int) vector sorts
IVDV -- (int,double) vector sorts
IV2DV -- (int,int,double) vector sorts
IVZV -- (int,complex) vector sorts
IV2ZV -- (int,int,complex) vector sorts
DV -- double vector sorts
DV2 -- (double,double) vector sorts
DVIV -- (double,int) vector sorts
sortType -- type of sort
IU -- ascending insert sort
ID -- descending insert sort
QU -- asscending quick sort
QD -- descending quick sort
n -- length of vector(s)
range -- entries are in [1, range]
mod -- entries in vectors are uniform(0,n-1) % mod
seed -- seed for random number generator
------------------------------------------------------------------
*/
{
char *sortType, *target ;
double t1, t2 ;
Drand drand ;
FILE *msgFile ;
int i, ierr, msglvl, mod, n, range, rc, seed ;
if ( argc != 9 ) {
fprintf(stdout,
"\n usage : %s msglvl msgFile target sortType n range mod seed"
"\n msglvl -- message level"
"\n msglvl == 1 --> just timings"
"\n msglvl > 1 --> vector(s) before and after sort"
"\n msgFile -- message file"
"\n target -- domain of sort"
"\n IV -- int vector sorts"
"\n IV2 -- (int,int) vector sorts"
"\n IVDV -- (int,double) vector sorts"
"\n IV2DV -- (int,int,double) vector sorts"
"\n IVZV -- (int,complex) vector sorts"
"\n IV2ZV -- (int,int,complex) vector sorts"
"\n DV -- double vector sorts"
"\n DV2 -- (double,double) vector sorts"
"\n DVIV -- (double,int) vector sorts"
"\n sortType -- type of sort"
"\n IU -- ascending insert sort"
"\n ID -- descending insert sort"
"\n QU -- asscending quick sort"
"\n QD -- descending quick sort"
"\n n -- length of vector(s)"
"\n range -- entries in vectors are uniform(1,range) %% mod"
"\n mod -- entries in vectors are uniform(1,range) %% mod"
"\n seed -- seed for random number generator"
"\n", argv[0]) ;
exit(0) ;
}
msglvl = atoi(argv[1]) ;
if ( strcmp("stdout", argv[2]) == 0 ) {
msgFile = stdout ;
} else if ( (msgFile = fopen(argv[2], "a")) == NULL ) {
fprintf(stderr, "\n unable to open file %s\n", argv[2]) ;
exit(-1) ;
}
target = argv[3] ;
sortType = argv[4] ;
n = atoi(argv[5]) ;
range = atoi(argv[6]) ;
mod = atoi(argv[7]) ;
seed = atoi(argv[8]) ;
fprintf(msgFile, "\n\n ### target = %s, sortType = %s, n = %d",
target, sortType, n) ;
/*
-------------------------
switch over the sort type
-------------------------
*/
Drand_setDefaultFields(&drand) ;
if ( strcmp(target, "IV") == 0 ) {
/*
------
IVsort
------
*/
int *ivec1 ;
ivec1 = IVinit2(n) ;
Drand_setSeed(&drand, seed) ;
Drand_setUniform(&drand, 1, range+1) ;
Drand_fillIvector(&drand, n, ivec1) ;
for ( i = 0 ; i < n ; i++ ) {
ivec1[i] = ivec1[i] % mod ;
}
if ( msglvl > 1 ) {
fprintf(msgFile, "\n IVsort") ;
fprintf(msgFile, "\n initial vector") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n ") ;
fflush(msgFile) ;
}
if ( strcmp(sortType, "IU") == 0 ) {
MARKTIME(t1) ;
IVisortUp(n, ivec1) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via IVisortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "ID") == 0 ) {
MARKTIME(t1) ;
IVisortDown(n, ivec1) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via IVisortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
} if ( strcmp(sortType, "QU") == 0 ) {
MARKTIME(t1) ;
IVqsortUp(n, ivec1) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via IVqsortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "QD") == 0 ) {
MARKTIME(t1) ;
IVqsortDown(n, ivec1) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via IVqsortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
}
if ( rc == 0 ) {
fprintf(msgFile, "\n vector not sorted correctly") ;
} else {
fprintf(msgFile, "\n vector sorted correctly") ;
}
if ( msglvl > 1 ) {
fprintf(msgFile, "\n sorted vector") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n ") ;
}
} else if ( strcmp(target, "IV2") == 0 ) {
/*
-------
IV2sort
-------
*/
double sig1, sig2 ;
int *ivec1, *ivec2 ;
ivec1 = IVinit2(n) ;
ivec2 = IVinit2(n) ;
Drand_setSeed(&drand, seed) ;
Drand_setUniform(&drand, 1, range+1) ;
Drand_fillIvector(&drand, n, ivec1) ;
Drand_fillIvector(&drand, n, ivec2) ;
for ( i = 0 ; i < n ; i++ ) {
ivec1[i] = ivec1[i] % mod ;
ivec2[i] = ivec2[i] % mod ;
}
for ( i = 0, sig1 = 0.0 ; i < n ; i++ ) {
sig1 += ivec1[i]*ivec2[i] ;
}
if ( msglvl > 1 ) {
fprintf(msgFile, "\n IV2sort, sig1 = %12.4e", sig1) ;
fprintf(msgFile, "\n initial ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n initial ivec2") ;
IVfp80(msgFile, n, ivec2, 80, &ierr) ;
fprintf(msgFile, "\n ") ;
fflush(msgFile) ;
}
if ( strcmp(sortType, "IU") == 0 ) {
MARKTIME(t1) ;
IV2isortUp(n, ivec1, ivec2) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via IV2isortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "ID") == 0 ) {
MARKTIME(t1) ;
IV2isortDown(n, ivec1, ivec2) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via IV2isortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
} if ( strcmp(sortType, "QU") == 0 ) {
MARKTIME(t1) ;
IV2qsortUp(n, ivec1, ivec2) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via IV2qsortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "QD") == 0 ) {
MARKTIME(t1) ;
IV2qsortDown(n, ivec1, ivec2) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via IV2qsortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
}
for ( i = 0, sig2 = 0.0 ; i < n ; i++ ) {
sig2 += ivec1[i]*ivec2[i] ;
}
if ( rc == 0 ) {
fprintf(msgFile, "\n vector not sorted correctly") ;
} else {
fprintf(msgFile, "\n vector sorted correctly") ;
}
fprintf(msgFile,
"\n sig1 = %12.4e, sig2 = %12.4e, error/sig1 = %12.4e\n",
sig1, sig2, (sig1 - sig2)/sig1) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n sorted ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n companion ivec2") ;
IVfp80(msgFile, n, ivec2, 80, &ierr) ;
fprintf(msgFile, "\n ") ;
}
} else if ( strcmp(target, "IVDV") == 0 ) {
/*
--------
IVDVsort
--------
*/
double sig1, sig2 ;
double *dvec ;
int *ivec1 ;
ivec1 = IVinit2(n) ;
dvec = DVinit2(n) ;
Drand_setSeed(&drand, seed) ;
Drand_setUniform(&drand, 1, range+1) ;
Drand_fillIvector(&drand, n, ivec1) ;
Drand_setUniform(&drand, 0.0, 1.0) ;
Drand_fillDvector(&drand, n, dvec) ;
for ( i = 0 ; i < n ; i++ ) {
ivec1[i] = ivec1[i] % mod ;
}
for ( i = 0, sig1 = 0.0 ; i < n ; i++ ) {
sig1 += ivec1[i]*dvec[i] ;
}
if ( msglvl > 1 ) {
fprintf(msgFile, "\n IVDVsort, sig1 = %12.4e", sig1) ;
fprintf(msgFile, "\n initial ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n initial dvec") ;
DVfprintf(msgFile, n, dvec) ;
fprintf(msgFile, "\n ") ;
fflush(msgFile) ;
}
if ( strcmp(sortType, "IU") == 0 ) {
MARKTIME(t1) ;
IVDVisortUp(n, ivec1, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IVDVisortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "ID") == 0 ) {
MARKTIME(t1) ;
IVDVisortDown(n, ivec1, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IVDVisortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
} if ( strcmp(sortType, "QU") == 0 ) {
MARKTIME(t1) ;
IVDVqsortUp(n, ivec1, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IVDVqsortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "QD") == 0 ) {
MARKTIME(t1) ;
IVDVqsortDown(n, ivec1, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IVDVqsortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
}
for ( i = 0, sig2 = 0.0 ; i < n ; i++ ) {
sig2 += ivec1[i]*dvec[i] ;
}
if ( rc == 0 ) {
fprintf(msgFile, "\n vector not sorted correctly") ;
} else {
fprintf(msgFile, "\n vector sorted correctly") ;
}
fprintf(msgFile,
"\n sig1 = %12.4e, sig2 = %12.4e, error/sig1 = %12.4e\n",
sig1, sig2, (sig1 - sig2)/sig1) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n sorted ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n companion dvec") ;
DVfprintf(msgFile, n, dvec) ;
fprintf(msgFile, "\n ") ;
}
} else if ( strcmp(target, "IV2DV") == 0 ) {
/*
---------
IV2DVsort
---------
*/
double sig1, sig2 ;
double *dvec ;
int *ivec1, *ivec2 ;
ivec1 = IVinit2(n) ;
ivec2 = IVinit2(n) ;
dvec = DVinit2(n) ;
Drand_setSeed(&drand, seed) ;
Drand_setUniform(&drand, 1, range+1) ;
Drand_fillIvector(&drand, n, ivec1) ;
Drand_fillIvector(&drand, n, ivec2) ;
Drand_setUniform(&drand, 0.0, 1.0) ;
Drand_fillDvector(&drand, n, dvec) ;
for ( i = 0 ; i < n ; i++ ) {
ivec1[i] = ivec1[i] % mod ;
ivec2[i] = ivec2[i] % mod ;
}
for ( i = 0, sig1 = 0.0 ; i < n ; i++ ) {
sig1 += ivec1[i]*ivec2[i]*dvec[i] ;
}
if ( msglvl > 1 ) {
fprintf(msgFile, "\n IV2DVsort, sig1 = %12.4e", sig1) ;
fprintf(msgFile, "\n initial ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n initial ivec2") ;
IVfp80(msgFile, n, ivec2, 80, &ierr) ;
fprintf(msgFile, "\n initial dvec") ;
DVfprintf(msgFile, n, dvec) ;
fprintf(msgFile, "\n ") ;
fflush(msgFile) ;
}
if ( strcmp(sortType, "IU") == 0 ) {
MARKTIME(t1) ;
IV2DVisortUp(n, ivec1, ivec2, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IV2DVisortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "ID") == 0 ) {
MARKTIME(t1) ;
IV2DVisortDown(n, ivec1, ivec2, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IV2DVisortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
} if ( strcmp(sortType, "QU") == 0 ) {
MARKTIME(t1) ;
IV2DVqsortUp(n, ivec1, ivec2, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IV2DVqsortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "QD") == 0 ) {
MARKTIME(t1) ;
IV2DVqsortDown(n, ivec1, ivec2, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IV2DVqsortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
}
for ( i = 0, sig2 = 0.0 ; i < n ; i++ ) {
sig2 += ivec1[i]*ivec2[i]*dvec[i] ;
}
if ( rc == 0 ) {
fprintf(msgFile, "\n vector not sorted correctly") ;
} else {
fprintf(msgFile, "\n vector sorted correctly") ;
}
fprintf(msgFile,
"\n sig1 = %12.4e, sig2 = %12.4e, error/sig1 = %12.4e\n",
sig1, sig2, (sig1 - sig2)/sig1) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n sorted ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n companion ivec2") ;
IVfp80(msgFile, n, ivec2, 80, &ierr) ;
fprintf(msgFile, "\n companion dvec") ;
DVfprintf(msgFile, n, dvec) ;
fprintf(msgFile, "\n ") ;
}
} else if ( strcmp(target, "IVZV") == 0 ) {
/*
--------
IVZVsort
--------
*/
double sig1, sig2 ;
double *dvec ;
int *ivec1 ;
ivec1 = IVinit2(n) ;
dvec = DVinit2(2*n) ;
Drand_setSeed(&drand, seed) ;
Drand_setUniform(&drand, 1, range+1) ;
Drand_fillIvector(&drand, n, ivec1) ;
Drand_setUniform(&drand, 0.0, 1.0) ;
Drand_fillDvector(&drand, 2*n, dvec) ;
for ( i = 0 ; i < n ; i++ ) {
ivec1[i] = ivec1[i] % mod ;
}
for ( i = 0, sig1 = 0.0 ; i < n ; i++ ) {
sig1 += ivec1[i]*dvec[2*i]*dvec[2*i+1] ;
}
if ( msglvl > 1 ) {
fprintf(msgFile, "\n IVZVsort, sig1 = %12.4e", sig1) ;
fprintf(msgFile, "\n initial ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n initial dvec") ;
DVfprintf(msgFile, 2*n, dvec) ;
fprintf(msgFile, "\n ") ;
fflush(msgFile) ;
}
if ( strcmp(sortType, "IU") == 0 ) {
MARKTIME(t1) ;
IVZVisortUp(n, ivec1, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IVZVisortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "ID") == 0 ) {
MARKTIME(t1) ;
IVZVisortDown(n, ivec1, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IVZVisortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
} if ( strcmp(sortType, "QU") == 0 ) {
MARKTIME(t1) ;
IVZVqsortUp(n, ivec1, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IVZVqsortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "QD") == 0 ) {
MARKTIME(t1) ;
IVZVqsortDown(n, ivec1, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IVZVqsortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
}
for ( i = 0, sig2 = 0.0 ; i < n ; i++ ) {
sig2 += ivec1[i]*dvec[2*i]*dvec[2*i+1] ;
}
if ( rc == 0 ) {
fprintf(msgFile, "\n vector not sorted correctly") ;
} else {
fprintf(msgFile, "\n vector sorted correctly") ;
}
fprintf(msgFile,
"\n sig1 = %12.4e, sig2 = %12.4e, error/sig1 = %12.4e\n",
sig1, sig2, (sig1 - sig2)/sig1) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n sorted ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n companion dvec") ;
DVfprintf(msgFile, 2*n, dvec) ;
fprintf(msgFile, "\n ") ;
}
} else if ( strcmp(target, "IV2ZV") == 0 ) {
/*
---------
IV2ZVsort
---------
*/
double sig1, sig2 ;
double *dvec ;
int *ivec1, *ivec2 ;
ivec1 = IVinit2(n) ;
ivec2 = IVinit2(n) ;
dvec = DVinit2(2*n) ;
Drand_setSeed(&drand, seed) ;
Drand_setUniform(&drand, 1, range+1) ;
Drand_fillIvector(&drand, n, ivec1) ;
Drand_fillIvector(&drand, n, ivec2) ;
Drand_setUniform(&drand, 0.0, 1.0) ;
Drand_fillDvector(&drand, 2*n, dvec) ;
for ( i = 0 ; i < n ; i++ ) {
ivec1[i] = ivec1[i] % mod ;
ivec2[i] = ivec2[i] % mod ;
}
for ( i = 0, sig1 = 0.0 ; i < n ; i++ ) {
sig1 += ivec1[i]*ivec2[i]*dvec[2*i]*dvec[2*i+1] ;
}
if ( msglvl > 1 ) {
fprintf(msgFile, "\n IV2ZVsort, sig1 = %12.4e", sig1) ;
fprintf(msgFile, "\n initial ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n initial ivec2") ;
IVfp80(msgFile, n, ivec2, 80, &ierr) ;
fprintf(msgFile, "\n initial dvec") ;
DVfprintf(msgFile, 2*n, dvec) ;
fprintf(msgFile, "\n ") ;
fflush(msgFile) ;
}
if ( strcmp(sortType, "IU") == 0 ) {
MARKTIME(t1) ;
IV2ZVisortUp(n, ivec1, ivec2, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IV2ZVisortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "ID") == 0 ) {
MARKTIME(t1) ;
IV2ZVisortDown(n, ivec1, ivec2, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IV2ZVisortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
} if ( strcmp(sortType, "QU") == 0 ) {
MARKTIME(t1) ;
IV2ZVqsortUp(n, ivec1, ivec2, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IV2ZVqsortUp\n",
t2 - t1, n) ;
rc = IVisascending(n, ivec1) ;
} else if ( strcmp(sortType, "QD") == 0 ) {
MARKTIME(t1) ;
IV2ZVqsortDown(n, ivec1, ivec2, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via IV2ZVqsortDown\n",
t2 - t1, n) ;
rc = IVisdescending(n, ivec1) ;
}
for ( i = 0, sig2 = 0.0 ; i < n ; i++ ) {
sig2 += ivec1[i]*ivec2[i]*dvec[2*i]*dvec[2*i+1] ;
}
if ( rc == 0 ) {
fprintf(msgFile, "\n vector not sorted correctly") ;
} else {
fprintf(msgFile, "\n vector sorted correctly") ;
}
fprintf(msgFile,
"\n sig1 = %12.4e, sig2 = %12.4e, error/sig1 = %12.4e\n",
sig1, sig2, (sig1 - sig2)/sig1) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n sorted ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n companion ivec2") ;
IVfp80(msgFile, n, ivec2, 80, &ierr) ;
fprintf(msgFile, "\n companion dvec") ;
DVfprintf(msgFile, 2*n, dvec) ;
fprintf(msgFile, "\n ") ;
}
} else if ( strcmp(target, "DV") == 0 ) {
/*
------
DVsort
------
*/
double *dvec ;
dvec = DVinit2(n) ;
Drand_setSeed(&drand, seed) ;
Drand_fillDvector(&drand, n, dvec) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n DVsort") ;
fprintf(msgFile, "\n initial vector") ;
DVfprintf(msgFile, n, dvec) ;
fprintf(msgFile, "\n ") ;
fflush(msgFile) ;
}
if ( strcmp(sortType, "IU") == 0 ) {
MARKTIME(t1) ;
DVisortUp(n, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via DVisortUp\n",
t2 - t1, n) ;
rc = DVisascending(n, dvec) ;
} else if ( strcmp(sortType, "ID") == 0 ) {
MARKTIME(t1) ;
DVisortDown(n, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n CPU %9.5f : sort %d via DVisortDown\n",
t2 - t1, n) ;
rc = DVisdescending(n, dvec) ;
} if ( strcmp(sortType, "QU") == 0 ) {
MARKTIME(t1) ;
DVqsortUp(n, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n CPU %9.5f : sort %d via DVqsortUp\n",
t2 - t1, n) ;
rc = DVisascending(n, dvec) ;
} else if ( strcmp(sortType, "QD") == 0 ) {
MARKTIME(t1) ;
DVqsortDown(n, dvec) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n CPU %9.5f : sort %d via DVqsortDown\n",
t2 - t1, n) ;
rc = DVisdescending(n, dvec) ;
}
if ( rc == 0 ) {
fprintf(msgFile, "\n vector not sorted correctly") ;
} else {
fprintf(msgFile, "\n vector sorted correctly") ;
}
if ( msglvl > 1 ) {
fprintf(msgFile, "\n sorted vector") ;
DVfprintf(msgFile, n, dvec) ;
fprintf(msgFile, "\n ") ;
}
} else if ( strcmp(target, "DVIV") == 0 ) {
/*
-------
DVIVsort
-------
*/
double sig1, sig2 ;
double *dvec ;
int *ivec1 ;
ivec1 = IVinit2(n) ;
dvec = DVinit2(n) ;
Drand_setSeed(&drand, seed) ;
Drand_setUniform(&drand, 1, range+1) ;
Drand_fillIvector(&drand, n, ivec1) ;
Drand_setUniform(&drand, 0, 1) ;
Drand_fillDvector(&drand, n, dvec) ;
for ( i = 0 ; i < n ; i++ ) {
ivec1[i] = ivec1[i] % mod ;
}
for ( i = 0, sig1 = 0.0 ; i < n ; i++ ) {
sig1 += ivec1[i]*dvec[i] ;
}
if ( msglvl > 1 ) {
fprintf(msgFile, "\n DVIVsort, sig1 = %12.4e", sig1) ;
fprintf(msgFile, "\n initial ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n initial dvec") ;
DVfprintf(msgFile, n, dvec) ;
fprintf(msgFile, "\n ") ;
fflush(msgFile) ;
}
if ( strcmp(sortType, "IU") == 0 ) {
MARKTIME(t1) ;
DVIVisortUp(n, dvec, ivec1) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d via DVIVisortUp\n",
t2 - t1, n) ;
rc = DVisascending(n, dvec) ;
} else if ( strcmp(sortType, "ID") == 0 ) {
MARKTIME(t1) ;
DVIVisortDown(n, dvec, ivec1) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via DVIVisortDown\n",
t2 - t1, n) ;
rc = DVisdescending(n, dvec) ;
} if ( strcmp(sortType, "QU") == 0 ) {
MARKTIME(t1) ;
DVIVqsortUp(n, dvec, ivec1) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via DVIVqsortUp\n",
t2 - t1, n) ;
rc = DVisascending(n, dvec) ;
} else if ( strcmp(sortType, "QD") == 0 ) {
MARKTIME(t1) ;
DVIVqsortDown(n, dvec, ivec1) ;
MARKTIME(t2) ;
fprintf(msgFile,
"\n CPU %9.5f : sort %d integers via DVIVqsortDown\n",
t2 - t1, n) ;
rc = DVisdescending(n, dvec) ;
}
for ( i = 0, sig2 = 0.0 ; i < n ; i++ ) {
sig2 += ivec1[i]*dvec[i] ;
}
if ( rc == 0 ) {
fprintf(msgFile, "\n vector not sorted correctly") ;
} else {
fprintf(msgFile, "\n vector sorted correctly") ;
}
fprintf(msgFile,
"\n sig1 = %12.4e, sig2 = %12.4e, error/sig1 = %12.4e\n",
sig1, sig2, (sig1 - sig2)/sig1) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n sorted dvec") ;
DVfprintf(msgFile, n, dvec) ;
fprintf(msgFile, "\n companion ivec1") ;
IVfp80(msgFile, n, ivec1, 80, &ierr) ;
fprintf(msgFile, "\n ") ;
}
} else if ( strcmp(target, "DV2") == 0 ) {
/*
-------
DV2sort
-------
*/
double sig1, sig2 ;
double *dvec1, *dvec2 ;
dvec1 = DVinit2(n) ;
dvec2 = DVinit2(n) ;
Drand_setSeed(&drand, seed) ;
Drand_setUniform(&drand, 0, 1) ;
Drand_fillDvector(&drand, n, dvec1) ;
Drand_fillDvector(&drand, n, dvec2) ;
for ( i = 0, sig1 = 0.0 ; i < n ; i++ ) {
sig1 += dvec1[i]*dvec2[i] ;
}
if ( msglvl > 1 ) {
fprintf(msgFile, "\n DV2sort, sig1 = %12.4e", sig1) ;
fprintf(msgFile, "\n initial dvec1") ;
DVfprintf(msgFile, n, dvec2) ;
fprintf(msgFile, "\n initial dvec2") ;
DVfprintf(msgFile, n, dvec2) ;
fprintf(msgFile, "\n ") ;
fflush(msgFile) ;
}
if ( strcmp(sortType, "IU") == 0 ) {
MARKTIME(t1) ;
DV2isortUp(n, dvec1, dvec2) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n CPU %9.5f : sort %d via DV2isortUp\n",
t2 - t1, n) ;
rc = DVisascending(n, dvec1) ;
} else if ( strcmp(sortType, "ID") == 0 ) {
MARKTIME(t1) ;
DV2isortDown(n, dvec1, dvec2) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n CPU %9.5f : sort %d via DV2isortDown\n",
t2 - t1, n) ;
rc = DVisdescending(n, dvec1) ;
} if ( strcmp(sortType, "QU") == 0 ) {
MARKTIME(t1) ;
DV2qsortUp(n, dvec1, dvec2) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n CPU %9.5f : sort %d via DV2qsortUp\n",
t2 - t1, n) ;
rc = DVisascending(n, dvec1) ;
} else if ( strcmp(sortType, "QD") == 0 ) {
MARKTIME(t1) ;
DV2qsortDown(n, dvec1, dvec2) ;
MARKTIME(t2) ;
fprintf(msgFile, "\n CPU %9.5f : sort %d via DV2qsortDown\n",
t2 - t1, n) ;
rc = DVisdescending(n, dvec1) ;
}
for ( i = 0, sig2 = 0.0 ; i < n ; i++ ) {
sig2 += dvec1[i]*dvec2[i] ;
}
if ( rc == 0 ) {
fprintf(msgFile, "\n vector not sorted correctly") ;
} else {
fprintf(msgFile, "\n vector sorted correctly") ;
}
fprintf(msgFile,
"\n sig1 = %12.4e, sig2 = %12.4e, error/sig1 = %12.4e\n",
sig1, sig2, (sig1 - sig2)/sig1) ;
if ( msglvl > 1 ) {
fprintf(msgFile, "\n sorted dvec1") ;
DVfprintf(msgFile, n, dvec1) ;
fprintf(msgFile, "\n companion ivec2") ;
DVfprintf(msgFile, n, dvec2) ;
fprintf(msgFile, "\n ") ;
}
}
exit(0) ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1