interface
  subroutine DMDARestoreNeighbors(a, b, z)
    use, intrinsic :: ISO_C_binding
    import tDM
    DM a
    PetscMPIInt, pointer :: b(:)
    PetscErrorCode z
  end subroutine

  subroutine DMDARestoreOwnershipRanges(a, lx, ly, lz, z)
    use, intrinsic :: ISO_C_binding
    import tDM
    DM a
    PetscInt, pointer :: lx(:), ly(:), lz(:)
    PetscErrorCode z
  end subroutine
end interface

#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::DMDARestoreNeighbors
!DEC$ ATTRIBUTES DLLEXPORT::DMDARestoreOwnershipRanges
#endif

interface DMDAVecGetArray
  subroutine DMDAVecGetArrayF901(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecGetArrayF902(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecGetArrayF903(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :, :)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecGetArrayF904(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :, :, :)
    PetscErrorCode ierr
  end subroutine
end interface DMDAVecGetArray

interface DMDAVecRestoreArray
  subroutine DMDAVecRestoreArrayF901(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecRestoreArrayF902(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecRestoreArrayF903(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :, :)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecRestoreArrayF904(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :, :, :)
    PetscErrorCode ierr
  end subroutine
end interface DMDAVecRestoreArray

interface DMDAVecGetArrayRead
  subroutine DMDAVecGetArrayReadF901(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecGetArrayReadF902(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecGetArrayReadF903(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :, :)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecGetArrayReadF904(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :, :, :)
    PetscErrorCode ierr
  end subroutine
end interface DMDAVecGetArrayRead

interface DMDAVecRestoreArrayRead
  subroutine DMDAVecRestoreArrayReadF901(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecRestoreArrayReadF902(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecRestoreArrayReadF903(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :, :)
    PetscErrorCode ierr
  end subroutine
  subroutine DMDAVecRestoreArrayReadF904(da1, v, d1, ierr)
    use, intrinsic :: ISO_C_binding
    import tDM, tVec
    DM da1
    Vec v
    PetscScalar, pointer :: d1(:, :, :, :)
    PetscErrorCode ierr
  end subroutine
end interface DMDAVecRestoreArrayRead
