-
Notifications
You must be signed in to change notification settings - Fork 471
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
Confusion regarding L2_FECollection, Boundary Integrators #2320
Comments
I think you bring up some valid points. I don't have all the answers to your questions, but I can try to clarify a couple of the points.
I believe this is an intentional design decision. An interior face in an L2 space is not a well-defined finite element, because the trace of the DG field on that face is double-valued. Now, on the domain boundary, the trace actually is single-valued, but I don't believe MFEM supports working with the boundary as finite elements, partly because (depending on the DG basis), there are not necessarily any "boundary DOFs" in the element (all the DOFs may be interior, as in the case of Gauss-Legendre basis).
My understanding is that I completely agree that the documentation could be improved.
I largely agree. Making them different types would be nice, so we could get compiler errors vs. runtime errors. It is hard to anticipate how feasible this refactor would be, but it would be good to think about. Other (less comprehensive) solutions could include better documentation or runtime verification (with a better error message). Note that in your example, the problem is not that
This should be fixed, I agree. |
I'll add a "todo" label with the intent to add better documentation for the various |
|
|
I'm trying to use mfem to build some tools for doing surface integrals in serac/smith, and running into several confusing issues related to using an L2_FECollection with different boundary integrators:
Is this expected? Conceptually, whether or not an element exists seems like a property of the mesh (which is the same in both cases).
AddBoundaryIntegrator
andAddBdrFaceIntegrator
. The doxygen documentation has only tautological descriptions of these functions:LinearForm::AddBdrFaceIntegrator
: "Adds new Boundary Face Integrator"LinearForm::AddBoundaryIntegrator
: "Adds new Boundary Integrator"LinearForm::AddBdrFaceIntegrator
orLinearForm::AddBoundaryIntegrator
, but there is nothing in place to convey or enforce this, resulting in mysterious segfaults later on. e.g.It is very confusing to have a function named
AddBoundaryIntegrator
that does not support something calledBoundary***Integrator
(and yet, still compiles without issue).Similar problems exist with
BilinearForm::AddBoundaryIntegrator
vs.BilinearForm::AddBdrFaceIntegrator
. If BoundaryIntegrators and BdrFaceIntegrators are fundamentally different things, making them different types would completely prevent this issue, by failing to compile. Alternatively,Add***Integrator
could verify that its argument is supported, and emit an error otherwise.LinearForm
appears to be incorrect. It says thatBoundaryLFNormalIntegrator
is supported on L2 spaces, but it doesn't appear to implementAssembleRHSElementVect (FiniteElement &, FaceElementTransformations &, Vector &)
, making it unusable by bothLinearForm::AddBdrFaceIntegrator
andLinearForm::AddBoundaryIntegrator
:The text was updated successfully, but these errors were encountered: