+
+ // IMP 0023285: only keep the meshes named in the table MED_MAIL
+ // remove all cells belonging to non-named groups only
+
+ // use Cell::_reverse to mark cells to keep
+ for ( size_t i = 0; i < _groups.size(); ++i )
+ {
+ SauvUtilities::Group & grp = _groups[i];
+ if ( grp._isProfile || !grp._name.empty() )
+ {
+ for ( size_t iC = 0; iC < grp._cells.size(); ++iC )
+ grp._cells[iC]->_reverse = true;
+
+ for (size_t j = 0; j < grp._groups.size(); ++j )
+ for ( size_t iC = 0; iC < grp._groups[j]->_cells.size(); ++iC )
+ grp._groups[j]->_cells[iC]->_reverse = true;
+ }
+ }
+ // remove non-marked cells (with _reverse == false)
+ CellsByDimIterator cellsIt( *this );
+ while ( cellsIt.nextType() )
+ {
+ std::set<Cell> & cells = _cellsByType[ cellsIt.type() ];
+ std::set<Cell>::iterator cIt = cells.begin();
+ while ( cIt != cells.end() )
+ if ( cIt->_reverse )
+ {
+ cIt->_reverse = false;
+ ++cIt;
+ }
+ else
+ {
+ cells.erase( cIt++ );
+ }
+ }