Curvilinear ElementsΒΆ
Learning targets (advanced)
- Construct curved boundaries using curvilinear elements
We have previously seen how mesh options can be used to generate quality meshes. When generating meshes for realistic objects, we often want to include curved surfaces. Using triangular meshes, curves can be well approximated compared to square and rectangular meshes. However, we can go one step further and create triangular elements with curved edges, so called curvilinear elements. These are especially well suited to the case of meshing curved surfaces with relatively few elements.
In this example we will learn how to apply a curvilinear correction to mesh objects
using the mesh option CurvilinearDegree
.
Continuing from the examples introduced in mesh options, we have defined circles with the same radius but differing options for the meshing.
Circle {
Name = "Circle_Left"
...
}
The object "Circle_Left"
has no specific mesh options defined. Therefore,
it uses the globally defined mesh constraints. The boundary of the circle is
noticeably pointed and rough due to the coarse mesh constraint.
Circle {
Name = "Circle_Center"
MeshOptions {
BoundaryMeshConstraint {
MaximumSideLength = 0.2
}
}
...
}
The object "Circle_Center"
has a constraint on the maximum length of the
triangle sides which lie on the boundary. Due to the fine mesh constraint on the
boundary, the circle edge is much smoother. This comes at the cost of requiring
more elements to resolve the fine mesh.
Circle {
Name = "Circle_Right"
MeshOptions {
CurvilinearDegree = 2
}
...
}
The object "Circle_Right"
has the CurvilinearDegree
set to 2. The circle
boundary is once again smooth due to the curvature of the triangle edges.
This allows for smooth meshing of curved surfaces without increasing the number
elements required.
The CurvilinearDegree
determines the polynomial degree of the displacement field
added to the linear mesh to approximate curved geometries.
This allows for a more accurate resolution of curved geometries without increasing
memory requirements due to smaller mesh elements.
Note
- Higher values of the
CurvilinearDegree
allow for increasingly smooth edges of curved geometry objects, such as circles, ellipses, rings, etc. - The
CurvilinearDegree
has no effect for geometry objects with straight edges, such as squares and rectangles. This also includes polygons, even if the sides of the polygon are used to approximate a curved surface. - Using the
CurvilinearDegree
mesh option may increase the time meshing and assembly times.
Note
- The FEM solver
JCMsuite
allows theCurvilinearDegree
to be set between 1 and 10. ACurvilinearDegree
of 1 provides the default straight edges, present if no curvilinear degree is defined.
Note
- The
CurvilinearDegree
mesh option is very well suited to creating geometrically smooth meshes with few elements, and thus minimizing errors occurring due to the discretization of the geometry. Errors occurring due to the discretization of the field should be treated as usual inJCMsuite
with a suitable choice of the mesh size andFiniteElementDegree
.
.jcm
Input File
layout.jcm [ASCII]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
Layout2D { MeshOptions { MaximumSideLength = 2.0 MinimumMeshAngle = 25.0 } Objects { Polygon { Name = "ComputationalDomain" DomainId = 4 Priority = ComputationalDomain Points = [-6 -4, 6 -4, 6 4, -6 4] MeshOptions { } } Circle { Name = "Circle_Left" DomainId = 10 Radius = 1.5 GlobalPosition = [-3.6 0.0] } Circle { Name = "Circle_Center" DomainId = 10 Radius = 1.5 GlobalPosition = [0.0 0.0] MeshOptions { BoundaryMeshConstraint { MaximumSideLength = 0.2 } } } Circle { Name = "Circle_Right" DomainId = 10 Radius = 1.5 GlobalPosition = [3.6 0.0] MeshOptions { CurvilinearDegree = 2 } } } }