17 #define MAXELEMENTSPERBLOCK 1
19 #include "../include/numerical_towing_tank.h"
20 #include "../include/boat_surface.h"
23 #include <BRepAdaptor_Curve.hxx>
30 const unsigned int mapping_degree) :
32 restart_surface_smoother(NULL),
33 surface_smoother(NULL),
34 line_smoothers(7,NULL),
35 mapping_degree(mapping_degree)
41 std::cout<<
"Performing full mesh treatment"<<std::endl;
64 std::cout<<
"done full mesh treatment"<<std::endl;
70 std::cout<<
"Performing partial mesh treatment"<<std::endl;
78 std::cout<<
"done partial mesh treatment"<<std::endl;
84 std::cout<<
"Computing geometrically conforming mesh"<<std::endl;
101 std::cout<<
"Done computing geometrically conforming mesh"<<std::endl;
114 std::cout<<
"Computing curvatures for geometrically conforming mesh refinement"<<std::endl;
121 std::cout<<
"Done computing curvatures for geometrically conforming mesh"<<std::endl;
126 std::cout<<
"Refining and resizing mesh as required"<<std::endl;
131 std::cout<<
"Total number of dofs of first mesh: "<<
dh.
n_dofs()<<std::endl;
154 std::vector< Point<3> > normals(vector_dh.n_dofs()/3);
158 for (
unsigned int i=0; i<vector_dh.n_dofs()/3; ++i)
160 for (
unsigned int j=0; j<3; ++j)
171 std::cout<<
"Adaptive refinement cycle "<<k+1<<
" of "<<init_adaptive_boat_refs<<std::endl;
186 update_values | update_cell_normal_vectors | update_quadrature_points |
190 unsigned int cell_count = 0;
195 for (; cell!=endc; ++cell)
205 if (quadrature_points[0](1) > 0)
208 quadrature_points[0],
213 estimated_error_per_cell(cell_count) = proj_node.
distance(quadrature_points[0]);
218 quadrature_points[0],
223 estimated_error_per_cell(cell_count) = proj_node.
distance(quadrature_points[0]);
231 estimated_error_per_cell,
241 map_points.reinit(vector_dh.n_dofs());
247 DoFTools::map_dofs_to_support_points<2,3>(StaticMappingQ1<2,3>::mapping,
255 positions.reinit(vector_dh.n_dofs());
257 for (
unsigned int i=0; i<vector_dh.n_dofs()/3; ++i)
258 for (
unsigned int j=0; j<3; ++j)
269 for ( ; cell != endc; ++cell)
276 std::cout <<
"Min diameter: << " <<
min_diameter << std::endl;
282 std::cout<<
"Total number of dofs after whole refinement: "<<
dh.
n_dofs()<<std::endl;
284 std::cout<<
"...done refining and resizing mesh"<<std::endl;
595 std::vector<Point<3> > vertices;
596 std::vector<CellData<2> > cells;
685 cells[0].vertices[0]=0;
686 cells[0].vertices[1]=1;
687 cells[0].vertices[2]=3;
688 cells[0].vertices[3]=2;
689 cells[1].vertices[0]=4;
690 cells[1].vertices[1]=5;
691 cells[1].vertices[2]=6;
692 cells[1].vertices[3]=7;
693 cells[2].vertices[0]=8;
694 cells[2].vertices[1]=9;
695 cells[2].vertices[2]=10;
696 cells[2].vertices[3]=11;
697 cells[3].vertices[0]=12;
698 cells[3].vertices[1]=13;
699 cells[3].vertices[2]=14;
700 cells[3].vertices[3]=15;
701 cells[4].vertices[0]=16;
702 cells[4].vertices[1]=17;
703 cells[4].vertices[2]=18;
704 cells[4].vertices[3]=19;
705 cells[5].vertices[0]=20;
706 cells[5].vertices[1]=21;
707 cells[5].vertices[2]=22;
708 cells[5].vertices[3]=23;
710 cells[0].material_id = 9;
711 cells[1].material_id = 5;
712 cells[2].material_id = 2;
713 cells[3].material_id = 1;
714 cells[4].material_id = 7;
715 cells[5].material_id = 11;
743 vertices[4](0)=b*PointLeftTransom(0);
746 vertices[5](0)=a*PointFrontTop(0);
749 vertices[6](0)=b*PointLeftTransom(0);
755 vertices[8](0)=a*PointFrontTop(0);
773 vertices[14](0)=a*PointFrontTop(0);
776 vertices[15](0)=b*PointRightTransom(0);
779 vertices[16](0)=a*PointFrontTop(0);
785 vertices[18](0)=b*PointRightTransom(0);
791 vertices[20](0)=PointFrontTop(0);
794 vertices[21](0)=PointRightTransom(0);
795 vertices[21](1)=PointRightTransom(1);
797 vertices[22](0)=PointFrontBot(0);
799 vertices[22](2)=PointFrontBot(2);
800 vertices[23](0)=PointCenterTransom(0);
802 vertices[23](2)=PointCenterTransom(2);
804 vertices[24](1)=PointMidTop(1);
806 vertices[25](0)=PointMidBot(0);
808 vertices[25](2)=PointMidBot(2);
809 vertices[26](0)=PointLeftTransom(0);
810 vertices[26](1)=PointLeftTransom(1);
812 vertices[27](0)=PointFrontTop(0);
815 vertices[28](0)=PointCenterTransom(0);
817 vertices[28](2)=PointCenterTransom(2);
818 vertices[29](0)=PointFrontBot(0);
820 vertices[29](2)=PointFrontBot(2);
822 vertices[30](1)=-PointMidTop(1);
824 vertices[31](0)=PointMidBot(0);
826 vertices[31](2)=PointMidBot(2);
827 vertices[32](0)=PointLeftTransom(0);
828 vertices[32](1)=PointLeftTransom(1);
830 vertices[33](0)=PointFrontTop(0);
839 vertices[36](0)=a*PointFrontTop(0);
842 vertices[37](0)=b*PointLeftTransom(0);
852 vertices[40](1)=-PointMidTop(1);
860 vertices[43](0)=b*PointRightTransom(0);
863 vertices[44](0)=a*PointFrontTop(0);
870 vertices[46](1)=PointMidTop(1);
887 vertices[52](0)=a*PointFrontTop(0);
893 vertices[54](0)=b*(PointRightTransom(0)+PointLeftTransom(0))/2.0;
896 vertices[55](0)=a*PointFrontTop(0);
902 vertices[57](0)=b*PointRightTransom(0);
917 vertices[62](0)=a*PointFrontTop(0);
923 vertices[64](0)=b*(PointRightTransom(0)+PointLeftTransom(0))/2.0;
926 vertices[65](0)=b*PointLeftTransom(0);
932 vertices[67](0)=a*PointFrontTop(0);
983 vertices[84](0)=PointRightTransom(0);
984 vertices[84](1)=PointRightTransom(1);
992 vertices[87](0)=PointCenterTransom(0);
994 vertices[87](2)=PointCenterTransom(2);
998 cells[0].vertices[0]=0;
999 cells[0].vertices[1]=1;
1000 cells[0].vertices[2]=8;
1001 cells[0].vertices[3]=5;
1002 cells[1].vertices[0]=5;
1003 cells[1].vertices[1] =8;
1004 cells[1].vertices[2] =7;
1005 cells[1].vertices[3]=9;
1006 cells[2].vertices[0]=9;
1007 cells[2].vertices[1] =7;
1008 cells[2].vertices[2] =6;
1009 cells[2].vertices[3]=4;
1010 cells[3].vertices[0]=4;
1011 cells[3].vertices[1] =6;
1012 cells[3].vertices[2] =2;
1013 cells[3].vertices[3]=3;
1014 cells[4].vertices[0]=10;
1015 cells[4].vertices[1] =11;
1016 cells[4].vertices[2] =18;
1017 cells[4].vertices[3]=15;
1018 cells[5].vertices[0]=15;
1019 cells[5].vertices[1] =18;
1020 cells[5].vertices[2] =17;
1021 cells[5].vertices[3]=19;
1022 cells[6].vertices[0]=19;
1023 cells[6].vertices[1] =17;
1024 cells[6].vertices[2] =16;
1025 cells[6].vertices[3]=14;
1026 cells[7].vertices[0]=14;
1027 cells[7].vertices[1] =16;
1028 cells[7].vertices[2] =12;
1029 cells[7].vertices[3]=13;
1030 cells[8].vertices[0]=21;
1031 cells[8].vertices[1] =24;
1032 cells[8].vertices[2] =25;
1033 cells[8].vertices[3]=23;
1034 cells[9].vertices[0]=24;
1035 cells[9].vertices[1] =20;
1036 cells[9].vertices[2] =22;
1037 cells[9].vertices[3]=25;
1038 cells[10].vertices[0]=27;
1039 cells[10].vertices[1] =30;
1040 cells[10].vertices[2] =31;
1041 cells[10].vertices[3]=29;
1042 cells[11].vertices[0]=30;
1043 cells[11].vertices[1] =26;
1044 cells[11].vertices[2] =28;
1045 cells[11].vertices[3]=31;
1046 cells[12].vertices[0]=34;
1047 cells[12].vertices[1] =35;
1048 cells[12].vertices[2] =36;
1049 cells[12].vertices[3]=33;
1050 cells[13].vertices[0]=33;
1051 cells[13].vertices[1] =36;
1052 cells[13].vertices[2] =41;
1053 cells[13].vertices[3]=40;
1054 cells[14].vertices[0]=40;
1055 cells[14].vertices[1] =41;
1056 cells[14].vertices[2] =37;
1057 cells[14].vertices[3]=32;
1058 cells[15].vertices[0]=32;
1059 cells[15].vertices[1] =37;
1060 cells[15].vertices[2] =38;
1061 cells[15].vertices[3]=39;
1062 cells[16].vertices[0]=85;
1063 cells[16].vertices[1] =42;
1064 cells[16].vertices[2] =43;
1065 cells[16].vertices[3]=84;
1066 cells[17].vertices[0]=84;
1067 cells[17].vertices[1] =43;
1068 cells[17].vertices[2] =47;
1069 cells[17].vertices[3]=46;
1070 cells[18].vertices[0]=46;
1071 cells[18].vertices[1] =47;
1072 cells[18].vertices[2] =44;
1073 cells[18].vertices[3]=33;
1074 cells[19].vertices[0]=33;
1075 cells[19].vertices[1] =44;
1076 cells[19].vertices[2] =45;
1077 cells[19].vertices[3]=34;
1078 cells[20].vertices[0]=49;
1079 cells[20].vertices[1] =54;
1080 cells[20].vertices[2] =57;
1081 cells[20].vertices[3]=51;
1082 cells[21].vertices[0]=54;
1083 cells[21].vertices[1] =53;
1084 cells[21].vertices[2] =56;
1085 cells[21].vertices[3]=57;
1086 cells[22].vertices[0]=53;
1087 cells[22].vertices[1] =52;
1088 cells[22].vertices[2] =55;
1089 cells[22].vertices[3]=56;
1090 cells[23].vertices[0]=52;
1091 cells[23].vertices[1] =48;
1092 cells[23].vertices[2] =50;
1093 cells[23].vertices[3]=55;
1094 cells[24].vertices[0]=58;
1095 cells[24].vertices[1] =62;
1096 cells[24].vertices[2] =67;
1097 cells[24].vertices[3]=61;
1098 cells[25].vertices[0]=62;
1099 cells[25].vertices[1] =63;
1100 cells[25].vertices[2] =66;
1101 cells[25].vertices[3]=67;
1102 cells[26].vertices[0]=63;
1103 cells[26].vertices[1] =64;
1104 cells[26].vertices[2] =65;
1105 cells[26].vertices[3]=66;
1106 cells[27].vertices[0]=64;
1107 cells[27].vertices[1] =59;
1108 cells[27].vertices[2] =60;
1109 cells[27].vertices[3]=65;
1110 cells[28].vertices[0]=69;
1111 cells[28].vertices[1] =68;
1112 cells[28].vertices[2] =70;
1113 cells[28].vertices[3]=71;
1114 cells[29].vertices[0]=72;
1115 cells[29].vertices[1] =73;
1116 cells[29].vertices[2] =74;
1117 cells[29].vertices[3]=75;
1118 cells[30].vertices[0]=81;
1119 cells[30].vertices[1] =76;
1120 cells[30].vertices[2] =78;
1121 cells[30].vertices[3]=79;
1122 cells[31].vertices[0]=77;
1123 cells[31].vertices[1] =81;
1124 cells[31].vertices[2] =82;
1125 cells[31].vertices[3]=83;
1126 cells[32].vertices[0]=87;
1127 cells[32].vertices[1] =32;
1128 cells[32].vertices[2] =39;
1129 cells[32].vertices[3]=86;
1130 cells[33].vertices[0]=86;
1131 cells[33].vertices[1] =85;
1132 cells[33].vertices[2] =84;
1133 cells[33].vertices[3]=87;
1134 cells[34].vertices[0]=81;
1135 cells[34].vertices[1] =77;
1136 cells[34].vertices[2] =80;
1137 cells[34].vertices[3]=76;
1139 cells[0].material_id = 1;
1140 cells[1].material_id = 1;
1141 cells[2].material_id = 1;
1142 cells[3].material_id = 1;
1143 cells[4].material_id = 2;
1144 cells[5].material_id = 2;
1145 cells[6].material_id = 2;
1146 cells[7].material_id = 2;
1147 cells[8].material_id = 3;
1148 cells[9].material_id = 3;
1149 cells[10].material_id = 4;
1150 cells[11].material_id = 4;
1151 cells[12].material_id = 5;
1152 cells[13].material_id = 5;
1153 cells[14].material_id = 5;
1154 cells[15].material_id = 5;
1155 cells[16].material_id = 6;
1156 cells[17].material_id = 6;
1157 cells[18].material_id = 6;
1158 cells[19].material_id = 6;
1159 cells[20].material_id = 7;
1160 cells[21].material_id = 7;
1161 cells[22].material_id = 7;
1162 cells[23].material_id = 7;
1163 cells[24].material_id = 8;
1164 cells[25].material_id = 8;
1165 cells[26].material_id = 8;
1166 cells[27].material_id = 8;
1167 cells[28].material_id = 9;
1168 cells[29].material_id = 10;
1169 cells[30].material_id = 11;
1170 cells[31].material_id = 11;
1171 cells[32].material_id = 5;
1172 cells[33].material_id = 6;
1173 cells[34].material_id = 11;
1276 vertices.resize(84);
1290 vertices[4](0)=b*PointBackTop(0);
1293 vertices[5](0)=a*PointFrontTop(0);
1296 vertices[6](0)=b*PointBackTop(0);
1302 vertices[8](0)=a*PointFrontTop(0);
1320 vertices[14](0)=a*PointFrontTop(0);
1323 vertices[15](0)=b*PointBackTop(0);
1326 vertices[16](0)=a*PointFrontTop(0);
1332 vertices[18](0)=b*PointBackTop(0);
1338 vertices[20](0)=PointFrontTop(0);
1341 vertices[21](0)=PointBackTop(0);
1344 vertices[22](0)=PointFrontBot(0);
1346 vertices[22](2)=PointFrontBot(2);
1347 vertices[23](0)=PointBackBot(0);
1349 vertices[23](2)=PointBackBot(2);
1351 vertices[24](1)=PointMidTop(1);
1353 vertices[25](0)=PointMidBot(0);
1355 vertices[25](2)=PointMidBot(2);
1356 vertices[26](0)=PointBackTop(0);
1359 vertices[27](0)=PointFrontTop(0);
1362 vertices[28](0)=PointBackBot(0);
1364 vertices[28](2)=PointBackBot(2);
1365 vertices[29](0)=PointFrontBot(0);
1367 vertices[29](2)=PointFrontBot(2);
1369 vertices[30](1)=-PointMidTop(1);
1371 vertices[31](0)=PointMidBot(0);
1373 vertices[31](2)=PointMidBot(2);
1374 vertices[32](0)=PointBackTop(0);
1377 vertices[33](0)=PointFrontTop(0);
1386 vertices[36](0)=a*PointFrontTop(0);
1389 vertices[37](0)=b*PointBackTop(0);
1399 vertices[40](1)=-PointMidTop(1);
1407 vertices[43](0)=b*PointBackTop(0);
1410 vertices[44](0)=a*PointFrontTop(0);
1417 vertices[46](1)=PointMidTop(1);
1434 vertices[52](0)=a*PointFrontTop(0);
1440 vertices[54](0)=b*PointBackTop(0);
1443 vertices[55](0)=a*PointFrontTop(0);
1449 vertices[57](0)=b*PointBackTop(0);
1464 vertices[62](0)=a*PointFrontTop(0);
1470 vertices[64](0)=b*PointBackTop(0);
1473 vertices[65](0)=b*PointBackTop(0);
1479 vertices[67](0)=a*PointFrontTop(0);
1533 cells[0].vertices[0]=0;
1534 cells[0].vertices[1]=1;
1535 cells[0].vertices[2]=8;
1536 cells[0].vertices[3]=5;
1537 cells[1].vertices[0]=5;
1538 cells[1].vertices[1] =8;
1539 cells[1].vertices[2] =7;
1540 cells[1].vertices[3]=9;
1541 cells[2].vertices[0]=9;
1542 cells[2].vertices[1] =7;
1543 cells[2].vertices[2] =6;
1544 cells[2].vertices[3]=4;
1545 cells[3].vertices[0]=4;
1546 cells[3].vertices[1] =6;
1547 cells[3].vertices[2] =2;
1548 cells[3].vertices[3]=3;
1549 cells[4].vertices[0]=10;
1550 cells[4].vertices[1] =11;
1551 cells[4].vertices[2] =18;
1552 cells[4].vertices[3]=15;
1553 cells[5].vertices[0]=15;
1554 cells[5].vertices[1] =18;
1555 cells[5].vertices[2] =17;
1556 cells[5].vertices[3]=19;
1557 cells[6].vertices[0]=19;
1558 cells[6].vertices[1] =17;
1559 cells[6].vertices[2] =16;
1560 cells[6].vertices[3]=14;
1561 cells[7].vertices[0]=14;
1562 cells[7].vertices[1] =16;
1563 cells[7].vertices[2] =12;
1564 cells[7].vertices[3]=13;
1565 cells[8].vertices[0]=21;
1566 cells[8].vertices[1] =24;
1567 cells[8].vertices[2] =25;
1568 cells[8].vertices[3]=23;
1569 cells[9].vertices[0]=24;
1570 cells[9].vertices[1] =20;
1571 cells[9].vertices[2] =22;
1572 cells[9].vertices[3]=25;
1573 cells[10].vertices[0]=27;
1574 cells[10].vertices[1] =30;
1575 cells[10].vertices[2] =31;
1576 cells[10].vertices[3]=29;
1577 cells[11].vertices[0]=30;
1578 cells[11].vertices[1] =26;
1579 cells[11].vertices[2] =28;
1580 cells[11].vertices[3]=31;
1581 cells[12].vertices[0]=34;
1582 cells[12].vertices[1] =35;
1583 cells[12].vertices[2] =36;
1584 cells[12].vertices[3]=33;
1585 cells[13].vertices[0]=33;
1586 cells[13].vertices[1] =36;
1587 cells[13].vertices[2] =41;
1588 cells[13].vertices[3]=40;
1589 cells[14].vertices[0]=40;
1590 cells[14].vertices[1] =41;
1591 cells[14].vertices[2] =37;
1592 cells[14].vertices[3]=32;
1593 cells[15].vertices[0]=32;
1594 cells[15].vertices[1] =37;
1595 cells[15].vertices[2] =38;
1596 cells[15].vertices[3]=39;
1597 cells[16].vertices[0]=39;
1598 cells[16].vertices[1] =42;
1599 cells[16].vertices[2] =43;
1600 cells[16].vertices[3]=32;
1601 cells[17].vertices[0]=32;
1602 cells[17].vertices[1] =43;
1603 cells[17].vertices[2] =47;
1604 cells[17].vertices[3]=46;
1605 cells[18].vertices[0]=46;
1606 cells[18].vertices[1] =47;
1607 cells[18].vertices[2] =44;
1608 cells[18].vertices[3]=33;
1609 cells[19].vertices[0]=33;
1610 cells[19].vertices[1] =44;
1611 cells[19].vertices[2] =45;
1612 cells[19].vertices[3]=34;
1613 cells[20].vertices[0]=49;
1614 cells[20].vertices[1] =54;
1615 cells[20].vertices[2] =57;
1616 cells[20].vertices[3]=51;
1617 cells[21].vertices[0]=54;
1618 cells[21].vertices[1] =53;
1619 cells[21].vertices[2] =56;
1620 cells[21].vertices[3]=57;
1621 cells[22].vertices[0]=53;
1622 cells[22].vertices[1] =52;
1623 cells[22].vertices[2] =55;
1624 cells[22].vertices[3]=56;
1625 cells[23].vertices[0]=52;
1626 cells[23].vertices[1] =48;
1627 cells[23].vertices[2] =50;
1628 cells[23].vertices[3]=55;
1629 cells[24].vertices[0]=58;
1630 cells[24].vertices[1] =62;
1631 cells[24].vertices[2] =67;
1632 cells[24].vertices[3]=61;
1633 cells[25].vertices[0]=62;
1634 cells[25].vertices[1] =63;
1635 cells[25].vertices[2] =66;
1636 cells[25].vertices[3]=67;
1637 cells[26].vertices[0]=63;
1638 cells[26].vertices[1] =64;
1639 cells[26].vertices[2] =65;
1640 cells[26].vertices[3]=66;
1641 cells[27].vertices[0]=64;
1642 cells[27].vertices[1] =59;
1643 cells[27].vertices[2] =60;
1644 cells[27].vertices[3]=65;
1645 cells[28].vertices[0]=69;
1646 cells[28].vertices[1] =68;
1647 cells[28].vertices[2] =70;
1648 cells[28].vertices[3]=71;
1649 cells[29].vertices[0]=72;
1650 cells[29].vertices[1] =73;
1651 cells[29].vertices[2] =74;
1652 cells[29].vertices[3]=75;
1653 cells[30].vertices[0]=77;
1654 cells[30].vertices[1] =76;
1655 cells[30].vertices[2] =78;
1656 cells[30].vertices[3]=79;
1657 cells[31].vertices[0]=80;
1658 cells[31].vertices[1] =81;
1659 cells[31].vertices[2] =82;
1660 cells[31].vertices[3]=83;
1662 cells[0].material_id = 1;
1663 cells[1].material_id = 1;
1664 cells[2].material_id = 1;
1665 cells[3].material_id = 1;
1666 cells[4].material_id = 2;
1667 cells[5].material_id = 2;
1668 cells[6].material_id = 2;
1669 cells[7].material_id = 2;
1670 cells[8].material_id = 3;
1671 cells[9].material_id = 3;
1672 cells[10].material_id = 4;
1673 cells[11].material_id = 4;
1674 cells[12].material_id = 5;
1675 cells[13].material_id = 5;
1676 cells[14].material_id = 5;
1677 cells[15].material_id = 5;
1678 cells[16].material_id = 6;
1679 cells[17].material_id = 6;
1680 cells[18].material_id = 6;
1681 cells[19].material_id = 6;
1682 cells[20].material_id = 7;
1683 cells[21].material_id = 7;
1684 cells[22].material_id = 7;
1685 cells[23].material_id = 7;
1686 cells[24].material_id = 8;
1687 cells[25].material_id = 8;
1688 cells[26].material_id = 8;
1689 cells[27].material_id = 8;
1690 cells[28].material_id = 9;
1691 cells[29].material_id = 10;
1692 cells[30].material_id = 11;
1693 cells[31].material_id = 12;
1785 std::ofstream logfile(
"meshResult.inp");
1787 grid_out.
write_ucd(triangulation, logfile);
1801 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
1904 for (; cell!=endc,vector_cell!=vector_endc; ++cell,++vector_cell)
1908 cell->get_dof_indices(dofs);
1913 vector_cell->get_dof_indices(vector_dofs);
1924 cell->get_dof_indices(dofs);
1928 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
1930 std::vector<cell_it>
1932 for (
unsigned int k=0; k<dof_cell_list.size(); ++k)
1946 if ( cell->at_boundary() )
1948 for (
unsigned int j = 0; j < GeometryInfo<2>::faces_per_cell; j++)
1952 cell->face(j)->get_dof_indices(face_dofs);
1968 for (; vector_cell!=vector_endc; ++vector_cell)
1971 vector_cell->get_dof_indices(vector_local_dof_indices);
1978 unsigned int id=vector_local_dof_indices[j];
1990 for (; cell != endc; ++cell)
1991 if (cell->at_boundary() )
2017 unsigned int cell_id=0;
2031 cell != endc; ++cell, ++vector_cell, ++cell_id)
2034 cell->get_dof_indices(dofs);
2035 vector_cell->get_dof_indices(vector_dofs);
2038 if (cell->center()(1) > 0)
2094 for (
unsigned int f=0; f<GeometryInfo<2>::faces_per_cell; ++f)
2095 if ( cell->face(f)->at_boundary() )
2097 cell->face(f)->get_dof_indices(face_dofs);
2098 vector_cell->face(f)->get_dof_indices(vector_face_dofs);
2099 for (
unsigned int k=0; k<face_dofs.size(); ++k)
2101 for (
unsigned int k=0; k<vector_face_dofs.size(); ++k)
2106 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
2110 for (std::set<unsigned int>::iterator it = doubles.begin() ; it != doubles.end(); it++ )
2119 if (
flags[i] & boat)
2142 for (std::set<unsigned int>::iterator it = doubles.begin() ; it != doubles.end(); it++ )
2170 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
2174 (doubles.size() == 3))
2183 (doubles.size() == 3))
2192 unsigned int left_boat_transom_point_id = 0;
2193 unsigned int right_boat_transom_point_id = 0;
2194 unsigned int left_water_transom_point_id = 0;
2195 unsigned int right_water_transom_point_id = 0;
2200 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
2205 left_water_transom_point_id = *pos;
2209 left_boat_transom_point_id = *pos;
2213 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
2218 right_water_transom_point_id = *pos;
2222 right_boat_transom_point_id = *pos;
2230 if ( cell->at_boundary() )
2232 for (
unsigned int j = 0; j < GeometryInfo<2>::faces_per_cell; j++)
2234 if ((cell->face(j)->boundary_id() == 40) ||
2235 (cell->face(j)->boundary_id() == 41) )
2237 cell->face(j)->get_dof_indices(face_dofs);
2240 if ( (right_water_transom_point_id != face_dofs[k]) &&
2241 (left_water_transom_point_id != face_dofs[k]) )
2244 for (
unsigned int p=0; p<3; ++p)
2249 else if ((cell->face(j)->boundary_id() == 37) ||
2250 (cell->face(j)->boundary_id() == 32) )
2252 cell->face(j)->get_dof_indices(face_dofs);
2255 if ( (right_boat_transom_point_id != face_dofs[k]) &&
2256 (left_boat_transom_point_id != face_dofs[k]) )
2259 for (
unsigned int p=0; p<3; ++p)
2394 moving_points[5] = moving_points[2];
2401 moving_points[6] = moving_points[1];
2407 for (
unsigned int i=0; i<7; ++i)
2413 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
2418 moving_point_ids[i] = *pos;
2423 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
2428 base_point_ids[i] = *pos;
2436 for (
unsigned int i=0; i<7; ++i)
2446 smoother_tolerance);
2521 moving_points[5] = moving_points[2];
2528 moving_points[6] = moving_points[1];
2534 for (
unsigned int i=0; i<7; ++i)
2541 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
2546 moving_point_ids[i] = *pos;
2551 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
2556 base_point_ids[i] = *pos;
2562 for (
unsigned int i=0; i<7; ++i)
2579 for (
unsigned int i=0; i<num_smoothings; ++i)
2592 for (
unsigned int k=0; k<num_smoothings; ++k)
2593 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
2598 duplicates.erase(i);
2599 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
2600 for (
unsigned int j=0; j<3; ++j)
2649 std::pair<double,double> params;
2653 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
2664 for (
unsigned int j=0; j<3; ++j)
2671 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
2684 for (
unsigned int j=0; j<3; ++j)
2730 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
2748 for (std::set<unsigned int>::iterator pos=duplicates.begin(); pos!=duplicates.end(); pos++)
2749 for (
unsigned int j=0; j<3; ++j)
2756 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
2774 for (std::set<unsigned int>::iterator pos=duplicates.begin(); pos!=duplicates.end(); pos++)
2775 for (
unsigned int j=0; j<3; ++j)
2783 void NumericalTowingTank::evaluate_ref_surf_distances(
Vector <double> &distances,
2784 const bool only_surf_smoothing)
2786 cout<<
"Evaluating boat surf distances"<<endl;
2802 if (only_surf_smoothing ==
false)
2803 for (
unsigned int k=3; k<7; ++k)
2810 Handle(Geom_Plane) horPlane = new Geom_Plane(0.,0.,1.,-dP0(2));
2811 Handle(Geom_Curve) curve;
2813 TopLoc_Location L_inv = L.Inverted();
2815 horPlane->Transform(L_inv.Transformation());
2830 TopoDS_Edge
edge = BRepBuilderAPI_MakeEdge(curve);
2832 BRepAdaptor_Curve AC(edge);
2835 GeomAPI_IntCS Intersector(curve, horPlane);
2836 int npoints = Intersector.NbPoints();
2838 AssertThrow((npoints != 0),
ExcMessage(
"Keel or transom curve is not intersecting with horizontal plane!"));
2839 double minDistance=1e7;
2841 for (
int j=0; j<npoints; ++j)
2843 gp_Pnt int_point = Intersector.Point(j+1);
2844 int_point.Transform(L.Transformation());
2846 Intersector.Parameters(j+1,u,v,t);
2847 if (dP0.distance(inters) < minDistance)
2849 minDistance = dP0.distance(inters);
2887 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
2893 edges_tangents[3*(*pos)+1] = V1.Y();
2894 edges_tangents[3*(*pos)+2] = V1.Z();
2904 if (only_surf_smoothing ==
false)
2911 duplicates.erase(i);
2912 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
2922 for (
unsigned int i=0; i<3; ++i)
2925 line_smoothers[i]->get_curve_tangent_vectors_at_smoothing_dofs(edges_tangents);
2933 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
2945 if (only_surf_smoothing ==
false)
2946 for (
unsigned int i=3; i<7; ++i)
2949 line_smoothers[i]->get_curve_tangent_vectors_at_smoothing_dofs(edges_tangents);
2957 if (only_surf_smoothing ==
false)
2958 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
2960 if ( (
flags[i] & water) &&
2974 if (direction.square() < 1e-3)
2977 duplicates.erase(i);
2978 unsigned int j = *(duplicates.begin());
2987 intermadiate_point_pos,
2991 for (
unsigned int j=0; j<2; ++j)
2995 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
3007 if (only_surf_smoothing ==
false)
3008 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3010 if ( (
flags[i] & water) &&
3023 if (direction.square() < 1e-3)
3026 duplicates.erase(i);
3027 unsigned int j = *(duplicates.begin());
3035 intermadiate_point_pos,
3038 for (
unsigned int j=0; j<2; ++j)
3042 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
3054 if (only_surf_smoothing ==
false)
3061 duplicates.erase(i);
3062 for (std::set<unsigned int>::iterator pos = duplicates.begin(); pos !=duplicates.end(); pos++)
3077 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3081 ((
flags[i] & edge)== 0))
3089 intermediate_point_pos,
3091 if (succeed ==
false)
3095 intermediate_point_pos);
3097 for (
unsigned int j=0; j<3; ++j)
3103 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3105 if ( (
flags[i] & boat) &&
3107 ((
flags[i] & edge)== 0))
3115 intermediate_point_pos,
3117 if (succeed ==
false)
3121 intermediate_point_pos);
3123 for (
unsigned int j=0; j<3; ++j)
3141 for (
unsigned int j=0; j<3; ++j)
3158 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3160 if ( (
flags[i] & water) &&
3183 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3185 if ( (
flags[i] & boat) &&
3187 ((
flags[i] & edge)== 0))
3195 intermediate_point_pos,
3197 if (succeed ==
false)
3201 intermediate_point_pos);
3202 for (
unsigned int j=0; j<3; ++j)
3208 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3210 if ( (
flags[i] & boat) &&
3212 ((
flags[i] & edge)== 0))
3220 intermediate_point_pos,
3222 if (succeed ==
false)
3226 intermediate_point_pos);
3228 for (
unsigned int j=0; j<3; ++j)
3234 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3244 intermediate_point_pos);
3248 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3250 if ( (
flags[i] & keel) &&
3258 intermediate_point_pos);
3266 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3275 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3293 cout<<
"Done evaluating boat surf distances"<<endl;
3314 for (
unsigned int j=0; j<3; ++j)
3332 if ((
flags[i] & water) == 0)
3344 if ( (
flags[i] & water) &&
3368 update_values | update_cell_normal_vectors |
3373 std::vector<unsigned int> vector_local_dof_indices (vector_dofs_per_cell);
3375 FullMatrix<double> local_normals_matrix (vector_dofs_per_cell, vector_dofs_per_cell);
3382 for (; vector_cell!=vector_endc; ++vector_cell)
3384 vector_fe_v.
reinit (vector_cell);
3385 local_normals_matrix = 0;
3386 local_normals_rhs = 0;
3387 const std::vector<Point<3> > &vector_node_normals = vector_fe_v.
get_normal_vectors();
3388 unsigned int comp_i, comp_j;
3390 for (
unsigned int q=0; q<vector_n_q_points; ++q)
3391 for (
unsigned int i=0; i<vector_dofs_per_cell; ++i)
3394 for (
unsigned int j=0; j<vector_dofs_per_cell; ++j)
3397 if (comp_i == comp_j)
3399 local_normals_matrix(i,j) += vector_fe_v.
shape_value(i,q)*
3404 local_normals_rhs(i) += (vector_fe_v.
shape_value(i, q)) *
3405 vector_node_normals[q](comp_i) * vector_fe_v.
JxW(q);
3408 vector_cell->get_dof_indices (vector_local_dof_indices);
3411 (local_normals_matrix,
3413 vector_local_dof_indices,
3455 cout<<
"Removing hanging nodes from transom stern..."<<endl;
3457 cout<<
"dofs before: "<<
dh.
n_dofs()<<endl;
3459 unsigned int refinedCellCounter = 1;
3460 unsigned int cycles_counter = 0;
3461 while (refinedCellCounter)
3463 refinedCellCounter = 0;
3464 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3471 for (
unsigned int k=0; k<cells.size(); ++k)
3474 for (
unsigned int j=0; j<GeometryInfo<2>::faces_per_cell; ++j)
3477 if (cells[k]->neighbor_index(j) != -1)
3478 if (cells[k]->neighbor(j)->at_boundary() && cells[k]->neighbor_is_coarser(j))
3481 cells[k]->neighbor(j)->set_refine_flag();
3482 refinedCellCounter++;
3490 if (cycles_counter > 20)
3492 cout<<
"Warning! Maximum number of transom stern edge uniforming cycles reached!"<<endl;
3516 cout<<
"dofs after: "<<
dh.
n_dofs()<<endl;
3517 cout<<
"...Done removing hanging nodes from transom stern"<<endl;
3528 cout<<
"Restoring mesh conformity..."<<endl;
3530 cout<<
"dofs before: "<<
dh.
n_dofs()<<endl;
3533 for (
unsigned int i=0; i<
dh.
n_dofs(); ++i)
3535 if ((
flags[i] & edge) &&
3540 vector<Point<3> > nodes(2);
3541 for (
unsigned int kk=0; kk<2; ++kk)
3544 for (
unsigned int f=0; f<GeometryInfo<2>::faces_per_cell; ++f)
3546 if (cell->face(f)->at_boundary())
3548 if (
ref_points[3*i].distance(cell->face(f)->vertex(0)) <tol)
3549 nodes[kk] = cell->face(f)->vertex(1);
3550 else if (
ref_points[3*i].distance(cell->face(f)->vertex(1)) <tol)
3551 nodes[kk] = cell->face(f)->vertex(0);
3556 Point<3> parent_face_center = 0.5*(nodes[0]+nodes[1]);
3559 for (
unsigned int f=0; f<GeometryInfo<2>::faces_per_cell; ++f)
3560 if (cell1->face(f)->at_boundary())
3563 for (
unsigned int d=0; d<GeometryInfo<2>::faces_per_cell; ++d)
3564 if ((*jt)->face(d)->at_boundary())
3565 if ( parent_face_center.
distance(((*jt)->face(d)->vertex(0)+(*jt)->face(d)->vertex(1))/2) < tol)
3568 if ( isotropic_ref_on_opposite_side )
3574 (*jt)->set_refine_flag();
3578 if ((d==0) || (d==1))
3603 cout<<
"dofs after: "<<
dh.
n_dofs()<<endl;
3604 cout<<
"...Done restoring mesh conformity"<<endl;
3614 unsigned int refinedCellCounter = 1;
3615 unsigned int cycles_counter = 0;
3616 while (refinedCellCounter)
3618 refinedCellCounter = 0;
3626 if (cell->extent_in_direction(0) >
max_aspect_ratio*cell->extent_in_direction(1))
3629 refinedCellCounter++;
3633 if (cell->extent_in_direction(1) >
max_aspect_ratio*cell->extent_in_direction(0))
3636 refinedCellCounter++;
3846 cout<<
"Current dofs number: "<<
dh.
n_dofs()<<endl;
3847 std::string filename = (
"meshResultSecond.vtu" );
3848 std::ofstream logfile(filename.c_str());
3856 for (
unsigned int i=0; i<num_refinements; ++i)
3858 std::cout<<
"Uniform boat refinement cycle "<<i+1<<
" of "<<num_refinements<<std::endl;
3864 cell->set_refine_flag();
3878 cell->set_refine_flag();
4008 std::vector<bool> comp_sel(3,
true);
4009 std::set<unsigned char> ids;
4018 for (
unsigned int i=0; i<ps.size()/3; ++i)
4029 const vector<
bool> &
id,
4030 const
Point<3> direction)
4032 vector<Point<3> > points;
4033 for (
unsigned int i=0; i<ps.size()/3; ++i)
4034 if (
id[3*i] ==
true)
4035 points.push_back(ps[3*i]);
const unsigned int mapping_degree
std::vector< CellData< 1 > > boundary_lines
void update_reference()
Whenever the underlying dh.
DoFHandler< dim-1, dim >::active_cell_iterator cell_it
void set_boundary(const types::manifold_id number, const Boundary< dim, spacedim > &boundary_object)
std::vector< Point< 3 > > node_normals
void generate_double_nodes_set()
void write_ucd(const Triangulation< dim, spacedim > &tria, std::ostream &out) const
unsigned int inflow_sur_ID2
std::vector< GeometryFlags > cell_flags
Vector< double > initial_map_points
active_cell_iterator begin_active(const unsigned int level=0) const
unsigned int wall_sur_ID1
ConstraintMatrix vector_constraints
DoFHandler< dim-1, dim > vector_dh
SparsityPattern normals_sparsity_pattern
void remove_transom_hanging_nodes()
cell_iterator end() const
unsigned int free_sur_ID2
unsigned int init_adaptive_boat_refs
bool is_constrained(const size_type index) const
SparseMatrix< double > vector_normals_matrix
unsigned int find_point_id(const Point< 3 > &p, const std::vector< Point< 3 > > &ps)
void apply_curvatures(const Vector< double > &curvatures, const std::vector< bool > boundary_dofs)
OpenCascade::ArclengthProjection * water_line_right
Vector< double > vector_normals_rhs
Vector< double > smoothing_curvature_vector
std::vector< Point< dim > > support_points
OpenCascade::NormalProjection< 2 > * boat_surface_left
std::string iges_file_name
virtual void execute_coarsening_and_refinement()
unsigned int pressure_sur_ID
Triangulation< dim-1, dim > coarse_tria
void perform_water_line_nodes_projection()
void distribute(VectorType &vec) const
Vector< double > other_nodes
std::vector< unsigned int > boundary_ids
numbers::NumberTraits< double >::real_type distance(const Point< dim, double > &p) const
std::set< tria_it > edge_cells
std::vector< std::vector< bool > > boundary_dofs
void refine_and_coarsen_fixed_fraction(Triangulation< dim, spacedim > &tria, const VectorType &criteria, const double top_fraction, const double bottom_fraction, const unsigned int max_n_cells=std::numeric_limits< unsigned int >::max())
#define AssertThrow(cond, exc)
OpenCascade::NormalProjection< 2 > * boat_surface_right
unsigned int max_couplings_between_dofs() const
Vector< double > smoothing_map_points
std_cxx1x::shared_ptr< Quadrature< dim-1 > > quadrature
unsigned int n_active_cells() const
virtual void reinit(const SparsityPattern &sparsity)
std::string get(const std::string &entry_string) const
unsigned int inflow_sur_ID1
Vector< double > vector_normals_solution
bool assigned_axis_projection_and_diff_forms(Point< 3 > &projection, Point< 3 > &normal, double &mean_curvature, const Point< 3 > &origin, const Point< 3 > &assigned_axis) const
virtual void declare_parameters(ParameterHandler &prm)
void perform_surface_projection()
Vector< double > map_points
double init_adaptive_boat_refs_fraction
std::vector< unsigned int > moving_point_ids
std::vector< Point< 3 > > old_iges_normals
virtual void execute_coarsening_and_refinement()
void add(const std::vector< size_type > &indices, const std::vector< OtherNumber > &values)
void make_hanging_node_constraints(const DoFHandlerType &dof_handler, ConstraintMatrix &constraints)
void compute_constraints(ConstraintMatrix &cc)
Point< 3 > PointLeftTransom
void distribute_local_to_global(const InVector &local_vector, const std::vector< size_type > &local_dof_indices, OutVector &global_vector) const
virtual bool prepare_coarsening_and_refinement()
static::ExceptionBase & ExcMessage(std::string arg1)
const std::vector< Point< spacedim > > & get_quadrature_points() const
std::set< unsigned int > boat_nodes
void partial_mesh_treatment(const double blend_factor)
virtual void read_domain()
static void reorder_cells(std::vector< CellData< dim > > &original_cells, const bool use_new_style_ordering=false)
std::vector< GeometryFlags > flags
virtual void parse_parameters(ParameterHandler &prm)
unsigned int number_of_transom_edges
#define Assert(cond, exc)
types::global_dof_index n_dofs() const
NumericalTowingTank(unsigned int, unsigned int)
Vector< double > old_map_points
OpenCascade::ArclengthProjection * boat_keel
void perform_smoothing(bool full_treatment, const double blend_factor)
OpenCascade::ArclengthProjection * boat_transom_right
Vector< double > surface_nodes
virtual void generate_double_nodes_set()
unsigned int free_sur_ID3
virtual void declare_parameters(ParameterHandler &prm)
void initialize_smoother()
std::vector< unsigned int > base_point_ids
FESystem< dim-1, dim > vector_fe
std::vector< unsigned int > vector_dof_components
std::set< unsigned int > free_surf_and_boat_nodes
std::vector< Point< dim > > vector_support_points
double middle_keel_length
void make_edges_conformal(bool isotropic_ref_on_opposite_side)
unsigned int wall_sur_ID3
std::vector< bool > on_curve_option
Vector< double > rigid_motion_map_points
double front_mesh_inclination_coeff
void start_iges_model(std::string igesFileName, double scale, double displacement, double assigned_sink, double assigned_trim, double back_keel_length=0.1, double front_keel_length=0.05, double middle_keel_length=.47, unsigned int number_of_transom_edges=1)
void apply_curvatures(const Vector< double > &curvatures, const std::vector< bool > &boundary_dofs)
Apply curvatures at the.
void full_mesh_treatment()
SurfaceSmoothing * surface_smoother
std::vector< double > iges_mean_curvatures
PersistentTriangulation< dim-1, dim > tria
void perform_line_smoothing(unsigned int num_smoothings)
cell_iterator end() const
std::map< cell_it, std::set< cell_it > > elem_to_surr_elems
std::vector< GeometryFlags > vector_flags
std::vector< OpenCascade::LineSmoothing * > line_smoothers
unsigned int free_sur_edge_on_boat_ID
const unsigned int dofs_per_cell
unsigned int wall_sur_ID2
void remove_mesh_anisotropy(Triangulation< 2, 3 > &tria)
OpenCascade::AxisProjection * boat_water_line_right
const unsigned int n_quadrature_points
void reinit(const size_type m, const size_type n, const unsigned int max_per_row)
Vector< double > edges_length_ratios
const double & shape_value(const unsigned int function_no, const unsigned int point_no) const
OpenCascade::ArclengthProjection * boat_transom_left
dealii::Point< 3 > Pnt(const gp_Pnt &p)
Convert OpenCascade point into.
std::vector< TopLoc_Location * > smoothers_locations
void refine_global_on_boat(const unsigned int num_refinements)
std::vector< std::set< unsigned int > > vector_double_nodes_set
virtual void refine_and_resize()
Mapping< dim-1, dim > * mapping
void compute_normals_at_nodes(Vector< double > &map_points_used)
void make_sparsity_pattern(const DoFHandlerType &dof_handler, SparsityPatternType &sparsity_pattern, const ConstraintMatrix &constraints=ConstraintMatrix(), const bool keep_constrained_dofs=true, const types::subdomain_id subdomain_id=numbers::invalid_subdomain_id)
OpenCascade::ArclengthProjection * water_line_left
void initialize(const SparsityPattern &sparsity_pattern)
std::pair< unsigned int, unsigned int > system_to_component_index(const unsigned int index) const
void compute_curvatures(Vector< double > &curvatures)
void compute_nodes_flags()
SurfaceSmoothing * restart_surface_smoother
double get_double(const std::string &entry_name) const
virtual void distribute_dofs(const FiniteElement< dim, spacedim > &fe)
void smooth()
Perform the full smoothing.
virtual void reinit(const size_type N, const bool omit_zeroing_entries=false)
const unsigned int dofs_per_face
void compute_curvatures(Vector< double > &curvatures)
Compute curvatures at the.
bool axis_projection_and_diff_forms(Point< 3 > &projection, Point< 3 > &normal, double &mean_curvature, const Point< 3 > &origin) const
void declare_entry(const std::string &entry, const std::string &default_value, const Patterns::PatternBase &pattern=Patterns::Anything(), const std::string &documentation=std::string())
unsigned int free_sur_ID1
void update_support_points()
We collect in this namespace all utilities which operate on OpenCascade entities which don't need cla...
std::vector< std::set< unsigned int > > double_nodes_set
void normal_projection_and_diff_forms(Point< 3 > &projection, Point< 3 > &normal, double &mean_curvature, const Point< 3 > &origin) const
std::vector< Point< 3 > > moving_points
bool assigned_axis_projection(Point< 3 > &projection, const Point< 3 > &origin, const Point< 3 > &assigned_axis) const
void create_initial_mesh(const Point< 3 > PointFrontTop, const Point< 3 > PointFrontBot, const Point< 3 > PointMidTop, const Point< 3 > PointMidBot, const Point< 3 > PointBackTop, const Point< 3 > PointBackBot, const Point< 3 > PointLeftTransom, const Point< 3 > PointRightTransom, const Point< 3 > PointCenterTransom, Triangulation< 2, 3 > &triangulation)
Handle(Geom_Curve) NumericalTowingTank
void extract_boundary_dofs(std::vector< bool > &dofs, unsigned int id, DoFHandler< 2, 3 > &vector_dh)
std::vector< Point< 3 > > iges_normals
active_cell_iterator begin_active(const unsigned int level=0) const
OpenCascade::AxisProjection * boat_water_line_left
virtual void parse_parameters(ParameterHandler &prm)
Vector< double > edges_tangents
std::vector< Handle(Geom_Curve)> curves
unsigned int init_global_boat_refs
TopLoc_Location current_loc
std::vector< Point< 3 > > base_points
void reinit(const TriaIterator< DoFCellAccessor< DoFHandlerType< dim, spacedim >, level_dof_access > > &cell)
DoFHandler< dim-1, dim > dh
Point< 3 > PointRightTransom
double back_mesh_inclination_coeff
std::vector< Point< 3 > > ref_points
double JxW(const unsigned int quadrature_point) const
virtual void create_triangulation_compatibility(const std::vector< Point< spacedim > > &vertices, const std::vector< CellData< dim > > &cells, const SubCellData &subcelldata)
Triangulation< dim-1, dim >::active_cell_iterator tria_it
Point< 3 > PointCenterTransom
OpenCascade::AxisProjection * undist_water_surf
void update_mapping(const Vector< double > &map_points)
long int get_integer(const std::string &entry_string) const
std::map< unsigned int, std::vector< cell_it > > dof_to_elems
void vmult(Vector< double > &dst, const Vector< double > &src) const
static::ExceptionBase & ExcInternalError()
std::map< unsigned int, std::vector< cell_it > > vector_dof_to_elems
std::vector< Point< spacedim > > get_normal_vectors() const DEAL_II_DEPRECATED
Handle_Geom_Curve interpolation_curve_points_sort(std::vector< Point< 3 > > &curve_points, Point< 3 > direction)