gridap / Gridap.jl

Grid-based approximation of partial differential equations in Julia
MIT License
707 stars 98 forks source link

Nedelec elements for triangular/tetrahedral meshes? #413

Open stevengj opened 4 years ago

stevengj commented 4 years ago

Currently it seems to only support quadrilateral/hexahedral meshes. Are there any plans to implement this?

@WenjieYao would love to help with this, but is new to this kind of FE code so would need more guidance… What part of this implementation would need to be generalized/rewritten to handle tetrahedra?

santiagobadia commented 4 years ago

It would be nice to implement Nedelec elements on tetrahedra/triangles. But due to time restrictions, it is not in my shortlist.

If @WenjieYao wants to develop it, it would be good to take as a starting point the Nedelec implementation for hexahedra. The way moments (degrees of freedom) for the Nedelec elements are different. I would start understanding Nedelec FEs for HEXs and TETs. You can use this publication.

For instance, the local finite element space (prebasis) for hexahedra defined below (see Eqs. (10) or (11) in the article)

https://github.com/gridap/Gridap.jl/blob/4c94645c2cb44e60d7efd48de01f8826616957bf/src/ReferenceFEs/NedelecRefFEs.jl#L14

must be replaced by the space defined in (14) in the article.

The cell moments basis here for HEX (see (17c) in the article)

https://github.com/gridap/Gridap.jl/blob/4c94645c2cb44e60d7efd48de01f8826616957bf/src/ReferenceFEs/NedelecRefFEs.jl#L174

should be replaced by MonomialBasis(et,ep,order-D+1) where D is the space dim.

In 3D, the basis used for the face moments for HEX in (17b) that is implemented here

https://github.com/gridap/Gridap.jl/blob/4c94645c2cb44e60d7efd48de01f8826616957bf/src/ReferenceFEs/NedelecRefFEs.jl#L136

must be modified to implement (19b). This change is not only a modification of the basis for the moments but also a change in the expression of the moment itself. In any case, the expression is quite simple.

With all these changes, we would have a Nedelec Ref FE (using a GenericRefFE with these degrees of freedom and the prebasis). The local degrees of freedom are used in the GenericRefFE to transform the prebasis into the final Nedelec local basis.

Further ingredients are the definition of degrees of freedom in the physical space (see Sect. 4.1.2) for interpolation of functions (e.g., for boundary or initial conditions) into this space, and the definition of the global FE space using a Piola covariant mapping from the reference FE to the physical FE (sect. 4.1), but this part is quite simple with the Gridap machinery.

I can help in the process, if you want to look at this. The ReferenceFE module is almost self-contained and quite small.

WenjieYao commented 4 years ago

@santiagobadia Thanks for the detailed reply. Can you send a new link or email me the article? I can't get access to the publication as it requires a Monash University account.

santiagobadia commented 4 years ago

@WenjieYao I have updated the link. Now it should work. We are working on the Piola transformations from the reference to the physical space, so the last part (not discussed in detail) about the physical space can be omitted. Hopefully, it will be ready soon. Still, you will need to implement the degrees of freedom / shape functions at the reference space.