Skip to content

Draft: ProcessBL new implementation that retains both face(FaceNodes) and edge (EdgeNodes) curvature.

Issue/feature addressed

The legacy implementation of the ProcessBL directly threw away/deleted the face curvature (faceNodes) and relied on propagating only the edge curvature (EdgeNodes). This significantly deteriorates the geometrical accuracy of the meshes, especially in regions with high or non-uniform curvature. Additionally, this creates a very high lower bound of the geometrical error of the isoparametric surface, that does not improve even if a very high-order polynomial mesh is chosen, since no face-nodes are present. The legacy implementation will also not warn the user if a pyramid is present in the mesh and will spit out a non-conformal mesh.

Proposed solution

A completely new implementation of the module was developed, which retains the input same parameters and the fundamental methodology as proposed in Moxey et all (2015). A local split of the isoparametric prism is performed in the reference space of the element and curvature is propagated to the user-chosen settings. Both the EDGENODES, but now also the FACENODES are propagated according to the user-defined number of layers and progression ratio (r).

Summary from user perspective:

  • The same user config options are retained (nq,r,surf,layers).
  • The user should NOT see any difference between using this or the legacy ProcessBL for prisms.


  • Supports complete O-type BLs prisms meshes for 3D.
  • Warns the user if Pyramid is present.
  • NO Hex splitting is implemented. I have not tested it but I believe the legacy module have it. 2D:
  • NO CHANGE in the 2D implementation.
  • Supports quad splitting, but also has some triangular splitting maps present ( no difference in the implementation.)


  1. The first part of the legacy code, where the subset of elements relevant to the user chose composites is kept as the legacy code.
  2. Create a copy vector of the edges inside the PrismLayer (remember this will be split).
  3. Perform isoparametric edge splitting and fill the PrismEdgesCopy with the desired BL distribution and correct directionality
    2.1 Create the edge expansion 2.2 Split the macro edge with the bl distribtion and create new child vertices 2.3 creates a copy of the Macro Edge that contains the new(split) vertices (on the curved master edge) as EdgeNodes having edgeType - eBoundaryLayerPoints/Rev
  4. Loop over the prism elements on the surface and Split locally on the desired surfaces/composites (as per 0.) 3.0 Create the expansion of the Macro Prism Element 3.1 Identify the orientation of the prism with respect to the surface (face 1 or face 3 point the boundary) 3.2 Create Vector of Vertices for the Copy Edges - always starting from the Boundary/Curved Face ! 3.3 Create HO Elements starting from m_n1 !!!
    3.3.1. Create the NodeList 3.3.2 Create the Linear Element 3.3.3 For the inner layers create HO EdgeNodes, Populate edge nodes to the correct predefined new local edges OR reuse the existing macro edges if layer 0 3.3.4 Populate the facenodes to the new local faces by using the MACRO element expansion ( physeval) xp[1] comes from the bl settings. 3.3.5 For the first or last layer try to reuse edges and Face directly from el_macro
    3.4. For the first layer - create the m_element[2] triag or quad and put in the correcct composite.
    3.4 Add the element in m_mesh->m_element[3]


All ProcessBL tests look for completion. A more precise test will be creating a composite test with the geometrical accuracy module created for ICOSAHOM, this will be TBD. New tests c:

  • Semi-sphere
  • NACA0012
  • IFW_extruded50mm

Suggested reviewers

@mgreen , @dmoxey


Please add any other information that could be useful for reviewers.


  • Functions and classes, or changes to them, are documented.
  • User guide/documentation is updated.
  • Changelog is updated.
  • Suitable tests added for new functionality.
  • Contributed code is correctly formatted. (See the contributing guidelines).
  • License added to any new files.
  • No extraneous files have been added (e.g. compiler output or test data files).
Edited by Kaloyan Kirilov

Merge request reports