1*ea709b57SSatish Balay /* $Id: baij.h,v 1.34 2001/08/06 21:15:36 bsmith Exp balay $ */ 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 */ 29*ea709b57SSatish Balay PetscScalar *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 */ 33*ea709b57SSatish Balay PetscScalar *mult_work; /* work array for matrix vector product*/ 34*ea709b57SSatish Balay PetscScalar *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 5054138f6bSKris Buschelman EXTERN int MatLUFactorSymbolic_SeqBAIJ(Mat,IS,IS,MatLUInfo*,Mat*); 5154138f6bSKris Buschelman EXTERN int MatLUFactor_SeqBAIJ(Mat,IS,IS,MatLUInfo*); 5254138f6bSKris Buschelman EXTERN int MatIncreaseOverlap_SeqBAIJ(Mat,int,IS*,int); 5354138f6bSKris Buschelman EXTERN int MatGetSubMatrix_SeqBAIJ(Mat,IS,IS,int,MatReuse,Mat*); 5454138f6bSKris Buschelman EXTERN int MatGetSubMatrices_SeqBAIJ(Mat,int,IS*,IS*,MatReuse,Mat**); 5554138f6bSKris Buschelman EXTERN int MatMultTranspose_SeqBAIJ(Mat,Vec,Vec); 5654138f6bSKris Buschelman EXTERN int MatMultTransposeAdd_SeqBAIJ(Mat,Vec,Vec,Vec); 5787828ca2SBarry Smith EXTERN int MatScale_SeqBAIJ(PetscScalar*,Mat); 5854138f6bSKris Buschelman EXTERN int MatNorm_SeqBAIJ(Mat,NormType,PetscReal *); 5954138f6bSKris Buschelman EXTERN int MatEqual_SeqBAIJ(Mat,Mat,PetscTruth*); 6054138f6bSKris Buschelman EXTERN int MatGetDiagonal_SeqBAIJ(Mat,Vec); 6154138f6bSKris Buschelman EXTERN int MatDiagonalScale_SeqBAIJ(Mat,Vec,Vec); 6254138f6bSKris Buschelman EXTERN int MatGetInfo_SeqBAIJ(Mat,MatInfoType,MatInfo *); 6354138f6bSKris Buschelman EXTERN int MatZeroEntries_SeqBAIJ(Mat); 6454138f6bSKris Buschelman 6554138f6bSKris Buschelman EXTERN int MatSeqBAIJ_UpdateFactorNumeric_NaturalOrdering(Mat); 6654138f6bSKris Buschelman EXTERN int MatSeqBAIJ_UpdateSolvers(Mat); 6754138f6bSKris Buschelman 6854138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_Update(Mat,Vec,Vec); 6954138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_1(Mat,Vec,Vec); 70e37c484bSBarry Smith EXTERN int MatSolve_SeqBAIJ_1_NaturalOrdering(Mat,Vec,Vec); 7154138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_2(Mat,Vec,Vec); 72ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_2_NaturalOrdering(Mat,Vec,Vec); 7354138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_3(Mat,Vec,Vec); 74ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_3_NaturalOrdering(Mat,Vec,Vec); 7554138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_4(Mat,Vec,Vec); 76ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_4_NaturalOrdering(Mat,Vec,Vec); 7754138f6bSKris Buschelman #if defined(PETSC_HAVE_SSE) 7854138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_4_SSE_Demotion(Mat,Vec,Vec); 794110d75bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_4_NaturalOrdering_SSE_Demotion(Mat,Vec,Vec); 804110d75bSKris Buschelman #endif 8154138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_5(Mat,Vec,Vec); 82ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_5_NaturalOrdering(Mat,Vec,Vec); 8354138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_6(Mat,Vec,Vec); 84ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_6_NaturalOrdering(Mat,Vec,Vec); 8554138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_7(Mat,Vec,Vec); 86ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_7_NaturalOrdering(Mat,Vec,Vec); 8754138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_N(Mat,Vec,Vec); 8854138f6bSKris Buschelman 8954138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_Update(Mat,Vec,Vec); 9054138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_1(Mat,Vec,Vec); 9154138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_1_NaturalOrdering(Mat,Vec,Vec); 9254138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_2(Mat,Vec,Vec); 9354138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_2_NaturalOrdering(Mat,Vec,Vec); 9454138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_3(Mat,Vec,Vec); 9554138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_3_NaturalOrdering(Mat,Vec,Vec); 9654138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_4(Mat,Vec,Vec); 9754138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_4_NaturalOrdering(Mat,Vec,Vec); 9854138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_5(Mat,Vec,Vec); 9954138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_5_NaturalOrdering(Mat,Vec,Vec); 10054138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_6(Mat,Vec,Vec); 10154138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_6_NaturalOrdering(Mat,Vec,Vec); 10254138f6bSKris Buschelman EXTERN int MatSolveTranspose_SeqBAIJ_7(Mat,Vec,Vec); 103ca44d042SBarry Smith EXTERN int MatSolveTranspose_SeqBAIJ_7_NaturalOrdering(Mat,Vec,Vec); 10454138f6bSKris Buschelman 10554138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_1(Mat,Mat*); 10654138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_2(Mat,Mat*); 10754138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_2_NaturalOrdering(Mat,Mat*); 10854138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_3(Mat,Mat*); 10954138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_3_NaturalOrdering(Mat,Mat*); 11054138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_4(Mat,Mat*); 11154138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_4_NaturalOrdering(Mat,Mat*); 11254138f6bSKris Buschelman #if defined(PETSC_HAVE_SSE) 11354138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_4_NaturalOrdering_SSE(Mat,Mat*); 11454138f6bSKris Buschelman #else 11554138f6bSKris Buschelman #endif 11654138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_5(Mat,Mat*); 11754138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_5_NaturalOrdering(Mat,Mat*); 11854138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_6(Mat,Mat*); 11954138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_6_NaturalOrdering(Mat,Mat*); 12054138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_7(Mat,Mat*); 12154138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_7_NaturalOrdering(Mat,Mat*); 12254138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_N(Mat,Mat*); 12354138f6bSKris Buschelman 12454138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_1(Mat,Vec,Vec); 12554138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_2(Mat,Vec,Vec); 12654138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_3(Mat,Vec,Vec); 12754138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_4(Mat,Vec,Vec); 12854138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_5(Mat,Vec,Vec); 12954138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_6(Mat,Vec,Vec); 13054138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_7(Mat,Vec,Vec); 13154138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_N(Mat,Vec,Vec); 13254138f6bSKris Buschelman 13354138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_1(Mat,Vec,Vec,Vec); 13454138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_2(Mat,Vec,Vec,Vec); 13554138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_3(Mat,Vec,Vec,Vec); 13654138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_4(Mat,Vec,Vec,Vec); 13754138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_5(Mat,Vec,Vec,Vec); 13854138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_6(Mat,Vec,Vec,Vec); 13954138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_7(Mat,Vec,Vec,Vec); 14054138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_N(Mat,Vec,Vec,Vec); 1412593348eSBarry Smith 1422593348eSBarry Smith #endif 143