X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDLoader%2FSauvMedConvertor.hxx;h=f07364f60c756f077593018069129d6631a7b59d;hb=dd75474d950baf8ff862b03cb1685f2a2d562846;hp=4e64f00c9241f03cbec4b844becda3369c9efa39;hpb=10f37bf6f33a762626d7f1093b2f5450c1688667;p=tools%2Fmedcoupling.git diff --git a/src/MEDLoader/SauvMedConvertor.hxx b/src/MEDLoader/SauvMedConvertor.hxx index 4e64f00c9..f07364f60 100644 --- a/src/MEDLoader/SauvMedConvertor.hxx +++ b/src/MEDLoader/SauvMedConvertor.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D +// Copyright (C) 2007-2020 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 @@ -28,6 +28,7 @@ #include "NormalizedUnstructuredMesh.hxx" #include "MEDCouplingRefCountObject.hxx" #include "SauvUtilities.hxx" +#include "MCType.hxx" #include #include @@ -35,7 +36,7 @@ #include #include -namespace ParaMEDMEM +namespace MEDCoupling { class DataArrayDouble; class DataArrayInt; @@ -47,10 +48,10 @@ namespace ParaMEDMEM namespace SauvUtilities { - class IntermediateMED; + struct IntermediateMED; // ============================================================================== - typedef int TID; // an ID countered from 1 + typedef mcIdType TID; // an ID countered from 1 typedef std::pair Link; // a pair of node numbers typedef INTERP_KERNEL::NormalizedCellType TCellType; @@ -69,7 +70,7 @@ namespace SauvUtilities struct Cell { std::vector< Node* > _nodes; - mutable bool _reverse; // to reverse orienation of a face only + mutable bool _reverse; // to reverse orientation of a face only mutable TID* _sortedNodeIDs; // for comparison mutable TID _number; @@ -94,7 +95,6 @@ namespace SauvUtilities std::string _name; std::vector _cells; std::vector< Group* > _groups; // des sous-groupes composant le Group - //bool _isShared; // true if any Cell was added to the mesh from other Group bool _isProfile; // is a field support or not std::vector _refNames; /* names of groups referring this one; _refNames is resized according to nb of references @@ -103,11 +103,11 @@ namespace SauvUtilities reference is converted into a copy of the medGroup (issue 0021311) */ - ParaMEDMEM::DataArrayInt* _medGroup; // result of conversion - std::vector< unsigned > _relocTable; // for _cells[i] gives its index in _medGroup + MEDCoupling::DataArrayIdType* _medGroup; // result of conversion + std::vector< mcIdType > _relocTable; // for _cells[i] gives its index in _medGroup bool empty() const { return _cells.empty() && _groups.empty(); } - int size() const; + mcIdType size() const; Group():_cellType(INTERP_KERNEL::NORM_ERROR), _isProfile(false), _medGroup(NULL) {} }; @@ -126,11 +126,11 @@ namespace SauvUtilities void setData( int nb_comp, Group* supp ) { _support = supp; _comp_names.resize(nb_comp); _nb_gauss.resize(nb_comp,1); } - int nbComponents() const { return _comp_names.size(); } + int nbComponents() const { return (int)_comp_names.size(); } std::string & compName( int i_comp ) { return _comp_names[ i_comp ]; } - bool isValidNbGauss() const { return *std::max_element( _nb_gauss.begin(), _nb_gauss.end() ) == + bool isSameNbGauss() const { return *std::max_element( _nb_gauss.begin(), _nb_gauss.end() ) == *std::min_element( _nb_gauss.begin(), _nb_gauss.end() ); } - int nbGauss() const { return _nb_gauss[0] ? _nb_gauss[0] : 1; } + int nbGauss() const { return _nb_gauss[0] ? _nb_gauss[0] : 1; } bool hasGauss() const { return nbGauss() > 1; } }; // ---------------------------------------------------------------------------- @@ -145,7 +145,7 @@ namespace SauvUtilities is the same and supports of subcomponents do not overlap */ std::vector< std::vector< double > > _comp_values; - ParaMEDMEM::MEDFileFieldMultiTS* _curMedField; + MEDCoupling::MEDFileFieldMultiTS* _curMedField; DoubleField( int nb_sub, int total_nb_comp ) : _sub(nb_sub), _group(NULL), _curMedField(NULL) { _comp_values.reserve( total_nb_comp ); } @@ -155,21 +155,22 @@ namespace SauvUtilities bool hasSameComponentsBySupport() const; bool isMultiTimeStamps() const; - bool isMedCompatible() const; - ParaMEDMEM::TypeOfField getMedType( const int iSub=0 ) const; - ParaMEDMEM::TypeOfTimeDiscretization getMedTimeDisc() const; - int getNbTuples( const int iSub=0 ) const; + bool isMedCompatible(bool& sameNbGauss) const; + MEDCoupling::TypeOfField getMedType( const int iSub=0 ) const; + MEDCoupling::TypeOfTimeDiscretization getMedTimeDisc() const; + mcIdType getNbTuples( const int iSub=0 ) const; int getNbValuesPerElement( const int iSub=0 ) const; int getNbGauss( const int iSub=0 ) const; const Group* getSupport( const int iSub=0 ) const; - int setValues( double * valPtr, const int iSub, const int elemShift=0 ) const; + mcIdType setValues( double * valPtr, const int iSub, const mcIdType elemShift=0 ) const; + void splitSubWithDiffNbGauss(); //virtual void dump(std::ostream&) const; //virtual ~DoubleField() {} }; // ============================================================================== /*! - * \if developper + * \if developer * Iterator on set of Cell's of given dimension * \endif */ @@ -194,7 +195,7 @@ namespace SauvUtilities // ============================================================================== /*! - * \if developper + * \if developer * Container of Node's. Prevents re-allocation at addition of Node's * \endif */ @@ -225,7 +226,7 @@ namespace SauvUtilities // ============================================================================== /*! - * \if developper + * \if developer * Intermediate structure used to store data read from the Sauve format file. * The structure provides functions that transform the stored data to the MED format * @@ -252,28 +253,29 @@ namespace SauvUtilities ~IntermediateMED(); Node* getNode( TID nID ) { return _points.getNode( nID ); } - int getNbCellsOfType( TCellType type ) const { return _cellsByType[type].size(); } + mcIdType getNbCellsOfType( TCellType type ) const { return ToIdType(_cellsByType[type].size()); } const Cell* insert(TCellType type, const Cell& ma) { return &( *_cellsByType[type].insert( ma ).first ); } - ParaMEDMEM::MEDFileData* convertInMEDFileDS(); + Group* addNewGroup(std::vector* groupsToFix=0); + MEDCoupling::MEDFileData* convertInMEDFileDS(); private: - ParaMEDMEM::MEDFileUMesh* makeMEDFileMesh(); - ParaMEDMEM::DataArrayDouble * getCoords(); - void setConnectivity( ParaMEDMEM::MEDFileUMesh* mesh, ParaMEDMEM::DataArrayDouble* coords ); - void setGroups( ParaMEDMEM::MEDFileUMesh* mesh ); - ParaMEDMEM::MEDFileFields * makeMEDFileFields(ParaMEDMEM::MEDFileUMesh* mesh); + MEDCoupling::MEDFileUMesh* makeMEDFileMesh(); + MEDCoupling::DataArrayDouble * getCoords(); + void setConnectivity( MEDCoupling::MEDFileUMesh* mesh, MEDCoupling::DataArrayDouble* coords ); + void setGroups( MEDCoupling::MEDFileUMesh* mesh ); + MEDCoupling::MEDFileFields * makeMEDFileFields(MEDCoupling::MEDFileUMesh* mesh); void setFields( SauvUtilities::DoubleField* fld, - ParaMEDMEM::MEDFileFields* medFields, - ParaMEDMEM::MEDFileUMesh* mesh, + MEDCoupling::MEDFileFields* medFields, + MEDCoupling::MEDFileUMesh* mesh, const TID castemID, std::set< std::string >& usedNames); void setTS( SauvUtilities::DoubleField* fld, - ParaMEDMEM::DataArrayDouble* values, - ParaMEDMEM::MEDFileFields* medFields, - ParaMEDMEM::MEDFileUMesh* mesh, + MEDCoupling::DataArrayDouble* values, + MEDCoupling::MEDFileFields* medFields, + MEDCoupling::MEDFileUMesh* mesh, const int iSub=0); - void checkDataAvailability() const throw(INTERP_KERNEL::Exception); + void checkDataAvailability() const; void setGroupLongNames(); void setFieldLongNames(std::set< std::string >& usedNames); void makeFieldNewName(std::set< std::string >& usedNames, @@ -324,7 +326,7 @@ namespace SauvUtilities virtual double getDouble() const; virtual std::string getName() const; int lineNb() const { return _lineNb; } - + std::string getClassName() const override { return std::string("ASCIIReader"); } private: bool getLine(char* & line); @@ -362,7 +364,7 @@ namespace SauvUtilities virtual float getFloat() const; virtual double getDouble() const; virtual std::string getName() const; - + std::string getClassName() const override { return std::string("XDRReader"); } private: void init( int nbToRead, int width = 0 );