-
Notifications
You must be signed in to change notification settings - Fork 536
GPU Assembly of LOR DG Preconditioner #4834
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
base: master
Are you sure you want to change the base?
Conversation
…r sx, sy, and sz are changed).
…here nx, ny, nz, sx, sy, and/or sz are changed.
Add commented-out code for testing 3D face permutations
(Test still fails)
Resolve error: lambda capture 'this' is not used
This PR is now under review (see the table in the PR description). To help with the review process, please do not force push to the branch. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces GPU‐accelerated assembly for the LOR DG preconditioner used in the LOR solvers miniapp. Key changes include the addition of batched GPU assembly kernels and associated tests, updated mesh permutation utilities and integration rule handling, and modifications to penalty parameter scaling in the DG discretizations.
Reviewed Changes
Copilot reviewed 16 out of 18 changed files in this pull request and generated 3 comments.
Show a summary per file
File | Description |
---|---|
tests/unit/linalg/test_same_matrices.hpp | New utility to compare matrices for unit tests. |
tests/unit/fem/test_lor_dg.cpp | Unit tests updated for LOR DG preconditioner using batched assembly. |
tests/unit/fem/test_lor_batched.cpp | Refactored tests to remove redundant implementations for DG. |
tests/unit/fem/test_face_permutation.cpp | Mesh permutation tests now use new MeshOrientation helpers. |
tests/unit/fem/make_permuted_mesh.{hpp,cpp} | Refactored mesh permutation functionality for clarity and consistency. |
miniapps/solvers/plor_solvers.cpp & lor_solvers.cpp | Updated assembly-level conditions and changed penalty scaling (kappa) to 10×(order+1)². |
fem/pfespace.hpp | Added accessor for the face neighbor global dof map. |
fem/lor/lor_dg_impl.hpp & lor_dg.hpp | Introduced GPU assembly implementation for DG preconditioning with new methods for face info and boundary penalty factor computation. |
fem/lor/lor_batched.{hpp,cpp} | Extended batched LOR assembly support for DG spaces with customized CSR conversion routines. |
fem/lininteg.hpp | Minor documentation update for DGDiffusionIntegrator error terms. |
fem/fe/face_map_utils.hpp | Added new inline function to compute face-to-volume index mapping. |
fem/bilininteg.hpp | Exposed DG penalty parameter via a new getter in DGDiffusionIntegrator. |
Files not reviewed (2)
- fem/CMakeLists.txt: Language not supported
- tests/unit/CMakeLists.txt: Language not supported
Co-authored-by: Will Pazner <11493037+pazner@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @Toni-ko for this contribution!
Looks good to me, but I was also heavily involved in the PR, so we should get two more independent approvals.
AMR + DG diffusion + PA is not yet implemented
Was previously potentially dereferencing null pointer
BTW @YohannDudouit, the preconditioner is defined in section 4.5 of this paper. |
This pr adds a batched gpu assembly of the lor dg preconditioner. New preconditioner is used in the lor solvers miniapp. A unit test is added to compare with legacy implementation.
PR Checklist
make style
.CHANGELOG
:CHANGELOG
to group with other related features?INSTALL
:make
orcmake
have a new target?.github
.appveyor.yml
.gitignore
:make distclean; git status
shows any files that were generated from the source by the project (not an IDE) but we don't want to track in the repository.examples/makefile
:SEQ_EXAMPLES
andPAR_EXAMPLES
variables.clean
target..gitignore
file.examples/CMakeLists.txt
:ALL_EXE_SRCS
variable.THIS_TEST_OPTIONS
is set correctly for the new example.doc/CodeDocumentation.dox
.examples/pumi
), list it indoc/CodeDocumentation.conf.in
src/examples.md
.src/examples.md
andsrc/img
.examples.md
, list the example under the appropriate categories, add new categories if necessary.features.md
.makefile
andmakefile
in corresponding miniapp directory..gitignore
file.CMakeLists.txt
file in theminiapps
directory, if the new miniapp is in a new directory.CMakeLists.txt
file in the new miniapp directory.doc/CodeDocumentation.dox
miniapps/nurbs
), add it toMINIAPP_SUBDIRS
in themakefile
.miniapps/nurbs
), list it indoc/CodeDocumentation.conf.in
src/meshing.md
andsrc/electromagnetics.md
files.src/examples.md
andsrc/img
.features.md
.mfem/web
repo.README
(rare).doc/CodeDocumentation.dox
(rare).make unittest
to make sure all unit tests pass.tests/scripts
.