@@ -1161,13 +1161,6 @@ void identifyRefinedFacesPerLevel(const Dune::cpgrid::CpGridData& current_data,
11611161 // - If the marked face appears only in one marked element -> then, we store this face now.
11621162 // - If the marked face appears in two marked elements -> we distinguish between
11631163 // both marked elements sharing that face belonging to the same level, or not.
1164-
1165- for (std::size_t f =0 ; f<cellRefinements[elemIdx].boundaryRefinedFace_to_parentFace .size ();++f)
1166- {
1167- std::cout<< f << " face with parent face " << cellRefinements[elemIdx].boundaryRefinedFace_to_parentFace [f] <<
1168- " for elemIdx: " << elemIdx <<std::endl;
1169- }
1170-
11711164 const auto markedFace = getParentFaceWhereNewRefinedFaceLiesOn (face,
11721165 markedElem_to_itsLgr[elemIdx],
11731166 cellRefinements[elemIdx].boundaryRefinedFace_to_parentFace );
@@ -1258,7 +1251,16 @@ void identifyLeafGridFaces(const Dune::cpgrid::CpGridData& current_data,
12581251 cellRefinementsInfo[elem].boundaryRefinedFace_to_parentFace );
12591252
12601253 assert (!faceInMarkedElemAndRefinedFaces[markedFace].empty ());
1261- int lastLgr = faceInMarkedElemAndRefinedFaces[markedFace].back ().first ;
1254+ int lastLgr = -1 ;
1255+ if (faceInMarkedElemAndRefinedFaces[markedFace].size ()==1 ){
1256+ lastLgr = faceInMarkedElemAndRefinedFaces[markedFace].back ().first ;
1257+ }
1258+ else {
1259+ lastLgr = std::max ( faceInMarkedElemAndRefinedFaces[markedFace][0 ].first ,
1260+ faceInMarkedElemAndRefinedFaces[markedFace][1 ].first );
1261+ }
1262+
1263+
12621264 if (lastLgr == elem) {
12631265 // Store only at last appearance
12641266 insertBidirectional (elemLgrAndElemLgrFace_to_adaptedFace, // map a_to_b
@@ -1354,7 +1356,6 @@ int getParentFaceWhereNewRefinedFaceLiesOn(int faceIdxInLgr,
13541356 if (refinedFace_to_parentFace[faceIdxInLgr] != -1 /* invalid index */ ) {
13551357 return refinedFace_to_parentFace[faceIdxInLgr];
13561358 }
1357- std::cout<< faceIdxInLgr << " refined face has no parent face " << std::endl;
13581359 OPM_THROW (std::logic_error, " Cannot find index of parent face where the new refined face lies on." );
13591360}
13601361
@@ -1479,7 +1480,8 @@ void populateRefinedCells(const Dune::cpgrid::CpGridData& current_data,
14791480 const std::map<std::array<int ,2 >,int >& markedElemAndEquivRefinedCorn_to_corner,
14801481 const std::vector<std::vector<std::array<int ,2 >>>& cornerInMarkedElemWithEquivRefinedCorner,
14811482 const std::vector<std::array<int ,3 >>& cells_per_dim_vec,
1482- const std::vector<CellRefinementBoundaryInfo>& cellRefinementsInfo)
1483+ const std::vector<CellRefinementBoundaryInfo>& cellRefinementsInfo,
1484+ bool withoutFaults)
14831485{
14841486 // --- Refined cells ---
14851487 for (std::size_t shiftedLevel = 0 ; shiftedLevel < refined_cell_count_vec.size (); ++shiftedLevel) {
@@ -1554,11 +1556,37 @@ void populateRefinedCells(const Dune::cpgrid::CpGridData& current_data,
15541556 markedElem_to_itsLgr[elemLgr],
15551557 cellRefinementsInfo[elemLgr].boundaryRefinedFace_to_parentFace );
15561558 // Get the last LGR (marked element) where the marked face appeared.
1557- const int & lastLgrWhereMarkedFaceAppeared = faceInMarkedElemAndRefinedFaces[markedFace].back ().first ;
1558- const auto & lastAppearanceLgrEquivFace = replaceLgr1FaceIdxByLgr2FaceIdx (cells_per_dim_vec[shiftedLevel],
1559- preAdaptFace,
1560- markedElem_to_itsLgr[elemLgr],
1561- cells_per_dim_vec[assignRefinedLevel[lastLgrWhereMarkedFaceAppeared] - preAdaptMaxLevel -1 ]);
1559+ // const int& lastLgrWhereMarkedFaceAppeared = faceInMarkedElemAndRefinedFaces[markedFace].back().first;
1560+
1561+ assert ( faceInMarkedElemAndRefinedFaces[markedFace].size () == 2 );
1562+ const auto & [p1, faces1] = faceInMarkedElemAndRefinedFaces[markedFace][0 ];
1563+ const auto & [p2, faces2] = faceInMarkedElemAndRefinedFaces[markedFace][1 ];
1564+
1565+ std::cout<< p1 << " p1 vs p2 " << p2 <<std::endl;
1566+
1567+ int lastAppearanceLgrEquivFace = -1 ;
1568+
1569+ int lastLgrWhereMarkedFaceAppeared = (p1 == elemLgr)? p2 : p1;
1570+ const auto & lastFaces = (p1 == elemLgr)? faces2 : faces1;
1571+
1572+ // if (withoutFaults) {
1573+ lastAppearanceLgrEquivFace = replaceLgr1FaceIdxByLgr2FaceIdx (cells_per_dim_vec[shiftedLevel],
1574+ preAdaptFace,
1575+ markedElem_to_itsLgr[elemLgr],
1576+ cells_per_dim_vec[assignRefinedLevel[lastLgrWhereMarkedFaceAppeared] - preAdaptMaxLevel -1 ]);
1577+ // }
1578+ /* else {
1579+ const auto candidateNeigh = getNeighborCellRefFaceIdx( *markedElem_to_itsLgr[lastLgrWhereMarkedFaceAppeared],
1580+ lastFaces,
1581+ *markedElem_to_itsLgr[elemLgr],
1582+ preAdaptFace);
1583+ assert(candidateNeigh.has_value());
1584+ lastAppearanceLgrEquivFace = candidateNeigh.value();
1585+ }
1586+ assert(lastAppearanceLgrEquivFace>=0);*/
1587+
1588+
1589+
15621590 refinedFace = elemLgrAndElemLgrFace_to_refinedLevelAndRefinedFace.at ({lastLgrWhereMarkedFaceAppeared, lastAppearanceLgrEquivFace})[1 ];
15631591 aux_refined_cell_to_face.push_back ({refinedFace, face.orientation ()});
15641592 }
0 commit comments