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]]);
101 info(4) <<
"ADD CORRESPONDANCE node=" << node.
uniqueId() <<
" node_to_merge=" << node_to_merge.
uniqueId();
102 m_nodes_correspondance.insert(std::make_pair(node_to_merge,node));
108 std::set<Face> marked_faces;
117 if (m_nodes_correspondance.find(node)!=m_nodes_correspondance.end()){
119 marked_faces.insert(face);
122 if (nb_merged_node == face_nb_node) {
127 face_new_nodes_uid.
resize(face_nb_node);
128 face_new_nodes_sorted_uid.
resize(face_nb_node);
129 Node new_face_first_node;
131 Node new_node = m_nodes_correspondance.find(*inode)->second;
132 if (inode.index()==0)
133 new_face_first_node = new_node;
134 face_new_nodes_uid[inode.index()] = new_node.
uniqueId();
135 info(4) <<
" OLD_node=" << (*inode).uniqueId() <<
" new=" << new_node.
uniqueId();
139 if (new_face.
null()) {
141 if (allow_non_corresponding_face)
143 ARCANE_FATAL(
"Can not find corresponding face nodes_uid={0}", face_new_nodes_sorted_uid);
146 m_faces_correspondance.insert(std::make_pair(face,new_face));
149 marked_faces.erase(marked_faces.find(face));
155 std::set<Cell> marked_cells;
159 if (m_nodes_correspondance.find(*inode)!=m_nodes_correspondance.end())
160 marked_cells.insert(cell);
164 for(
Cell cell : marked_cells ){
166 info(4) <<
"MARKED CELL2=" << cell.localId();
169 auto x = m_nodes_correspondance.find(node);
170 if (x!=m_nodes_correspondance.end()){
171 Node new_node = x->second;
173 m_node_family->removeCellFromNode(node,cell_local_id);
174 m_node_family->addCellToNode(new_node,cell);
175 m_cell_family->replaceNode(cell,inode.index(),new_node);
180 auto x = m_faces_correspondance.find(face);
181 if (x!=m_faces_correspondance.end()){
182 Face new_face = x->second;
183 m_face_family->removeCellFromFace(face,cell_local_id);
185 m_face_family->addBackCellToFace(new_face,cell);
187 m_face_family->addFrontCellToFace(new_face,cell);
188 m_cell_family->replaceFace(cell,iface.index(),new_face);
194 for(
Face face : marked_faces ){
195 info(4) <<
"MARKED FACE=" << face.localId();
198 auto x = m_nodes_correspondance.find(node);
199 if (x!=m_nodes_correspondance.end()){
200 Node new_node = x->second;
201 m_node_family->removeFaceFromNode(node,face);
202 m_node_family->addFaceToNode(new_node,face);
203 m_face_family->replaceNode(face,inode.index(),new_node);
212 for(
Face face : marked_faces ){
218 for(
const auto& x : m_faces_correspondance ){
220 m_face_family->removeFaceIfNotConnected(face);
224 for(
const auto& x : m_nodes_correspondance ){
226 m_node_family->removeNodeIfNotConnected(node);
229 m_mesh->modifier()->endUpdate();