  type, extends(tPetscObject) ::  tDMPlexTransform
  end type tDMPlexTransform
  DMPlexTransform, parameter :: PETSC_NULL_DMPLEXTRANSFORM = tDMPlexTransform(0)
  DMPlexTransform, target :: PETSC_NULL_DMPLEXTRANSFORM_ARRAY(1) = [tDMPlexTransform(0)]
  DMPlexTransform, pointer :: PETSC_NULL_DMPLEXTRANSFORM_POINTER(:) => PETSC_NULL_DMPLEXTRANSFORM_ARRAY
#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_DMPLEXTRANSFORM
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_DMPLEXTRANSFORM_ARRAY
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_DMPLEXTRANSFORM_POINTER
#endif

  CHARACTER(LEN=*), PARAMETER :: DMPLEXREFINEREGULAR = 'refine_regular'
  CHARACTER(LEN=*), PARAMETER :: DMPLEXREFINEALFELD = 'refine_alfeld'
  CHARACTER(LEN=*), PARAMETER :: DMPLEXREFINEPOWELLSABIN = 'refine_powell_sabin'
  CHARACTER(LEN=*), PARAMETER :: DMPLEXREFINEBOUNDARYLAYER = 'refine_boundary_layer'
  CHARACTER(LEN=*), PARAMETER :: DMPLEXREFINESBR = 'refine_sbr'
  CHARACTER(LEN=*), PARAMETER :: DMPLEXREFINETOBOX = 'refine_tobox'
  CHARACTER(LEN=*), PARAMETER :: DMPLEXREFINETOSIMPLEX = 'refine_tosimplex'
  CHARACTER(LEN=*), PARAMETER :: DMPLEXREFINE1D = 'refine_1d'
  CHARACTER(LEN=*), PARAMETER :: DMPLEXEXTRUDETYPE = 'extrude'
  CHARACTER(LEN=*), PARAMETER :: DMPLEXCOHESIVEEXTRUDE = 'cohesive_extrude'
  CHARACTER(LEN=*), PARAMETER :: DMPLEXTRANSFORMFILTER = 'transform_filter'

#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXREFINEREGULAR
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXREFINEALFELD
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXREFINEPOWELLSABIN
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXREFINEBOUNDARYLAYER
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXREFINESBR
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXREFINETOBOX
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXREFINETOSIMPLEX
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXREFINE1D
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXEXTRUDETYPE
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXCOHESIVEEXTRUDE
!DEC$ ATTRIBUTES DLLEXPORT::DMPLEXTRANSFORMFILTER
#endif

