Containers
A finite element mesh is a discretisation of a domain \(\Omega\) using different type of elements. The next figure is an example of a mesh composed of different type of elements (quadrangles, triangles, bars and point elements).
Many real life finite element problem use mixed elements to correctly mesh the domain. Also to correctly represent all the quantities needed for the definition of a problem (like material properties and external force) it is necessary to define subgroups of element and points. So a real mesh structure can not be reduced to just the points and the elements. Also to keep track of mesh transformations (i.e. extraction, mirroring) a suitable structured is necessary.
In general the operations on meshes (i.e. extraction, integration, export to file) can be grouped by type of elements so it is not necessary to have a very low level classes like “Point class” or “Element Class”. In BasicTools all homogeneous entities are grouped in high level classes. This enable us to work on big chunks of data and leverage the full power of a high level language.
The BasicTools.Containers.UnstructuredMesh.UnstructuredMesh
class of BasicTools keep all this information in a compact compact but relatively simple structure.
Properties
The mesh class contains a dictionary named BasicTools.Containers.MeshBase.MeshBase.props
to store user data related to the mesh itself. No function must relies in the presence of a specific key in the props
. The values of the dictionary are copied as derivative meshed are generated.
Nodes
A BasicTools.Containers.UnstructuredMesh.UnstructuredMesh.nodes
in a mesh is defined by its 3 “coordinates” (float) (2 if the mesh is a 2D mesh) and a BasicTools.Containers.UnstructuredMesh.UnstructuredMesh.originalIDNodes
(int) to keep track its origin. The nodes
attribute store the positions of the points (one point per row). The size of originalIdNodes
must be equal to the number of points in the mesh.
The role of the originalIdNodes is double. In the case the origin of the mesh is a file from disk, it is used to store the “node number” (a concept present in many file formats). In the case the mesh is a transformation of a initial mesh (extraction for example) the originalIdNodes is used to track the origin of each entity.
Elements
The storage of elements (BasicTools.Containers.UnstructuredMesh.ElementsContainer
) is more complex only because the information is heterogeneous (e.g. the number of point per element is different for every type of element).
The mesh in BasicTools does not store any information about the physics or any finite element implementation detail (i.e. reduce integration, degree of interpolation of the solution field).
This make the definition of the mesh relatively simple.
Each type of element is only defined by it geometrical definition (i.e. linear triangle with 3 point).
A variable named BasicTools.Containers.UnstructuredMesh.UnstructuredMesh.elements`
(of type BasicTools.Containers.UnstructuredMesh.AllElements
), analog to a dictionary in python, store for each element type all the information.