Calculate cell center distance from a boundary

80 views
Skip to first unread message

vachanpo...@gmail.com

unread,
Feb 10, 2022, 11:24:40 PM2/10/22
to deal.II User Group
Dear all,

Is there a way to get the shortest distance from cell center to a given boundary in p::d::Triangulation? What I really want is the wall normal distance. Any other suggestions are also welcome.

Thanking in anticipation
Vachan

Wolfgang Bangerth

unread,
Feb 10, 2022, 11:52:30 PM2/10/22
to dea...@googlegroups.com
On 2/10/22 21:24, vachanpo...@gmail.com wrote:
>
> Is there a way to get the shortest distance from cell center to a given
> boundary in p::d::Triangulation? What I really want is the wall normal
> distance. Any other suggestions are also welcome.

This is a very difficult operation to do even in sequential computations
unless you have an analytical description of the boundary. That's because in
principle you would have to compare the current position with all points (or
at least all vertices) on the boundary -- which is very expensive to do if you
had to do it for more than just a few points. The situation does not get
better if you are in parallel, because then you don't even know all of the
boundary vertices.

The only efficient way to do this sort of operation is to solve an eikonal
equation in which the solution function equals the distance to the boundary.
You can't solve it exactly, and so whatever distance you get is going to be a
finite-dimensional approximation of the exact distance function.

Best
W.


--
------------------------------------------------------------------------
Wolfgang Bangerth email: bang...@colostate.edu
www: http://www.math.colostate.edu/~bangerth/

vachan potluri

unread,
Feb 11, 2022, 12:51:49 AM2/11/22
to dea...@googlegroups.com
Dear Dr. Wolfgang,

Thank you very much for the kind reply.
 
This is a very difficult operation to do even in sequential computations
unless you have an analytical description of the boundary. That's because in
principle you would have to compare the current position with all points (or
at least all vertices) on the boundary -- which is very expensive to do if you
had to do it for more than just a few points. The situation does not get
better if you are in parallel, because then you don't even know all of the
boundary vertices.
Completely realise and agree.

The only efficient way to do this sort of operation is to solve an eikonal
equation in which the solution function equals the distance to the boundary.
You can't solve it exactly, and so whatever distance you get is going to be a
finite-dimensional approximation of the exact distance function.
I have got a basic idea of the equation from Wikipedia. Can you kindly also point me to any references which describe its numerical solution technique? I have no background in mathematics, so I have difficulty in understanding any high level content.

Thanks again!

--
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 dealii+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/1df8e903-7124-86e1-2459-9a12a21f17f6%40colostate.edu.

Bruno Turcksin

unread,
Feb 11, 2022, 10:13:00 AM2/11/22
to deal.II User Group
Vachan,

On Friday, February 11, 2022 at 12:51:49 AM UTC-5 vachanpo...@gmail.com wrote:
Dear Dr. Wolfgang,

Thank you very much for the kind reply.
 
This is a very difficult operation to do even in sequential computations
unless you have an analytical description of the boundary. That's because in
principle you would have to compare the current position with all points (or
at least all vertices) on the boundary -- which is very expensive to do if you
had to do it for more than just a few points. The situation does not get
better if you are in parallel, because then you don't even know all of the
boundary vertices.
Completely realise and agree.

Actually what Wolfgang is suggesting is very doable. We have wrappers for the ArborX library https://dealii.org/current/doxygen/deal.II/classArborXWrappers_1_1BVH.html which allows you to find the nearest neighbor between two point clouds very efficiently. You should be able to find the closest vertex on the boundary for 100,000 points in a couple of seconds on the CPU and for several millions of points if you are using a GPU. Right now we only have wrappers for the serial version of ArborX but I have actually started to work on the wrappers for distributed tree. When it's done, you will be able to get the nearest neighbor even if they are on different processors.

Best,

Bruno

Wolfgang Bangerth

unread,
Feb 11, 2022, 11:18:16 AM2/11/22
to dea...@googlegroups.com
On 2/10/22 22:51, vachan potluri wrote:
> This is a very difficult operation to do even in sequential computations
> unless you have an analytical description of the boundary. That's because in
> principle you would have to compare the current position with all points (or
> at least all vertices) on the boundary -- which is very expensive to do if you
> had to do it for more than just a few points. The situation does not get
> better if you are in parallel, because then you don't even know all of the
> boundary vertices.
>
> Completely realise and agree.

I stand corrected by Bruno about this -- I learned something today :-)


> The only efficient way to do this sort of operation is to solve an eikonal
> equation in which the solution function equals the distance to the boundary.
> You can't solve it exactly, and so whatever distance you get is going to be a
> finite-dimensional approximation of the exact distance function.
>
> I have got a basic idea of the equation from Wikipedia. Can you kindly also
> point me to any references which describe its numerical solution technique? I
> have no background in mathematics, so I have difficulty in understanding any
> high level content.

The best methods for the eikonal equation are all in the class of "fast
marching method". It has its own wikipedia page:
https://en.wikipedia.org/wiki/Fast_marching_method

vachanpo...@gmail.com

unread,
Feb 12, 2022, 11:58:35 PM2/12/22
to deal.II User Group
Drs. Bruno and Wolfgang,
Actually what Wolfgang is suggesting is very doable. We have wrappers for the ArborX library https://dealii.org/current/doxygen/deal.II/classArborXWrappers_1_1BVH.html which allows you to find the nearest neighbor between two point clouds very efficiently. You should be able to find the closest vertex on the boundary for 100,000 points in a couple of seconds on the CPU and for several millions of points if you are using a GPU. Right now we only have wrappers for the serial version of ArborX but I have actually started to work on the wrappers for distributed tree. When it's done, you will be able to get the nearest neighbor even if they are on different processors.
That would be great! I think it would be very useful for applications like turbulent flows where this information is required.

The best methods for the eikonal equation are all in the class of "fast
marching method". It has its own wikipedia page:
https://en.wikipedia.org/wiki/Fast_marching_method

Thank you very much!

Bruno Turcksin

unread,
Feb 17, 2022, 9:05:33 AM2/17/22
to deal.II User Group
Hello,

Here is the PR https://github.com/dealii/dealii/pull/13394 that adds the new wrappers for ArborX

Best,

Bruno

vachan potluri

unread,
Feb 17, 2022, 9:42:34 PM2/17/22
to dea...@googlegroups.com
Hello,
Here is the PR https://github.com/dealii/dealii/pull/13394 that adds the new wrappers for ArborX
Best,
Bruno

Thank you very much! Didn't expect it to come so fast :) !
Reply all
Reply to author
Forward
0 new messages