Exemple #1
0
        private CellConnectivity <TNode>[] CreateElements(TNode[] allVertices)
        {
            var cells = new CellConnectivity <TNode> [cellsPerX * cellsPerY * cellsPerZ];

            for (int k = 0; k < cellsPerZ; ++k)
            {
                for (int j = 0; j < cellsPerY; ++j)
                {
                    for (int i = 0; i < cellsPerX; ++i)
                    {
                        int cell           = k * cellsPerX * cellsPerY + j * cellsPerX + i;
                        int firstVertex    = k * verticesPerX * verticesPerY + j * verticesPerX + i;
                        var verticesOfCell = new int[]                                    // Node order for Hexa8
                        {
                            firstVertex,                                                  // (-1, -1, -1)
                            firstVertex + 1,                                              // ( 1, -1, -1)
                            firstVertex + verticesPerY + 1,                               // ( 1,  1, -1)
                            firstVertex + verticesPerY,                                   // (-1,  1, -1)
                            firstVertex + verticesPerX * verticesPerY,                    // (-1, -1,  1)
                            firstVertex + verticesPerX * verticesPerY + 1,                // ( 1, -1,  1)
                            firstVertex + verticesPerX * verticesPerY + verticesPerY + 1, // ( 1,  1,  1)
                            firstVertex + verticesPerX * verticesPerY + verticesPerY      // (-1,  1,  1)
                        };
                        cells[cell] = new CellConnectivity <TNode>(CellType.Hexa8,
                                                                   verticesOfCell.Select(idx => allVertices[idx]).ToArray()); // row major
                    }
                }
            }
            return(cells);
        }
        private CellConnectivity <TNode>[] CreateElements(TNode[] allVertices)
        {
            var cells = new CellConnectivity <TNode> [cellsPerY * cellsPerX];

            for (int j = 0; j < cellsPerY; ++j)
            {
                for (int i = 0; i < cellsPerX; ++i)
                {
                    int     cell           = j * cellsPerX + i;
                    int     firstVertex    = j * verticesPerX + i;
                    TNode[] verticesOfCell =
                    {
                        allVertices[firstVertex],                    allVertices[firstVertex + 1],
                        allVertices[firstVertex + verticesPerX + 1], allVertices[firstVertex + verticesPerX]
                    };
                    cells[cell] = new CellConnectivity <TNode>(CellType.Quad4, verticesOfCell); // row major
                }
            }
            return(cells);
        }
Exemple #3
0
        /// <summary>
        /// Returns true and a <see cref="CellConnectivity"/> if the <paramref name="cellCode"/> corresponds to a valid
        /// MSolve <see cref="CellType"/>.
        /// Otherwise returns false and null.
        /// </summary>
        /// <param name="cellCode"></param>
        /// <param name="vertexIDs"> These must be 0-based</param>
        /// <param name="cell"></param>
        /// <returns></returns>
        public bool TryCreateCell(int cellCode, int[] vertexIDs, out CellConnectivity <TNode> cell)
        {
            bool validCell = gmshCellCodes.TryGetValue(cellCode, out CellType type);

            if (validCell)
            {
                var cellVertices = new TNode[vertexIDs.Length];
                for (int i = 0; i < vertexIDs.Length; ++i)
                {
                    int msolveIndex = gmshCellConnectivity[type][i];
                    cellVertices[msolveIndex] = allVertices[vertexIDs[i]];
                }
                FixVerticesOrder(cellVertices);
                cell = new CellConnectivity <TNode>(type, cellVertices);
                return(true);
            }
            else
            {
                cell = null;
                return(false);
            }
        }
Exemple #4
0
 public bool Contains(CellConnectivity <Node> cell, double tol)
 {
     return(cell.Vertices.All(node =>
                              (node.X >= minX - tol) && (node.X <= maxX + tol) && (node.Y >= minY - tol) && (node.Y <= maxY + tol)));
 }