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