85 bool allow_non_corresponding_face)
89 if (nb_node != nodes_to_merge_local_id.
size())
91 for (
Integer i = 0; i < nb_node; ++i) {
92 Node node(nodes_internal[nodes_local_id[i]]);
93 Node node_to_merge(nodes_internal[nodes_to_merge_local_id[i]]);
96 info(4) <<
"ADD CORRESPONDANCE node=" << node.
uniqueId() <<
" node_to_merge=" << node_to_merge.
uniqueId();
97 m_nodes_correspondance.insert(std::make_pair(node_to_merge,node));
103 std::set<Face> marked_faces;
112 if (m_nodes_correspondance.find(node)!=m_nodes_correspondance.end()){
114 marked_faces.insert(face);
117 if (nb_merged_node == face_nb_node) {
122 face_new_nodes_uid.
resize(face_nb_node);
123 face_new_nodes_sorted_uid.
resize(face_nb_node);
124 Node new_face_first_node;
126 Node new_node = m_nodes_correspondance.find(*inode)->second;
127 if (inode.index()==0)
128 new_face_first_node = new_node;
129 face_new_nodes_uid[inode.index()] = new_node.
uniqueId();
130 info(4) <<
" OLD_node=" << (*inode).uniqueId() <<
" new=" << new_node.
uniqueId();
134 if (new_face.
null()) {
136 if (allow_non_corresponding_face)
138 ARCANE_FATAL(
"Can not find corresponding face nodes_uid={0}", face_new_nodes_sorted_uid);
141 m_faces_correspondance.insert(std::make_pair(face,new_face));
144 marked_faces.erase(marked_faces.find(face));
150 std::set<Cell> marked_cells;
154 if (m_nodes_correspondance.find(*inode)!=m_nodes_correspondance.end())
155 marked_cells.insert(cell);
159 for(
Cell cell : marked_cells ){
161 info(4) <<
"MARKED CELL2=" << cell.localId();
164 auto x = m_nodes_correspondance.find(node);
165 if (x!=m_nodes_correspondance.end()){
166 Node new_node = x->second;
168 m_node_family->removeCellFromNode(node,cell_local_id);
169 m_node_family->addCellToNode(new_node,cell);
170 m_cell_family->replaceNode(cell,inode.index(),new_node);
175 auto x = m_faces_correspondance.find(face);
176 if (x!=m_faces_correspondance.end()){
177 Face new_face = x->second;
178 m_face_family->removeCellFromFace(face,cell_local_id);
180 m_face_family->addBackCellToFace(new_face,cell);
182 m_face_family->addFrontCellToFace(new_face,cell);
183 m_cell_family->replaceFace(cell,iface.index(),new_face);
189 for(
Face face : marked_faces ){
190 info(4) <<
"MARKED FACE=" << face.localId();
193 auto x = m_nodes_correspondance.find(node);
194 if (x!=m_nodes_correspondance.end()){
195 Node new_node = x->second;
196 m_node_family->removeFaceFromNode(node,face);
197 m_node_family->addFaceToNode(new_node,face);
198 m_face_family->replaceNode(face,inode.index(),new_node);
207 for(
Face face : marked_faces ){
213 for(
const auto& x : m_faces_correspondance ){
215 m_face_family->removeFaceIfNotConnected(face);
219 for(
const auto& x : m_nodes_correspondance ){
221 m_node_family->removeNodeIfNotConnected(node);
224 m_mesh->modifier()->endUpdate();