Interface MiGeometryHexahedronIjk

  • All Superinterfaces:
    MiGeometry

    public interface MiGeometryHexahedronIjk
    extends MiGeometry
    Generic geometry interface for hexahedron mesh Ijk.

    Generic geometry interface representing a 3D grid of hexahedron cells, where each hexahedron is defined explicitly with 8 independent coordinates. Each hexahedron is accessible via 3 indices (i,j,k).

    This type of geometry is typically used by the MiVolumeMeshVertexHexahedronIjk interface.

    The way the vertices of each hexahedron are numbered is indicated by the CellStorageLayout value (see getCellStorageLayout()).

    • Method Detail

      • getCellCoords

        void getCellCoords​(int i,
                           int j,
                           int k,
                           double[] cellCoords)
        Returns the coordinates of the hexahedron (i,j,k) cell.

        The way the vertices of each hexahedron are numbered is indicated by the CellStorageLayout value returned by getCellStorageLayout().

        The implementation of this method must be thread-safe because it might be called concurrently by multiple threads. The way this method is implemented is critical for performance. Any inefficient implementation may impact very significantly the duration of the skin or slab extractions. For instance, using a mutex to ensure this method is thread-safe is in general not efficient.

        Parameters:
        i - the id of this hexahedron on the axis I. 0 <= i < meshTopologyIjk.getNumCellsI().
        j - the id of this hexahedron on the axis J. 0 <= j < meshTopologyIjk.getNumCellsJ().
        k - the id of this hexahedron on the axis K. 0 <= k < meshTopologyIjk.getNumCellsK().
        cellCoords - the array into which the 8 vertices of the hexahedron (i,j,k) are to be stored.
      • getStorageLayout

        StorageLayoutIJK getStorageLayout()
        Hint about coordinates organization in memory.

        This information aims at optimizing the geometry traversal for extractors. Returns the internal coordinates layout in memory as 6 enum values covering all possible cases. For instance KJI means that:

        • the coordinate (i+1,j,k) is consecutive in memory to the coordinate (i,j,k) and,
        • the row of coordinates (j+1,k) is consecutive in memory to the row of coordinates (j,k) and,
        • the slice of coordinates (k+1) is consecutive in memory to the slice of coordinates (k)

        The fastest way to go through the coordinates with such layout is to perform the following triple loop:

         for each k with 0 <= k < numK
           for each j with 0 <= j < numJ
             for each i with 0 <= i < numI
               coordinates.getCellCoords(i,j,k, cellCoords);
         
      • getCellStorageLayout

        CellStorageLayout getCellStorageLayout()
        Hint about coordinates organization in a hexahedron cell.