本文整理汇总了C++中BlockVector::get_block方法的典型用法代码示例。如果您正苦于以下问题:C++ BlockVector::get_block方法的具体用法?C++ BlockVector::get_block怎么用?C++ BlockVector::get_block使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BlockVector
的用法示例。
在下文中一共展示了BlockVector::get_block方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mult
//-----------------------------------------------------------------------------
void BlockMatrix::mult(const BlockVector& x, BlockVector& y,
bool transposed) const
{
if (transposed)
{
dolfin_error("BlockMatrix.cpp",
"compute transpose matrix-vector product",
"Not implemented for block matrices");
}
// Create temporary vector
dolfin_assert(matrices[0][0]);
// Loop over block rows
for(std::size_t row = 0; row < matrices.shape()[0]; row++)
{
// RHS sub-vector
GenericVector& _y = *(y.get_block(row));
const GenericMatrix& _matA = *matrices[row][0];
// Resize y and zero
if (_y.empty())
_matA.init_vector(_y, 0);
_y.zero();
// Loop over block columns
std::shared_ptr<GenericVector>
z_tmp = _matA.factory().create_vector();
for(std::size_t col = 0; col < matrices.shape()[1]; ++col)
{
const GenericVector& _x = *(x.get_block(col));
dolfin_assert(matrices[row][col]);
matrices[row][col]->mult(_x, *z_tmp);
_y += *z_tmp;
}
}
}