173f4d377SMatthew Knepley /* $Id: baij.h,v 1.35 2001/08/07 03:02:55 balay Exp $ */ 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 */ 29ea709b57SSatish Balay PetscScalar *solve_work; /* work space used in MatSolve */ 302593348eSBarry Smith int reallocs; /* number of mallocs done during MatSetValues() 3147b4a8eaSLois Curfman McInnes as more values are set then were preallocated */ 32ea709b57SSatish Balay PetscScalar *mult_work; /* work array for matrix vector product*/ 33ea709b57SSatish Balay PetscScalar *saved_values; 34c4992f7dSBarry Smith 35c4992f7dSBarry Smith PetscTruth keepzeroedrows; /* if true, MatZeroRows() will not change nonzero structure */ 36a377f70aSBarry Smith 37a377f70aSBarry Smith #if defined(PETSC_USE_MAT_SINGLE) 38e7592fafSBarry Smith int setvalueslen; 39a377f70aSBarry Smith MatScalar *setvaluescopy; /* area double precision values in MatSetValuesXXX() are copied 40a377f70aSBarry Smith before calling MatSetValuesXXX_SeqBAIJ_MatScalar() */ 41a377f70aSBarry Smith #endif 42bcd9e38bSBarry Smith PetscTruth pivotinblocks; /* pivot inside factorization of each diagonal block */ 4335aab85fSBarry Smith } Mat_SeqBAIJ; 442593348eSBarry Smith 45ca44d042SBarry Smith EXTERN int MatILUFactorSymbolic_SeqBAIJ(Mat,IS,IS,MatILUInfo*,Mat *); 46ca44d042SBarry Smith EXTERN int MatDuplicate_SeqBAIJ(Mat,MatDuplicateOption,Mat*); 47ca44d042SBarry Smith EXTERN int MatMarkDiagonal_SeqBAIJ(Mat); 48be3590efSBarry Smith 4954138f6bSKris Buschelman EXTERN int MatLUFactorSymbolic_SeqBAIJ(Mat,IS,IS,MatLUInfo*,Mat*); 5054138f6bSKris Buschelman EXTERN int MatLUFactor_SeqBAIJ(Mat,IS,IS,MatLUInfo*); 5154138f6bSKris Buschelman EXTERN int MatIncreaseOverlap_SeqBAIJ(Mat,int,IS*,int); 5254138f6bSKris Buschelman EXTERN int MatGetSubMatrix_SeqBAIJ(Mat,IS,IS,int,MatReuse,Mat*); 5354138f6bSKris Buschelman EXTERN int MatGetSubMatrices_SeqBAIJ(Mat,int,IS*,IS*,MatReuse,Mat**); 5454138f6bSKris Buschelman EXTERN int MatMultTranspose_SeqBAIJ(Mat,Vec,Vec); 5554138f6bSKris Buschelman EXTERN int MatMultTransposeAdd_SeqBAIJ(Mat,Vec,Vec,Vec); 5687828ca2SBarry Smith EXTERN int MatScale_SeqBAIJ(PetscScalar*,Mat); 5754138f6bSKris Buschelman EXTERN int MatNorm_SeqBAIJ(Mat,NormType,PetscReal *); 5854138f6bSKris Buschelman EXTERN int MatEqual_SeqBAIJ(Mat,Mat,PetscTruth*); 5954138f6bSKris Buschelman EXTERN int MatGetDiagonal_SeqBAIJ(Mat,Vec); 6054138f6bSKris Buschelman EXTERN int MatDiagonalScale_SeqBAIJ(Mat,Vec,Vec); 6154138f6bSKris Buschelman EXTERN int MatGetInfo_SeqBAIJ(Mat,MatInfoType,MatInfo *); 6254138f6bSKris Buschelman EXTERN int MatZeroEntries_SeqBAIJ(Mat); 6354138f6bSKris Buschelman 6454138f6bSKris Buschelman EXTERN int MatSeqBAIJ_UpdateFactorNumeric_NaturalOrdering(Mat); 6554138f6bSKris Buschelman EXTERN int MatSeqBAIJ_UpdateSolvers(Mat); 6654138f6bSKris Buschelman 6754138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_Update(Mat,Vec,Vec); 6854138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_1(Mat,Vec,Vec); 69e37c484bSBarry Smith EXTERN int MatSolve_SeqBAIJ_1_NaturalOrdering(Mat,Vec,Vec); 7054138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_2(Mat,Vec,Vec); 71ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_2_NaturalOrdering(Mat,Vec,Vec); 7254138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_3(Mat,Vec,Vec); 73ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_3_NaturalOrdering(Mat,Vec,Vec); 7454138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_4(Mat,Vec,Vec); 75ca44d042SBarry Smith EXTERN int MatSolve_SeqBAIJ_4_NaturalOrdering(Mat,Vec,Vec); 7654138f6bSKris Buschelman #if defined(PETSC_HAVE_SSE) 7754138f6bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_4_SSE_Demotion(Mat,Vec,Vec); 784110d75bSKris Buschelman EXTERN int MatSolve_SeqBAIJ_4_NaturalOrdering_SSE_Demotion(Mat,Vec,Vec); 79*0959a075SKris Buschelman EXTERN int MatSolve_SeqBAIJ_4_NaturalOrdering_SSE_Demotion_usj(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*); 114*0959a075SKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_4_NaturalOrdering_SSE_usj(Mat,Mat*); 11554138f6bSKris Buschelman #else 11654138f6bSKris Buschelman #endif 11754138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_5(Mat,Mat*); 11854138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_5_NaturalOrdering(Mat,Mat*); 11954138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_6(Mat,Mat*); 12054138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_6_NaturalOrdering(Mat,Mat*); 12154138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_7(Mat,Mat*); 12254138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_7_NaturalOrdering(Mat,Mat*); 12354138f6bSKris Buschelman EXTERN int MatLUFactorNumeric_SeqBAIJ_N(Mat,Mat*); 12454138f6bSKris Buschelman 12554138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_1(Mat,Vec,Vec); 12654138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_2(Mat,Vec,Vec); 12754138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_3(Mat,Vec,Vec); 12854138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_4(Mat,Vec,Vec); 12954138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_5(Mat,Vec,Vec); 13054138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_6(Mat,Vec,Vec); 13154138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_7(Mat,Vec,Vec); 13254138f6bSKris Buschelman EXTERN int MatMult_SeqBAIJ_N(Mat,Vec,Vec); 13354138f6bSKris Buschelman 13454138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_1(Mat,Vec,Vec,Vec); 13554138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_2(Mat,Vec,Vec,Vec); 13654138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_3(Mat,Vec,Vec,Vec); 13754138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_4(Mat,Vec,Vec,Vec); 13854138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_5(Mat,Vec,Vec,Vec); 13954138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_6(Mat,Vec,Vec,Vec); 14054138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_7(Mat,Vec,Vec,Vec); 14154138f6bSKris Buschelman EXTERN int MatMultAdd_SeqBAIJ_N(Mat,Vec,Vec,Vec); 1422593348eSBarry Smith 1432593348eSBarry Smith #endif 144