36 Eigen::Vector2d coords0(2, 0);
37 Eigen::Vector2d coords1(-1, 4);
38 Eigen::Vector2d coords2(0, 1);
41 mesh.createVertex(coords0);
42 mesh.createVertex(coords1);
43 mesh.createVertex(coords2);
45 mesh.computeBoundingBox();
56 BOOST_TEST(cog.size() == 2);
57 BOOST_TEST(referenceBox == bBox);
59 for (
decltype(cog.size()) d = 0; d < cog.size(); d++) {
60 BOOST_TEST(referenceCOG.at(d) == cog(d));
68 Eigen::Vector3d coords0(2, 0, -3);
69 Eigen::Vector3d coords1(-1, 4, 8);
70 Eigen::Vector3d coords2(0, 1, -2);
71 Eigen::Vector3d coords3(3.5, 2, -2);
74 mesh.createVertex(coords0);
75 mesh.createVertex(coords1);
76 mesh.createVertex(coords2);
77 mesh.createVertex(coords3);
79 mesh.computeBoundingBox();
91 BOOST_TEST(cog.size() == 3);
92 BOOST_TEST(referenceBox == bBox);
94 for (
decltype(cog.size()) d = 0; d < cog.size(); d++) {
95 BOOST_TEST(referenceCOG.at(d) == cog(d));
103 for (
int dim = 2; dim <= 3; dim++) {
109 BOOST_TEST(
mesh.getName() == meshName);
112 Eigen::VectorXd coords0(dim);
113 Eigen::VectorXd coords1(dim);
114 Eigen::VectorXd coords2(dim);
120 coords0 << 0.0, 0.0, 0.0;
121 coords1 << 1.0, 0.0, 0.0;
122 coords2 << 0.0, 0.0, 1.0;
134 BOOST_TEST(vertex.getID() == v0.
getID());
135 }
else if (index == 1) {
136 BOOST_TEST(vertex.getID() == v1.
getID());
137 }
else if (index == 2) {
138 BOOST_TEST(vertex.getID() == v2.
getID());
145 BOOST_TEST(!
mesh.hasEdges());
146 BOOST_TEST(!
mesh.hasTriangles());
153 BOOST_TEST(
mesh.hasEdges());
154 BOOST_TEST(
mesh.edges().size() == 3);
155 BOOST_TEST(!
mesh.hasTriangles());
159 mesh.createTriangle(e0, e1, e2);
161 BOOST_TEST(
mesh.hasTriangles());
163 BOOST_TEST(!
mesh.hasTriangles());
166 BOOST_TEST(
mesh.hasEdges());
170 int dataDimensions = dim;
173 PtrData data =
mesh.createData(dataName, dataDimensions, 0_dataID);
176 BOOST_TEST(data->getName() == dataName);
177 BOOST_TEST(data->getDimensions() == dataDimensions);
180 BOOST_TEST(
mesh.data().size() == 1);
181 BOOST_TEST(
mesh.data(0)->getName() == dataName);
185 mesh.allocateDataValues();
188 Eigen::VectorXd &dataValues = data->values();
189 BOOST_TEST(dataValues.size() == 3 * dim);
190 BOOST_TEST(v0.
getID() == 0);
191 Eigen::VectorXd value = Eigen::VectorXd::Zero(dim);
192 for (
int i = 0; i < dim; i++) {
193 value(i) = dataValues(v0.
getID() * dim + i);
206 for (
auto ptr : meshes) {
208 Eigen::VectorXd coords0(dim);
209 Eigen::VectorXd coords1(dim);
210 Eigen::VectorXd coords2(dim);
211 Eigen::VectorXd coords3(dim);
212 coords0 << 0.0, 0.0, 0.0;
213 coords1 << 1.0, 0.0, 0.0;
214 coords2 << 0.0, 0.0, 1.0;
215 coords3 << 1.0, 0.0, 1.0;
223 mesh.createEdge(v1, v3);
224 mesh.createEdge(v3, v2);
225 mesh.createTriangle(e0, e1, e2);
227 BOOST_TEST(mesh1 == mesh2);
235 Vertex &v0 =
mesh.createVertex(Eigen::Vector3d(0., 0., 0.));
236 Vertex &v1 =
mesh.createVertex(Eigen::Vector3d(1., 0., 0.));
237 Vertex &v2 =
mesh.createVertex(Eigen::Vector3d(0., 0., 1.));
238 Vertex &v3 =
mesh.createVertex(Eigen::Vector3d(1., 0., 1.));
242 mesh.createEdge(v1, v3);
243 mesh.createEdge(v3, v2);
244 mesh.createTriangle(e0, e1, e2);
248 "Mesh \"WKTMesh\", dimensionality = 3:\n"
249 "GEOMETRYCOLLECTION(\n"
250 "POINT (0 0 0), POINT (1 0 0), POINT (0 0 1), POINT (1 0 1),\n"
251 "LINESTRING (0 0 0, 1 0 0), LINESTRING (1 0 0, 0 0 1), LINESTRING (0 0 0, 0 0 1), LINESTRING (1 0 0, 1 0 1), LINESTRING (0 0 1, 1 0 1),\n"
252 "POLYGON ((0 0 0, 1 0 0, 0 0 1, 0 0 0))\n"
254 BOOST_TEST(reference == sstream.
str());
262 const auto &values =
mesh.createData(
"Data", 1, 0_dataID)->values();
265 mesh.createVertex(Vector3d(0.0, 0.0, 0.0));
266 mesh.createVertex(Vector3d(1.0, 0.0, 1.0));
268 BOOST_TEST(
mesh.nVertices() == 2);
269 mesh.allocateDataValues();
270 BOOST_TEST(values.size() == 2);
272 mesh.createVertex(Vector3d(1.0, 1.0, 1.0));
273 mesh.createVertex(Vector3d(2.0, 0.0, 2.0));
274 mesh.createVertex(Vector3d(2.0, 0.0, 2.1));
276 BOOST_TEST(
mesh.nVertices() == 5);
277 mesh.allocateDataValues();
278 BOOST_TEST(values.size() == 5);
286 const auto &values =
mesh.createData(
"Data", 1, 0_dataID)->values();
289 mesh.createVertex(Vector3d(0.0, 0.0, 0.0));
290 mesh.createVertex(Vector3d(1.0, 0.0, 1.0));
291 mesh.createVertex(Vector3d(1.0, 1.0, 1.0));
292 mesh.createVertex(Vector3d(2.0, 2.0, 2.0));
294 BOOST_TEST(
mesh.nVertices() == 4);
295 mesh.allocateDataValues();
296 BOOST_TEST(values.size() == 4);
299 mesh.createVertex(Vector3d(0.0, 0.0, 0.0));
300 mesh.createVertex(Vector3d(1.0, 0.0, 1.0));
302 BOOST_TEST(
mesh.nVertices() == 2);
303 mesh.allocateDataValues();
304 BOOST_TEST(values.size() == 2);
314 mesh.createData(
"Data", 1, 0_dataID);
316 Eigen::Vector3d coords0;
317 Eigen::Vector3d coords1;
318 Eigen::Vector3d coords2;
319 Eigen::Vector3d coords3;
320 coords0 << 1.0, 0.0, 0.0;
321 coords1 << 0.0, 0.0, 0.0;
322 coords2 << 2.0, 2.0, 0.0;
323 coords3 << 0.0, 1.0, 0.0;
329 BOOST_TEST(
mesh.nVertices() == 4);
336 BOOST_TEST(
mesh.edges().size() == 4);
340 BOOST_REQUIRE(chain.connected);
342 BOOST_TEST(chain.edges.at(0) == &e0);
343 BOOST_TEST(chain.edges.at(1) == &e2);
344 BOOST_TEST(chain.edges.at(2) == &e1);
345 BOOST_TEST(chain.edges.at(3) == &e3);
347 BOOST_TEST(chain.vertices.at(0) == &v1);
348 BOOST_TEST(chain.vertices.at(1) == &v3);
349 BOOST_TEST(chain.vertices.at(2) == &v2);
350 BOOST_TEST(chain.vertices.at(3) == &v0);
358 mesh.createData(
"Data", 1, 0_dataID);
360 Eigen::Vector3d coords0;
361 Eigen::Vector3d coords1;
362 Eigen::Vector3d coords2;
363 Eigen::Vector3d coords3;
364 coords0 << 1.0, 0.0, 0.0;
365 coords1 << 0.0, 0.0, 0.0;
366 coords2 << 2.0, 2.0, 0.0;
367 coords3 << 0.0, 1.0, 0.0;
372 BOOST_REQUIRE(
mesh.nVertices() == 4);
374 Edge &e0 =
mesh.createEdge(*v0, *v1);
375 Edge &e1 =
mesh.createEdge(*v1, *v2);
376 Edge &e2 =
mesh.createEdge(*v2, *v3);
377 Edge &e3 =
mesh.createEdge(*v3, *v0);
378 BOOST_REQUIRE(
mesh.edges().size() == 4);
399 Eigen::Vector3d coords0;
400 Eigen::Vector3d coords1;
401 coords0 << 1.0, 0.0, 0.0;
402 coords1 << 0.0, 1.0, 0.0;
414 mesh.createData(
"Data", 1, 0_dataID);
416 Eigen::Vector3d coords0;
417 Eigen::Vector3d coords1;
418 Eigen::Vector3d coords2;
419 Eigen::Vector3d coords3;
420 coords0 << 1.0, 0.0, 0.0;
421 coords1 << 0.0, 0.0, 0.0;
422 coords2 << 2.0, 2.0, 0.0;
423 coords3 << 0.0, 1.0, 0.0;
427 mesh.createVertex(coords3);
428 BOOST_TEST(
mesh.nVertices() == 4);
434 BOOST_REQUIRE(result.size() == 3);
435 BOOST_TEST(result == expected);
443 mesh.createData(
"Data", 1, 0_dataID);
445 Eigen::Vector3d coords0;
446 Eigen::Vector3d coords1;
447 Eigen::Vector3d coords2;
448 Eigen::Vector3d coords3;
449 coords0 << 1.0, 0.0, 0.0;
450 coords1 << 0.0, 0.0, 0.0;
451 coords2 << 2.0, 2.0, 0.0;
452 coords3 << 0.0, 1.0, 0.0;
456 mesh.createVertex(coords3);
457 BOOST_TEST(
mesh.nVertices() == 4);
463 BOOST_REQUIRE(result.size() == 3);
464 BOOST_TEST(result == expected);
472 mesh.createData(
"Data", 1, 0_dataID);
474 Eigen::Vector3d coords0;
475 Eigen::Vector3d coords1;
476 Eigen::Vector3d coords2;
477 Eigen::Vector3d coords3;
478 coords0 << 1.0, 0.0, 0.0;
479 coords1 << 0.0, 0.0, 0.0;
480 coords2 << 2.0, 2.0, 0.0;
481 coords3 << 0.0, 1.0, 0.0;
485 mesh.createVertex(coords3);
486 BOOST_TEST(
mesh.nVertices() == 4);
492 BOOST_REQUIRE(result.size() == 3);
493 BOOST_TEST(result == expected);
501 mesh->createData(
"Data", 1, 0_dataID);
503 auto &v1 =
mesh->createVertex(Eigen::Vector2d(0.0, 0.0));
504 auto &v2 =
mesh->createVertex(Eigen::Vector2d(0.0, 0.5));
505 auto &v3 =
mesh->createVertex(Eigen::Vector2d(0.0, 1.5));
506 auto &v4 =
mesh->createVertex(Eigen::Vector2d(0.0, 3.5));
507 mesh->allocateDataValues();
509 mesh->createEdge(v1, v2);
510 mesh->createEdge(v2, v3);
511 mesh->createEdge(v3, v4);
513 mesh->data(0)->values()(0) = 1.0;
514 mesh->data(0)->values()(1) = 3.0;
515 mesh->data(0)->values()(2) = 5.0;
516 mesh->data(0)->values()(3) = 7.0;
519 double expected = 17.0;
520 BOOST_REQUIRE(result.size() == 1);
521 BOOST_TEST(result(0) == expected);
529 mesh->createData(
"Data", 2, 0_dataID);
531 auto &v1 =
mesh->createVertex(Eigen::Vector2d(0.0, 0.0));
532 auto &v2 =
mesh->createVertex(Eigen::Vector2d(0.0, 0.5));
533 auto &v3 =
mesh->createVertex(Eigen::Vector2d(0.0, 1.5));
534 auto &v4 =
mesh->createVertex(Eigen::Vector2d(0.0, 3.5));
535 mesh->allocateDataValues();
537 mesh->createEdge(v1, v2);
538 mesh->createEdge(v2, v3);
539 mesh->createEdge(v3, v4);
541 mesh->data(0)->values()(0) = 1.0;
542 mesh->data(0)->values()(1) = 2.0;
543 mesh->data(0)->values()(2) = 3.0;
544 mesh->data(0)->values()(3) = 4.0;
545 mesh->data(0)->values()(4) = 5.0;
546 mesh->data(0)->values()(5) = 6.0;
547 mesh->data(0)->values()(6) = 7.0;
548 mesh->data(0)->values()(7) = 8.0;
551 Eigen::Vector2d expected(17.0, 20.5);
552 BOOST_REQUIRE(result.size() == 2);
553 BOOST_TEST(result(0) == expected(0));
554 BOOST_TEST(result(1) == expected(1));
562 mesh->createData(
"Data", 1, 0_dataID);
564 auto &v1 =
mesh->createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
565 auto &v2 =
mesh->createVertex(Eigen::Vector3d(3.0, 0.0, 0.0));
566 auto &v3 =
mesh->createVertex(Eigen::Vector3d(3.0, 4.0, 0.0));
567 auto &v4 =
mesh->createVertex(Eigen::Vector3d(0.0, 8.0, 0.0));
568 mesh->allocateDataValues();
570 auto &e1 =
mesh->createEdge(v1, v2);
571 auto &e2 =
mesh->createEdge(v2, v3);
572 auto &e3 =
mesh->createEdge(v3, v4);
573 auto &e4 =
mesh->createEdge(v1, v4);
574 auto &e5 =
mesh->createEdge(v1, v3);
576 mesh->createTriangle(e1, e2, e5);
577 mesh->createTriangle(e3, e4, e5);
579 mesh->data(0)->values()(0) = 1.0;
580 mesh->data(0)->values()(1) = 3.0;
581 mesh->data(0)->values()(2) = 5.0;
582 mesh->data(0)->values()(3) = 7.0;
585 double expected = 70.0;
586 BOOST_REQUIRE(result.size() == 1);
587 BOOST_TEST(result(0) == expected);
595 mesh->createData(
"Data", 2, 0_dataID);
597 auto &v1 =
mesh->createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
598 auto &v2 =
mesh->createVertex(Eigen::Vector3d(3.0, 0.0, 0.0));
599 auto &v3 =
mesh->createVertex(Eigen::Vector3d(3.0, 4.0, 0.0));
600 auto &v4 =
mesh->createVertex(Eigen::Vector3d(0.0, 8.0, 0.0));
601 mesh->allocateDataValues();
603 auto &e1 =
mesh->createEdge(v1, v2);
604 auto &e2 =
mesh->createEdge(v2, v3);
605 auto &e3 =
mesh->createEdge(v3, v4);
606 auto &e4 =
mesh->createEdge(v1, v4);
607 auto &e5 =
mesh->createEdge(v1, v3);
609 mesh->createTriangle(e1, e2, e5);
610 mesh->createTriangle(e3, e4, e5);
612 mesh->data(0)->values()(0) = 1.0;
613 mesh->data(0)->values()(1) = 2.0;
614 mesh->data(0)->values()(2) = 3.0;
615 mesh->data(0)->values()(3) = 4.0;
616 mesh->data(0)->values()(4) = 5.0;
617 mesh->data(0)->values()(5) = 6.0;
618 mesh->data(0)->values()(6) = 7.0;
619 mesh->data(0)->values()(7) = 8.0;
622 Eigen::Vector2d expected(70.0, 88.0);
623 BOOST_REQUIRE(result.size() == 2);
624 BOOST_TEST(result(0) == expected(0));
625 BOOST_TEST(result(1) == expected(1));
633 Eigen::Vector2d
x0{0.0, 0.0};
634 Eigen::Vector2d
x1{1.0, 0.0};
635 Eigen::Vector2d
x2{1.0, 1.0};
636 Eigen::Vector2d
x3{0.0, 1.0};
644 mesh->createData(
"Data", 1, 0_dataID);
646 auto &v1 =
mesh->createVertex(x0);
647 auto &v2 =
mesh->createVertex(x1);
648 auto &v3 =
mesh->createVertex(x2);
649 auto &v4 =
mesh->createVertex(x3);
650 mesh->allocateDataValues();
652 auto &e1 =
mesh->createEdge(v1, v2);
653 auto &e2 =
mesh->createEdge(v2, v3);
654 auto &e3 =
mesh->createEdge(v3, v4);
655 auto &e4 =
mesh->createEdge(v1, v4);
656 auto &e5 =
mesh->createEdge(v1, v3);
659 mesh->createTriangle(e1, e2, e5);
660 mesh->createTriangle(e3, e4, e5);
662 BOOST_REQUIRE(
mesh->triangles()[0].getArea() == 0.5);
663 BOOST_REQUIRE(
mesh->triangles()[1].getArea() == 0.5);
664 BOOST_REQUIRE(
mesh->triangles().size() == 2);
667 mesh->data(0)->values()(0) = 1.0;
668 mesh->data(0)->values()(1) = 3.0;
669 mesh->data(0)->values()(2) = 7.0;
670 mesh->data(0)->values()(3) = 5.0;
673 double expected = 4.0;
674 BOOST_REQUIRE(result.size() == 1);
675 BOOST_TEST(result(0) == expected);
683 mesh->createData(
"Data", 2, 0_dataID);
685 auto &v1 =
mesh->createVertex(x0);
686 auto &v2 =
mesh->createVertex(x1);
687 auto &v3 =
mesh->createVertex(x2);
688 auto &v4 =
mesh->createVertex(x3);
689 mesh->allocateDataValues();
691 auto &e1 =
mesh->createEdge(v1, v2);
692 auto &e2 =
mesh->createEdge(v2, v3);
693 auto &e3 =
mesh->createEdge(v3, v4);
694 auto &e4 =
mesh->createEdge(v1, v4);
695 auto &e5 =
mesh->createEdge(v1, v3);
698 mesh->createTriangle(e1, e2, e5);
699 mesh->createTriangle(e3, e4, e5);
701 BOOST_REQUIRE(
mesh->triangles()[0].getArea() == 0.5);
702 BOOST_REQUIRE(
mesh->triangles()[1].getArea() == 0.5);
703 BOOST_REQUIRE(
mesh->triangles().size() == 2);
706 mesh->data(0)->values()(0) = 1.0;
707 mesh->data(0)->values()(2) = 3.0;
708 mesh->data(0)->values()(4) = 7.0;
709 mesh->data(0)->values()(6) = 5.0;
711 mesh->data(0)->values()(1) = 2.0;
712 mesh->data(0)->values()(3) = 4.0;
713 mesh->data(0)->values()(5) = 8.0;
714 mesh->data(0)->values()(7) = 6.0;
717 Eigen::Vector2d expected(4.0, 5.0);
718 BOOST_REQUIRE(result.size() == 2);
719 BOOST_TEST(result(0) == expected(0));
720 BOOST_TEST(result(1) == expected(1));
724 Eigen::Vector3d
x1{0.0, 0.0, 0.0};
725 Eigen::Vector3d
x2{1.0, 0.0, 0.0};
726 Eigen::Vector3d
x3{0.0, 1.0, 0.0};
727 Eigen::Vector3d
x4{0.0, 0.0, 1.0};
735 mesh->createData(
"Data", 1, 0_dataID);
737 auto &v1 =
mesh->createVertex(x1);
738 auto &v2 =
mesh->createVertex(x2);
739 auto &v3 =
mesh->createVertex(x3);
740 auto &v4 =
mesh->createVertex(x4);
742 mesh->allocateDataValues();
744 mesh->createTetrahedron(v1, v2, v3, v4);
746 BOOST_REQUIRE(
mesh->tetrahedra()[0].getVolume() == 1. / 6);
747 BOOST_REQUIRE(
mesh->tetrahedra().size() == 1);
750 mesh->data(0)->values()(0) = 1.0;
751 mesh->data(0)->values()(1) = 3.0;
752 mesh->data(0)->values()(2) = 5.0;
753 mesh->data(0)->values()(3) = 7.0;
756 double expected = 4.0 / 6;
757 BOOST_REQUIRE(result.size() == 1);
758 BOOST_TEST(result(0) == expected);
766 mesh->createData(
"Data", 3, 0_dataID);
768 auto &v1 =
mesh->createVertex(x1);
769 auto &v2 =
mesh->createVertex(x2);
770 auto &v3 =
mesh->createVertex(x3);
771 auto &v4 =
mesh->createVertex(x4);
773 mesh->allocateDataValues();
775 mesh->createTetrahedron(v1, v2, v3, v4);
777 BOOST_REQUIRE(
mesh->tetrahedra()[0].getVolume() == 1. / 6);
778 BOOST_REQUIRE(
mesh->tetrahedra().size() == 1);
781 mesh->data(0)->values()(0 * 3) = 1.0;
782 mesh->data(0)->values()(1 * 3) = 3.0;
783 mesh->data(0)->values()(2 * 3) = 5.0;
784 mesh->data(0)->values()(3 * 3) = 7.0;
786 mesh->data(0)->values()(0 * 3 + 1) = 1.0;
787 mesh->data(0)->values()(1 * 3 + 1) = 1.0;
788 mesh->data(0)->values()(2 * 3 + 1) = 1.0;
789 mesh->data(0)->values()(3 * 3 + 1) = 1.0;
791 mesh->data(0)->values()(0 * 3 + 2) = 1.0;
792 mesh->data(0)->values()(1 * 3 + 2) = 0.0;
793 mesh->data(0)->values()(2 * 3 + 2) = 0.0;
794 mesh->data(0)->values()(3 * 3 + 2) = 0.0;
797 Eigen::Vector3d expected(4.0 / 6, 1.0 / 6, 1.0 / 24);
798 BOOST_REQUIRE(result.size() == 3);
799 BOOST_TEST(result(0) == expected(0));
800 BOOST_TEST(result(1) == expected(1));
801 BOOST_TEST(result(2) == expected(2));
814 auto &v01 = globalMesh->
createVertex(Eigen::Vector3d{0.0, 0.0, 0.0});
815 auto &v02 = globalMesh->
createVertex(Eigen::Vector3d{1.0, 0.0, 0.0});
816 auto &v03 = globalMesh->
createVertex(Eigen::Vector3d{0.0, 1.0, 0.0});
817 auto &v04 = globalMesh->
createVertex(Eigen::Vector3d{0.0, 0.0, 1.0});
824 auto &v11 = subMesh->
createVertex(Eigen::Vector3d{0.0, 0.0, 0.0});
825 auto &v12 = subMesh->
createVertex(Eigen::Vector3d{2.0, 0.0, 0.0});
826 auto &v13 = subMesh->
createVertex(Eigen::Vector3d{0.0, 4.0, 0.0});
827 auto &v14 = subMesh->
createVertex(Eigen::Vector3d{0.0, 0.0, 3.0});
828 auto &v15 = subMesh->
createVertex(Eigen::Vector3d{5.0, 0.0, 1.0});
839 BOOST_TEST(globalMesh->
nVertices() == 9);
840 BOOST_TEST(globalMesh->
edges().
size() == 3);
853 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
854 auto &v2 =
mesh.createVertex(Eigen::Vector3d(3.0, 0.0, 0.0));
855 auto &v3 =
mesh.createVertex(Eigen::Vector3d(3.0, 4.0, 0.0));
856 auto &v4 =
mesh.createVertex(Eigen::Vector3d(0.0, 8.0, 0.0));
858 mesh.createEdge(v1, v2);
859 mesh.createEdge(v2, v3);
860 mesh.createEdge(v3, v4);
863 mesh.createEdge(v3, v4);
866 for (
int i = 0; i < 1000; ++i) {
867 mesh.createEdge(v2, v3);
869 BOOST_TEST(
mesh.edges().size() == 1004);
873 BOOST_TEST(
mesh.edges().size() == 3);
874 BOOST_TEST(
mesh.triangles().empty());
875 BOOST_TEST(
mesh.tetrahedra().empty());
878 for (
auto &e : expectedEdges) {
880 BOOST_TEST(cnt == 1);
890 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
891 auto &v2 =
mesh.createVertex(Eigen::Vector3d(0.0, 1.0, 0.0));
892 auto &v3 =
mesh.createVertex(Eigen::Vector3d(1.0, 1.0, 0.0));
894 mesh.createTriangle(v1, v2, v3);
898 BOOST_TEST(
mesh.edges().size() == 3);
899 BOOST_TEST(
mesh.triangles().size() == 1);
900 BOOST_TEST(
mesh.tetrahedra().size() == 0);
909 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
910 auto &v2 =
mesh.createVertex(Eigen::Vector3d(1.0, 0.0, 0.0));
911 auto &v3 =
mesh.createVertex(Eigen::Vector3d(1.0, 1.0, 0.0));
912 auto &v4 =
mesh.createVertex(Eigen::Vector3d(0.0, 1.0, 0.0));
914 mesh.createTriangle(v1, v2, v3);
915 mesh.createTriangle(v2, v3, v4);
919 BOOST_TEST(
mesh.edges().size() == 5);
920 BOOST_TEST(
mesh.triangles().size() == 2);
921 BOOST_TEST(
mesh.tetrahedra().size() == 0);
930 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
931 auto &v2 =
mesh.createVertex(Eigen::Vector3d(0.0, 1.0, 0.0));
932 auto &v3 =
mesh.createVertex(Eigen::Vector3d(1.0, 1.0, 0.0));
933 auto &v4 =
mesh.createVertex(Eigen::Vector3d(0.3, 0.3, 1.0));
935 mesh.createTetrahedron(v1, v2, v3, v4);
939 BOOST_TEST(
mesh.edges().size() == 6);
940 BOOST_TEST(
mesh.triangles().size() == 4);
941 BOOST_TEST(
mesh.tetrahedra().size() == 1);
950 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
951 auto &v2 =
mesh.createVertex(Eigen::Vector3d(0.0, 1.0, 0.0));
952 auto &v3 =
mesh.createVertex(Eigen::Vector3d(1.0, 1.0, 0.0));
954 auto &v4 =
mesh.createVertex(Eigen::Vector3d(0.3, 0.3, 1.0));
955 auto &v5 =
mesh.createVertex(Eigen::Vector3d(0.3, 0.3, -1.0));
957 mesh.createTetrahedron(v1, v2, v3, v4);
958 mesh.createTetrahedron(v1, v2, v3, v5);
962 BOOST_TEST(
mesh.edges().size() == 9);
963 BOOST_TEST(
mesh.triangles().size() == 7);
964 BOOST_TEST(
mesh.tetrahedra().size() == 2);
973 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
974 auto &v2 =
mesh.createVertex(Eigen::Vector3d(0.0, 1.0, 0.0));
975 auto &v3 =
mesh.createVertex(Eigen::Vector3d(1.0, 1.0, 0.0));
977 mesh.createTriangle(v1, v2, v3);
978 mesh.createEdge(v2, v3);
982 BOOST_TEST(
mesh.edges().size() == 3);
983 BOOST_TEST(
mesh.triangles().size() == 1);
984 BOOST_TEST(
mesh.tetrahedra().size() == 0);
993 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
994 auto &v2 =
mesh.createVertex(Eigen::Vector3d(0.0, 1.0, 0.0));
995 auto &v3 =
mesh.createVertex(Eigen::Vector3d(1.0, 1.0, 0.0));
997 mesh.createTriangle(v1, v2, v3);
998 mesh.createEdge(v1, v2);
999 mesh.createEdge(v2, v3);
1003 BOOST_TEST(
mesh.edges().size() == 3);
1004 BOOST_TEST(
mesh.triangles().size() == 1);
1005 BOOST_TEST(
mesh.tetrahedra().size() == 0);
1014 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
1015 auto &v2 =
mesh.createVertex(Eigen::Vector3d(0.0, 1.0, 0.0));
1016 auto &v3 =
mesh.createVertex(Eigen::Vector3d(1.0, 1.0, 0.0));
1017 auto &v4 =
mesh.createVertex(Eigen::Vector3d(0.3, 0.3, 1.0));
1019 mesh.createTetrahedron(v1, v2, v3, v4);
1020 mesh.createTriangle(v1, v2, v3);
1024 BOOST_TEST(
mesh.edges().size() == 6);
1025 BOOST_TEST(
mesh.triangles().size() == 4);
1026 BOOST_TEST(
mesh.tetrahedra().size() == 1);
1035 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
1036 auto &v2 =
mesh.createVertex(Eigen::Vector3d(0.0, 1.0, 0.0));
1037 auto &v3 =
mesh.createVertex(Eigen::Vector3d(1.0, 1.0, 0.0));
1038 auto &v4 =
mesh.createVertex(Eigen::Vector3d(0.3, 0.3, 1.0));
1040 mesh.createTetrahedron(v1, v2, v3, v4);
1041 mesh.createTriangle(v1, v2, v3);
1042 mesh.createTriangle(v1, v2, v4);
1043 mesh.createTriangle(v3, v4, v1);
1044 mesh.createTriangle(v3, v4, v2);
1048 BOOST_TEST(
mesh.edges().size() == 6);
1049 BOOST_TEST(
mesh.triangles().size() == 4);
1050 BOOST_TEST(
mesh.tetrahedra().size() == 1);
1059 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
1060 auto &v2 =
mesh.createVertex(Eigen::Vector3d(0.0, 1.0, 0.0));
1061 auto &v3 =
mesh.createVertex(Eigen::Vector3d(1.0, 1.0, 0.0));
1062 auto &v4 =
mesh.createVertex(Eigen::Vector3d(0.3, 0.3, 1.0));
1064 mesh.createTetrahedron(v1, v2, v3, v4);
1065 mesh.createTriangle(v1, v2, v3);
1066 mesh.createEdge(v3, v4);
1070 BOOST_TEST(
mesh.edges().size() == 6);
1071 BOOST_TEST(
mesh.triangles().size() == 4);
1072 BOOST_TEST(
mesh.tetrahedra().size() == 1);
1081 auto &v1 =
mesh.createVertex(Eigen::Vector3d(0.0, 0.0, 0.0));
1082 auto &v2 =
mesh.createVertex(Eigen::Vector3d(3.0, 0.0, 0.0));
1083 auto &v3 =
mesh.createVertex(Eigen::Vector3d(3.0, 4.0, 0.0));
1084 auto &v4 =
mesh.createVertex(Eigen::Vector3d(0.0, 8.0, 0.0));
1086 mesh.createEdge(v1, v2);
1087 mesh.createEdge(v2, v3);
1088 mesh.createEdge(v3, v4);
1091 mesh.createEdge(v3, v4);
1094 for (
int i = 0; i < 1000; ++i) {
1095 mesh.createEdge(v2, v3);
1097 BOOST_TEST(
mesh.edges().size() == 1004);
1099 mesh.createTriangle(v1, v2, v3);
1100 mesh.createTriangle(v2, v3, v4);
1101 for (
int i = 0; i < 1000; ++i) {
1102 mesh.createTriangle(v2, v3, v4);
1104 BOOST_TEST(
mesh.triangles().size() == 1002);
1109 BOOST_TEST(
mesh.edges().size() == 5);
1110 BOOST_TEST(
mesh.triangles().size() == 2);
1112 std::vector<Edge> expectedEdges{{v1, v2}, {v1, v3}, {v2, v3}, {v3, v4}, {v2, v4}};
1113 for (
auto &e : expectedEdges) {
1115 BOOST_TEST(cnt == 1);
1119 for (
auto &t : expectedTriangles) {
1121 BOOST_TEST(cnt == 1);
BOOST_AUTO_TEST_CASE(testIQNIMVJPPWithSubsteps)
BOOST_AUTO_TEST_SUITE(PreProcess)
BOOST_FIXTURE_TEST_CASE(Integrate2DScalarDataVolume, UnitSquareFixture)
BOOST_AUTO_TEST_SUITE_END()
#define PRECICE_TEST_SETUP(...)
Creates and attaches a TestSetup to a Boost test case.
An axis-aligned bounding box around a (partition of a) mesh.
int getDimension() const
Getter dimension of the bounding box.
Eigen::VectorXd center() const
Returns the Center Of Gravity of the mesh.
Linear edge of a mesh, defined by two Vertex objects.
Container and creator for meshes.
Triangle & createTriangle(Edge &edgeOne, Edge &edgeTwo, Edge &edgeThree)
Creates and initializes a Triangle object.
void addMesh(Mesh &deltaMesh)
std::size_t nVertices() const
Returns the number of vertices.
TetraContainer & tetrahedra()
Returns modifiable container holding all tetrahedra.
Tetrahedron & createTetrahedron(Vertex &vertexOne, Vertex &vertexTwo, Vertex &vertexThree, Vertex &vertexFour)
Creates and initializes a Tetrahedron object.
TriangleContainer & triangles()
Returns modifiable container holding all triangles.
Edge & createEdge(Vertex &vertexOne, Vertex &vertexTwo)
Creates and initializes an Edge object.
Vertex & createVertex(const Eigen::Ref< const Eigen::VectorXd > &coords)
Creates and initializes a Vertex object.
EdgeContainer & edges()
Returns modifiable container holding all edges.
VertexID getID() const
Returns the unique (among vertices of one mesh on one processor) ID of the vertex.
provides Mesh, Data and primitives.
std::shared_ptr< Data > PtrData
Eigen::VectorXd integrateSurface(const PtrMesh &mesh, const Eigen::VectorXd &input)
Given the data and the mesh, this function returns the surface integral. Assumes no overlap exists fo...
Eigen::VectorXd integrateVolume(const PtrMesh &mesh, const Eigen::VectorXd &input)
Given the data and the mesh, this function returns the volume integral. Assumes no overlap exists for...
std::array< Eigen::VectorXd, n > coordsFor(const Mesh &mesh, const std::array< int, n > &vertexIDs)
Given a mesh and an array of vertexIDS, this function returns an array of coordinates of the vertices...
std::shared_ptr< Mesh > PtrMesh
Vertex * sharedVertex(Edge &a, Edge &b)
std::array< Vertex *, n > vertexPtrsFor(Mesh &mesh, const std::array< int, n > &vertexIDs)
Given a mesh and an array of vertexIDS, this function returns an array of pointers to vertices.
double edgeLength(const Edge &e)
Chain< n > asChain(std::array< mesh::Edge *, n > edges)
boost::test_tools::predicate_result equals(const std::vector< float > &VectorA, const std::vector< float > &VectorB, float tolerance)
equals to be used in tests. Compares two std::vectors using a given tolerance. Prints both operands o...
auto make_array(Elements &&...elements) -> std::array< typename std::common_type< Elements... >::type, sizeof...(Elements)>
Function that generates an array from given elements.
Main namespace of the precice library.