Skip to content
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

libCEED interface: Partial and matrix-free assembly support for H(div) and H(curl) vector FE spaces #3626

Closed

Conversation

sebastiangrimberg
Copy link
Contributor

@sebastiangrimberg sebastiangrimberg commented Apr 25, 2023

NOTE: Based on #3625

NOTE: Waiting on CEED/libCEED#1156 (merged), CEED/libCEED#1196 (merged), and CEED/libCEED#1168 in libCEED to fully support diagonal assembly and high-order H(curl) spaces.

This PR adds PA and MF assembly support for: VectorFEMassIntegrator, DivDivIntegrator, and CurlCurlIntegratorfor square BilinearForm objects, and MixedVectorGradientIntegrator, and PAMixedVectorCurlIntegrator for MixedBilinearForm objects. Arbitrary order H(div) and H(curl) finite element spaces on tensor-product element meshes or simplex or mixed meshes are supported. In all cases, the basis operation does not make use of tensor-product structure for these vector finite elements, which is a limitation of libCEED and leads to different performance (though surprisingly not that much different in my testing on CPU at least) versus the native MFEM PA backends for tensor-element meshes. Unit tests covering this new functionality have been added to tests/unit/ceed/test_ceed.cpp.

GPU libCEED backends do not yet support the special element restriction and (non-tensor) basis operations for vector FE spaces, but these will hopefully come soon. For now, all cpu/self/*/serial and cpu/self/*/blocked backends have been successfully tested.

@sebastiangrimberg sebastiangrimberg added the WIP Work in Progress label May 4, 2023
@sebastiangrimberg sebastiangrimberg changed the base branch from master to sjg/libceed-coeff-dims May 4, 2023 21:35
@sebastiangrimberg sebastiangrimberg force-pushed the sjg/libceed-hcurl-hdiv-dev branch 2 times, most recently from a6c8419 to bd3388d Compare May 4, 2023 23:42
@sebastiangrimberg sebastiangrimberg force-pushed the sjg/libceed-coeff-dims branch 2 times, most recently from 3de4ebd to 3b42a09 Compare July 3, 2023 20:51
… VectorFEMassIntegrator, DivDivIntegrator, and CurlCurlIntegrator

WIP: Element restriction with orientations for H(div) and (order 1) H(curl) elements, vector FE libCEED basis construction.
Tests now pass. Note a tolerance issue for libCEED assembly showed up for the fichera-amr.mesh test where errors of ~1e-10 in the multiplication appeared. This was temporarily patched by using a coarser tolerance in unit tests for nonconforming meshes.
@sebastiangrimberg
Copy link
Contributor Author

Closing this as it's more suitable to be integrated directly into downstream application code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant