00001 00007 #ifndef __ODA_JAC_H 00008 #define __ODA_JAC_H 00009 00010 #include "oda.h" 00011 #include "petscmat.h" 00012 #include "petscvec.h" 00013 00014 extern int _internal_ierr; 00015 00016 #ifndef iC 00017 #define iC(fun) {CHKERRQ(fun);} 00018 #endif 00019 00020 struct Jac1MFreeData { 00021 ot::DA *da; 00022 bool isFinestLevel; 00023 Mat Jmat_private; 00024 Vec inTmp; 00025 Vec outTmp; 00026 }; 00027 00028 PetscErrorCode CreateJacobian1(ot::DA*,Mat *); 00029 PetscErrorCode CreateActiveJacobian1(ot::DA*,Mat *); 00030 PetscErrorCode ComputeJacobian1(ot::DA*,Mat); 00031 PetscErrorCode CreateAndComputeFullJacobian1(ot::DA*,Mat *); 00032 PetscErrorCode CreateAndComputeFullActiveJacobian1(ot::DA*,Mat *); 00033 PetscErrorCode CreateAndComputeMassMatrix(ot::DA*,Mat *); 00034 00035 PetscErrorCode Jacobian1MatMult(Mat, Vec, Vec); 00036 PetscErrorCode Jacobian1ShellMatMult(Mat, Vec, Vec); 00037 00038 PetscErrorCode MassMatMult(Mat, Vec, Vec); 00039 PetscErrorCode Jacobian1MatGetDiagonal(Mat, Vec); 00040 PetscErrorCode MassMatGetDiagonal(Mat, Vec); 00041 PetscErrorCode Jacobian1MatDestroy(Mat); 00042 PetscErrorCode MassMatDestroy(Mat); 00043 00044 #endif 00045