/* misc.h */
#include "../cfiles.h"
#include "../DenseMtx.h"
#include "../InpMtx.h"
#include "../ETree.h"
#include "../Coords.h"
#include "../Graph.h"
#include "../MSMD.h"
#include "../GPart.h"
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods in ND.c --------------------------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------------------------
purpose -- main procedure. if the input region is 1 x 1 x 1,
the node is put into the permutation vector.
otherwise the region is split into three pieces,
two subregions and a separator, and recursive
calls are made to order the subregions
input --
n1 -- number of points in the first direction
n2 -- number of points in the second direction
n3 -- number of points in the third direction
new_to_old -- pointer to the permutation vector
west -- west coordinate
east -- east coordinate
south -- south coordinate
north -- north coordinate
bottom -- bottom coordinate
top -- top coordinate
created -- 95nov15, cca
------------------------------------------------------------
*/
void
mkNDperm (
int n1,
int n2,
int n3,
int new_to_old[],
int west,
int east,
int south,
int north,
int bottom,
int top
) ;
/*
-----------------------------------------------------
purpose -- to print a vector on a 2-d grid
input --
n1 -- number of points in the first direction
n2 -- number of points in the second direction
ivec -- integer vector to be printed in %4d format
fp -- file pointer
created -- 95nov16, cca
-----------------------------------------------------
*/
void
fp2DGrid (
int n1,
int n2,
int ivec[],
FILE *fp
) ;
/*
-----------------------------------------------------
purpose -- to print a vector on a 3-d grid
input --
n1 -- number of points in the first direction
n2 -- number of points in the second direction
n3 -- number of points in the third direction
ivec -- integer vector to be printed in %4d format
fp -- file pointer
created -- 95nov16, cca
-----------------------------------------------------
*/
void
fp3DGrid (
int n1,
int n2,
int n3,
int ivec[],
FILE *fp
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods in localND.c ---------------------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------------------------
compute an old-to-new ordering for
local nested dissection in two dimensions
n1 -- number of grid points in first direction
n2 -- number of grid points in second direction
p1 -- number of domains in first direction
p2 -- number of domains in second direction
dsizes1 -- domain sizes in first direction, size p1
if NULL, then we construct our own
dsizes2 -- domain sizes in second direction, size p2
if NULL, then we construct our own
oldToNew -- old-to-new permutation vector
note : the following must hold
n1 > 0, n2 >0, n1 >= 2*p1 - 1, n2 >= 2*p2 - 1, p2 > 1
sum(dsizes1) = n1 - p1 + 1 and sum(dsizes2) = n2 - p2 + 1
created -- 95nov16, cca
------------------------------------------------------------
*/
void
localND2D (
int n1,
int n2,
int p1,
int p2,
int dsizes1[],
int dsizes2[],
int oldToNew[]
) ;
/*
------------------------------------------------------------
compute an old-to-new ordering for
local nested dissection in three dimensions
n1 -- number of grid points in first direction
n2 -- number of grid points in second direction
n3 -- number of grid points in third direction
p1 -- number of domains in first direction
p2 -- number of domains in second direction
p3 -- number of domains in third direction
dsizes1 -- domain sizes in first direction, size p1
if NULL, then we construct our own
dsizes2 -- domain sizes in second direction, size p2
if NULL, then we construct our own
dsizes3 -- domain sizes in third direction, size p3
if NULL, then we construct our own
oldToNew -- old-to-new permutation vector
note : the following must hold
n1 > 0, n2 >0, n3 > 0,
n1 >= 2*p1 - 1, n2 >= 2*p2 - 1, n3 >= 2*p3 - 1, p3 > 1
sum(dsizes1) = n1 - p1 + 1, sum(dsizes2) = n2 - p2 + 1
sum(dsizes3) = n3 - p3 + 1
created -- 95nov16, cca
------------------------------------------------------------
*/
void
localND3D (
int n1,
int n2,
int n3,
int p1,
int p2,
int p3,
int dsizes1[],
int dsizes2[],
int dsizes3[],
int oldToNew[]
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods in orderViaBestOfNDandMS.c -------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------------------------------
purpose -- return an ETree object for the better of a
nested dissection and multisection orderings
graph -- graph to order
maxdomainsize -- used to control the incomplete nested dissection
process. any subgraph whose weight is less than maxdomainsize
is not split further.
maxzeros -- maximum number of zero entries allowed in a front
maxsize -- maximum number of internal columns in a front
seed -- random number seed
msglvl -- message level
1 -- timings and statistics
2 -- more timings and statistics
3 -- lots of output
msgFile -- message file
created -- 98aug26, cca
------------------------------------------------------------------
*/
ETree *
orderViaBestOfNDandMS (
Graph *graph,
int maxdomainsize,
int maxzeros,
int maxsize,
int seed,
int msglvl,
FILE *msgFile
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods in orderViaND.c ------------------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------------------------------
purpose -- return an ETree object for a nested dissection ordering
graph -- graph to order
maxdomainsize -- used to control the incomplete nested dissection
process. any subgraph whose weight is less than maxdomainsize
is not split further.
seed -- random number seed
msglvl -- message level, 0 --> no output, 1 --> timings
msgFile -- message file
created -- 97nov06, cca
------------------------------------------------------------------
*/
ETree *
orderViaND (
Graph *graph,
int maxdomainsize,
int seed,
int msglvl,
FILE *msgFile
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods in orderViaMS.c ------------------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------------------------------
purpose -- return an ETree object for a multisection ordering
graph -- graph to order
maxdomainsize -- used to control the incomplete nested dissection
process. any subgraph whose weight is less than maxdomainsize
is not split further.
seed -- random number seed
msglvl -- message level, 0 --> no output, 1 --> timings
msgFile -- message file
created -- 97nov06, cca
------------------------------------------------------------------
*/
ETree *
orderViaMS (
Graph *graph,
int maxdomainsize,
int seed,
int msglvl,
FILE *msgFile
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods in orderViaMMD.c -----------------------------------------
------------------------------------------------------------------------
*/
/*
--------------------------------------------------------
purpose -- return an ETree object for
a multiple minimum degree ordering
graph -- graph to order
seed -- random number seed
msglvl -- message level, 0 --> no output, 1 --> timings
msgFile -- message file
created -- 97nov08, cca
--------------------------------------------------------
*/
ETree *
orderViaMMD (
Graph *graph,
int seed,
int msglvl,
FILE *msgFile
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods in drawGraphEPS.c ----------------------------------------
------------------------------------------------------------------------
*/
/*
-------------------------------------------------
draw a graph to an EPS file
(1) read a Graph object
(2) read a Coords object
(3) read an IV object that contains a tag vector.
if (v,w) is an edge in the graph
and tags[v] == tags[w] then
draw edge (v,w)
(4) bbox[4] is the bounding box for the plot.
bbox = { xsw, ysw, xne, yne }
try bbox = { 0, 0, 500, 500 }
because coordinates are measured in points,
72 points per inch.
(5) rect[4] contains the frame for the plot.
to put a 20 point margin around the plot,
rect[0] = bbox[0] + 20
rect[1] = bbox[1] + 20
rect[2] = bbox[2] - 20
rect[3] = bbox[3] - 20
created -- 98apr11, cca
-------------------------------------------------
*/
void
drawGraphEPS (
Graph *graph,
Coords *coords,
IV *tagsIV,
double bbox[],
double rect[],
double linewidth1,
double linewidth2,
double radius,
char *epsFileName,
int msglvl,
FILE *msgFile
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods in mkNDlinsys.c ------------------------------------------
------------------------------------------------------------------------
*/
/*
---------------------------------------------------------------------
purpose -- to create a linear system A*X = B
for a nested dissection ordering of a 2-d or 3-d regular grid
input --
n1 -- # of nodes in first direction
n2 -- # of nodes in second direction
n3 -- # of nodes in third direction
maxzeros -- relaxation factor for fronts,
maximum number of zero entries in a front
maxsize -- split parameter for large fronts,
maximum number of internal vertices in a front
type -- type of entries
SPOOLES_REAL or SPOOLES_COMPLEX
symmetryflag -- symmetry of the matrix
SPOOLES_SYMMETRIC, SPOOLES_HERMITIAN or SPOOLES_NONSYMMETRIC
nrhs -- number of right hand sides
seed -- seed for random number generator
msglvl -- message level
msgFile -- message file
output --
pfrontETree -- to be filled with address of front tree
psymbfacIVL -- to be filled with address of symbolic factorization
pmtxA -- to be filled with address of matrix object A
pmtxX -- to be filled with address of matrix object X
pmtxB -- to be filled with address of matrix object B
created -- 98may16, cca
---------------------------------------------------------------------
*/
void
mkNDlinsys (
int n1,
int n2,
int n3,
int maxzeros,
int maxsize,
int type,
int symmetryflag,
int nrhs,
int seed,
int msglvl,
FILE *msgFile,
ETree **pfrontETree,
IVL **psymbfacIVL,
InpMtx **pmtxA,
DenseMtx **pmtxX,
DenseMtx **pmtxB
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods in mkNDlinsysQR.c ----------------------------------------
------------------------------------------------------------------------
*/
/*
---------------------------------------------------------------------
purpose -- to create an overdetermined linear system A*X = B
for a nested dissection ordering of a 2-d or 3-d regular grid
input --
n1 -- # of nodes in first direction
n2 -- # of nodes in second direction
n3 -- # of nodes in third direction
type -- type of entries
SPOOLES_REAL or SPOOLES_COMPLEX
nrhs -- number of right hand sides
seed -- seed for random number generator
msglvl -- message level
msgFile -- message file
output --
pfrontETree -- to be filled with address of front tree
psymbfacIVL -- to be filled with address of symbolic factorization
pmtxA -- to be filled with address of matrix object A
pmtxX -- to be filled with address of matrix object X
pmtxB -- to be filled with address of matrix object B
created -- 98may29, cca
---------------------------------------------------------------------
*/
void
mkNDlinsysQR (
int n1,
int n2,
int n3,
int type,
int nrhs,
int seed,
int msglvl,
FILE *msgFile,
ETree **pfrontETree,
IVL **psymbfacIVL,
InpMtx **pmtxA,
DenseMtx **pmtxX,
DenseMtx **pmtxB
) ;
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1