void initialize(const ConstraintMatrix &constraints);
/**
+ * @deprecated This function is of no effect. Only the block info
+ * structure in DoFInfo is being used.
+ *
* Store information on the local block structure. If the
* assembler is inititialized with this function,
* initialize_info() will generate one local matrix for each
* In spite of using local block structure, all blocks will be
* enteres into the same global matrix, disregarding any global
* block structure.
- *
- * @note The argument of this function will be copied into the
- * member object #local_indices. Thus, every subsequent change
- * in the block structure must be initialzied or will not be
- * used by the assembler.
*/
- void initialize_local_blocks(const BlockIndices &local_indices);
+ void initialize_local_blocks(const BlockIndices &);
/**
* Initialize the local data in the DoFInfo object used later
void assemble(const DOFINFO &info1,
const DOFINFO &info2);
private:
- /**
- * The object containing the local block structure. Set by
- * initialize_local_blocks() and used by assembling functions.
- */
- BlockIndices local_indices;
-
/**
* The global residal vectors filled by assemble().
*/
* by default, the obvious choice of taking a single local matrix with
* dimensions equal to the number of degrees of freedom of the
* cell. Alternatively, a local block structure can be initialized
- * with initialize_local_blocks(). After this, the local data will be
+ * in DoFInfo. After this, the local data will be
* arranged as an array of n by n FullMatrix blocks, which are
- * ordered lexicographically in DoFInfo. Note that
- * initialize_local_blocks() has to be called before initialize_info()
- * to take the desired effect.
+ * ordered lexicographically in DoFInfo.
*
* @ingroup MeshWorker
* @author Guido Kanschat, 2009
* In spite of using local block structure, all blocks will be
* enteres into the same global matrix, disregarding any global
* block structure.
- *
- * @note The argument of this function will be copied into the
- * member object #local_indices. Thus, every subsequent change
- * in the block structure must be initialzied or will not be
- * used by the assembler.
*/
- void initialize_local_blocks(const BlockIndices &local_indices);
+ void initialize_local_blocks(const BlockIndices &);
/**
* Initialize the local data in the DoFInfo object used later
void initialize(const MGConstrainedDoFs &mg_constrained_dofs);
/**
+ * @deprecated This function is of no effect. Only the block info
+ * structure in DoFInfo is being used.
+ *
* Store information on the local block structure. If the
* assembler is inititialized with this function,
* initialize_info() will generate one local matrix for each
* In spite of using local block structure, all blocks will be
* enteres into the same global matrix, disregarding any global
* block structure.
- *
- * @note The argument of this function will be copied into the
- * member object #local_indices. Thus, every subsequent change
- * in the block structure must be initialzied or will not be
- * used by the assembler.
*/
- void initialize_local_blocks(const BlockIndices &local_indices);
+ void initialize_local_blocks(const BlockIndices &);
/**
* Initialize the matrices #flux_up and #flux_down used for
*/
SmartPointer<const MGConstrainedDoFs,MGMatrixSimple<MATRIX> > mg_constrained_dofs;
- /**
- * The object containing the local block structure. Set by
- * initialize_local_blocks() and used by assembling functions.
- */
- BlockIndices local_indices;
-
/**
* The smallest positive number that will be entered into the
* global matrix. All smaller absolute values will be treated as
template <class MATRIX>
inline void
- ResidualSimple<MATRIX>::initialize_local_blocks(const BlockIndices &b)
- {
- local_indices = b;
- }
+ ResidualSimple<MATRIX>::initialize_local_blocks(const BlockIndices &)
+ {}
template <class VECTOR>
}
else
{
- if (local_indices.size() == 0)
+ if (info.indices_by_block.size() == 0)
constraints->distribute_local_to_global(info.vector(k).block(0), info.indices, (*residuals(k)));
else
for (unsigned int i=0;i != info.vector(k).n_blocks();++i)
}
else
{
- if (local_indices.size() == 0)
+ if (info1.indices_by_block.size() == 0 && info2.indices_by_block.size() == 0)
{
constraints->distribute_local_to_global
(info1.vector(k).block(0), info1.indices, (*residuals(k)));
constraints->distribute_local_to_global
(info2.vector(k).block(0), info2.indices, (*residuals(k)));
}
- else
+ else if (info1.indices_by_block.size() != 0 && info2.indices_by_block.size() != 0)
{
for (unsigned int i=0;i<info1.vector(k).n_blocks();++i)
{
(info2.vector(k).block(i), info2.indices_by_block[i], (*residuals(k)));
}
}
+ else
+ {
+ Assert(false, ExcNotImplemented());
+ }
}
}
}
template <class MATRIX>
inline void
- MGMatrixSimple<MATRIX>::initialize_local_blocks(const BlockIndices &b)
- {
- local_indices = b;
- }
+ MGMatrixSimple<MATRIX>::initialize_local_blocks(const BlockIndices &)
+ {}
template <class MATRIX>
inline void
MGMatrixSimple<MATRIX>::initialize_info(DOFINFO &info, bool face) const
{
- const unsigned int n = local_indices.size();
+ const unsigned int n = info.indices_by_block.size();
if (n == 0)
info.initialize_matrices(1, face);
Assert(info.level_cell, ExcMessage("Cell must access level dofs"));
const unsigned int level = info.cell->level();
- if (local_indices.size() == 0)
+ if (info.indices_by_block.size() == 0)
{
assemble((*matrix)[level], info.matrix(0,false).matrix,
info.indices, info.indices, level);
const unsigned int level1 = info1.cell->level();
const unsigned int level2 = info2.cell->level();
- if (local_indices.size() == 0)
+ if (info1.indices_by_block.size() == 0)
{
if (level1 == level2)
{