-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Types of adjacencies #25
Comments
Hi, thanks! The package has some pre-history from our work in C++. And it would be significantly less comprehensive without the contributions of @chmerdon who does research in finite elements (See GradientRobustMultiphysics.jl). That said, the package so far is being developed in order to get our "frontend packages" GradientRobustMultiphysics.jl and VoronoiFVM.jl to speed (which means that we can do simulaition projects and publish papers; without that it would be hard to justify the efforts we put into Julia), and I am well aware that it is quite eclectic and could be better documented... So answering your question might help to improve this situation. Some core decisions behind this package:
The first item sets up a dividing line to the style of other Julia packages. One of the ideas in the back of my head is to provide interfaces which would allow to bridge this divide. And I am also aware of FinEtools.jl which seems to have grown quite impressively as well since I first looked. |
The reason I started looking into ExtendableGrids was because I was attempting to understand GradientRobustMultiphysics (@chmerdon). :-) And I couldn't quite understand how the assembly worked, which meant that I had to understand extendable grids. The packed vector a la sparse matrix is a good idea. I was contemplating to introduce that in https://github.com/PetrKryslUCSD/MeshCore.jl for incidence relations that were "irregular". In the end I decided to use a vector of vectors, because of convenience. But the packed vector would be a much better choice because of the reduced memory fragmentation. An interesting aspect is: when the collection of the entities is heterogenous (aka different element types), one has to store the type (which you do), or dispatch with a switch statement. In either case it seems to me that during assembly, a context switch is needed. For performance reasons I tried to avoid this both in https://github.com/PetrKryslUCSD/FinEtools.jl and in https://github.com/PetrKryslUCSD/Elfel.jl. Then, when looping over finite elements, the quadrature rule is fixed, and a number of things can be precomputed once before the loop starts. I'm trying to understand what happens when the collection of finite elements is heterogenous: how is the context switching handled, and what the performance impact might be. I have had some ideas on whether and how to extend MeshCore to heterogenous collections. The advantage of MeshCore is that it can compute arbitrary incidence relations needed in more complicated FEM (for instance when degrees of freedom live on edges). Its disadvantage is currently that it can only work with homogeneous collections. This is the consequence of not wanting to switch contexts when working with the collection. The lazy creation of the adjacencies (or, as I call them, incidence relations) is a great idea. I couldn't quite see how the creation of arbitrary adjacencies (for instance face to edge) was done. I must have missed something. |
Thanks for your interest in GradientRobustMultiPhysics :) I try to give some insights into some aspects of the assembly:
|
Cool, thanks for the guide, Christian. I will follow those breadcrumbs... |
Hi,
Congratulations on an impressive piece of work!
I started studying the package, but I don't see so far if it is possible to derive adjacency relationships such as faces to nodes, nodes to faces, faces to faces, etc. And what the definitions should be: for instance face to face. One to many?
Thanks.
P
The text was updated successfully, but these errors were encountered: