  type, extends(tPetscObject) ::  tAO
  end type tAO
  AO, parameter :: PETSC_NULL_AO = tAO(0)
  AO, target :: PETSC_NULL_AO_ARRAY(1) = [tAO(0)]
  AO, pointer :: PETSC_NULL_AO_POINTER(:) => PETSC_NULL_AO_ARRAY
#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_AO
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_AO_ARRAY
!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_AO_POINTER
#endif

  CHARACTER(LEN=*), PARAMETER :: AOBASIC = 'basic'
  CHARACTER(LEN=*), PARAMETER :: AOADVANCED = 'advanced'
  CHARACTER(LEN=*), PARAMETER :: AOMAPPING = 'mapping'
  CHARACTER(LEN=*), PARAMETER :: AOMEMORYSCALABLE = 'memoryscalable'

#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::AOBASIC
!DEC$ ATTRIBUTES DLLEXPORT::AOADVANCED
!DEC$ ATTRIBUTES DLLEXPORT::AOMAPPING
!DEC$ ATTRIBUTES DLLEXPORT::AOMEMORYSCALABLE
#endif

