If it is not too expensive, I would copy the block vector to the normal distributed vector. For this purpose, I use functions like these:
```
template <typename VectorType, typename BlockVectorType>
void
split_up_components_fast(const VectorType &src, BlockVectorType &dst)
{
for (unsigned int i = 0, j = 0;
i < src.get_partitioner()->locally_owned_size();
++j)
for (unsigned int b = 0; b < dst.n_blocks(); ++b)
dst.block(b).local_element(j) = src.local_element(i++);
}
template <typename VectorType, typename BlockVectorType>
void
merge_components_fast(const BlockVectorType &src, VectorType &dst)
{
for (unsigned int i = 0, j = 0;
i < dst.get_partitioner()->locally_owned_size();
++j)
for (unsigned int b = 0; b < src.n_blocks(); ++b)
dst.local_element(i++) = src.block(b).local_element(j);
}
```
However, you have make sure that the DoFs are enumerated consistently for LinearAlgebra::distributed::Vector.
Peter