GRS distinguishes between three different grid types, namely tensor product grids, unstructured grids, and point cloud grids. All three classes are derived from a common generic grid class, which contains a grid type identifier set to one of the three types upon grid reading. An application now can easily determine the type of the grid under consideration by examining this grid type identifier.
An additional GRS object pointer to a point list object is also defined by this generic grid class, which then can be used to represent point cloud grids and tensor product grids as well: These grids contain just a PIF point list object, which is an orthoProduct in case of a tensor product grid, and an unstructured point list in case of the point cloud grid. Therefore this pointer will point to a GRS ortho product point list object in the case of a tensor product grid, and to a GRS unstructured point list object in the case of a point cloud or unstructured grid. While this multiple use of one class definition for many logically different purposes will most probably be rejected by a rigid advocate of pure object-orientedness, this approach is most practical from the PIF point of view and simplifies the definition of corresponding methods considerably.
Since an unstructured PIF grid contains additional information about the grid elements, a separate unstructured grid class is derived from the generic grid class. Two members besides the inherited ones are contained in this class, both of which are GRS object pointers to GRS face list objects see page of the unstructured grid. In the case of a hierarchical unstructured grid, one of these pointers points to the base hierarchy, and the other to the highest hierarchy of the unstructured grid. For non-hierarchical unstructured grids, both pointers point to the (only) base hierarchy of the unstructured grid.
A few figures shall illustrate the various grid representations of GRS: Fig. 7.4 shows a tensor product grid referencing an orthoProduct point list. A point cloud grid would be stored as shown in Fig. 7.5. Unstructured grids can be either plain ones or hierarchical ones. Fig. 7.6 shows a plain unstructured grid, whereas Fig. 7.7 shows a hierarchical unstructured grid consisting of TRI3 elements on the lowest level and TRI3Conn elements on the higher hierarchy levels.
Figure: Tensor product grid
object. Only members of pointer type are shown. All rectangles with sharp
corners represent simple allocated C arrays rather than GRS objects,
drawn as rectangles with round corners. Both the origin and the base vectors
are stored in allocated real arrays. In this case the origin vector has three
values, hence the grid lies in three-dimensional space. There are three
orthonormal base vectors, hence we have also have a grid with three
topological dimensions spanning a three-dimensional cube. The tick values
finally are stored in the grid axes real arrays.
Figure: Point cloud grid object.
Only members referencing other objects are shown. Since a point cloud grid is
just a set of points, an unstructured point list object is used to represent
the grid.
Figure: Unstructured
grid object. Only members referencing other objects are shown. Solid lines
denote reference by pointer while dashed lines denote reference by index.
Figure: Hierarchical unstructured grid object. Only members referencing other
objects are shown. The Faces and Conn structures are simplified
for clarity. Solid lines denote reference by pointer while dashed lines denote
reference by index. An example element hierarchy branch is shown in the
connectivity arrays.
Due to the importance of grids in general for all TCAD applications, functional support for the grid classes is crucial. This support can be divided into two categories: Element-wise reading and writing of unstructured grids see Section 7.1.2, and complete reading and writing into and from object representations for interpolation or in-memory manipulation.
Interpolation requires that the grids are hold in memory for fast access to individual grid points or elements. Therefore read functions exist, that read a PIF grid into a corresponding GRS grid object as discussed above. But interpolation requires further preparation of the grid, which is discussed in more detail in Section 7.1.3.