# 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 the`CurvilinearDegree`

to be set between 1 and 10. A`CurvilinearDegree`

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 in`JCMsuite`

with a suitable choice of the mesh size and`FiniteElementDegree`

.

`.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 } } } }