Tpetra: In-place conversion from BlockMultiVector to BlockVector
*Created by: wfspotz*
@trilinos/tpetra
## Expectations
Given a `Tpetra::BlockMultiVector`, it should be possible to extract a const or non-const `Tpetra::BlockVector` with view semantics.
The `Tpetra::MultiVector` class has `getVector()` and `getVectorNonConst()` methods, but no `operator()` or `operator[]` operators. The `Tpetra::BlockMultiVector` interface should mimic the `Tpetra::MultiVector` interface with `getBlockVector()` and `getBlockVectorNonConst()` methods.
## Current Behavior
There are currently no methods or operators to do this.
## Motivation and Context
In SPARC, I am trying to add support for `LINSYS_TPETRA_BLOCK_CRS` linear systems with the `NonlinearSolverNox` solver. The conversion from the SPARC type `VectorTpetraBlock` to a `Thyra::Vector` for the NOX ModelEvaluator solver requires this capability.
## Definition of Done
- [x] Develop tests for `BlockVector` constructor that takes a `Tpetra::Vector` as an argument
- [x] Implement new `BlockVector` constructor
- [x] Verify that tests of new constructor work as expected
- [ ] Develop tests for `Thyra::createVector()` factory function that takes a `Tpetra::BlockMultiVector`
- [ ] Implement new `Thyra::createVector()` factory function
- [ ] Verify that tests of new factory function work as expected
issue