SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &boundary_functions,
Vector<double> &rhs_vector,
- std::vector<unsigned int>&dof_to_boundary_mapping,
+ std::vector<types::global_dof_index>&dof_to_boundary_mapping,
const Function<spacedim> * const weight = 0,
std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
// SparseMatrix<double> &matrix,
// const FunctionMap<1>::type &boundary_functions,
// Vector<double> &rhs_vector,
-// std::vector<unsigned int>&dof_to_boundary_mapping,
+// std::vector<types::global_dof_index>&dof_to_boundary_mapping,
// const Function<1> * const a = 0);
// //codimension 1
//
// SparseMatrix<double> &matrix,
// const FunctionMap<2>::type &boundary_functions,
// Vector<double> &rhs_vector,
-// std::vector<unsigned int>&dof_to_boundary_mapping,
+// std::vector<types::global_dof_index>&dof_to_boundary_mapping,
// const Function<2> * const a = 0);
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &boundary_functions,
Vector<double> &rhs_vector,
- std::vector<unsigned int>&dof_to_boundary_mapping,
+ std::vector<types::global_dof_index>&dof_to_boundary_mapping,
const Function<spacedim> * const a = 0,
std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &boundary_functions,
Vector<double> &rhs_vector,
- std::vector<unsigned int>&dof_to_boundary_mapping,
+ std::vector<types::global_dof_index>&dof_to_boundary_mapping,
const Function<spacedim> * const a = 0,
std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
// SparseMatrix<double> &matrix,
// const FunctionMap<1>::type &boundary_functions,
// Vector<double> &rhs_vector,
-// std::vector<unsigned int>&dof_to_boundary_mapping,
+// std::vector<types::global_dof_index>&dof_to_boundary_mapping,
// const Function<1> * const a = 0);
/**
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &boundary_functions,
Vector<double> &rhs_vector,
- std::vector<unsigned int>&dof_to_boundary_mapping,
+ std::vector<types::global_dof_index>&dof_to_boundary_mapping,
const Function<spacedim> * const a = 0,
std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
*/
template <typename number>
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
SparseMatrix<number> &matrix,
Vector<number> &solution,
Vector<number> &right_hand_side,
*/
template <typename number>
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
BlockSparseMatrix<number> &matrix,
BlockVector<number> &solution,
BlockVector<number> &right_hand_side,
* step-18.
*/
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
PETScWrappers::SparseMatrix &matrix,
PETScWrappers::Vector &solution,
PETScWrappers::Vector &right_hand_side,
* matrices.
*/
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
PETScWrappers::MPI::SparseMatrix &matrix,
PETScWrappers::MPI::Vector &solution,
PETScWrappers::MPI::Vector &right_hand_side,
* to this function is the same.
*/
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
PETScWrappers::MPI::SparseMatrix &matrix,
PETScWrappers::Vector &solution,
PETScWrappers::MPI::Vector &right_hand_side,
* Same as above but for BlockSparseMatrix.
*/
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
PETScWrappers::MPI::BlockSparseMatrix &matrix,
PETScWrappers::MPI::BlockVector &solution,
PETScWrappers::MPI::BlockVector &right_hand_side,
* across an MPI system.
*/
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
TrilinosWrappers::SparseMatrix &matrix,
TrilinosWrappers::Vector &solution,
TrilinosWrappers::Vector &right_hand_side,
* working on block structures.
*/
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
TrilinosWrappers::BlockSparseMatrix &matrix,
TrilinosWrappers::BlockVector &solution,
TrilinosWrappers::BlockVector &right_hand_side,
* types.
*/
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
TrilinosWrappers::SparseMatrix &matrix,
TrilinosWrappers::MPI::Vector &solution,
TrilinosWrappers::MPI::Vector &right_hand_side,
* on block structures.
*/
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
TrilinosWrappers::BlockSparseMatrix &matrix,
TrilinosWrappers::MPI::BlockVector &solution,
TrilinosWrappers::MPI::BlockVector &right_hand_side,
* documentation of this class.
*/
void
- local_apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- const std::vector<unsigned int> &local_dof_indices,
+ local_apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
+ const std::vector<types::global_dof_index> &local_dof_indices,
FullMatrix<double> &local_matrix,
Vector<double> &local_rhs,
const bool eliminate_columns);
struct CopyData
{
- std::vector<unsigned int> dof_indices;
+ std::vector<types::global_dof_index> dof_indices;
FullMatrix<double> cell_matrix;
dealii::Vector<double> cell_rhs;
};
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &boundary_functions,
Vector<double> &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
+ std::vector<types::global_dof_index> &dof_to_boundary_mapping,
const Function<spacedim> * const coefficient,
const std::vector<unsigned int>& component_mapping,
const MatrixCreator::internal::IteratorRange<DoFHandler<dim,spacedim> > range,
std::vector<Vector<double> > rhs_values_system (fe_values.n_quadrature_points,
Vector<double>(n_function_components));
- std::vector<unsigned int> dofs (dofs_per_cell);
- std::vector<unsigned int> dofs_on_face_vector (dofs_per_face);
+ std::vector<types::global_dof_index> dofs (dofs_per_cell);
+ std::vector<types::global_dof_index> dofs_on_face_vector (dofs_per_face);
// for each dof on the cell, have a
// flag whether it is on the face
SparseMatrix<double> &,
const FunctionMap<3>::type &,
Vector<double> &,
- std::vector<unsigned int> &,
+ std::vector<types::global_dof_index> &,
const Function<3> * const ,
const std::vector<unsigned int> &,
const MatrixCreator::internal::IteratorRange<DoFHandler<2,3> > ,
SparseMatrix<double> &,
const FunctionMap<3>::type &,
Vector<double> &,
- std::vector<unsigned int> &,
+ std::vector<types::global_dof_index> &,
const Function<3> * const ,
const std::vector<unsigned int> &,
const MatrixCreator::internal::IteratorRange<DoFHandler<1,3> > ,
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &boundary_functions,
Vector<double> &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
+ std::vector<types::global_dof_index> &dof_to_boundary_mapping,
const Function<spacedim> * const coefficient,
std::vector<unsigned int> component_mapping)
{
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &boundary_functions,
Vector<double> &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
+ std::vector<types::global_dof_index> &dof_to_boundary_mapping,
const Function<spacedim> * const coefficient,
const std::vector<unsigned int>& component_mapping,
const MatrixCreator::internal::IteratorRange<DoFHandler<dim,spacedim> > range,
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &boundary_functions,
Vector<double> &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
+ std::vector<types::global_dof_index> &dof_to_boundary_mapping,
const Function<spacedim> * const coefficient,
const std::vector<unsigned int>& component_mapping,
const MatrixCreator::internal::IteratorRange<hp::DoFHandler<dim,spacedim> > range,
if (true)
{
unsigned int max_element = 0;
- for (std::vector<unsigned int>::const_iterator i=dof_to_boundary_mapping.begin();
+ for (std::vector<types::global_dof_index>::const_iterator i=dof_to_boundary_mapping.begin();
i!=dof_to_boundary_mapping.end(); ++i)
if ((*i != hp::DoFHandler<dim,spacedim>::invalid_dof_index) &&
(*i > max_element))
std::vector<double> rhs_values_scalar;
std::vector<Vector<double> > rhs_values_system;
- std::vector<unsigned int> dofs (max_dofs_per_cell);
- std::vector<unsigned int> dofs_on_face_vector (max_dofs_per_face);
+ std::vector<types::global_dof_index> dofs (max_dofs_per_cell);
+ std::vector<types::global_dof_index> dofs_on_face_vector (max_dofs_per_face);
// for each dof on the cell, have a
// flag whether it is on the face
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &rhs,
Vector<double> &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
+ std::vector<types::global_dof_index> &dof_to_boundary_mapping,
const Function<spacedim> * const a,
std::vector<unsigned int> component_mapping)
{
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &boundary_functions,
Vector<double> &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
+ std::vector<types::global_dof_index> &dof_to_boundary_mapping,
const Function<spacedim> * const coefficient,
std::vector<unsigned int> component_mapping)
{
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &boundary_functions,
Vector<double> &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
+ std::vector<types::global_dof_index> &dof_to_boundary_mapping,
const Function<spacedim> * const coefficient,
const std::vector<unsigned int>& component_mapping,
const MatrixCreator::internal::IteratorRange<hp::DoFHandler<dim,spacedim> > range,
SparseMatrix<double> &matrix,
const typename FunctionMap<spacedim>::type &rhs,
Vector<double> &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
+ std::vector<types::global_dof_index> &dof_to_boundary_mapping,
const Function<spacedim> * const a,
std::vector<unsigned int> component_mapping)
{
//TODO:[WB] I don't think that the optimized storage of diagonals is needed (GK)
template <typename number>
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
SparseMatrix<number> &matrix,
Vector<number> &solution,
Vector<number> &right_hand_side,
}
- std::map<unsigned int,double>::const_iterator dof = boundary_values.begin(),
+ std::map<types::global_dof_index,double>::const_iterator dof = boundary_values.begin(),
endd = boundary_values.end();
const SparsityPattern &sparsity = matrix.get_sparsity_pattern();
const std::size_t *sparsity_rowstart = sparsity.get_rowstart_indices();
{
Assert (dof->first < n_dofs, ExcInternalError());
- const unsigned int dof_number = dof->first;
+ const types::global_dof_index dof_number = dof->first;
// for each boundary dof:
// set entries of this line
// we shall not set
// matrix.global_entry(
// sparsity_rowstart[dof.first])
- const unsigned int last = sparsity_rowstart[dof_number+1];
- for (unsigned int j=sparsity_rowstart[dof_number]+1; j<last; ++j)
+ const types::global_dof_index last = sparsity_rowstart[dof_number+1];
+ for (types::global_dof_index j=sparsity_rowstart[dof_number]+1; j<last; ++j)
matrix.global_entry(j) = 0.;
// since that is the
// diagonal element and
// thus the present row
- for (unsigned int j=sparsity_rowstart[dof_number]+1; j<last; ++j)
+ for (types::global_dof_index j=sparsity_rowstart[dof_number]+1; j<last; ++j)
{
const unsigned int row = sparsity_colnums[j];
template <typename number>
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
BlockSparseMatrix<number> &matrix,
BlockVector<number> &solution,
BlockVector<number> &right_hand_side,
first_nonzero_diagonal_entry = 1;
- std::map<unsigned int,double>::const_iterator dof = boundary_values.begin(),
+ std::map<types::global_dof_index,double>::const_iterator dof = boundary_values.begin(),
endd = boundary_values.end();
const BlockSparsityPattern &
sparsity_pattern = matrix.get_sparsity_pattern();
// get global index and index
// in the block in which this
// dof is located
- const unsigned int dof_number = dof->first;
- const std::pair<unsigned int,unsigned int>
+ const types::global_dof_index dof_number = dof->first;
+ const std::pair<types::global_dof_index,unsigned int>
block_index = index_mapping.global_to_local (dof_number);
// for each boundary dof:
// cases with
// square
// sub-matrices
- const unsigned int *p = 0;
+ const types::global_dof_index *p = 0;
if (this_sparsity.n_rows() == this_sparsity.n_cols())
{
if (this_sparsity.get_column_numbers()
[this_sparsity.get_rowstart_indices()[row+1]]),
ExcInternalError());
- const unsigned int global_entry
+ const types::global_dof_index global_entry
= (p
-
&this_sparsity.get_column_numbers()
{
template <typename PETScMatrix, typename PETScVector>
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
PETScMatrix &matrix,
PETScVector &solution,
PETScVector &right_hand_side,
// figure out which rows of the matrix we
// have to eliminate on this processor
std::vector<unsigned int> constrained_rows;
- for (std::map<unsigned int,double>::const_iterator
+ for (std::map<types::global_dof_index,double>::const_iterator
dof = boundary_values.begin();
dof != boundary_values.end();
++dof)
right_hand_side.compress ();
solution.compress ();
- std::vector<unsigned int> indices;
+ std::vector<types::global_dof_index> indices;
std::vector<PetscScalar> solution_values;
- for (std::map<unsigned int,double>::const_iterator
+ for (std::map<types::global_dof_index,double>::const_iterator
dof = boundary_values.begin();
dof != boundary_values.end();
++dof)
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
PETScWrappers::SparseMatrix &matrix,
PETScWrappers::Vector &solution,
PETScWrappers::Vector &right_hand_side,
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
PETScWrappers::MPI::SparseMatrix &matrix,
PETScWrappers::MPI::Vector &solution,
PETScWrappers::MPI::Vector &right_hand_side,
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
PETScWrappers::MPI::BlockSparseMatrix &matrix,
PETScWrappers::MPI::BlockVector &solution,
PETScWrappers::MPI::BlockVector &right_hand_side,
std::vector<std::map<unsigned int,double> > block_boundary_values(n_blocks);
{
int offset = 0, block=0;
- for (std::map<unsigned int,double>::const_iterator
+ for (std::map<types::global_dof_index,double>::const_iterator
dof = boundary_values.begin();
dof != boundary_values.end();
++dof)
offset += matrix.block(block,0).m();
block++;
}
- const unsigned int index = dof->first - offset;
- block_boundary_values[block].insert(std::pair<unsigned int, double> (index,dof->second));
+ const types::global_dof_index index = dof->first - offset;
+ block_boundary_values[block].insert(std::pair<types::global_dof_index, double> (index,dof->second));
}
}
// the whole row.
for (unsigned int block_m=0; block_m<n_blocks; ++block_m)
{
- const std::pair<unsigned int, unsigned int> local_range
+ const std::pair<types::global_dof_index, types::global_dof_index> local_range
= matrix.block(block_m,0).local_range();
std::vector<unsigned int> constrained_rows;
- for (std::map<unsigned int,double>::const_iterator
+ for (std::map<types::global_dof_index,double>::const_iterator
dof = block_boundary_values[block_m].begin();
dof != block_boundary_values[block_m].end();
++dof)
{
template <typename TrilinosMatrix, typename TrilinosVector>
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
TrilinosMatrix &matrix,
TrilinosVector &solution,
TrilinosVector &right_hand_side,
if (boundary_values.size() == 0)
return;
- const std::pair<unsigned int, unsigned int> local_range
+ const std::pair<types::global_dof_index, types::global_dof_index> local_range
= matrix.local_range();
Assert (local_range == right_hand_side.local_range(),
ExcInternalError());
// matrix that we can see. if we can't
// find such an entry, take one
TrilinosScalar average_nonzero_diagonal_entry = 1;
- for (unsigned int i=local_range.first; i<local_range.second; ++i)
+ for (types::global_dof_index i=local_range.first; i<local_range.second; ++i)
if (matrix.diag_element(i) != 0)
{
average_nonzero_diagonal_entry = std::fabs(matrix.diag_element(i));
// figure out which rows of the matrix we
// have to eliminate on this processor
std::vector<unsigned int> constrained_rows;
- for (std::map<unsigned int,double>::const_iterator
+ for (std::map<types::global_dof_index,double>::const_iterator
dof = boundary_values.begin();
dof != boundary_values.end();
++dof)
right_hand_side.compress ();
solution.compress ();
- std::vector<unsigned int> indices;
+ std::vector<types::global_dof_index> indices;
std::vector<TrilinosScalar> solution_values;
- for (std::map<unsigned int,double>::const_iterator
+ for (std::map<types::global_dof_index,double>::const_iterator
dof = boundary_values.begin();
dof != boundary_values.end();
++dof)
template <typename TrilinosMatrix, typename TrilinosBlockVector>
void
- apply_block_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_block_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
TrilinosMatrix &matrix,
TrilinosBlockVector &solution,
TrilinosBlockVector &right_hand_side,
// into blocks for the boundary values.
// To this end, generate a vector of
// maps with the respective indices.
- std::vector<std::map<unsigned int,double> > block_boundary_values(n_blocks);
+ std::vector<std::map<types::global_dof_index,double> > block_boundary_values(n_blocks);
{
int offset = 0, block=0;
- for (std::map<unsigned int,double>::const_iterator
+ for (std::map<types::global_dof_index,double>::const_iterator
dof = boundary_values.begin();
dof != boundary_values.end();
++dof)
offset += matrix.block(block,0).m();
block++;
}
- const unsigned int index = dof->first - offset;
+ const types::global_dof_index index = dof->first - offset;
block_boundary_values[block].insert(
- std::pair<unsigned int, double> (index,dof->second));
+ std::pair<types::global_dof_index, double> (index,dof->second));
}
}
// the whole row.
for (unsigned int block_m=0; block_m<n_blocks; ++block_m)
{
- const std::pair<unsigned int, unsigned int> local_range
+ const std::pair<types::global_dof_index, types::global_dof_index> local_range
= matrix.block(block_m,0).local_range();
std::vector<unsigned int> constrained_rows;
- for (std::map<unsigned int,double>::const_iterator
+ for (std::map<types::global_dof_index,double>::const_iterator
dof = block_boundary_values[block_m].begin();
dof != block_boundary_values[block_m].end();
++dof)
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
TrilinosWrappers::SparseMatrix &matrix,
TrilinosWrappers::Vector &solution,
TrilinosWrappers::Vector &right_hand_side,
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
TrilinosWrappers::SparseMatrix &matrix,
TrilinosWrappers::MPI::Vector &solution,
TrilinosWrappers::MPI::Vector &right_hand_side,
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
TrilinosWrappers::BlockSparseMatrix &matrix,
TrilinosWrappers::BlockVector &solution,
TrilinosWrappers::BlockVector &right_hand_side,
void
- apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
TrilinosWrappers::BlockSparseMatrix &matrix,
TrilinosWrappers::MPI::BlockVector &solution,
TrilinosWrappers::MPI::BlockVector &right_hand_side,
void
- local_apply_boundary_values (const std::map<unsigned int,double> &boundary_values,
- const std::vector<unsigned int> &local_dof_indices,
+ local_apply_boundary_values (const std::map<types::global_dof_index,double> &boundary_values,
+ const std::vector<types::global_dof_index> &local_dof_indices,
FullMatrix<double> &local_matrix,
Vector<double> &local_rhs,
const bool eliminate_columns)
const unsigned int n_local_dofs = local_dof_indices.size();
for (unsigned int i=0; i<n_local_dofs; ++i)
{
- const std::map<unsigned int, double>::const_iterator
+ const std::map<types::global_dof_index, double>::const_iterator
boundary_value = boundary_values.find (local_dof_indices[i]);
if (boundary_value != boundary_values.end())
{
{
template
void
- apply_boundary_values<double> (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values<double> (const std::map<types::global_dof_index,double> &boundary_values,
SparseMatrix<double> &matrix,
Vector<double> &solution,
Vector<double> &right_hand_side,
const bool eliminate_columns);
template
void
- apply_boundary_values<float> (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values<float> (const std::map<types::global_dof_index,double> &boundary_values,
SparseMatrix<float> &matrix,
Vector<float> &solution,
Vector<float> &right_hand_side,
template
void
- apply_boundary_values<double> (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values<double> (const std::map<types::global_dof_index,double> &boundary_values,
BlockSparseMatrix<double> &matrix,
BlockVector<double> &solution,
BlockVector<double> &right_hand_side,
const bool eliminate_columns);
template
void
- apply_boundary_values<float> (const std::map<unsigned int,double> &boundary_values,
+ apply_boundary_values<float> (const std::map<types::global_dof_index,double> &boundary_values,
BlockSparseMatrix<float> &matrix,
BlockVector<float> &solution,
BlockVector<float> &right_hand_side,