LLNL / libROM

Model reduction library with an emphasis on large scale parallelism and linear subspace methods
https://www.librom.net
Other
203 stars 36 forks source link

libROM with Dealii #92

Open hsllo opened 2 years ago

hsllo commented 2 years ago

Good afternoon,

I was wondering if libROM is compatible with the library Dealii. I would like to include a ROM implementation to an existing solver developed with Dealii.

Thank you very much. H.

samyakdarshan commented 2 years ago

Interesting..

dylan-copeland commented 2 years ago

Thank you @hsllo for the interesting question. Currently, libROM does not support deal.II applications, but we would gladly welcome the contribution of a PR that adds this support. Implementing this should not be very difficult for a deal.II developer, but unfortunately the internal libROM team does not have any deal.II developers. This is a good opportunity for you or other libROM users to expand the capabilities of libROM, enabling more users.

I would be glad to help with any questions about how to add support, and I will describe here what needs to be done for deal.II or any other FEM code. Currently, libROM supports MFEM, as illustrated by the example solver in libROM/examples/prom/mixed_nonlinear_diffusion.cpp (and the open-source MFEM miniapp Laghos on github). The only part of libROM specific to MFEM is the class SampleMeshManager in libROM/lib/mfem/SampleMesh.hpp and the corresponding cpp file. This class has several public member functions that would need to be implemented for deal.II. Hopefully the documentation of those functions is clear enough. Basically, this class should take as input an array of FEM spaces (constructor) and variables defined on those spaces (RegisterSampledVariable), along with their sampled DOFs. It then creates a new sample mesh defined by the elements containing sampled DOFs (ConstructSampleMesh), and it provides the capability to get full-order sampled DOFs from a vector of DOFs in a sample mesh FEM space (GetSampledValues). Also, GatherDistributedMatrixRows gathers rows from a ROM basis matrix, to construct a matrix on the sample mesh space. Basically, for deal.II support, one would need to make a new version of this class with these functions implemented for deal.II.

The most challenging aspect of implementing this is to define and work with index maps between full-order space DOFs and sample mesh space DOFs. For MFEM, we support the general case of multiple spaces and multiple variables on each space, but you may only need one space and one variable, which would be simpler. This requires knowledge of deal.II. The MFEM implementation in SampleMesh.cpp could be used as a guiding example, but it is quite complicated and not easy to read. Please feel free to ask any questions if you decide to implement this for deal.II.

samyakdarshan commented 2 years ago

Hello @dylan-copeland , Can I help you with this issue?

dylan-copeland commented 2 years ago

Hello @dylan-copeland , Can I help you with this issue?

Hi @samyakdarshan, if you would like to work on deal.II support, I will be glad to answer any questions and provide some assistance from the libROM side (I can help with libROM but not deal.II). Please feel free to work on this and create a libROM PR.

dylan-copeland commented 1 year ago

Please note that my comment on January 24, 2022, was in reference to hyperreduction for projection-based (POD) ROM methods, which are code-invasive and depend on the FEM library being used (e.g. MFEM, deal.II, etc.). I should also mention that libROM features some less invasive ROM methods, such as DMD, LaSDI, gLaSDI, which would be much easier to use in other libraries such as deal.II. These less invasive methods depend only on data, so an application based on deal.II would simply need to provide data. If anyone would like to make some examples of using a libROM method like DMD for a deal.II problem, such examples would be welcome and could be shown possibly on https://www.librom.net.

samyakdarshan commented 4 months ago

Yes, got it. Sorry was bit held up with other work. Will work on hyperreduction for projection-based (POD) ROM methods.

Thanks for the inputs! For DMD and others, I'll try to create examples at the end.