84 bool allow_non_corresponding_face)
88 if (nb_node != nodes_to_merge_local_id.
size())
90 for (
Integer i = 0; i < nb_node; ++i) {
91 Node node(nodes_internal[nodes_local_id[i]]);
92 Node node_to_merge(nodes_internal[nodes_to_merge_local_id[i]]);
100 info(4) <<
"ADD CORRESPONDANCE node=" << node.
uniqueId() <<
" node_to_merge=" << node_to_merge.
uniqueId();
101 m_nodes_correspondance.insert(std::make_pair(node_to_merge, node));
107 std::set<Face> marked_faces;
116 if (m_nodes_correspondance.find(node) != m_nodes_correspondance.end()) {
118 marked_faces.insert(face);
121 if (nb_merged_node == face_nb_node) {
126 face_new_nodes_uid.
resize(face_nb_node);
127 face_new_nodes_sorted_uid.
resize(face_nb_node);
128 Node new_face_first_node;
130 Node new_node = m_nodes_correspondance.find(*inode)->second;
131 if (inode.index() == 0)
132 new_face_first_node = new_node;
133 face_new_nodes_uid[inode.index()] = new_node.
uniqueId();
134 info(4) <<
" OLD_node=" << (*inode).uniqueId() <<
" new=" << new_node.
uniqueId();
138 if (new_face.
null()) {
140 if (allow_non_corresponding_face)
142 ARCANE_FATAL(
"Can not find corresponding face nodes_uid={0}", face_new_nodes_sorted_uid);
145 m_faces_correspondance.insert(std::make_pair(face, new_face));
148 marked_faces.erase(marked_faces.find(face));
154 std::set<Cell> marked_cells;
158 if (m_nodes_correspondance.find(*inode) != m_nodes_correspondance.end())
159 marked_cells.insert(cell);
163 for (
Cell cell : marked_cells) {
165 info(4) <<
"MARKED CELL2=" << cell.localId();
168 auto x = m_nodes_correspondance.find(node);
169 if (x != m_nodes_correspondance.end()) {
170 Node new_node = x->second;
172 m_node_family->removeCellFromNode(node, cell_local_id);
173 m_node_family->addCellToNode(new_node, cell);
174 m_cell_family->replaceNode(cell, inode.index(), new_node);
179 auto x = m_faces_correspondance.find(face);
180 if (x != m_faces_correspondance.end()) {
181 Face new_face = x->second;
182 m_face_family->removeCellFromFace(face, cell_local_id);
184 m_face_family->addBackCellToFace(new_face, cell);
186 m_face_family->addFrontCellToFace(new_face, cell);
187 m_cell_family->replaceFace(cell, iface.index(), new_face);
193 for (
Face face : marked_faces) {
194 info(4) <<
"MARKED FACE=" << face.localId();
197 auto x = m_nodes_correspondance.find(node);
198 if (x != m_nodes_correspondance.end()) {
199 Node new_node = x->second;
200 m_node_family->removeFaceFromNode(node, face);
201 m_node_family->addFaceToNode(new_node, face);
202 m_face_family->replaceNode(face, inode.index(), new_node);
211 for (
Face face : marked_faces) {
217 for (
const auto& x : m_faces_correspondance) {
219 m_face_family->removeFaceIfNotConnected(face);
223 for (
const auto& x : m_nodes_correspondance) {
225 m_node_family->removeNodeIfNotConnected(node);
228 m_mesh->modifier()->endUpdate();