コード例 #1
0
ファイル: csbase.cs プロジェクト: dejan-stankovic/HybMesh
 public string _tos_point(Hybmesh.Point2 val)
 {
     if (val == null)
     {
         return("None");
     }
     else
     {
         return('[' + val.x.ToString("G16", CultureInfo.InvariantCulture) +
                ',' + val.y.ToString("G16", CultureInfo.InvariantCulture) +
                ']');
     }
 }
コード例 #2
0
    public static void pings(Hybmesh hm)
    {
        var g1 = hm.AddUnfRectGrid1(new double[] { 1, 2, 3 }, new double[] { 2, 3, 4 });

        CheckDims(g1.Dims(), new int[] { 9, 12, 4 });
        var c1 = hm.GridBndToContour(g1, true);
        var c2 = hm.GridBndToContour(g1, false);

        CheckDims(c1.Dims(), new int[] { 4, 4 });
        CheckDims(c2.Dims(), new int[] { 8, 8 });
        P2[] pv = new P2[4];
        pv[0] = new P2(0, 0);
        pv[1] = new P2(1, 2);
        pv[2] = new P2(3, 1);
        pv[3] = new P2(2, 0);
        var c3 = hm.CreateContour(pv, new int[] { 0, 0, 1 });
        var c4 = hm.CreateContour(pv, new int[] { 3, 2, 1 });

        CheckDims(c3.Dims(), new int[] { 4, 3 });
        CheckDims(c4.Dims(), new int[] { 4, 3 });
        var c5 = hm.CreateSplineContour(pv, new int[] { 0, 0, 1 });
        var c6 = hm.CreateSplineContour(pv, new int[] { 3, 2, 1 });

        CheckDims(c5.Dims(), new int[] { 101, 100 });
        CheckDims(c6.Dims(), new int[] { 101, 100 });
        var c7 = hm.ExtractSubcontours(c6, pv);

        CheckCond(c7.Length == 3);
        var c8 = hm.AddRectContour(new P2(1, 1), new P2(10, 10), new int[] { 0, 1, 2, 3 });

        CheckDims(c8.Dims(), new int[] { 4, 4 });
        var c9 = hm.AddCircContour(new P2(5.0, 5.0), 10, 32);

        CheckDims(c9.Dims(), new int[] { 32, 32 });
        double ar9 = c9.DomainArea();

        CheckCond(Math.Abs(ar9 - 3.1415926 * 100) < 5);
        var c10 = hm.SimplifyContour(c2);

        CheckDims(c10.Dims(), new int[] { 4, 4 });
        var c11 = hm.SimplifyContour(c9, 91);

        CheckDims(c11.Dims(), new int[] { 4, 4 });
        var c12 = hm.UniteContours(new Hybmesh.Contour2D[] { c8, c9 });

        CheckDims(c12.Dims(), new int[] { 36, 36 });
        var c13 = hm.DecomposeContour(c12);

        CheckCond(c13.Length == 2);
        var c14 = hm.ClipDomain(c13[0], c13[1], "difference");
        var c15 = hm.AddRectContour(new P2(0, 0), new P2(1, 1));
        var c16 = hm.AddRectContour(new P2(10, 10), new P2(11, 11));
        var c17 = hm.ClipDomain(c15, c16, "intersection");
        var c18 = hm.ClipDomain(c13[1], c13[1], "difference");

        CheckDims(c17.Dims(), new int[] { 0, 0 });
        CheckDims(c18.Dims(), new int[] { 0, 0 });
        var c19 = hm.PartitionContourConst(c15, 0.01);

        CheckDims(c19.Dims(), new int[] { 400, 400 });
        var c20 = hm.PartitionContourConst(c15, 0.01);

        CheckDims(c19.Dims(), new int[] { 400, 400 });
        var c21 = hm.PartitionContourRefPoints(c15, new double[] { 0.01, 0.5 },
                                               new P2[] { new P2(0, 0), new P2(1, 1) },
                                               30, true, -1, null, null, new P2(0, 0), new P2(1, 1));

        CheckDims(c21.Dims(), new int[] { 18, 18 });
        var c22 = hm.PartitionContourRefLengths(c15, new double[] { 0.01, 0.5 },
                                                new double[] { 0, 2 },
                                                30, true, -1, null, null, new P2(0, 0), new P2(1, 1));

        CheckDims(c21.Dims(), c22.Dims());
        var c23 = hm.MatchedPartition(c15, 0.1, 0.5, null,
                                      new double[] { 0.01 }, new P2[] { new P2(0.1, 0.1) });

        CheckDims(c23.Dims(), new int[] { 74, 74 });
        var c24 = hm.PartitionSegment(0.5, 1.5, 0.1, 0.5, new double[] { 1.0, 0.01 });

        CheckCond(c24.Length == 17 && c24[0] == 0.5);

        var c25 = hm.CreateContour(new P2[] { new P2(0, 0), new P2(1, 0), new P2(2, 0) });
        var c26 = hm.CreateContour(new P2[] { new P2(2, 0.1), new P2(3, 0.1), new P2(4, 1) });
        var c27 = hm.ConnectSubcontours(new Hybmesh.Contour2D[] { c25, c26 }, new int[] {});
        var c28 = hm.ConnectSubcontours(new Hybmesh.Contour2D[] { c25, c26 }, new int[] {}, "yes");
        var c29 = hm.ConnectSubcontours(new Hybmesh.Contour2D[] { c25, c26 }, new int[] {}, "force");

        CheckDims(c27.Dims(), new int[] { 5, 4 });
        CheckDims(c28.Dims(), new int[] { 4, 4 });
        CheckDims(c29.Dims(), new int[] { 5, 5 });

        var c30 = hm.AddUnfRectGrid1(new double[] { 1, 2, 3 }, new double[] { 4, 5, 6, 7 });

        CheckDims(c30.Dims(), new int[] { 12, 17, 6 });
        var c31 = hm.AddUnfCircGrid(new P2(0, 0), 10, 32, 5, 1.2, false);

        CheckDims(c31.Dims(), new int[] { 160, 288, 129 });
        var c32 = hm.AddUnfRingGrid(new P2(1, 1), 3, 7, 16, 2);

        CheckDims(c32.Dims(), new int[] { 48, 80, 32 });
        var c33 = hm.AddUnfHexGridInHex(new P2(-1, -1), 8, 1);
        var c34 = hm.AddUnfHexGridInRect(new P2(0, 0), new P2(2, 3), 1);
        var c35 = hm.AddTriangleGrid(new P2(0, 0), new P2(1, 0), new P2(0, 1), 3, new int[] { 1, 2, 3 });

        CheckDims(c33.Dims(), new int[] { 216, 306, 91 });
        CheckDims(c34.Dims(), new int[] { 28, 35, 8 });
        CheckDims(c35.Dims(), new int[] { 10, 15, 6 });

        var c36 = hm.CreateContour(new P2[] { new P2(0, 0), new P2(0, 1) });
        var c37 = hm.PartitionContourConst(c36, 0.1);
        var c38 = hm.CreateContour(new P2[] { new P2(0, 0), new P2(2, -0.1) });
        var c39 = hm.PartitionContourConst(c38, 0.2);
        var c40 = hm.AddCustomRectGrid("linear", c37, c39);
        var c41 = hm.AddCustomRectGridHtfi(c37, c39,
                                           null, null,
                                           new double[] { 1, 1, 1, 0.8 });

        hm.AssignCallback(bad_callback);
        try{
            var c42_ = hm.AddCustomRectGrid("orthogonal", c37, c39);
        } catch (Hybmesh.EUserInterrupt) {
            Console.WriteLine("Interrupt catched");
        }
        hm.AssignCallback(good_callback);
        var c42 = hm.AddCustomRectGrid("orthogonal", c37, c39);

        hm.ResetCallback();
        CheckDims(c40.Dims(), new int[] { 121, 220, 100 });
        CheckDims(c40.Dims(), c41.Dims());
        CheckDims(c40.Dims(), c42.Dims());
        try{
            var c43_ = hm.AddCircRectGrid(new P2(0, 0), -1, 0.05);
        } catch (Hybmesh.ERuntimeError e) {
            Console.WriteLine("Runtime error catched");
            Console.WriteLine(e.Message);
        }

        var c43 = hm.AddCircRectGrid(new P2(0, 0), 1, 0.05);
        var c44 = hm.AddCircRectGrid(new P2(0, 0), 1, 0.05, 1.0, 1.0, "orthogonal_rect");

        CheckDims(c43.Dims(), c44.Dims());
        var c45 = hm.Stripe(c39, new double[] { 0, 0.01, 0.02, 0.05 });
        var c46 = hm.TriangulateDomain(c45, null, null, null, "3");
        var c47 = hm.GridBndToContour(c45);
        var c48 = hm.GridBndToContour(c46);

        CheckCond(Math.Abs(c47.DomainArea() - c48.DomainArea()) < 1e-8);
        var c49 = hm.AddRectContour(new P2(0, 0), new P2(1, 1));
        var c50 = hm.PartitionContourConst(c49, 0.1);
        var c51 = hm.PebiFill(c50, null, new double[] { 0.5 }, new P2[] { new P2(0.5, 0.5) });
        var c52 = hm.BuildBoundaryGrid1(c51, new double[] { 0, 0.01, 0.02 });
        var c53 = hm.BuildBoundaryGrid1(c51, new double[] { 0, 0.01, 0.02 }, "right");

        CheckDims(c52.Dims(), c53.Dims());
        var c54 = hm.ExcludeContours(c53, new Hybmesh.Object2D[] { c51 }, "inner");
        var c55 = hm.ExcludeContours(c53, new Hybmesh.Object2D[] { c51 }, "outer");

        CheckDims(c54.Dims(), c53.Dims());
        CheckDims(c55.Dims(), new int[] { 0, 0, 0 });
        double[] c56x = new double[11], c57x = new double[11];
        for (int i = 0; i < 11; ++i)
        {
            c56x[i] = (i / 10.0);
            c57x[i] = (0.3 + (double)i / 30.0);
        }
        var c56 = hm.AddUnfRectGrid1(c56x, c56x);
        var c57 = hm.AddUnfRectGrid1(c57x, c57x);
        var c58 = hm.UniteGrids1(c56, c57, 0.1);

        hm.StdoutVerbosity(3);
        var c59 = hm.MapGrid(c58, c57, new P2[] { new P2(0, 0) }, new P2[] { new P2(0.3, 0.3) });

        hm.StdoutVerbosity(0);
        hm.HealGrid(c59, 30, 30);
        var c60 = hm.ExcludeContours(c58, new Hybmesh.Object2D[] { c57 }, "inner");
        var c61 = hm.ExtrudeGrid(c60, new double[] { 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3 });
        var c62 = hm.Grid3BndToSurface(c61);

        hm.AssignCallback(good_callback);
        var c63 = hm.TetrahedralFill(new Hybmesh.Object3D[] { c62 });

        hm.ResetCallback();
        var c64 = hm.RevolveGrid(c60, new P2(0, 0), new P2(0, 1),
                                 new double[] { 0, 45, 90, 180 });
        var c65 = hm.RevolveGrid(c60, new P2(0, 0), new P2(0, 1),
                                 new double[] { 180, 270, 360 });

        hm.Export3DGridVtk(c64, "c64.vtk");
        hm.Export3DGridVtk(c65, "c65.vtk");
        var c66 = hm.MergeGrids3(c64, c65);

        hm.Export3DGridVtk(c66, "c66.vtk");
        var c67 = c66.Deepcopy();

        c67.Scale(20, 20, 20, new P3(0, 0, 0));
        var c68 = hm.Grid3BndToSurface(c66);
        var c69 = hm.Grid3BndToSurface(c67);

        CheckCond(Math.Abs(c68.DomainVolume() - 125 * c69.DomainVolume()) < 1e-8);
        c60.Rotate(20, new P2(0, 0));
        c69.Free();

        hm.AddBoundaryType(1, "bnd1");
        hm.AddBoundaryType(2, "bnd2");
        var c70 = hm.AddUnfRectGrid(new P2(0, 0), new P2(1, 1), 10, 10, new int[] { 0, 1, 2, 3 });

        hm.ExportGridMsh(c70, "out.msh", new int[] { 0 }, new int[] { 2 }, new bool[] { false });

        var c71 = c70.Skewness(-1);
        var c72 = c70.Skewness(0.1);

        CheckCond(c71.Length == 100 && c72.Length == 0);

        c70.SetBtypesAll(22);
        hm.ExportContourVtk(c70, "out.vtk");
        var c73 = c70.RawVertices();

        CheckCond(c73.Length == 242);
        var c74 = c70.RawTab("bnd_bt");

        CheckCond(c74.Length == 80);
        var c75 = c70.RawTab("bnd");

        CheckCond(c75.Length == 40);
        var c76 = c70.RawTab("cell_edge");

        CheckCond(c76.Length == 400);
        var c77 = c70.RawTab("edge_cell");

        CheckCond(c77.Length == 440);
        var  c78     = c70.RawTab("bt");
        bool allof78 = true;

        foreach (int i in c78)
        {
            if (i != 22 && i != 0)
            {
                allof78 = false;
            }
        }
        CheckCond(c78.Length == 220 && allof78);

        var  c79     = c70.RawTab("cell_dim");
        bool allof79 = true;

        foreach (int i in c79)
        {
            if (i != 4)
            {
                allof79 = false;
            }
        }
        CheckCond(c79.Length == 100 && allof79);

        var c80 = c70.RawTab("cell_vert");

        CheckCond(c80.Length == 400);
        c70.SetBtypes(1, new int[] { c75[0], c75[1], c75[2] });
        hm.ExportGridTecplot(c70, "out.dat");

        var c81 = hm.ExtrudeGrid(c70, new double[] { 0, 1, 2 });
        var c82 = hm.Grid3BndToSurface(c81);
        var c83 = c81.RawVertices();
        var c84 = c82.RawVertices();

        CheckCond(c83.Length == 121 * 3 * 3);
        CheckCond(c84.Length == (121 * 2 + 40) * 3);
        var c85 = c81.RawTab("cell_vert");

        CheckCond(c85.Length == 200 * 8);
        var c86 = c82.RawTab("face_vert");

        CheckCond(c86.Length == (200 + 80) * 4);

        var c87 = hm.GridBndToContour(c70);
        var c88 = c87.RawVertices();

        CheckCond(c88.Length == 12);
        var c89 = c87.RawTab("bt");

        CheckCond(c89.Length == 6);

        var c90 = hm.AddRectContour(new P2(1, 1.2), new P2(2, 2), new int[] { 0, 1, 2, 3 });
        var c91 = hm.AddRectContour(new P2(0, 0), new P2(1.5, 1.5), new int[] { 0, 1, 2, 3 });
        var c92 = hm.UniteContours(new Hybmesh.Contour2D[] { c90, c91 });
        var c93 = hm.DecomposeContour(c92);

        CheckCond(c93.Length == 3);
        var c94 = hm.PickContour(new P2(-1, -1), c93);

        c94.GetPoint(new P2(-1, -1));
        c94.GetPoint(null, new P2(0.5, -1));
        c94.GetPoint(null, null, new P2(1.0, -1));

        hm.ExportAllHmd("out.hmd", "ascii");
        hm.RemoveAll();
        hm.ImportGridHmg("out.hmd", "Grid2D_1");
        hm.Import3DGridHmg("out.hmd", "Grid3D_1");
        hm.RemoveAll();
    }