#if !defined(PETSCPETSCMATDEF_H)
#define PETSCPETSCMATDEF_H

#include "petsc/finclude/petscvec.h"

#define MatFactorType type(eMatFactorType)
#define MatProductType type(eMatProductType)
#define MatReuse type(eMatReuse)
#define MatCreateSubMatrixOption type(eMatCreateSubMatrixOption)
#define MatStructure type(eMatStructure)
#define MatCompositeMergeType type(eMatCompositeMergeType)
#define MatCompositeType type(eMatCompositeType)
#define MatAssemblyType type(eMatAssemblyType)
#define MatOption type(eMatOption)
#define MatDuplicateOption type(eMatDuplicateOption)
#define MatInfoType type(eMatInfoType)
#define MatFactorShiftType type(eMatFactorShiftType)
#define MatFactorError type(eMatFactorError)
#define MatFactorSchurStatus type(eMatFactorSchurStatus)
#define MatSORType type(eMatSORType)
#define MatColoringWeightType type(eMatColoringWeightType)
#define MPChacoGlobalType type(eMPChacoGlobalType)
#define MPChacoLocalType type(eMPChacoLocalType)
#define MPChacoEigenType type(eMPChacoEigenType)
#define MPPTScotchStrategyType type(eMPPTScotchStrategyType)
#define MatOperation type(eMatOperation)
#define MatHtoolCompressorType type(eMatHtoolCompressorType)
#define MatHtoolClusteringType type(eMatHtoolClusteringType)
#define MatSTRUMPACKReordering type(eMatSTRUMPACKReordering)
#define MatSTRUMPACKCompressionType type(eMatSTRUMPACKCompressionType)
#define MatCUSPARSEStorageFormat type(eMatCUSPARSEStorageFormat)
#define MatCUSPARSEFormatOperation type(eMatCUSPARSEFormatOperation)
#define MatHIPSPARSEStorageFormat type(eMatHIPSPARSEStorageFormat)
#define MatHIPSPARSEFormatOperation type(eMatHIPSPARSEFormatOperation)
#define MatStencil type(sMatStencil)
#define MatInfo type(sMatInfo)
#define MatFactorInfo type(sMatFactorInfo)

#define MatType CHARACTER(80)
#define MatSolverType CHARACTER(80)
#define MatProductAlgorithm CHARACTER(80)
#define MatOrderingType CHARACTER(80)
#define MatColoringType CHARACTER(80)
#define MatPartitioningType CHARACTER(80)
#define MatMFFDType CHARACTER(80)

#define Mat type(tMat)
#define MatColoring type(tMatColoring)
#define MatFDColoring type(tMatFDColoring)
#define MatTransposeColoring type(tMatTransposeColoring)
#define MatPartitioning type(tMatPartitioning)
#define MatNullSpace type(tMatNullSpace)
#define MatMFFD type(tMatMFFD)

#endif
#define MatShellGetContext(mat, ctx, ierr) MatShellGetContextCptr(mat, petscFtnCtx, ierr); call c_f_pointer(petscFtnCtx, ctx)
