You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've been looking at how to efficiently implement patch-based smoothers, starting from the version we already have. Here are the notes left by Alberto within the code:
Rationale behind distributed PatchFESpace:
1. Patches have an owner. Only owners compute subspace correction.
If am not owner of a patch, all dofs in my patch become -1.
2. Subspace correction on an owned patch may affect DoFs which
are non-owned. These corrections should be sent to the owner
process. I.e., NO -> O (reversed) communication. [PENDING]
3. Each processor needs to know how many patches "touch" its owned DoFs.
This requires NO->O communication as well. [PENDING]
I have though about it, and I think there are a couple improvements that can be made:
First, I think communicating the counts is not general enough. I believe some literature uses weights which can be non-homogeneous and depend, for instance, on the model parameters. So we should have patch-dependent weights.
Second, I believe we should communicate the corrections per dof, not per patch. This would save us communications.
This is what I though of implementing (let me know if you think I've missed something, which is very possible): The indexes are consistently i for the dofs, j for the patches and k for the processors sharing a certain dof.
Weights:
In general, we probably want to have weights which are different for each patch, i.e
I've been looking at how to efficiently implement patch-based smoothers, starting from the version we already have. Here are the notes left by Alberto within the code:
I have though about it, and I think there are a couple improvements that can be made:
This is what I though of implementing (let me know if you think I've missed something, which is very possible): The indexes are consistently
i
for the dofs,j
for the patches andk
for the processors sharing a certain dof.Weights:
In general, we probably want to have weights which are different for each patch, i.e
The$w_{ij}$ are local (counts, etc...) and get reduced using their partial sums to obtain
Then this local sums get all-reduced by NN coms to obtain the global$w_i$ .
Injection:
Again, we create the local reductions
which then get all-reduced to get the final
If we consider the weights constant, we could also normalize the$w_{i j_k}$ beforehand, and then we have simply
The text was updated successfully, but these errors were encountered: