Example #1
0
        [Fact] public void ReadAndParseArray()
        {
            FReader.SetDirAndFile("Tests/", "array1d", ".txt");
            var inputArray  = (double[])FReader.ReadArray <double>();
            var actualArray = new double[] { 0, 7, 3, 8, 2, 4, 9, 11, 15 };

            Assert.True(inputArray.Equals <dbl, DblA>(actualArray, 0.000001));
        }
Example #2
0
        /// <summary>Once transformed nodes have been created, generate array combinations appropriate for Mathematica plotting.</summary>
        public static void CreateDerivedData()
        {
            FReader.SetDirAndFile("Seminar/Mathematica", "transNodesCM", ".txt");
            var transNodesCM = (double[][][])FReader.ReadArray <double>();

            FReader.SetFile("nodesC", ".txt");
            var nodesC       = (double[][][])FReader.ReadArray <double>();
            var transNodesC1 =                                                                                                        // Reassemble the rows (including static nodes).
                               transNodesCM.Select((row, i) =>                                                                        // Take the newly created array.
                                                   new double[][] { nodesC[i + 1][0] }.Concat(row).Append(nodesC[i + 1][3]).ToArray() // Attach a static node to the left and a static node to the right of each row.
                                                   ).ToArray();

            FWriter.SetDirAndFile("Seminar/Mathematica/", nameof(transNodesC1), ".txt");   // Have to set dir for the first time.
            FWriter.WriteLine(transNodesC1);
            var transNodesC = transNodesC1.Prepend(nodesC[0]).Append(nodesC[3]).ToArray(); // Reassemble the array (including filtered static rows).

            FWriter.WriteLine(transNodesC, nameof(transNodesC));
            var transNodesCByElms = Enumerable.Range(0, 3).Select(row =>                          // Groups of 4 corner nodes for each element.
                                                                  Enumerable.Range(0, 3).Select(col =>
                                                                                                new double[][] {
                (double[])transNodesC[row][col].Clone(),
                (double[])transNodesC[row][col + 1].Clone(),
                (double[])transNodesC[row + 1][col + 1].Clone(),
                (double[])transNodesC[row + 1][col].Clone()
            }
                                                                                                ).ToArray()
                                                                  ).ToArray();

            FWriter.WriteLine(transNodesCByElms, nameof(transNodesCByElms));
            var transNodesByElms = transNodesCByElms.Select(row =>
                                                            row.Select(elm =>
                                                                       new double[][][] {
                new double[][] { elm[0], TrueCoords(new double[] { -1.0 / 3, -1 }, elm), TrueCoords(new double[] { 1.0 / 3, -1 }, elm), elm[1] },
                new double[][] { TrueCoords(new double[] { -1, -1.0 / 3 }, elm), TrueCoords(new double[] { -1.0 / 3, -1.0 / 3 }, elm), TrueCoords(new double[] { 1.0 / 3, -1.0 / 3 }, elm), TrueCoords(new double[] { 1, -1.0 / 3 }, elm) },
                new double[][] { TrueCoords(new double[] { -1, 1.0 / 3 }, elm), TrueCoords(new double[] { -1.0 / 3, 1.0 / 3 }, elm), TrueCoords(new double[] { 1.0 / 3, 1.0 / 3 }, elm), TrueCoords(new double[] { 1, 1.0 / 3 }, elm) },
                new double[][] { elm[3], TrueCoords(new double[] { -1.0 / 3, 1 }, elm), TrueCoords(new double[] { 1.0 / 3, 1 }, elm), elm[2] }
            }
                                                                       ).ToArray()
                                                            ).ToArray();

            FWriter.WriteLine(transNodesByElms, nameof(transNodesByElms));
            var transNodes = Enumerable.Range(0, 10).Select(row =>            // Create an empty 10 by 10 array.
                                                            Enumerable.Range(0, 10).Select(col =>
                                                                                           new double[2] {
                0.0, 0.0
            }
                                                                                           ).ToArray()
                                                            ).ToArray();

            Enumerable.Range(0, 3).Select(i =>                              // This will fill the lower left part of the new array.
                                          Enumerable.Range(0, 3).Select(j =>
                                                                        Enumerable.Range(0, 3).Select(k =>
                                                                                                      Enumerable.Range(0, 3).Select(m =>
                                                                                                                                    transNodes[3 * i + k][3 * j + m] = (double[])transNodesByElms[i][j][k][m].Clone()
                                                                                                                                    ).ToArray()
                                                                                                      ).ToArray()
                                                                        ).ToArray()
                                          ).ToArray();
            Enumerable.Range(0, 3).Select(i =>                                 // Over 3 elements in last row.
                                          Enumerable.Range(0, 3).Select(j => { // Over 3 nodes in last row of each element.
                transNodes[9][3 * i + j] = transNodesByElms[2][i][3][j];       // Add the upper most row.
                transNodes[3 * i + j][9] = transNodesByElms[i][2][j][3];       // Add the right most col.
                return(j);
            }).ToArray()
                                          ).ToArray();
            transNodes[9][9] = transNodesByElms[2][2][3][3];                  // Assign the last corner element.
            FWriter.WriteLine(transNodes, nameof(transNodes));
            var transNodesM =
                transNodes.Where((row, i) => i > 2 && i < 7)    // Take only middle nodes.
                .Select(row =>
                        row.Where((col, j) => j > 2 && j < 7)
                        .ToArray()
                        ).ToArray();

            FWriter.WriteLine(transNodesM, nameof(transNodesM));
            FReader.SetFile("nodes", ".txt");
            var nodes    = (double[][][])FReader.ReadArray <double>();
            var nodes3dF =
                nodes.Select(row =>
                             row.Select(col =>
                                        col.Append(0.0).ToArray()
                                        ).ToArray()
                             ).ToArray();

            FWriter.WriteLine(nodes3dF, nameof(nodes3dF));
            var transNodes3dF =
                transNodes.Select(row =>
                                  row.Select(col =>
                                             col.Append(0.0).ToArray()
                                             ).ToArray()
                                  ).ToArray();

            FWriter.WriteLine(transNodes3dF, nameof(transNodes3dF));
            var nodes3dMF =
                nodes.Take(7).Skip(3).Select(row =>
                                             row.Take(7).Skip(3).Select(col =>
                                                                        col.Append(0.0).ToArray()
                                                                        ).ToArray()
                                             ).ToArray();

            FWriter.WriteLine(nodes3dMF, nameof(nodes3dMF));
            var nodes3dMT =
                nodes.Take(7).Skip(3).Select(row =>
                                             row.Take(7).Skip(3).Select(col =>
                                                                        col.Append(1.0).ToArray()
                                                                        ).ToArray()
                                             ).ToArray();

            FWriter.WriteLine(nodes3dMT, nameof(nodes3dMT));
            var transNodes3dMF =
                transNodesM.Select(row =>
                                   row.Select(col =>
                                              col.Append(0.0).ToArray()
                                              ).ToArray()
                                   ).ToArray();

            FWriter.WriteLine(transNodes3dMF, nameof(transNodes3dMF));
            var transNodes3dMT =
                transNodesM.Select(row =>
                                   row.Select(col =>
                                              col.Append(1.0).ToArray()
                                              ).ToArray()
                                   ).ToArray();

            FWriter.WriteLine(transNodes3dMT, nameof(transNodes3dMT));
        }