Hi Wolfgang,

Thanks for the help! Point taken about neighboring processes and 
communication latency.

Re: FEPointEvaluation and RemotePointEvaluation, I think I actually need 
more than that because I need the quadrature points on each of the cells 
that I'm querying, so I can just do the standard procedure with FEValues 
and the corresponding Quadrature object.

I'll think harder about how to avoid latency issues.

- Lucas
On Monday, April 24, 2023 at 5:08:20 PM UTC-5 Wolfgang Bangerth wrote:

>
> > I'd like to coarse-grain a finite element field, where the 
> coarse-graining 
> > procedure is just convolving the field with a Gaussian function. More 
> > concretely, I'd like to do the following:
> > 
> > 
> > For a regular Triangulation, we can calculate <X> at every quadrature 
> point by 
> > iterating through the entire Triangulation and calculating the integrand 
> at 
> > all of the quadrature points. In fact, because there is a Gaussian in 
> distance 
> > in the integrand, we only have to look at cells a distance ~3a_0 away.
> > 
> > However, for a distributed triangulation it could be the case that cells 
> 3a_0 
> > away may be on a different MPI process. My first question is: is there a 
> way 
> > to extend the number of ghost cells along the boundary such that they 
> are some 
> > total distance away from the locally-owned cells on the edge of the 
> domain? 
>
> p4est (our parallel mesh engine) actually allows for "thicker" ghost 
> layers, 
> but we never tried that in deal.II and I doubt that it would work without 
> much 
> trouble. Either way, p4est allows having a ghost layer of N cells width 
> whereas you need one that has a specific Euclidean distance from the 
> locally 
> owned cells -- so these are different concepts anyway.
>
>
>
> > And if not, is there a nice utility to allow me to access neighboring 
> cells on 
> > other domains (albeit, at the cost of some MPI messages)?
>
> Check out the FEPointEvaluation and Utilities::MPI::RemotePointEvaluation 
> classes. I think they will do what you need.
>
>
> > Otherwise, is there a good way to do this? My guess would be to do all 
> of the 
> > local integrations first, and make a vector of cells which end up 
> butting 
> > against the boundary. Then one could use the `ghost_owners` function to 
> send 
> > information about the edge cells to the adjacent subdomains, which would 
> then 
> > send information back. However that seems a little in the weeds of using 
> MPI 
> > and also would require some error-prone bookkeeping, which I would like 
> to 
> > avoid if possible.
>
> Yes, and there's a bug in your algorithm as well: Just because the ghost 
> cells 
> are owned by a specific set of processed doesn't mean that the cell you 
> need 
> to evaluate the solution on is actually owned by one of the neighboring 
> processes.
>
> Secondly, what you *really* want to do is assess first which points you 
> need 
> information on from other processes, send those points around, and while 
> you 
> are waiting for these messages to be delivered and answered, you want to 
> work 
> on your local cells -- not the other way around: You want to hide 
> communication latency behind local work.
>
> Best
> W.
>
> -- 
> ------------------------------------------------------------------------
> Wolfgang Bangerth email: [email protected]
> www: http://www.math.colostate.edu/~bangerth/
>
>
>

-- 
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/401a3e47-f03a-4111-90b7-a58069549977n%40googlegroups.com.

Reply via email to