  type, extends(tPetscObject) ::  tPetscSpace
  end type tPetscSpace
  PetscSpace, parameter :: PETSC_NULL_SPACE = tPetscSpace(0)
  PetscSpace, target :: PETSC_NULL_SPACE_ARRAY(1) = [tPetscSpace(0)]
  PetscSpace, pointer :: PETSC_NULL_SPACE_POINTER(:) => PETSC_NULL_SPACE_ARRAY
#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SPACE
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SPACE_ARRAY
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SPACE_POINTER
#endif

  CHARACTER(LEN=*), PARAMETER :: PETSCSPACEPOLYNOMIAL = 'poly'
  CHARACTER(LEN=*), PARAMETER :: PETSCSPACEPTRIMMED = 'ptrimmed'
  CHARACTER(LEN=*), PARAMETER :: PETSCSPACETENSOR = 'tensor'
  CHARACTER(LEN=*), PARAMETER :: PETSCSPACESUM = 'sum'
  CHARACTER(LEN=*), PARAMETER :: PETSCSPACEPOINT = 'point'
  CHARACTER(LEN=*), PARAMETER :: PETSCSPACESUBSPACE = 'subspace'
  CHARACTER(LEN=*), PARAMETER :: PETSCSPACEWXY = 'wxy'

#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::PETSCSPACEPOLYNOMIAL
!DEC$ ATTRIBUTES DLLEXPORT::PETSCSPACEPTRIMMED
!DEC$ ATTRIBUTES DLLEXPORT::PETSCSPACETENSOR
!DEC$ ATTRIBUTES DLLEXPORT::PETSCSPACESUM
!DEC$ ATTRIBUTES DLLEXPORT::PETSCSPACEPOINT
!DEC$ ATTRIBUTES DLLEXPORT::PETSCSPACESUBSPACE
!DEC$ ATTRIBUTES DLLEXPORT::PETSCSPACEWXY
#endif

