`Bcast` sending wrong buffer 
**Description**
`ht.communication.Bcast` seems to send the wrong portion of a buffer when broadcasting a slice of an array that does not start at index 0. 


**To Reproduce**
```python
a = ht.arange(13*5, split=0).reshape((13, 5))
active_rank = 1
if a.comm.rank == active_rank:
    arr = a.larray[1:2]
else:
    arr = torch.empty((1,5), dtype=a.larray.dtype)
print("before Bcast on rank ", rank, ", arr = ", arr)
a.comm.Bcast(arr, root=active_rank)
print("after Bcast on rank ", rank, ", arr = ", arr)
```

`mpirun -n 2 `

```
before Bcast on rank  1 , arr =  tensor([[40, 41, 42, 43, 44]], dtype=torch.int32)
before Bcast on rank  0 , arr =  tensor([[        1, 423460512,         1,         1,         0]], dtype=torch.int32)
after Bcast on rank  0 , arr =  tensor([[704643072, 721420288, 738197504, 754974720, 771751936]], dtype=torch.int32)
after Bcast on rank  1 , arr =  tensor([[40, 41, 42, 43, 44]], dtype=torch.int32)
```


**Expected behavior**

```python
a = ht.arange(13*5, split=0).reshape((13, 5))
active_rank = 1
if a.comm.rank == active_rank:
    arr = a.larray[0:1]
else:
    arr = torch.empty((1,5), dtype=a.larray.dtype)
print("before Bcast on rank ", rank, ", arr = ", arr)
a.comm.Bcast(arr, root=active_rank)
print("after Bcast on rank ", rank, ", arr = ", arr)
```
`mpirun -n 2 `
```
before Bcast on rank  0 , arr =  tensor([[         0, 1073741824,          0, 1073741824,  465895430]], dtype=torch.int32)
before Bcast on rank  1 , arr =  tensor([[40, 41, 42, 43, 44]], dtype=torch.int32)
after Bcast on rank  0 , arr =  tensor([[40, 41, 42, 43, 44]], dtype=torch.int32)
after Bcast on rank  1 , arr =  tensor([[40, 41, 42, 43, 44]], dtype=torch.int32)
```

**Version Info**
Main branch


diff --git a/CHANGELOG.md b/CHANGELOG.md
index 14314ca5..cf270694 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -41,6 +41,7 @@ Example on 2 processes:
 - [#768](https://github.com/helmholtz-analytics/heat/pull/768) Fixed an issue where `deg2rad` and `rad2deg`are not working with the 'out' parameter.
 - [#785](https://github.com/helmholtz-analytics/heat/pull/785) Removed `storage_offset` when finding the mpi buffer (`communication. MPICommunication.as_mpi_memory()`).
 - [#785](https://github.com/helmholtz-analytics/heat/pull/785) added allowance for 1 dimensional non-contiguous local tensors in `communication. MPICommunication.mpi_type_and_elements_of()`
+- [#790](https://github.com/helmholtz-analytics/heat/pull/790) catch incorrect device after `bcast` in `DNDarray.__getitem__`
 ### Linear Algebra
 - [#718](https://github.com/helmholtz-analytics/heat/pull/718) New feature: `trace()`
 - [#768](https://github.com/helmholtz-analytics/heat/pull/768) New feature: unary positive and negative operations
diff --git a/heat/core/dndarray.py b/heat/core/dndarray.py
index 18d1ed12..718b1551 100644
--- a/heat/core/dndarray.py
+++ b/heat/core/dndarray.py
@@ -883,6 +883,9 @@ class DNDarray:
             # broadcast result
             # TODO: Replace with `self.comm.Bcast(arr, root=active_rank)` after fixing #784
             arr = self.comm.bcast(arr, root=active_rank)
+            if arr.device != self.larray.device:
+                # todo: remove when unnecessary (also after #784)
+                arr = arr.to(device=self.larray.device)
 
         return DNDarray(
             arr.type(l_dtype),
['heat/core/dndarray.py', 'CHANGELOG.md']