X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDLoader%2FSauvMedConvertor.cxx;h=28a54e390f0a7d210e5ae38f8f54e529fdf3e63e;hb=82884d74d2c60f07617849cb6c01511a475f8b2c;hp=059d2f6d43b44667e8efc6dc16cc93a03414429b;hpb=cbcf3e5ccb319e42be0ae7fbc98ccd1340570b94;p=tools%2Fmedcoupling.git diff --git a/src/MEDLoader/SauvMedConvertor.cxx b/src/MEDLoader/SauvMedConvertor.cxx index 059d2f6d4..28a54e390 100644 --- a/src/MEDLoader/SauvMedConvertor.cxx +++ b/src/MEDLoader/SauvMedConvertor.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -41,10 +41,7 @@ #ifdef WIN32 #include -#endif - -#ifndef WIN32 -#define HAS_XDR +#else #include #endif @@ -54,7 +51,6 @@ using namespace SauvUtilities; using namespace ParaMEDMEM; -using namespace std; namespace { @@ -103,8 +99,8 @@ namespace if ( const int * conn = getGibi2MedQuadraticInterlace( type )) { Cell* ma = const_cast(&aCell); - vector< Node* > new_nodes( ma->_nodes.size() ); - for ( size_t i = 0; i < new_nodes.size(); ++i ) + std::vector< Node* > new_nodes( ma->_nodes.size() ); + for (std:: size_t i = 0; i < new_nodes.size(); ++i ) new_nodes[ i ] = ma->_nodes[ conn[ i ]]; ma->_nodes.swap( new_nodes ); } @@ -117,7 +113,7 @@ namespace //================================================================================ void getReverseVector (const INTERP_KERNEL::NormalizedCellType type, - vector > & swapVec ) + std::vector > & swapVec ) { swapVec.clear(); @@ -125,66 +121,66 @@ namespace { case NORM_TETRA4: swapVec.resize(1); - swapVec[0] = make_pair( 1, 2 ); + swapVec[0] = std::make_pair( 1, 2 ); break; case NORM_PYRA5: swapVec.resize(1); - swapVec[0] = make_pair( 1, 3 ); + swapVec[0] = std::make_pair( 1, 3 ); break; case NORM_PENTA6: swapVec.resize(2); - swapVec[0] = make_pair( 1, 2 ); - swapVec[1] = make_pair( 4, 5 ); + swapVec[0] = std::make_pair( 1, 2 ); + swapVec[1] = std::make_pair( 4, 5 ); break; case NORM_HEXA8: swapVec.resize(2); - swapVec[0] = make_pair( 1, 3 ); - swapVec[1] = make_pair( 5, 7 ); + swapVec[0] = std::make_pair( 1, 3 ); + swapVec[1] = std::make_pair( 5, 7 ); break; case NORM_TETRA10: swapVec.resize(3); - swapVec[0] = make_pair( 1, 2 ); - swapVec[1] = make_pair( 4, 6 ); - swapVec[2] = make_pair( 8, 9 ); + swapVec[0] = std::make_pair( 1, 2 ); + swapVec[1] = std::make_pair( 4, 6 ); + swapVec[2] = std::make_pair( 8, 9 ); break; case NORM_PYRA13: swapVec.resize(4); - swapVec[0] = make_pair( 1, 3 ); - swapVec[1] = make_pair( 5, 8 ); - swapVec[2] = make_pair( 6, 7 ); - swapVec[3] = make_pair( 10, 12 ); + swapVec[0] = std::make_pair( 1, 3 ); + swapVec[1] = std::make_pair( 5, 8 ); + swapVec[2] = std::make_pair( 6, 7 ); + swapVec[3] = std::make_pair( 10, 12 ); break; case NORM_PENTA15: swapVec.resize(4); - swapVec[0] = make_pair( 1, 2 ); - swapVec[1] = make_pair( 4, 5 ); - swapVec[2] = make_pair( 6, 8 ); - swapVec[3] = make_pair( 9, 11 ); + swapVec[0] = std::make_pair( 1, 2 ); + swapVec[1] = std::make_pair( 4, 5 ); + swapVec[2] = std::make_pair( 6, 8 ); + swapVec[3] = std::make_pair( 9, 11 ); break; case NORM_HEXA20: swapVec.resize(7); - swapVec[0] = make_pair( 1, 3 ); - swapVec[1] = make_pair( 5, 7 ); - swapVec[2] = make_pair( 8, 11 ); - swapVec[3] = make_pair( 9, 10 ); - swapVec[4] = make_pair( 12, 15 ); - swapVec[5] = make_pair( 13, 14 ); - swapVec[6] = make_pair( 17, 19 ); + swapVec[0] = std::make_pair( 1, 3 ); + swapVec[1] = std::make_pair( 5, 7 ); + swapVec[2] = std::make_pair( 8, 11 ); + swapVec[3] = std::make_pair( 9, 10 ); + swapVec[4] = std::make_pair( 12, 15 ); + swapVec[5] = std::make_pair( 13, 14 ); + swapVec[6] = std::make_pair( 17, 19 ); break; // case NORM_SEG3: no need to reverse edges // swapVec.resize(1); - // swapVec[0] = make_pair( 1, 2 ); + // swapVec[0] = std::make_pair( 1, 2 ); // break; case NORM_TRI6: swapVec.resize(2); - swapVec[0] = make_pair( 1, 2 ); - swapVec[1] = make_pair( 3, 5 ); + swapVec[0] = std::make_pair( 1, 2 ); + swapVec[1] = std::make_pair( 3, 5 ); break; case NORM_QUAD8: swapVec.resize(3); - swapVec[0] = make_pair( 1, 3 ); - swapVec[1] = make_pair( 4, 7 ); - swapVec[2] = make_pair( 5, 6 ); + swapVec[0] = std::make_pair( 1, 3 ); + swapVec[1] = std::make_pair( 4, 7 ); + swapVec[2] = std::make_pair( 5, 6 ); break; default:; } @@ -196,7 +192,7 @@ namespace */ //================================================================================ - inline void reverse(const Cell & aCell, const vector > & swapVec ) + inline void reverse(const Cell & aCell, const std::vector > & swapVec ) { Cell* ma = const_cast(&aCell); for ( unsigned i = 0; i < swapVec.size(); ++i ) @@ -218,7 +214,7 @@ namespace return i1->_number < i2->_number; } }; - typedef map< const Cell*, unsigned, TCellByIDCompare > TCellToOrderMap; + typedef std::map< const Cell*, unsigned, TCellByIDCompare > TCellToOrderMap; //================================================================================ /*! @@ -1467,7 +1463,7 @@ unsigned SauvUtilities::getDimension( INTERP_KERNEL::NormalizedCellType type ) const int * SauvUtilities::getGibi2MedQuadraticInterlace( INTERP_KERNEL::NormalizedCellType type ) { - static vector conn; + static std::vector conn; static const int hexa20 [] = {0,6,4,2, 12,18,16,14, 7,5,3,1, 19,17,15,13, 8,11,10,9}; static const int penta15[] = {0,2,4, 9,11,13, 1,3,5, 10,12,14, 6,8,7}; static const int pyra13 [] = {0,2,4,6, 12, 1,3,5,7, 8,9,10,11}; @@ -1515,9 +1511,9 @@ SauvUtilities::Link Cell::link(int i) const { int i2 = ( i + 1 ) % _nodes.size(); if ( _reverse ) - return make_pair( _nodes[i2]->_number, _nodes[i]->_number ); + return std::make_pair( _nodes[i2]->_number, _nodes[i]->_number ); else - return make_pair( _nodes[i]->_number, _nodes[i2]->_number ); + return std::make_pair( _nodes[i]->_number, _nodes[i2]->_number ); } //================================================================================ @@ -1991,12 +1987,12 @@ double ASCIIReader::getDouble() const */ //================================================================================ -string ASCIIReader::getName() const +std::string ASCIIReader::getName() const { int len = _width; while (( _curPos[len-1] == ' ' || _curPos[len-1] == 0) && len > 0 ) len--; - return string( _curPos, len ); + return std::string( _curPos, len ); } //================================================================================ @@ -2049,7 +2045,11 @@ bool XDRReader::open() { bool xdr_ok = false; #ifdef HAS_XDR +#ifdef WIN32 + if ((_xdrs_file = ::fopen(_fileName.c_str(), "rb"))) +#else if ((_xdrs_file = ::fopen(_fileName.c_str(), "r"))) +#endif { _xdrs = (XDR *)malloc(sizeof(XDR)); xdrstdio_create((XDR*)_xdrs, _xdrs_file, XDR_DECODE); @@ -2097,8 +2097,8 @@ void XDRReader::init( int nbToRead, int width/*=0*/ ) { if(_iRead < _nbToRead) { - cout << "_iRead, _nbToRead : " << _iRead << " " << _nbToRead << endl; - cout << "Unfinished iteration before new one !" << endl; + std::cout << "_iRead, _nbToRead : " << _iRead << " " << _nbToRead << std::endl; + std::cout << "Unfinished iteration before new one !" << std::endl; THROW_IK_EXCEPTION("SauvUtilities::XDRReader::init(): Unfinished iteration before new one !"); } _iRead = 0; @@ -2275,7 +2275,7 @@ std::string XDRReader::getName() const char* s = _xdr_cvals + _iRead*_width; while (( s[len-1] == ' ' || s[len-1] == 0) && len > 0 ) len--; - return string( s, len ); + return std::string( s, len ); } //================================================================================ @@ -2302,6 +2302,74 @@ void IntermediateMED::checkDataAvailability() const THROW_IK_EXCEPTION("Nodes and coordinates mismatch"); } +//================================================================================ +/*! + * \brief Safely adds a new Group + */ +//================================================================================ + +Group* IntermediateMED::addNewGroup(std::vector* groupsToFix) +{ + if ( _groups.size() == _groups.capacity() ) // re-allocation would occure + { + std::vector newGroups( _groups.size() ); + newGroups.push_back( Group() ); + + for ( size_t i = 0; i < _groups.size(); ++i ) + { + // avoid copying _cells + std::vector cells; + cells.swap( _groups[i]._cells ); + newGroups[i] = _groups[i]; + newGroups[i]._cells.swap( cells ); + + // correct pointers to sub-groups + for ( size_t j = 0; j < _groups[i]._groups.size(); ++j ) + { + int iG = _groups[i]._groups[j] - &_groups[0]; + newGroups[i]._groups[j] = & newGroups[ iG ]; + } + } + + // fix given groups + if ( groupsToFix ) + for ( size_t i = 0; i < groupsToFix->size(); ++i ) + if ( (*groupsToFix)[i] ) + { + int iG = (*groupsToFix)[i] - &_groups[0]; + (*groupsToFix)[i] = & newGroups[ iG ]; + } + + // fix field supports + for ( int isNode = 0; isNode < 2; ++isNode ) + { + std::vector& fields = isNode ? _nodeFields : _cellFields; + for ( size_t i = 0; i < fields.size(); ++i ) + { + if ( !fields[i] ) continue; + for ( size_t j = 0; j < fields[i]->_sub.size(); ++j ) + if ( fields[i]->_sub[j]._support ) + { + int iG = fields[i]->_sub[j]._support - &_groups[0]; + fields[i]->_sub[j]._support = & newGroups[ iG ]; + } + if ( fields[i]->_group ) + { + int iG = fields[i]->_group - &_groups[0]; + fields[i]->_group = & newGroups[ iG ]; + } + } + } + + _groups.swap( newGroups ); + } + else + { + _groups.push_back( Group() ); + } + return &_groups.back(); +} + //================================================================================ /*! * \brief Makes ParaMEDMEM::MEDFileData from self @@ -2378,9 +2446,9 @@ void IntermediateMED::setGroupLongNames() // IMP 0020434: mapping GIBI names to MED names // set med names to objects (mesh, fields, support, group or other) - set treatedGroups; + std::set treatedGroups; - list::iterator itGIBItoMED = _listGIBItoMED_mail.begin(); + std::list::iterator itGIBItoMED = _listGIBItoMED_mail.begin(); for (; itGIBItoMED != _listGIBItoMED_mail.end(); itGIBItoMED++) { if ( (int)_groups.size() < itGIBItoMED->gibi_id ) continue; @@ -2413,9 +2481,9 @@ void IntermediateMED::setGroupLongNames() */ //================================================================================ -void IntermediateMED::setFieldLongNames(set< string >& usedNames) +void IntermediateMED::setFieldLongNames(std::set< std::string >& usedNames) { - list::iterator itGIBItoMED = _listGIBItoMED_cham.begin(); + std::list::iterator itGIBItoMED = _listGIBItoMED_cham.begin(); for (; itGIBItoMED != _listGIBItoMED_cham.end(); itGIBItoMED++) { if (itGIBItoMED->gibi_pile == PILE_FIELD) @@ -2430,25 +2498,25 @@ void IntermediateMED::setFieldLongNames(set< string >& usedNames) for (itGIBItoMED =_listGIBItoMED_comp.begin(); itGIBItoMED != _listGIBItoMED_comp.end(); itGIBItoMED++) { - string medName = _mapStrings[itGIBItoMED->med_id]; - string gibiName = _mapStrings[itGIBItoMED->gibi_id]; + std::string medName = _mapStrings[itGIBItoMED->med_id]; + std::string gibiName = _mapStrings[itGIBItoMED->gibi_id]; bool name_found = false; for ( int isNodal = 0; isNodal < 2 && !name_found; ++isNodal ) { - vector & fields = isNodal ? _nodeFields : _cellFields; + std::vector & fields = isNodal ? _nodeFields : _cellFields; for ( size_t ifi = 0; ifi < fields.size() && !name_found; ifi++) { if (medName.find( fields[ifi]->_name + "." ) == 0 ) { - vector& aSubDs = fields[ifi]->_sub; + std::vector& aSubDs = fields[ifi]->_sub; int nbSub = aSubDs.size(); for (int isu = 0; isu < nbSub; isu++) for (int ico = 0; ico < aSubDs[isu].nbComponents(); ico++) { if (aSubDs[isu].compName(ico) == gibiName) { - string medNameCompo = medName.substr( fields[ifi]->_name.size() + 1 ); + std::string medNameCompo = medName.substr( fields[ifi]->_name.size() + 1 ); fields[ifi]->_sub[isu].compName(ico) = medNameCompo; } } @@ -2486,7 +2554,7 @@ void IntermediateMED::decreaseHierarchicalDepthOfSubgroups() } } // remove empty sub-_groups - vector< Group* > newSubGroups; + std::vector< Group* > newSubGroups; newSubGroups.reserve( grp._groups.size() ); for (size_t j = 0; j < grp._groups.size(); ++j ) if ( !grp._groups[j]->empty() ) @@ -2568,7 +2636,7 @@ void IntermediateMED::detectMixDimGroups() grp._cells.clear(); grp._groups.clear(); if ( !grp._name.empty() ) - cout << "Erase a group with elements of different dim |" << grp._name << "|"<< endl; + std::cout << "Erase a group with elements of different dim |" << grp._name << "|"<< std::endl; break; } } @@ -2583,13 +2651,13 @@ void IntermediateMED::detectMixDimGroups() void IntermediateMED::orientElements2D() { - set::const_iterator elemIt, elemEnd; - vector< pair > swapVec; + std::set::const_iterator elemIt, elemEnd; + std::vector< std::pair > swapVec; // ------------------------------------ // fix connectivity of quadratic edges // ------------------------------------ - set& quadEdges = _cellsByType[ INTERP_KERNEL::NORM_SEG3 ]; + std::set& quadEdges = _cellsByType[ INTERP_KERNEL::NORM_SEG3 ]; if ( !quadEdges.empty() ) { elemIt = quadEdges.begin(), elemEnd = quadEdges.end(); @@ -2598,7 +2666,7 @@ void IntermediateMED::orientElements2D() } CellsByDimIterator faceIt( *this, 2 ); - while ( const set * faces = faceIt.nextType() ) + while ( const std::set * faces = faceIt.nextType() ) { TCellType cellType = faceIt.type(); bool isQuadratic = getGibi2MedQuadraticInterlace( cellType ); @@ -2615,42 +2683,43 @@ void IntermediateMED::orientElements2D() // -------------------------- // orient faces clockwise // -------------------------- - int iQuad = isQuadratic ? 2 : 1; - for ( elemIt = faces->begin(), elemEnd = faces->end(); elemIt != elemEnd; elemIt++ ) - { - // look for index of the most left node - int iLeft = 0, iNode, nbNodes = elemIt->_nodes.size() / iQuad; - double x, minX = nodeCoords( elemIt->_nodes[0] )[0]; - for ( iNode = 1; iNode < nbNodes; ++iNode ) - if (( x = nodeCoords( elemIt->_nodes[ iNode ])[ 0 ]) < minX ) - minX = x, iLeft = iNode; - - // indeces of the nodes neighboring the most left one - int iPrev = ( iLeft - 1 < 0 ) ? nbNodes - 1 : iLeft - 1; - int iNext = ( iLeft + 1 == nbNodes ) ? 0 : iLeft + 1; - // find components of prev-left and left-next vectors - double xP = nodeCoords( elemIt->_nodes[ iPrev ])[ 0 ]; - double yP = nodeCoords( elemIt->_nodes[ iPrev ])[ 1 ]; - double xN = nodeCoords( elemIt->_nodes[ iNext ])[ 0 ]; - double yN = nodeCoords( elemIt->_nodes[ iNext ])[ 1 ]; - double xL = nodeCoords( elemIt->_nodes[ iLeft ])[ 0 ]; - double yL = nodeCoords( elemIt->_nodes[ iLeft ])[ 1 ]; - double xPL = xL - xP, yPL = yL - yP; // components of prev-left vector - double xLN = xN - xL, yLN = yN - yL; // components of left-next vector - // normalise y of the vectors - double modPL = sqrt ( xPL * xPL + yPL * yPL ); - double modLN = sqrt ( xLN * xLN + yLN * yLN ); - if ( modLN > std::numeric_limits::min() && - modPL > std::numeric_limits::min() ) - { - yPL /= modPL; - yLN /= modLN; - // summary direction of neighboring links must be positive - bool clockwise = ( yPL + yLN > 0 ); - if ( !clockwise ) - reverse( *elemIt, swapVec ); - } - } + // COMMENTED for issue 0022612 note 17739 + // int iQuad = isQuadratic ? 2 : 1; + // for ( elemIt = faces->begin(), elemEnd = faces->end(); elemIt != elemEnd; elemIt++ ) + // { + // // look for index of the most left node + // int iLeft = 0, iNode, nbNodes = elemIt->_nodes.size() / iQuad; + // double x, minX = nodeCoords( elemIt->_nodes[0] )[0]; + // for ( iNode = 1; iNode < nbNodes; ++iNode ) + // if (( x = nodeCoords( elemIt->_nodes[ iNode ])[ 0 ]) < minX ) + // minX = x, iLeft = iNode; + + // // indeces of the nodes neighboring the most left one + // int iPrev = ( iLeft - 1 < 0 ) ? nbNodes - 1 : iLeft - 1; + // int iNext = ( iLeft + 1 == nbNodes ) ? 0 : iLeft + 1; + // // find components of prev-left and left-next vectors + // double xP = nodeCoords( elemIt->_nodes[ iPrev ])[ 0 ]; + // double yP = nodeCoords( elemIt->_nodes[ iPrev ])[ 1 ]; + // double xN = nodeCoords( elemIt->_nodes[ iNext ])[ 0 ]; + // double yN = nodeCoords( elemIt->_nodes[ iNext ])[ 1 ]; + // double xL = nodeCoords( elemIt->_nodes[ iLeft ])[ 0 ]; + // double yL = nodeCoords( elemIt->_nodes[ iLeft ])[ 1 ]; + // double xPL = xL - xP, yPL = yL - yP; // components of prev-left vector + // double xLN = xN - xL, yLN = yN - yL; // components of left-next vector + // // normalise y of the vectors + // double modPL = sqrt ( xPL * xPL + yPL * yPL ); + // double modLN = sqrt ( xLN * xLN + yLN * yLN ); + // if ( modLN > std::numeric_limits::min() && + // modPL > std::numeric_limits::min() ) + // { + // yPL /= modPL; + // yLN /= modLN; + // // summary direction of neighboring links must be positive + // bool clockwise = ( yPL + yLN > 0 ); + // if ( !clockwise ) + // reverse( *elemIt, swapVec ); + // } + // } } } @@ -2663,19 +2732,20 @@ void IntermediateMED::orientElements2D() void IntermediateMED::orientElements3D() { // set _reverse flags of faces - orientFaces3D(); + // COMMENTED for issue 0022612 note 17739 + //orientFaces3D(); // ----------------- // fix connectivity // ----------------- - set::const_iterator elemIt, elemEnd; - vector< pair > swapVec; + std::set::const_iterator elemIt, elemEnd; + std::vector< std::pair > swapVec; for ( int dim = 1; dim <= 3; ++dim ) { CellsByDimIterator cellsIt( *this, dim ); - while ( const set * elems = cellsIt.nextType() ) + while ( const std::set * elems = cellsIt.nextType() ) { TCellType cellType = cellsIt.type(); bool isQuadratic = getGibi2MedQuadraticInterlace( cellType ); @@ -2695,7 +2765,8 @@ void IntermediateMED::orientElements3D() } } - orientVolumes(); + // COMMENTED for issue 0022612 note 17739 + //orientVolumes(); } //================================================================================ @@ -2707,10 +2778,10 @@ void IntermediateMED::orientElements3D() void IntermediateMED::orientFaces3D() { // fill map of links and their faces - set faces; - map fgm; - map > linkFacesMap; - map >::iterator lfIt, lfIt2; + std::set faces; + std::map fgm; + std::map > linkFacesMap; + std::map >::iterator lfIt, lfIt2; for (size_t i=0; i!=_groups.size(); ++i) { @@ -2721,21 +2792,21 @@ void IntermediateMED::orientFaces3D() { for ( size_t k = 0; k < grp._cells[j]->_nodes.size(); ++k ) linkFacesMap[ grp._cells[j]->link( k ) ].push_back( grp._cells[j] ); - fgm.insert( make_pair( grp._cells[j], &grp )); + fgm.insert( std::make_pair( grp._cells[j], &grp )); } } // dump linkFacesMap // for ( lfIt = linkFacesMap.begin(); lfIt!=linkFacesMap.end(); lfIt++) { - // cout<< "LINK: " << lfIt->first.first << "-" << lfIt->first.second << endl; - // list & fList = lfIt->second; - // list::iterator fIt = fList.begin(); + // cout<< "LINK: " << lfIt->first.first << "-" << lfIt->first.second << std::endl; + // std::list & fList = lfIt->second; + // std::list::iterator fIt = fList.begin(); // for ( ; fIt != fList.end(); fIt++ ) - // cout << "\t" << **fIt << fgm[*fIt]->nom << endl; + // cout << "\t" << **fIt << fgm[*fIt]->nom << std::endl; // } // Each oriented link must appear in one face only, else a face is reversed. - queue faceQueue; /* the queue contains well oriented faces + std::queue faceQueue; /* the queue contains well oriented faces whose neighbors orientation is to be checked */ bool manifold = true; while ( !linkFacesMap.empty() ) @@ -2757,11 +2828,11 @@ void IntermediateMED::orientFaces3D() // find the neighbor faces lfIt = linkFacesMap.find( link ); int nbFaceByLink = 0; - list< const Cell* > ml; + std::list< const Cell* > ml; if ( lfIt != linkFacesMap.end() ) { - list & fList = lfIt->second; - list::iterator fIt = fList.begin(); + std::list & fList = lfIt->second; + std::list::iterator fIt = fList.begin(); assert( fIt != fList.end() ); for ( ; fIt != fList.end(); fIt++, nbFaceByLink++ ) { @@ -2777,8 +2848,8 @@ void IntermediateMED::orientFaces3D() lfIt2 = linkFacesMap.find( badlink ); if ( lfIt2 != linkFacesMap.end() ) { - list & ff = lfIt2->second; - list::iterator lfIt3 = find( ff.begin(), ff.end(), badFace ); + std::list & ff = lfIt2->second; + std::list::iterator lfIt3 = find( ff.begin(), ff.end(), badFace ); // check if badFace has been found, // else we can't erase it // case of degenerated face in edge @@ -2802,8 +2873,8 @@ void IntermediateMED::orientFaces3D() lfIt = linkFacesMap.find( revLink ); if ( lfIt != linkFacesMap.end() ) { - list & fList = lfIt->second; - list::iterator fIt = fList.begin(); + std::list & fList = lfIt->second; + std::list::iterator fIt = fList.begin(); for ( ; fIt != fList.end(); fIt++, nbFaceByLink++ ) { ml.push_back( *fIt ); @@ -2816,10 +2887,10 @@ void IntermediateMED::orientFaces3D() { if ( manifold ) { - list::iterator ii = ml.begin(); - cout << nbFaceByLink << " faces by 1 link:" << endl; + std::list::iterator ii = ml.begin(); + std::cout << nbFaceByLink << " faces by 1 link:" << std::endl; for( ; ii!= ml.end(); ii++ ) - cout << "in sub-mesh <" << fgm[ *ii ]->_name << "> " << **ii << endl; + std::cout << "in sub-mesh <" << fgm[ *ii ]->_name << "> " << **ii << std::endl; } manifold = false; } @@ -2828,7 +2899,7 @@ void IntermediateMED::orientFaces3D() } // while ( !linkFacesMap.empty() ) if ( !manifold ) - cout << " -> Non manifold mesh, faces orientation may be incorrect" << endl; + std::cout << " -> Non manifold mesh, faces orientation may be incorrect" << std::endl; } //================================================================================ @@ -2840,11 +2911,11 @@ void IntermediateMED::orientFaces3D() void IntermediateMED::orientVolumes() { - set::const_iterator elemIt, elemEnd; - vector< pair > swapVec; + std::set::const_iterator elemIt, elemEnd; + std::vector< std::pair > swapVec; CellsByDimIterator cellsIt( *this, 3 ); - while ( const set * elems = cellsIt.nextType() ) + while ( const std::set * elems = cellsIt.nextType() ) { TCellType cellType = cellsIt.type(); elemIt = elems->begin(), elemEnd = elems->end(); @@ -2893,7 +2964,7 @@ void IntermediateMED::orientVolumes() vec03[0] = n3[0] - n[0][0]; vec03[1] = n3[1] - n[0][1]; vec03[2] = n3[2] - n[0][2]; - if ( fabs( normal[0]+normal[1]+normal[2] ) <= numeric_limits::max() ) // vec01 || vec02 + if ( fabs( normal[0]+normal[1]+normal[2] ) <= std::numeric_limits::max() ) // vec01 || vec02 { normal[0] = vec01[1] * vec03[2] - vec01[2] * vec03[1]; // vec01 ^ vec03 normal[1] = vec01[2] * vec03[0] - vec01[0] * vec03[2]; @@ -2955,11 +3026,11 @@ int NodeContainer::numberNodes() void IntermediateMED::numberElements() { - set::const_iterator elemIt, elemEnd; + std::set::const_iterator elemIt, elemEnd; // numbering _cells of type NORM_POINT1 by node number { - const set& points = _cellsByType[ INTERP_KERNEL::NORM_POINT1 ]; + const std::set& points = _cellsByType[ INTERP_KERNEL::NORM_POINT1 ]; elemIt = points.begin(), elemEnd = points.end(); for ( ; elemIt != elemEnd; ++elemIt ) elemIt->_number = elemIt->_nodes[0]->_number; @@ -2972,7 +3043,7 @@ void IntermediateMED::numberElements() bool ok = true, renumEntity = false; CellsByDimIterator cellsIt( *this, dim ); int prevNbElems = 0; - while ( const set * typeCells = cellsIt.nextType() ) + while ( const std::set * typeCells = cellsIt.nextType() ) { TID minNumber = std::numeric_limits::max(), maxNumber = 0; for ( elemIt = typeCells->begin(), elemEnd = typeCells->end(); elemIt!=elemEnd; ++elemIt) @@ -2996,7 +3067,7 @@ void IntermediateMED::numberElements() { cellsIt.init( dim ); prevNbElems = cellsIt.nextType()->size(); // no need to renumber the first type - while ( const set * typeCells = cellsIt.nextType() ) + while ( const std::set * typeCells = cellsIt.nextType() ) { for ( elemIt = typeCells->begin(), elemEnd = typeCells->end(); elemIt!=elemEnd; ++elemIt) elemIt->_number += prevNbElems; @@ -3007,7 +3078,7 @@ void IntermediateMED::numberElements() { int cellID=1; cellsIt.init( dim ); - while ( const set * typeCells = cellsIt.nextType() ) + while ( const std::set * typeCells = cellsIt.nextType() ) for ( elemIt = typeCells->begin(), elemEnd = typeCells->end(); elemIt!=elemEnd; ++elemIt) elemIt->_number = cellID++; } @@ -3053,7 +3124,7 @@ void IntermediateMED::setConnectivity( ParaMEDMEM::MEDFileUMesh* mesh, mesh->setCoords( coords ); - set::const_iterator elemIt, elemEnd; + std::set::const_iterator elemIt, elemEnd; for ( int dim = 3; dim > 0; --dim ) { CellsByDimIterator dimCells( *this, dim ); @@ -3077,7 +3148,7 @@ void IntermediateMED::setConnectivity( ParaMEDMEM::MEDFileUMesh* mesh, { // fill connectivity array to take into account order of elements in the sauv file const int nbCellNodes = cells->begin()->_nodes.size(); - vector< TID > connectivity( cells->size() * nbCellNodes ); + std::vector< TID > connectivity( cells->size() * nbCellNodes ); int * nodalConnOfCell; for ( elemIt = cells->begin(), elemEnd = cells->end(); elemIt != elemEnd; ++elemIt ) { @@ -3120,8 +3191,8 @@ void IntermediateMED::setGroups( ParaMEDMEM::MEDFileUMesh* mesh ) { const int meshDimRelToMaxExt = ( dim == 0 ? 1 : dim - meshDim ); - vector medGroups; - vector > refGroups; + std::vector medGroups; + std::vector > refGroups; for ( size_t i = 0; i < _groups.size(); ++i ) { Group& grp = _groups[i]; @@ -3136,7 +3207,7 @@ void IntermediateMED::setGroups( ParaMEDMEM::MEDFileUMesh* mesh ) // sort cells by ID and remember their initial order in the group TCellToOrderMap cell2order; unsigned orderInGroup = 0; - vector< Group* > groupVec; + std::vector< Group* > groupVec; if ( grp._groups.empty() ) groupVec.push_back( & grp ); else groupVec = grp._groups; for ( size_t iG = 0; iG < groupVec.size(); ++iG ) @@ -3145,17 +3216,17 @@ void IntermediateMED::setGroups( ParaMEDMEM::MEDFileUMesh* mesh ) if ( (int)getDim( aG ) != dim ) continue; for ( size_t iC = 0; iC < aG->_cells.size(); ++iC ) - cell2order.insert( cell2order.end(), make_pair( aG->_cells[iC], orderInGroup++ )); + cell2order.insert( cell2order.end(), std::make_pair( aG->_cells[iC], orderInGroup++ )); } if ( cell2order.empty() ) continue; bool isSelfIntersect = ( orderInGroup != cell2order.size() ); if ( isSelfIntersect ) // self intersecting group { - ostringstream msg; + std::ostringstream msg; msg << "Self intersecting sub-mesh: id = " << i+1 - << ", name = |" << grp._name << "|" << endl - << " nb unique elements = " << cell2order.size() << endl + << ", name = |" << grp._name << "|" << std::endl + << " nb unique elements = " << cell2order.size() << std::endl << " total nb elements = " << orderInGroup; if ( grp._isProfile ) { @@ -3163,17 +3234,17 @@ void IntermediateMED::setGroups( ParaMEDMEM::MEDFileUMesh* mesh ) } else { - cout << msg.str() << endl; + std::cout << msg.str() << std::endl; } } // create a med group grp._medGroup = DataArrayInt::New(); grp._medGroup->setName( grp._name.c_str() ); grp._medGroup->alloc( cell2order.size(), /*nbOfCompo=*/1 ); - int * idsPrt = grp._medGroup->getPointer(); + int * idsPtr = grp._medGroup->getPointer(); TCellToOrderMap::iterator cell2orderIt, cell2orderEnd = cell2order.end(); for ( cell2orderIt = cell2order.begin(); cell2orderIt != cell2orderEnd; ++cell2orderIt ) - *idsPrt++ = (*cell2orderIt).first->_number - 1; + *idsPtr++ = (*cell2orderIt).first->_number - 1; // try to set the mesh name if ( !isMeshNameSet && @@ -3217,16 +3288,17 @@ bool IntermediateMED::isOnAll( const Group* grp, int & dimRel ) const int dim = getDim( grp ); int nbElems = 0; - CellsByDimIterator dimCells( *this, dim ); - while ( const set * cells = dimCells.nextType() ) - nbElems += cells->size(); - - const bool onAll = ( nbElems == grp->size() ); - if ( dim == 0 ) - dimRel = 0; + { + nbElems = _nbNodes; + dimRel = 0; + } else { + CellsByDimIterator dimCells( *this, dim ); + while ( const std::set * cells = dimCells.nextType() ) + nbElems += cells->size(); + int meshDim = 3; for ( ; meshDim > 0; --meshDim ) { @@ -3236,6 +3308,8 @@ bool IntermediateMED::isOnAll( const Group* grp, int & dimRel ) const } dimRel = dim - meshDim; } + + bool onAll = ( nbElems == grp->size() ); return onAll; } @@ -3250,7 +3324,7 @@ ParaMEDMEM::MEDFileFields * IntermediateMED::makeMEDFileFields(ParaMEDMEM::MEDFi if ( _nodeFields.empty() && _cellFields.empty() ) return 0; // set long names - set< string > usedFieldNames; + std::set< std::string > usedFieldNames; setFieldLongNames(usedFieldNames); MEDFileFields* fields = MEDFileFields::New(); @@ -3274,7 +3348,7 @@ void IntermediateMED::setFields( SauvUtilities::DoubleField* fld, ParaMEDMEM::MEDFileFields* medFields, ParaMEDMEM::MEDFileUMesh* mesh, const TID castemID, - set< string >& usedFieldNames) + std::set< std::string >& usedFieldNames) { bool sameNbGauss = true; if ( !fld || !fld->isMedCompatible( sameNbGauss )) return; @@ -3289,8 +3363,8 @@ void IntermediateMED::setFields( SauvUtilities::DoubleField* fld, const bool uniteSubs = fld->hasCommonSupport() && sameNbGauss; if ( !uniteSubs ) - cout << "Castem field #" << castemID << " <" << fld->_name - << "> is incompatible with MED format, so we split it into several fields:" << endl; + std::cout << "Castem field #" << castemID << " <" << fld->_name + << "> is incompatible with MED format, so we split it into several fields:" << std::endl; for ( size_t iSub = 0; iSub < fld->_sub.size(); ) { @@ -3316,10 +3390,10 @@ void IntermediateMED::setFields( SauvUtilities::DoubleField* fld, fld->setValues( valPtr, iSub ); setTS( fld, values, medFields, mesh, iSub++ ); - cout << fld->_name << " with compoments"; + std::cout << fld->_name << " with compoments"; for ( size_t i = 0; i < (size_t)fld->_sub[iSub-1].nbComponents(); ++i ) - cout << " " << fld->_sub[iSub-1]._comp_names[ i ]; - cout << endl; + std::cout << " " << fld->_sub[iSub-1]._comp_names[ i ]; + std::cout << std::endl; } } } @@ -3364,7 +3438,7 @@ void IntermediateMED::setTS( SauvUtilities::DoubleField* fld, DataArrayDouble * coo = mesh->getCoords(); MEDCouplingAutoRefCountObjectPtr subCoo = coo->selectByTupleId(support->_medGroup->begin(), - support->_medGroup->end()); + support->_medGroup->end()); MEDCouplingAutoRefCountObjectPtr< MEDCouplingUMesh > nodeSubMesh = MEDCouplingUMesh::Build0DMeshFromCoords( subCoo ); timeStamp->setMesh( nodeSubMesh ); @@ -3386,8 +3460,9 @@ void IntermediateMED::setTS( SauvUtilities::DoubleField* fld, // set gauss points if ( timeStamp->getTypeOfField() == ParaMEDMEM::ON_GAUSS_PT ) { - TGaussDef gaussDef( support->_cellType, fld->_sub[iSub].nbGauss() ); - timeStamp->setGaussLocalizationOnType( support->_cellType, + TGaussDef gaussDef( fld->_sub[iSub]._support->_cellType, + fld->_sub[iSub].nbGauss() ); + timeStamp->setGaussLocalizationOnType( fld->_sub[iSub]._support->_cellType, gaussDef.myRefCoords, gaussDef.myCoords, gaussDef.myWeights ); @@ -3428,15 +3503,15 @@ void IntermediateMED::setTS( SauvUtilities::DoubleField* fld, void IntermediateMED::makeFieldNewName(std::set< std::string >& usedNames, SauvUtilities::DoubleField* fld ) { - string base = fld->_name; + std::string base = fld->_name; if ( base.empty() ) { base = "F_"; } else { - string::size_type pos = base.rfind('_'); - if ( pos != string::npos ) + std::string::size_type pos = base.rfind('_'); + if ( pos != std::string::npos ) base = base.substr( 0, pos+1 ); else base += '_'; @@ -3521,9 +3596,9 @@ bool DoubleField::isMultiTimeStamps() const if ( _sub.size() < 2 ) return false; bool sameSupports = true; - Group* grp1 = _sub[0]._support; + Group* grpp1 = _sub[0]._support;// grpp NOT grp because XDR under Windows defines grp... for ( size_t i = 1; i < _sub.size() && sameSupports; ++i ) - sameSupports = ( grp1 == _sub[i]._support ); + sameSupports = ( grpp1 == _sub[i]._support ); return sameSupports; } @@ -3544,7 +3619,7 @@ bool DoubleField::isMedCompatible(bool& sameNbGauss) const sameNbGauss = true; if ( !_sub[iSub].isSameNbGauss() ) { - cout << "Field <" << _name << "> : different nb of gauss points in components" < : different nb of gauss points in components" << std::endl; sameNbGauss = false; //return false; } @@ -3560,7 +3635,7 @@ bool DoubleField::isMedCompatible(bool& sameNbGauss) const bool DoubleField::hasSameComponentsBySupport() const { - vector< _Sub_data >::const_iterator sub_data = _sub.begin(); + std::vector< _Sub_data >::const_iterator sub_data = _sub.begin(); const _Sub_data& first_sub_data = *sub_data; for ( ++sub_data ; sub_data != _sub.end(); ++sub_data ) { @@ -3640,11 +3715,11 @@ int DoubleField::setValues( double * valPtr, const int iSub, const int elemShift int iComp = 0; for ( int iS = 0; iS < iSub; ++iS ) iComp += _sub[iS].nbComponents(); - const vector< double > * compValues = &_comp_values[ iComp ]; + const std::vector< double > * compValues = &_comp_values[ iComp ]; // Set values - const vector< unsigned >& relocTable = getSupport( iSub )->_relocTable; + const std::vector< unsigned >& relocTable = getSupport( iSub )->_relocTable; const int nbElems = _sub[iSub]._support->size(); const int nbGauss = _sub[iSub].nbGauss();