#if defined(PETSC_HAVE_FORTRAN_TYPE_STAR)
      Interface
        subroutine DMDASNESSetFunctionLocal(dm, imode, func, ctx, ierr)
          use, intrinsic :: ISO_C_binding
          import tSNES, tDM, eInsertMode
          DM, intent(in) :: dm
          InsertMode, intent(in) :: imode
          external :: func
          type(*) :: ctx
          PetscErrorCode, intent(out) :: ierr
        end subroutine DMDASNESSetFunctionLocal
      end Interface

      Interface
        subroutine DMSNESSetFunctionLocal(dm, func, ctx, ierr)
          use, intrinsic :: ISO_C_binding
          import tSNES, tDM
          DM, intent(in) :: dm
          external :: func
          type(*)  :: ctx
          PetscErrorCode, intent(out) :: ierr
        end subroutine DMSNESSetFunctionLocal
      end Interface

      interface SNESSetFunction
        subroutine SNESSetFunction(a, b, c, d, z)
          use, intrinsic :: ISO_C_binding
          import tSNES, tVec
          SNES a
          Vec b
          external c
          type(*) d
          PetscErrorCode z
        end subroutine
      end Interface

      interface SNESSetJacobian
        subroutine SNESSetJacobian(a, b, c, d, e, z)
          use, intrinsic :: ISO_C_binding
          import tSNES, tMat
          SNES a
          Mat b
          Mat c
          external d
          type(*) e
          PetscErrorCode z
        end subroutine
      end Interface

      interface SNESGetJacobian
        subroutine SNESGetJacobian(a, b, c, d, e, z)
          use, intrinsic :: ISO_C_binding
          import tSNES, tMat
          SNES a
          Mat b
          Mat c
          external d
          type(*) e
          PetscErrorCode z
        end subroutine
      end Interface

      Interface
        subroutine DMSNESSetJacobianLocal(dm, func, ctx, ierr)
          use, intrinsic :: ISO_C_binding
          import tSNES, tDM
          DM, intent(in) :: dm
          external :: func
          type(*)  :: ctx
          PetscErrorCode, intent(out) :: ierr
        end subroutine DMSNESSetJacobianLocal
      end Interface

      Interface
        subroutine SNESSetConvergenceTest(snes, func, cctx, destroy, ierr)
          use, intrinsic :: ISO_C_binding
          import tSNES
          SNES :: snes
          external :: func
          type(*) :: cctx
          external :: destroy
          PetscErrorCode, intent(out) :: ierr
        end subroutine
      end Interface
#endif

      Interface
        subroutine SNESRestoreConvergenceHistory(snes, r, its, na, ierr)
          use, intrinsic :: ISO_C_binding
          import tSNES
          SNES snes
          PetscInt na
          PetscReal, pointer :: r(:)
          PetscInt, pointer :: its(:)
          PetscErrorCode, intent(out) :: ierr
        end subroutine
      end Interface

