-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
Add support for an MFEM finite element backend #29632
Comments
I've added a data mirroring bullet motivated by conversation with @friedmud. @alexanderianblair I believe you all have been thinking about transfers recently? I think we could possibly avoid having to write new transfer objects |
We went down a ExternalProblem/syncSolutions route in Platypus's predecessor Apollo to synchronise nodal and elemental variable data between MFEM and libMesh representations (eg. here). Are you thinking of avoiding writing new transfer objects by just converting MFEM data to a libMesh representation, transfer, and then converting back from libMesh to MFEM (if required)? In the MFEM<->MFEM subapp case, I'm not sure this makes sense, since there are FE types and orders not available in libMesh that would prevent that intermediate step. In the MFEM<->libMesh case, it's an option, but philosophically I'm hesitant in mixing MFEM and libMesh representations in the same subapp - it seems that applying DoF permutations etc. for converting between MFEM and libMesh representations should be a Transfer's job. We should definitely avoid building both a libMesh and MFEM mesh for the same subapp though unless absolutely necessary. |
Very much agree that we should not unnecessarily build a libmesh representation when it's not required @friedmud brought up the idea of mixing libmesh and MFEM objects within a single input file as one way that MOOSE users might begin dipping their toes in MFEM land. Of course this would not do much for you (or it may actively hurt you) from a performance standpoint, but it could be beneficial pedagogically. There could also be instances in which you want to do "fully coupled" physics with some capability that is only in wrapped MFEM (e.g. missing FE types and orders) and some other capability that is only in wrapped libMesh (e.g. I do not know the contact capabilities in MFEM well yet and I don't believe you all have done any wrapping of it either way) |
It sounds like you ultimately concluded the I am definitely leery of having to write new data transfers. It has taken us years and years (work done by @friedmud, @fdkong, @GiudGiud) to increase the robustness and functionality of transfers and the process is still ongoing. And now we are throwing in the added complexity of mixing finite element backends. Of course as you say, our existing transfers will not help in an MFEM-to-MFEM transfer context |
If you can write a functor material that provides a MFEM field value on an ElemArg / ElemPointArg, I can write a general MultiAppGeneralFieldFunctorTransfer that will do MFEM -> LibMesh pretty easily (and contribute some nice functionality for libMesh<->libMesh too) |
The main reason I'm keen to avoid returning to an The Of course, if the effort required to introduce a new set of
We can easily define a |
sounds perfect to me. |
I'm thinking of starting with just the former ( |
Motivation
We are migrating the work by UKAEA done in Platypus to MOOSE so that users may create MOOSE input files that leverage MFEM as the finite element backend
Design
Impact
Gives users additional choices for finite elements and also potential for GPU computing through MFEM
The text was updated successfully, but these errors were encountered: