/*+ BSprivate.h - Include file for the sparse solver package.
This file is for use only inside the BlockSolve package.
+*/
#ifndef __BSprivateh
#define __BSprivateh
/* include the "system" dependent routines */
#include "BSdepend.h"
/* include the "public" include file as well */
#include "BSsparse.h"
/* include the special message passing stuff that I wrote */
#include "BMmsg.h"
/* include some logging stuff that I wrote */
#include "BSlog.h"
/* ****************************************************************** */
/* Definitions of misc. constants */
/* ****************************************************************** */
#define MAT_NAME_MSG 10000
#define RHS_NAME_MSG 10001
#define OFFSETD_MSG 10002
#define OFFSETU_MSG 10003
#define BB_SQ_MSG 10004
#define BB_SA_MSG 10005
#define COLOR_MSG 10006
#define SETUP_FORWARD_MSG 10007
#define SETUP_ORIGINAL_MSG 10008
#define SETUP_FACTOR_MSG 10009
#define DEGREE_MSG 10010
/* these next three messages need a lot of room */
/* this next message number is actually a range of messages */
/* needed by the BMcomp_msg routines. The total number */
/* of messages used is MAX_NUM_MSGS*nprocs */
/* MAX_NUM_MSGS should be greater than the number of messages */
/* that a processor sends in one compiled message execution */
/* For example, one compiled message execution is typically */
/* an entire parallel forward matrix solution. So the number */
/* of messages is less than or equal to the number of processors */
/* that a single processor is connected to in the graph of the */
/* matrix times the number of colors used to color the graph */
/* we think the current setting of 10,000 is ample, but feel free */
/* to change it (recompile EVERYTHING if you do) */
#define COMP_MSG_BASE 10020
#define MAX_NUM_MSGS 10000
/* used in coloring */
#define NO_COLOR -2
/* used in cg and symmlq */
#define CG_MATVECR 1
#define CG_MATVECZ 2
#define CG_MSOLVE 3
#define CG_ERROR -1
#define SYMM_MATVECXR 1
#define SYMM_MATVECVZ 2
#define SYMM_MSOLVE1 3
#define SYMM_MSOLVE2 4
#define SYMM_MSOLVEB 5
#define SYMM_DONE 6
#define SYMM_ERROR -1
#define TRUE 1
#define FALSE 0
/* ****************************************************************** */
/* End of section */
/* ****************************************************************** */
/* ****************************************************************** */
/* Definitions of data structures */
/* ****************************************************************** */
/* used to store new global address for each row */
typedef struct __BSkey_arr {
int length;
int **array;
} BSkey_arr;
/* Bulletin Board */
typedef struct __BSbb {
int length; /* the number of elements */
BSmapping *map; /* the mapping to use */
int *info; /* the information to store in the BB */
} BSbb;
/* Bulletin Board for floating point */
typedef struct __BSbb_d {
int length; /* the number of elements */
BSmapping *map; /* the mapping to use */
FLOAT *info; /* the information to store in the BB */
} BSbb_d;
/* ****************************************************************** */
/* End of section */
/* ****************************************************************** */
/* ****************************************************************** */
/* Definitions of misc macros */
/* ****************************************************************** */
#define MY_SETERR(a) {SETERR(a); return;}
#define MY_SETERRN(a) {SETERR(a); return(0);}
#define MY_SETERRC(a,s) {SETERRC(a,s); return;}
#define MY_SETERRCN(a,s) {SETERRC(a,s); return(0);}
#define MY_MALLOC(a,b,c,d) { \
if (c == 0) { \
a = NULL; \
} else { \
if ((a = b MALLOC(c)) == NULL) {MY_SETERRC(MEM_ERROR,"Out of Memory\n");} \
} \
}
#define MY_MALLOCN(a,b,c,d) { \
if (c == 0) { \
a = NULL; \
} else { \
if ((a = b MALLOC(c)) == NULL) {MY_SETERRCN(MEM_ERROR,"Out of Memory\n");} \
} \
}
#define MY_FREE(a) \
{ \
if (a != NULL) FREE(a); \
}
#define MY_FREEN(a) \
{ \
if (a != NULL) FREE(a); \
}
/* ****************************************************************** */
/* End of section */
/* ****************************************************************** */
/* ****************************************************************** */
/* Declarations of my functions */
/* ****************************************************************** */
/* BMmsg functions */
extern BMcomp_msg *BMcomp_init(int);
extern void BMfree_comp_msg(BMcomp_msg *);
extern BMphase *BMget_phase(BMcomp_msg *,int);
extern void BMadd_msg(BMcomp_msg *,BMmsg *,BSprocinfo *);
extern BMmsg *BMcreate_msg(int,int,MPI_Datatype,int);
extern int BMget_msg_size(BMmsg *);
extern void BMset_msg_size(BMmsg *,int);
extern void BMinit_user(BMuser_data *);
extern void BMfree_user(BMuser_data *);
extern void BMfree_user_data(BMmsg *);
extern void BMfree_setup_data(BMmsg *);
extern void BMset_user(BMuser_data *,int *,int,void (*)(int *));
extern void BMset_user_data(BMmsg *,int *,int,void (*)(int *));
extern void BMset_setup_data(BMmsg *,int *,int,void (*)(int *));
extern int *BMget_user(BMmsg *,int *);
extern int *BMget_setup(BMmsg *,int *);
extern void BMset_msg_ptr(BMmsg *,void *);
extern void *BMget_msg_ptr(BMmsg *);
extern BMmsg *BMnext_msg(BMphase *,BMmsg *);
extern void BMalloc_msg(BMcomp_msg *);
extern int BMfix_send(int,int,MPI_Datatype,BMcomp_msg *,BMphase *,void(*)(int *),
BSprocinfo *);
extern void BMinit_comp_msg(BMcomp_msg *,BSprocinfo *);
extern void BMfinish_comp_msg(BMcomp_msg *,BSprocinfo *);
extern void BMsendf_msg(BMmsg *,BSprocinfo *);
extern void BMcheck_on_async_block(BMphase *);
extern void BMfinish_on_async_block(BMphase *);
extern void BMsend_block_msg(BMphase *,BMmsg *,BSprocinfo *);
extern BMmsg *BMrecv_block_msg(BMphase *,BSprocinfo *);
extern BMmsg *BMrecv_msg(BMphase *);
extern void BMfree_block_msg(BMphase *);
extern void BMfree_msg(BMmsg *);
/* other BS private functions */
extern BSnumbering *BSfnd_inode(BSspmat *,int,BSprocinfo *);
extern BSnumbering *BSalloc_numbering(int);
extern void BSfree_numbering(BSnumbering *);
extern BSpermutation *BSnum2perm(BSnumbering *,BSdistribution *);
extern BSpermutation *BSalloc_permutation(int);
extern void BSreset_permutation(int,BSpermutation *);
extern void BSfree_permutation(BSpermutation *);
extern BSdistribution *BSalloc_distribution(int);
extern void BSfree_distribution(BSdistribution *);
extern BSdistribution *BSnum2distr(BSnumbering *);
extern BSnumbering *BSfnd_clique(BSspmat *,int,int *,BSprocinfo *);
extern BSkey_arr *BSalloc_key_arr(int);
extern void BSfree_key_arr(BSkey_arr *key_arr);
extern void BSperm_ivec(int *,int *,BSpermutation *);
extern void BSiperm_ivec(int *,int *,BSpermutation *);
extern void BSperm_dvec(FLOAT *,FLOAT *,BSpermutation *);
extern void BSiperm_dvec(FLOAT *,FLOAT *,BSpermutation *);
extern void BSperm2iperm(BSpermutation *,BSpermutation *);
extern BSspmat *BSdo_contract(BSspmat *,BSnumbering *,BSpermutation *,
BSprocinfo *,int);
extern BSbb *BSinit_bb(int,BSmapping *);
extern void BSfree_bb(BSbb *);
extern void BSpost_bb(BSbb *,int,int *,int *);
extern void BSpost_noaddr_bb(BSbb *,int,int *);
extern void BSquery_match_bb(BSbb *,int,int *,int *,BSprocinfo *);
extern void BSquery_nomatch_bb(BSbb *,int,int *,int *,BSprocinfo *);
extern BSbb_d *BSinit_bb_d(int,BSmapping *);
extern void BSfree_bb_d(BSbb_d *);
extern void BSpost_bb_d(BSbb_d *,int,int *,FLOAT *);
extern void BSpost_noaddr_bb_d(BSbb_d *,int,FLOAT *);
extern void BSquery_match_bb_d(BSbb_d *,int,int *,FLOAT *,BSprocinfo *);
extern void BSquery_nomatch_bb_d(BSbb_d *,int,int *,FLOAT *,BSprocinfo *);
extern void BSx_color(int *,BSspmat *,BSprocinfo *,int *,int);
extern void BSido_color(int *,int,BSspmat *,int *,int **,int *,int *,int *,
int *,int *,int *,BSprocinfo *);
extern void BSsdo_color(int *,int,BSspmat *,int *,int **,int *,int *,
int *,int *,int *,int *,BSprocinfo *);
extern void BSpack_n_send(BSmsg_list *,int,int *,BSspmat *,BSprocinfo *,
int *,int *,int *,int *,int,int);
extern int BSmy_rand(int);
extern BSnumbering *BSoff_gnum(BSnumbering *,BSnumbering *,BSdistribution *);
extern BSdistribution *BSfold_distr(BSdistribution *,BSdistribution *,BSnumbering *);
extern BScl_2_inode *BStrans_perm_cl(BSspmat *,BSnumbering *,BSprocinfo *);
extern BSinode_list *BStrans_perm_in(BSspmat *,BSnumbering *,BSnumbering *,
BSdistribution *,BSprocinfo *);
extern void BSclique_2_inode(BSspmat *,BScl_2_inode *,BSinode_list *,
BSprocinfo *);
extern void BSrem_diag(BSspmat *);
extern void BSins_diag(BSspmat *);
extern BSkey_arr *BSperm_rows(BSspmat *,BSnumbering *,BSpermutation *,
BSdistribution *,BSprocinfo *,int,int *);
extern int BSrows_2_inode(BSspmat *,BSnumbering *,BSpermutation *,
BSpermutation *, BSsprow **,BSinode_list *,BScl_2_inode *,
BSkey_arr *,BSnumbering *,BSdistribution *,BSprocinfo *);
extern void BSnz_2_inode(BSspmat *,BSsprow **,BSinode_list *,
BScl_2_inode *,BSprocinfo *);
extern void BSsort_rows(BSspmat *,BSpermutation *,BSdistribution *,int);
extern BSpermutation *BSglobal_perm(BSnumbering *);
extern BSsprow **BSrow_perm(BSspmat *,BSpermutation *);
extern void BSfree_cl_2_inode(BScl_2_inode *,int);
extern void BSfree_inode_list(BSinode_list *);
extern BSnumbering *BSlow2high(BSspmat *,BSnumbering *,BSdistribution *,
BSprocinfo *);
extern BSnumbering *BSbase(BSdistribution *,BSprocinfo *);
extern BSnumbering *BScolor_2_clique(BSnumbering *,BScl_2_inode *);
extern void BSfree_reperm(BSreperm *);
extern void BSorig_inode(BSpar_mat *,BSprocinfo *);
FLOAT BSpar_ip(int,FLOAT *,FLOAT *,BSprocinfo *);
extern void BSpar_bip(int,FLOAT *,FLOAT *,int,FLOAT *,BSprocinfo *);
extern int BSpar_symmlq(int,FLOAT *,FLOAT *,FLOAT *,FLOAT *,FLOAT *,FLOAT *,
FLOAT *,FLOAT *,FLOAT *,FLOAT *,FLOAT *,FLOAT *,FLOAT *,FLOAT *,
FLOAT *,FLOAT *,FLOAT *,FLOAT *,FLOAT *,FLOAT *,int *,int,int *,
int *,BSprocinfo *);
extern int BSpar_bcg(int,FLOAT *,FLOAT *,FLOAT *,FLOAT *,FLOAT *,FLOAT *,
FLOAT *,int *,int *,int,BSprocinfo *);
extern void BSrow_err_check(BSspmat *,BSprocinfo *);
extern int BScount_nz(BSpar_mat *,BSprocinfo *);
extern int BSnonlocalnz(BSspmat *,int *,BSprocinfo *);
extern void BScopy_cliques(BSpar_mat *,BSpar_mat *);
extern void BSheap_sort0(int,int *);
extern void BSheap_sort1(int,int *,int *);
extern void BSheap_sort2(int,int *,int *,int *);
extern void BSheap_sorthl1(int,int *,int *);
extern void BSheap_sort1d(int,int *,FLOAT *);
extern void BSiheap_sort1(int,int *,int *);
extern void BSiheap_sort2(int,int *,int *,int *);
extern int BSfactor1(BSpar_mat *,BScomm *,BSprocinfo *);
extern int BSfactorn(BSpar_mat *,BScomm *,BSprocinfo *);
extern int BSilu_factor1(BSpar_mat *,BScomm *,BSprocinfo *);
extern int BSilu_factorn(BSpar_mat *,BScomm *,BSprocinfo *);
/* ****************************************************************** */
/* End of section */
/* ****************************************************************** */
#endif
syntax highlighted by Code2HTML, v. 0.9.1