1*54138f6bSKris Buschelman /* $Id: baij.h,v 1.31 2001/07/12 00:37:47 buschelm Exp buschelm $ */ 22593348eSBarry Smith 370f55243SBarry Smith #include "src/mat/matimpl.h" 42593348eSBarry Smith 535aab85fSBarry Smith #if !defined(__BAIJ_H) 635aab85fSBarry Smith #define __BAIJ_H 72593348eSBarry Smith 82593348eSBarry Smith /* 935aab85fSBarry Smith MATSEQBAIJ format - Block compressed row storage. The i[] and j[] 10e24b481bSBarry Smith arrays start at 0. 112593348eSBarry Smith */ 122593348eSBarry Smith 132593348eSBarry Smith typedef struct { 14c4992f7dSBarry Smith PetscTruth sorted; /* if true, rows are sorted by increasing columns */ 15c4992f7dSBarry Smith PetscTruth roworiented; /* if true, row-oriented input, default */ 163369ce9aSBarry Smith int nonew; /* 1 don't add new nonzeros, -1 generate error on new */ 17c4992f7dSBarry Smith PetscTruth singlemalloc; /* if true a, i, and j have been obtained with 182593348eSBarry Smith one big malloc */ 192a90d852SSatish Balay int bs,bs2; /* block size, square of block size */ 2035aab85fSBarry Smith int mbs,nbs; /* rows/bs, columns/bs */ 212593348eSBarry Smith int nz,maxnz; /* nonzeros, allocated nonzeros */ 222593348eSBarry Smith int *diag; /* pointers to diagonal elements */ 232593348eSBarry Smith int *i; /* pointer to beginning of each row */ 242593348eSBarry Smith int *imax; /* maximum space allocated for each row */ 252593348eSBarry Smith int *ilen; /* actual length of each row */ 262593348eSBarry Smith int *j; /* column values: j + i[k] - 1 is start of row k */ 273f1db9ecSBarry Smith MatScalar *a; /* nonzero elements */ 28e51c0b9cSSatish Balay IS row,col,icol; /* index sets, used for reorderings */ 292593348eSBarry Smith Scalar *solve_work; /* work space used in MatSolve */ 302593348eSBarry Smith void *spptr; /* pointer for special library like SuperLU */ 312593348eSBarry Smith int reallocs; /* number of mallocs done during MatSetValues() 3247b4a8eaSLois Curfman McInnes as more values are set then were preallocated */ 334eeb42bcSBarry Smith Scalar *mult_work; /* work array for matrix vector product*/ 347fc3c18eSBarry Smith Scalar *saved_values; 35c4992f7dSBarry Smith 36c4992f7dSBarry Smith PetscTruth keepzeroedrows; /* if true, MatZeroRows() will not change nonzero structure */ 3769a4a418SKris Buschelman PetscTruth single_precision_solves; /* if true, use single precision for triangular solves */ 38a377f70aSBarry Smith 39a377f70aSBarry Smith #if defined(PETSC_USE_MAT_SINGLE) 40e7592fafSBarry Smith int setvalueslen; 41a377f70aSBarry Smith MatScalar *setvaluescopy; /* area double precision values in MatSetValuesXXX() are copied 42a377f70aSBarry Smith before calling MatSetValuesXXX_SeqBAIJ_MatScalar() */ 43a377f70aSBarry Smith #endif 4435aab85fSBarry Smith } Mat_SeqBAIJ; 452593348eSBarry Smith 46ca44d042SBarry Smith EXTERN int MatILUFactorSymbolic_SeqBAIJ(Mat,IS,IS,MatILUInfo*,Mat *); 47ca44d042SBarry Smith EXTERN int MatDuplicate_SeqBAIJ(Mat,MatDuplicateOption,Mat*); 48ca44d042SBarry Smith EXTERN int MatMarkDiagonal_SeqBAIJ(Mat); 49be3590efSBarry Smith 50*54138f6bSKris Buschelman EXTERN int MatLUFactorSymbolic_SeqBAIJ(Mat,IS,IS,MatLUInfo*,Mat*); 51*54138f6bSKris Buschelman EXTERN int MatLUFactor_SeqBAIJ(Mat,IS,IS,MatLUInfo*); 52*54138f6bSKris Buschelman EXTERN int MatIncreaseOverlap_SeqBAIJ(Mat,int,IS*,int); 53*54138f6bSKris Buschelman EXTERN int MatGetSubMatrix_SeqBAIJ(Mat,IS,IS,int,MatReuse,Mat*); 54*54138f6bSKris Buschelman EXTERN int MatGetSubMatrices_SeqBAIJ(Mat,int,IS*,IS*,MatReuse,Mat**); 55*54138f6bSKris Buschelman EXTERN int MatMultTranspose_SeqBAIJ(Mat,Vec,Vec); 56*54138f6bSKris Buschelman EXTERN int MatMultTransposeAdd_SeqBAIJ(Mat,Vec,Vec,Vec); 57*54138f6bSKris Buschelman EXTERN int MatScale_SeqBAIJ(Scalar*,Mat); 58*54138f6bSKris Buschelman EXTERN int MatNorm_SeqBAIJ(Mat,NormType,PetscReal *); 59*54138f6bSKris Buschelman EXTERN int MatEqual_SeqBAIJ(Mat,Mat,PetscTruth*); 60*54138f6bSKris Buschelman EXTERN int MatGetDiagonal_SeqBAIJ(Mat,Vec); 61*54138f6bSKris Buschelman EXTERN int MatDiagonalScale_SeqBAIJ(Mat,Vec,Vec); 62*54138f6bSKris Buschelman EXTERN int MatGetInfo_SeqBAIJ(Mat,MatInfoType,MatInfo *); 63*54138f6bSKris Buschelman EXTERN int MatZeroEntries_SeqBAIJ(Mat); 64*54138f6bSKris Buschelman 65*54138f6bSKris Buschelman EXTERN int MatSeqBAIJ_UpdateFactorNumeric_NaturalOrdering(Mat); 66*54138f6bSKris Buschelman EXTERN int MatSeqBAIJ_UpdateSolvers(Mat); 67*54138f6bSKris Buschelman 68*54138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_Update(Mat,Vec,Vec); 69*54138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_1(Mat,Vec,Vec); 70e37c484bSBarry Smith EXTERN int MatSolve_SeqBAIJ_1_NaturalOrdering(Mat,Vec,Vec); 71*54138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_2(Mat,Vec,Vec); 72ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_2_NaturalOrdering(Mat,Vec,Vec); 73*54138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_3(Mat,Vec,Vec); 74ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_3_NaturalOrdering(Mat,Vec,Vec); 75*54138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_4(Mat,Vec,Vec); 76ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_4_NaturalOrdering(Mat,Vec,Vec); 77*54138f6bSKris Buschelman #if defined(PETSC_HAVE_SSE) 78*54138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_4_SSE_Demotion(Mat,Vec,Vec); 794110d75bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_4_NaturalOrdering_SSE_Demotion(Mat,Vec,Vec); 80*54138f6bSKris Buschelman #else 81*54138f6bSKris Buschelman #define MatSolve_SeqBAIJ_4_SSE_Demotion(a,b,c) MatSolve_SeqBAIJ_4(a,b,c) 82*54138f6bSKris Buschelman #define MatSolve_SeqBAIJ_4_NaturalOrdering_SSE_Demotion(a,b,c) MatSolve_SeqBAIJ_4_NaturalOrdering(a,b,c) 834110d75bSKris Buschelman #endif 84*54138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_5(Mat,Vec,Vec); 85ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_5_NaturalOrdering(Mat,Vec,Vec); 86*54138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_6(Mat,Vec,Vec); 87ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_6_NaturalOrdering(Mat,Vec,Vec); 88*54138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_7(Mat,Vec,Vec); 89ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_7_NaturalOrdering(Mat,Vec,Vec); 90*54138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_N(Mat,Vec,Vec); 91*54138f6bSKris Buschelman 92*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_Update(Mat,Vec,Vec); 93*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_1(Mat,Vec,Vec); 94*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_1_NaturalOrdering(Mat,Vec,Vec); 95*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_2(Mat,Vec,Vec); 96*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_2_NaturalOrdering(Mat,Vec,Vec); 97*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_3(Mat,Vec,Vec); 98*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_3_NaturalOrdering(Mat,Vec,Vec); 99*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_4(Mat,Vec,Vec); 100*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_4_NaturalOrdering(Mat,Vec,Vec); 101*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_5(Mat,Vec,Vec); 102*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_5_NaturalOrdering(Mat,Vec,Vec); 103*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_6(Mat,Vec,Vec); 104*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_6_NaturalOrdering(Mat,Vec,Vec); 105*54138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_7(Mat,Vec,Vec); 106ca44d042SBarry Smith EXTERN int MatSolveTranspose_SeqBAIJ_7_NaturalOrdering(Mat,Vec,Vec); 107*54138f6bSKris Buschelman 108*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_1(Mat,Mat*); 109*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_2(Mat,Mat*); 110*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_2_NaturalOrdering(Mat,Mat*); 111*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_3(Mat,Mat*); 112*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_3_NaturalOrdering(Mat,Mat*); 113*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_4(Mat,Mat*); 114*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_4_NaturalOrdering(Mat,Mat*); 115*54138f6bSKris Buschelman #if defined(PETSC_HAVE_SSE) 116*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_4_NaturalOrdering_SSE(Mat,Mat*); 117*54138f6bSKris Buschelman #else 118*54138f6bSKris Buschelman #define MatLUFactorNumeric_SeqBAIJ_4_NaturalOrdering_SSE(a,b) MatLUFactorNumeric_SeqBAIJ_4_NaturalOrdering(a,b) 119*54138f6bSKris Buschelman #endif 120*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_5(Mat,Mat*); 121*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_5_NaturalOrdering(Mat,Mat*); 122*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_6(Mat,Mat*); 123*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_6_NaturalOrdering(Mat,Mat*); 124*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_7(Mat,Mat*); 125*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_7_NaturalOrdering(Mat,Mat*); 126*54138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_N(Mat,Mat*); 127*54138f6bSKris Buschelman 128*54138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_1(Mat,Vec,Vec); 129*54138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_2(Mat,Vec,Vec); 130*54138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_3(Mat,Vec,Vec); 131*54138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_4(Mat,Vec,Vec); 132*54138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_5(Mat,Vec,Vec); 133*54138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_6(Mat,Vec,Vec); 134*54138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_7(Mat,Vec,Vec); 135*54138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_N(Mat,Vec,Vec); 136*54138f6bSKris Buschelman 137*54138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_1(Mat,Vec,Vec,Vec); 138*54138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_2(Mat,Vec,Vec,Vec); 139*54138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_3(Mat,Vec,Vec,Vec); 140*54138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_4(Mat,Vec,Vec,Vec); 141*54138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_5(Mat,Vec,Vec,Vec); 142*54138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_6(Mat,Vec,Vec,Vec); 143*54138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_7(Mat,Vec,Vec,Vec); 144*54138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_N(Mat,Vec,Vec,Vec); 1452593348eSBarry Smith 1462593348eSBarry Smith #endif 147