Skip to content
Snippets Groups Projects
Commit 2651bae7 authored by Jonathan Youett's avatar Jonathan Youett
Browse files

Transferoperators are now stored in shared pointer

parent 514b6ce9
No related branches found
No related tags found
1 merge request!20Let mutligridstep take over ownership of transfer operators if handed over in shared pointer
Pipeline #
......@@ -16,8 +16,8 @@ preprocess()
{
// Unset the recompute bitfields, so we compute the full stiffness matrix hierarchy at the beginning
for (size_t i=0; i<this->mgTransfer_.size(); i++) {
dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[i])->setRecomputeBitField(nullptr);
dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[i])->setCriticalBitField(nullptr);
std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[i])->setRecomputeBitField(nullptr);
std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[i])->setCriticalBitField(nullptr);
}
// Call preprocess of the base class
......@@ -40,7 +40,7 @@ preprocess()
{
recompute_[i].resize(hasObstacleHierarchy_[i]->size());
recompute_[i].unsetAll();
dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[i])->setRecomputeBitField(&recompute_[i]);
std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[i])->setRecomputeBitField(&recompute_[i]);
}
oldCritical_.resize(this->numLevels());
......@@ -212,12 +212,12 @@ void MonotoneMGStep<MatrixType, VectorType>::iterate()
for (int j=0; j<dim; j++)
changed[i][j] = (changed[i][j] || recompute_[level][i][j]);
dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[level-1])->restrict(changed, recompute_[level-1]);
std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[level-1])->restrict(changed, recompute_[level-1]);
oldCritical_[level] = critical;
// Set bitfield of nodes that will be truncated
dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[level-1])->setCriticalBitField(&critical);
std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[level-1])->setCriticalBitField(&critical);
// Restrict stiffness matrix
this->mgTransfer_[level-1]->galerkinRestrict(*(mat[level]), *(const_cast<MatrixType*>(mat[level-1].get())));
......@@ -259,7 +259,7 @@ void MonotoneMGStep<MatrixType, VectorType>::iterate()
// Remove pointer to the temporary critical bitfield
// this avoids a memory problem when the same mmg step is reused
dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[level-1])->setCriticalBitField(nullptr);
std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[level-1])->setCriticalBitField(nullptr);
// restore the true (non-defect) obstacles
*obstacles[level] = obstacleBackup;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment