  type, extends(tPetscObject) ::  tPF
  end type tPF
  PF, parameter :: PETSC_NULL_PF = tPF(0)
  PF, target :: PETSC_NULL_PF_ARRAY(1) = [tPF(0)]
  PF, pointer :: PETSC_NULL_PF_POINTER(:) => PETSC_NULL_PF_ARRAY
#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_PF
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_PF_ARRAY
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_PF_POINTER
#endif

  CHARACTER(LEN=*), PARAMETER :: PFCONSTANT = 'constant'
  CHARACTER(LEN=*), PARAMETER :: PFMAT = 'mat'
  CHARACTER(LEN=*), PARAMETER :: PFSTRING = 'string'
  CHARACTER(LEN=*), PARAMETER :: PFQUICK = 'quick'
  CHARACTER(LEN=*), PARAMETER :: PFIDENTITY = 'identity'
  CHARACTER(LEN=*), PARAMETER :: PFMATLAB = 'matlab'

#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::PFCONSTANT
!DEC$ ATTRIBUTES DLLEXPORT::PFMAT
!DEC$ ATTRIBUTES DLLEXPORT::PFSTRING
!DEC$ ATTRIBUTES DLLEXPORT::PFQUICK
!DEC$ ATTRIBUTES DLLEXPORT::PFIDENTITY
!DEC$ ATTRIBUTES DLLEXPORT::PFMATLAB
#endif

