@@ -877,6 +877,7 @@ void addFaces(int
877877 }
878878}
879879
880+
880881void populateFaceData (int oldGridNumFaces,
881882 const Dune::cpgrid::CpGridData& oldGrid,
882883 const std::map<int ,BoundaryFaceInfo>& boundaryFacesInfo,
@@ -914,6 +915,30 @@ void populateFaceData(int oldGridNumFaces,
914915 int newGrid_num_points = 0 ;
915916 int newGrid_face_count = 0 ;
916917
918+ auto registerFace = [&](int oldFaceIdx,
919+ int newFaceIdx,
920+ int parentFaceIdx,
921+ auto && geometry,
922+ auto && normal,
923+ auto tag)
924+ {
925+ modificationMap.oldGridFaceIdx_to_newGridFaceIdxList [oldFaceIdx].push_back (newFaceIdx);
926+ modificationMap.newGridFaceIdx_to_oldGridFaceIdx [newFaceIdx] = oldFaceIdx;
927+
928+ if (parentFaceIdx != -1 ) {
929+ newGridFaceIdx_to_parentFaceIdx[newFaceIdx] = parentFaceIdx;
930+ }
931+
932+ newGridFaces[newFaceIdx] = geometry;
933+ mutable_newGridFaceTags[newFaceIdx] = tag;
934+ mutable_newGridFaceNormals[newFaceIdx] = normal;
935+
936+ const auto & faceToCell = oldGrid.faceToCell (oldFaceIdx);
937+ newGridGeomData.face_to_cell .appendRow (faceToCell.begin (), faceToCell.end ());
938+
939+ ++newGrid_face_count;
940+ };
941+
917942 for (int i = 0 ; i < oldGrid.numFaces (); ++i) {
918943
919944 std::vector<int > newFaceIndices{};
@@ -925,17 +950,6 @@ void populateFaceData(int oldGridNumFaces,
925950
926951 const auto face = Dune::cpgrid::EntityRep<1 >(i, true );
927952
928- modificationMap.oldGridFaceIdx_to_newGridFaceIdxList [i].push_back (newGrid_face_count);
929- modificationMap.newGridFaceIdx_to_oldGridFaceIdx [newGrid_face_count] = i;
930-
931- if (parentFaceIdx!= -1 ) {
932- newGridFaceIdx_to_parentFaceIdx[newGrid_face_count] = parentFaceIdx;
933- }
934-
935- newGridFaces[newGrid_face_count] = (*oldGrid.getGeometry ().geomVector (std::integral_constant<int ,1 >()))[face];
936- mutable_newGridFaceTags[newGrid_face_count] = oldGrid.faceTag (i);
937- mutable_newGridFaceNormals[newGrid_face_count] = oldGrid.faceNormals (i);
938-
939953 std::vector<int > faceToPoint{};
940954 faceToPoint.reserve (oldGrid.faceToPoint (i).size ());
941955 for (const auto & vertexIdx : oldGrid.faceToPoint (i)) {
@@ -944,25 +958,19 @@ void populateFaceData(int oldGridNumFaces,
944958 newGrid_num_points += faceToPoint.size ();
945959 aux_newGrid_face_to_point[newGrid_face_count] = faceToPoint;
946960
947- const auto & faceToCell = oldGrid.faceToCell (i);
948- newGridGeomData.face_to_cell .appendRow (faceToCell.begin (), faceToCell.end ());
949-
950- ++newGrid_face_count;
961+ registerFace (i,
962+ newGrid_face_count,
963+ parentFaceIdx,
964+ (*oldGrid.getGeometry ().geomVector (std::integral_constant<int ,1 >()))[face],
965+ oldGrid.faceNormals (i),
966+ oldGrid.faceTag (i));
951967 }
952968 else {
953969 const auto & boundaryFaceInfo = itP->second ;
954970 const auto & newFacesInfo = boundaryFaceInfo.vanishedCellRefFace_to_newRefinedFaces [i];
955971
956972 if ( boundaryFaceInfo.faceFullyContainedInNeighbor [i] || newFacesInfo.empty ()){
957973 const auto face = Dune::cpgrid::EntityRep<1 >(i, true );
958-
959- modificationMap.oldGridFaceIdx_to_newGridFaceIdxList [i].push_back (newGrid_face_count);
960- modificationMap.newGridFaceIdx_to_oldGridFaceIdx [newGrid_face_count] = i;
961- newGridFaceIdx_to_parentFaceIdx[newGrid_face_count] = parentFaceIdx;
962-
963- newGridFaces[newGrid_face_count] = (*oldGrid.getGeometry ().geomVector (std::integral_constant<int ,1 >()))[face];
964- mutable_newGridFaceTags[newGrid_face_count] = oldGrid.faceTag (i);
965- mutable_newGridFaceNormals[newGrid_face_count] = oldGrid.faceNormals (i);
966974
967975 std::vector<int > faceToPoint{};
968976 faceToPoint.reserve (oldGrid.faceToPoint (i).size ());
@@ -972,24 +980,20 @@ void populateFaceData(int oldGridNumFaces,
972980 newGrid_num_points += faceToPoint.size ();
973981 aux_newGrid_face_to_point[newGrid_face_count] = faceToPoint;
974982
975- const auto & faceToCell = oldGrid.faceToCell (i);
976- newGridGeomData.face_to_cell .appendRow (faceToCell.begin (), faceToCell.end ());
977-
978- ++newGrid_face_count;
983+ registerFace (i,
984+ newGrid_face_count,
985+ parentFaceIdx,
986+ (*oldGrid.getGeometry ().geomVector (std::integral_constant<int ,1 >()))[face],
987+ oldGrid.faceNormals (i),
988+ oldGrid.faceTag (i));
979989 }
980990 else {
981991 for (const auto & [grid2_faceIdx, newFaceToCoord] : newFacesInfo) {
982-
992+
983993 newFaceIndices.push_back (newGrid_face_count);
984- modificationMap.oldGridFaceIdx_to_newGridFaceIdxList [i].push_back (newGrid_face_count);
985- modificationMap.newGridFaceIdx_to_oldGridFaceIdx [newGrid_face_count] = i;
986- newGridFaceIdx_to_parentFaceIdx[newGrid_face_count] = parentFaceIdx;
987-
988- const auto [faceCenter, faceArea, faceNormal] = computeFaceCenterAreaNormal (newFaceToCoord);
989994
990- newGridFaces[newGrid_face_count] = Dune::cpgrid::Geometry<2 ,3 >(faceCenter, faceArea);
991- mutable_newGridFaceTags[newGrid_face_count] = oldGrid.faceTag (i); // shared tag
992- mutable_newGridFaceNormals[newGrid_face_count] = faceNormal;
995+ const auto [faceCenter, faceArea, faceNormal] =
996+ computeFaceCenterAreaNormal (newFaceToCoord);
993997
994998 std::vector<int > faceToPoint{};
995999 faceToPoint.reserve (newFaceToCoord.size ());
@@ -1012,9 +1016,12 @@ void populateFaceData(int oldGridNumFaces,
10121016 newGrid_num_points += faceToPoint.size ();
10131017 aux_newGrid_face_to_point[newGrid_face_count] = faceToPoint;
10141018
1015- const auto & face_to_cell = oldGrid.faceToCell (i);
1016- newGridGeomData.face_to_cell .appendRow (face_to_cell.begin (), face_to_cell.end ());
1017- ++newGrid_face_count;
1019+ registerFace (i,
1020+ newGrid_face_count,
1021+ parentFaceIdx,
1022+ Dune::cpgrid::Geometry<2 ,3 >(faceCenter, faceArea),
1023+ faceNormal,
1024+ oldGrid.faceTag (i));
10181025 }
10191026 }
10201027 }
0 commit comments