interface
  subroutine KSPRestoreConvergenceHistory(ksp, r, na, ierr)
    use, intrinsic :: ISO_C_binding
    import tKSP
    KSP ksp
    PetscInt na
    PetscReal, pointer :: r(:)
    PetscErrorCode, intent(out) :: ierr
  end subroutine

  subroutine PCBJacobiRestoreSubKSP(pc, n_local, first_local, ksp, ierr)
    use, intrinsic :: ISO_C_binding
    import tPC, tKSP
    PC :: pc
    PetscInt :: n_local, first_local
    KSP, pointer :: ksp(:)
    PetscErrorCode, intent(out) :: ierr
  end subroutine

  subroutine PCASMRestoreSubKSP(pc, n_local, first_local, ksp, ierr)
    use, intrinsic :: ISO_C_binding
    import tPC, tKSP
    PC :: pc
    PetscInt :: n_local, first_local
    KSP, pointer :: ksp(:)
    PetscErrorCode, intent(out) :: ierr
  end subroutine

  subroutine PCGASMRestoreSubKSP(pc, n_local, first_local, ksp, ierr)
    use, intrinsic :: ISO_C_binding
    import tPC, tKSP
    PC :: pc
    PetscInt :: n_local, first_local
    KSP, pointer :: ksp(:)
    PetscErrorCode, intent(out) :: ierr
  end subroutine

  subroutine PCFieldsplitRestoreSubKSP(pc, n, subksp, ierr)
    use, intrinsic :: ISO_C_binding
    import tPC, tKSP
    PC :: pc
    PetscInt :: n
    KSP, pointer :: subksp(:)
    PetscErrorCode, intent(out) :: ierr
  end subroutine

  subroutine PCFieldSplitSchurRestoreSubKSP(pc, n, subksp, ierr)
    use, intrinsic :: ISO_C_binding
    import tPC, tKSP
    PC :: pc
    PetscInt :: n
    KSP, pointer :: subksp(:)
    PetscErrorCode, intent(out) :: ierr
  end subroutine
end interface

#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::KSPRestoreConvergenceHistory
!DEC$ ATTRIBUTES DLLEXPORT::PCBJacobiRestoreSubKSP
!DEC$ ATTRIBUTES DLLEXPORT::PCASMRestoreSubKSP
!DEC$ ATTRIBUTES DLLEXPORT::PCGASMRestoreSubKSP
!DEC$ ATTRIBUTES DLLEXPORT::PCFieldsplitRestoreSubKSP
!DEC$ ATTRIBUTES DLLEXPORT::PCFieldSplitSchurRestoreSubKSP
#endif
