#if defined(PETSC_HAVE_FORTRAN_TYPE_STAR)
      Interface
        subroutine PetscSFBcastBegin(sf, unit, rarray, larray, op, ierr)
          use, intrinsic :: ISO_C_binding
          import tPetscSF
          PetscSF :: sf
          PetscMPIInt :: unit, op
          type(*) :: rarray(:)
          type(*) :: larray(:)
          PetscErrorCode :: ierr
        end Subroutine PetscSFBcastBegin

        subroutine PetscSFBcastEnd(sf, unit, rarray, larray, op, ierr)
          use, intrinsic :: ISO_C_binding
          import tPetscSF
          PetscSF :: sf
          PetscMPIInt :: unit, op
          type(*) :: rarray(:)
          type(*) :: larray(:)
          PetscErrorCode :: ierr
        end Subroutine PetscSFBcastEnd

        subroutine PetscSFReduceBegin(sf, unit, larray, rarray, op, ierr)
          use, intrinsic :: ISO_C_binding
          import tPetscSF
          PetscSF :: sf
          PetscMPIInt :: unit, op
          type(*) :: larray(:)
          type(*) :: rarray(:)
          PetscErrorCode :: ierr
        end Subroutine PetscSFReduceBegin

        subroutine PetscSFReduceEnd(sf, unit, larray, rarray, op, ierr)
          use, intrinsic :: ISO_C_binding
          import tPetscSF
          PetscSF :: sf
          PetscMPIInt :: unit, op
          type(*) :: larray(:)
          type(*) :: rarray(:)
          PetscErrorCode :: ierr
        end Subroutine PetscSFReduceEnd
      end Interface
#endif

      interface
        subroutine VecRestoreOwnershipRanges(v, ptr, ierr)
          use, intrinsic :: ISO_C_binding
          import tVec
          Vec :: v
          PetscInt, pointer :: ptr(:)
          PetscErrorCode, intent(out) :: ierr
        end subroutine VecRestoreOwnershipRanges

        subroutine PetscSFRestoreGraph(sf, nroots, nleaves, ilocal, iremote, ierr)
          use, intrinsic :: ISO_C_binding
          import tPetscSF, sPetscSFNode
          PetscSF :: sf
          PetscInt :: nroots, nleaves
          PetscInt, pointer :: ilocal(:)
          type(sPetscSFNode), pointer :: iremote(:)
          PetscErrorCode :: ierr
        end Subroutine PetscSFRestoreGraph

        Subroutine VecRestoreValuesSection(v, s, p, va, ierr)
          use, intrinsic :: ISO_C_binding
          import tVec, tPetscSection
          PetscScalar, pointer :: va(:)
          PetscErrorCode ierr
          Vec v
          PetscSection s
          PetscInt p
        End Subroutine
      End Interface
