Salome HOME
Merge branch 'V9_9_BR'
[modules/smesh.git] / src / SMESH / MG_ADAPT.hxx
index dc55e841936db817a8d9d48af893635504696d70..97a23375c30b68031d58c96d99a4dccb64a32e08 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2020  CEA/DEN, EDF R&D
+// Copyright (C) 2020-2022  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 along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/
-//
-// File   : MG_ADAPT.hxx
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
 #ifndef MG_ADAPT_HXX
 #define MG_ADAPT_HXX
+
 #include <string>
-# include <sstream>
 #include <map>
 #include <vector>
 #include <set>
-#include <fstream>
-
-#include "MCAuto.hxx"
-#include "MCType.hxx"
-#include "MEDFileMesh.hxx"
-
-#include <med.h>
-// SMESH includes
 
-//~#include <med.h>
+#include "SMESH_SMESH.hxx"
 
-namespace MG_ADAPT{
-class MgAdapt;
-
-typedef std::map< std::string, std::string > TOptionValues;
-typedef std::set< std::string >              TOptionNames;
-
-struct MgAdaptHypothesisData
+namespace MEDCoupling
 {
-    std::string myFileInDir, myMeshFileIn, myInMeshName, myMeshFileBackground, myOutMeshName,
-        myMeshFileOut,  myFileOutDir, myFileSizeMapDir, myFieldName;
-    bool    fromMedFile;
-    bool    myPublish, myMeshOutMed;
-    bool    myUseLocalMap, myUseBackgroundMap, myUseConstantValue;
-    double  myConstantValue;
-    int     myRank, myTimeStep;
-    bool    myUseNoTimeStep, myUseLastTimeStep, myUseChosenTimeStep;
-    std::string myWorkingDir, myLogFile;
-    bool    myPrintLogInFile, myKeepFiles, myRemoveLogOnSuccess;
-    int   myVerboseLevel;
+  class MEDFileMesh;
+}
 
-};
+namespace MG_ADAPT
+{
+typedef std::map< std::string, std::string > TOptionValues;
+typedef std::set< std::string > TOptionNames;
 
-class outFileStream : public std::ofstream{
-public:
-    ~outFileStream(){close();} //to close file at dtor
-};
+std::string remove_extension(const std::string& filename);
 
-/*!
- * \brief Class to generate string from any type
- */
-class ToComment : public std::string
+struct MgAdaptHypothesisData
 {
-    std::ostringstream _s ;
-
-public :
-
-    ToComment():std::string("") {}
-
-    ToComment(const ToComment& c):std::string() {
-        _s << c.c_str() ;
-        this->std::string::operator=( _s.str() );
-    }
-
-    ToComment & operator=(const ToComment& c) {
-        _s << c.c_str() ;
-        this->std::string::operator=( _s.str() );
-        return *this;
-    }
-
-    template <class T>
-    ToComment( const T &anything ) {
-        _s << anything ;
-        this->std::string::operator=( _s.str() );
-    }
-
-    template <class T>
-    ToComment & operator<<( const T &anything ) {
-        _s << anything ;
-        this->std::string::operator=( _s.str() );
-        return *this ;
-    }
-
-    operator char*() const {
-        return (char*)c_str();
-    }
-
-    std::ostream& Stream() {
-        return _s;
-    }
+  std::string myFileInDir, myMeshFileIn, myInMeshName, myMeshFileBackground, myOutMeshName,
+              myMeshFileOut, myFileOutDir, myFileSizeMapDir, myFieldName;
+  bool fromMedFile;
+  bool myPublish, myMeshOutMed;
+  bool myUseLocalMap, myUseBackgroundMap, myUseConstantValue;
+  double myConstantValue;
+  int  myRank, myTimeStep;
+  bool myUseNoTimeStep, myUseLastTimeStep, myUseChosenTimeStep;
+  std::string myWorkingDir, myLogFile;
+  bool myPrintLogInFile, myKeepFiles, myRemoveLogOnSuccess;
+  int myVerboseLevel;
 };
 
 
-class MgAdapt
+class SMESH_EXPORT MgAdapt
 {
 
 public:
 
-    MgAdapt();
-    MgAdapt(MgAdaptHypothesisData*);
-    MgAdapt(const MgAdapt&);
-    ~MgAdapt();
-    void buildModel();
-    void setData( MgAdaptHypothesisData* data);
-
-    void setMedFileIn(std::string fileName);
-    std::string getMedFileIn();
-
-    void setMedFileOut(std::string fileOut);
-    std::string getMedFileOut();
-
-    void setMeshName(std::string name);
-    std::string getMeshName();
-
-    void setMeshNameOut(std::string  name);
-    std::string getMeshNameOut();
+  MgAdapt();
+  MgAdapt(MgAdaptHypothesisData*);
+  MgAdapt(const MgAdapt&);
+  ~MgAdapt();
+  void buildModel();
+  void setData( MgAdaptHypothesisData* data);
 
-    void setMeshOutMed(bool mybool);
-    bool getMeshOutMed();
+  void setMedFileIn(std::string fileName);
+  std::string getMedFileIn();
 
-    void setPublish(bool mybool);
-    bool getPublish();
+  void setMedFileOut(std::string fileOut);
+  std::string getMedFileOut();
 
-    void setFieldName(std::string myFieldName);
-    std::string getFieldName();
+  void setMeshName(std::string name);
+  std::string getMeshName();
 
-    void setTimeStep(int time);
-    int getTimeStep() const; 
+  void setMeshNameOut(std::string  name);
+  std::string getMeshNameOut();
 
-    void setRankTimeStep(int time, int myRank);
-    int getRank();
-       
-       void setTimeStepRankLast();
-       void setNoTimeStep();
-       
-    void setLogFile(std::string);
-    std::string getLogFile();
+  void setMeshOutMed(bool mybool);
+  bool getMeshOutMed();
 
-    void setVerbosityLevel(int verbosity);
-    int getVerbosityLevel();
+  void setPublish(bool mybool);
+  bool getPublish();
 
-    void setRemoveOnSuccess(bool mybool);
-    bool getRemoveOnSuccess();
+  void setFieldName(std::string myFieldName);
+  std::string getFieldName();
 
-    MgAdaptHypothesisData* getData() const;
+  void setTimeStep(int time);
+  int getTimeStep() const;
+
+  void setRankTimeStep(int time, int myRank);
+  int getRank();
 
-    void setUseLocalMap(bool mybool);
-    bool getUseLocalMap();
-
-    void setUseBackgroundMap(bool mybool);
-    bool getUseBackgroundMap();
-
-    void setUseConstantValue(bool mybool);
-    bool getUseConstantValue();
-
-    void setConstantValue(double cnst);
-    double getConstantValue() const;
-
-    void setSizeMapFile(std::string mapFile);
-    std::string getSizeMapFile();
-
-    void setFromMedFile(bool mybool);
-    bool isFromMedFile();
-
-    void setKeepWorkingFiles(bool mybool);
-    bool getKeepWorkingFiles();
-
-    void setPrintLogInFile(bool mybool);
-    bool getPrintLogInFile();
-
-    void setWorkingDir(std::string dir);
-    std::string getWorkingDir() const;
-
-
-    bool setAll();
-    static std::string getCommandToRun(MgAdapt* );
-    std::string getCommandToRun() ;
-    int compute(std::string& errStr);
-    std::string getFileName() const;
-    static std::string getExeName();
-    void copyMgAdaptHypothesisData( const MgAdaptHypothesisData* from) ;
-
-    void checkDirPath(std::string& dirPath);
-
-    bool hasOptionDefined( const std::string& optionName ) const;
-    void setOptionValue(const std::string& optionName,
-                        const std::string& optionValue) throw (std::invalid_argument);
-    std::string getOptionValue(const std::string& optionName,
-                               bool*              isDefault=0) const throw (std::invalid_argument);
-    std::vector <std::string> getCustomOptionValuesStrVec() const;
-    std::vector <std::string> getOptionValuesStrVec() const;
-
-
-    TOptionValues        getOptionValues()       const;
-    const TOptionValues& getCustomOptionValues() const ;
-    static double toDbl(const std::string&, bool* isOk = 0) throw (std::invalid_argument);
-    static bool toBool(const std::string&, bool* isOk = 0) throw (std::invalid_argument);
-    static int toInt(const std::string&, bool* isOk = 0 ) throw (std::invalid_argument);
-    static std::string toLowerStr(const std::string& str);
-
-
-    /*  default values */
-    static std::string defaultWorkingDirectory();
-    static std::string defaultLogFile();
-    static bool   defaultKeepFiles();
-    static bool   defaultRemoveLogOnSuccess();
-    static int  defaultVerboseLevel();
-    static bool  defaultPrintLogInFile();
-    static bool  defaultFromMedFile();
-    static bool  defaultMeshOutMed();
-    static bool  defaultPublish();
-    static bool  defaultUseLocalMap();
-    static bool  defaultUseBackgroundMap();
-    static bool  defaultUseConstantValue();
-    static bool  defaultUseNoTimeStep();
-    static bool  defaultUseLastTimeStep();
-    static bool  defaultUseChosenTimeStep();
-    static double  defaultMaximumMemory();
-
-
-
-
-    enum Status {
-        DRS_OK,
-        DRS_EMPTY,          // a file contains no mesh with the given name
-        DRS_WARN_RENUMBER,  // a file has overlapped ranges of element numbers,
-        // so the numbers from the file are ignored
-        DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
-        DRS_WARN_DESCENDING, // some elements were skipped due to descending connectivity
-        DRS_FAIL,            // general failure (exception etc.)
-        DRS_NO_TIME_STEP            // general failure (exception etc.)
-    };
-
-    struct group {
-
-        std::string _name;
-        std::vector<MEDCoupling::mcIdType> _famListId;
-        std::vector<std::string> _famNames;
-        group(std::string name, std::vector<MEDCoupling::mcIdType> famListId, std::vector<std::string> famNames):_name(name)
-        {
-            std::vector<MEDCoupling::mcIdType>::iterator it = famListId.begin();
-            for (; it!=famListId.end(); ++it)
-                _famListId.push_back(*it);
-
-            std::vector<std::string>::iterator itt = famNames.begin();
-            for (; itt!=famNames.end(); ++itt)
-                _famNames.push_back(*itt);
-        }
-    };
-
-    struct family {
-        std::string _famName;
-        mcIdType _famId;
-        family(std::string famName, MEDCoupling::mcIdType famId):_famName(famName), _famId(famId) {}
-    };
+  void setTimeStepRankLast();
+  void setNoTimeStep();
+  void setChosenTimeStepRank();
+  void updateTimeStepRank();
+
+  void setLogFile(std::string);
+  std::string getLogFile();
+
+  void setVerbosityLevel(int verbosity);
+  int getVerbosityLevel();
+
+  void setRemoveOnSuccess(bool mybool);
+  bool getRemoveOnSuccess();
+
+  MgAdaptHypothesisData* getData() const;
+
+  void setUseLocalMap(bool mybool);
+  bool getUseLocalMap();
+
+  void setUseBackgroundMap(bool mybool);
+  bool getUseBackgroundMap();
+
+  void setUseConstantValue(bool mybool);
+  bool getUseConstantValue();
+
+  void setConstantValue(double cnst);
+  double getConstantValue() const;
+
+  void setSizeMapFile(std::string mapFile);
+  std::string getSizeMapFile();
+
+  void setFromMedFile(bool mybool);
+  bool isFromMedFile();
+
+  void setKeepWorkingFiles(bool mybool);
+  bool getKeepWorkingFiles();
+
+  void setPrintLogInFile(bool mybool);
+  bool getPrintLogInFile();
+
+  void setWorkingDir(std::string dir);
+  std::string getWorkingDir() const;
+
+
+  bool setAll();
+  static std::string getCommandToRun(MgAdapt* );
+  std::string getCommandToRun() ;
+  int compute(std::string& errStr);
+  std::string getFileName() const;
+  static std::string getExeName();
+  void copyMgAdaptHypothesisData( const MgAdaptHypothesisData* from) ;
+
+  void checkDirPath(std::string& dirPath);
+
+  bool hasOptionDefined( const std::string& optionName ) const;
+  void setOptionValue(const std::string& optionName,
+                      const std::string& optionValue);
+  std::string getOptionValue(const std::string& optionName,
+                              bool*              isDefault=0) const;
+  std::vector <std::string> getCustomOptionValuesStrVec() const;
+  std::vector <std::string> getOptionValuesStrVec() const;
+
+
+  TOptionValues        getOptionValues()       const;
+  const TOptionValues& getCustomOptionValues() const ;
+  static double toDbl(const std::string&, bool* isOk = 0);
+  static bool toBool(const std::string&, bool* isOk = 0);
+  static int toInt(const std::string&, bool* isOk = 0 );
+  static std::string toLowerStr(const std::string& str);
+
+  /*  default values */
+  static std::string defaultWorkingDirectory();
+  static std::string defaultLogFile();
+  static bool  defaultKeepFiles();
+  static bool  defaultRemoveLogOnSuccess();
+  static int   defaultVerboseLevel();
+  static bool  defaultPrintLogInFile();
+  static bool  defaultFromMedFile();
+  static bool  defaultMeshOutMed();
+  static bool  defaultPublish();
+  static bool  defaultUseLocalMap();
+  static bool  defaultUseBackgroundMap();
+  static bool  defaultUseConstantValue();
+  static bool  defaultUseNoTimeStep();
+  static bool  defaultUseLastTimeStep();
+  static bool  defaultUseChosenTimeStep();
+  static double  defaultMaximumMemory();
+
+  enum Status {
+    DRS_OK,
+    DRS_EMPTY,          // a file contains no mesh with the given name
+    DRS_WARN_RENUMBER,  // a file has overlapped ranges of element numbers,
+    // so the numbers from the file are ignored
+    DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
+    DRS_WARN_DESCENDING, // some elements were skipped due to descending connectivity
+    DRS_FAIL,            // general failure (exception etc.)
+    DRS_NO_TIME_STEP            // general failure (exception etc.)
+  };
+
+  struct group
+  {
+    std::string              _name;
+    std::vector<int>         _famListId;
+    std::vector<std::string> _famNames;
+    group(std::string name, std::vector<int> famListId, std::vector<std::string> famNames)
+      :_name(name), _famListId( famListId ), _famNames( famNames ) {}
+  };
+
+  struct family
+  {
+    std::string _famName;
+    int         _famId;
+    family(std::string famName, int famId):_famName(famName), _famId(famId) {}
+  };
 
 
 private :
-    bool fromMedFile;
-
-    std::string medFileIn;
-    std::string medFileOut;
-    std::string meshName;
-    std::string meshNameOut;
-    bool publish, meshOutMed;
-    bool useLocalMap, useBackgroundMap, useConstantValue;
-    std::string sizeMapFile;
-    std::string fieldName;
-    double constantValue;
-    int rank,  timeStep;
-
-    /* advanced options */
-
-
-    std::string logFile;
-    std::string workingDir;
-    int verbosityLevel;
-    bool removeOnSuccess;
-    bool toKeepWorkingFiles;
-    bool printLogInFile;
-
-    /* Model DATA */
-    MgAdaptHypothesisData* data;
-
-    /*            */
-
-    TOptionValues _option2value, _customOption2value;         // user defined values
-    TOptionValues _defaultOptionValues;                       // default values
-    TOptionNames  _doubleOptions, _charOptions, _boolOptions; // to find a type of option
-
-    std::vector <std::string> _myErrorMessages;
-    Status _myStatus;
-    std::string meshFormatOutputMesh;
-    std::vector< std::string> solFormatOutput;
-    std::vector <group> groupVec;
-    std::vector <family> famVec;
-    std::vector< std::string> tmpFilesToBeDeleted;
-
-    /* convert MED-->.mesh format */
-    void convertMedFile(std::string& meshIn,std::string& solFileIn,  std::string& sizeMapIn)  ;
-    void storeGroups(MEDCoupling::MEDFileMesh* fileMesh);
-    void restoreGroups(MEDCoupling::MEDFileMesh* fileMesh) const;
-    void storefams(MEDCoupling::MEDFileMesh* fileMesh);
-    void restorefams(MEDCoupling::MEDFileMesh* fileMesh) const;
-    void storeGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh);
-    void restoreGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh) const;
-    void convertMeshFile(std::string& meshFormatIn, std::vector< std::string>& solFieldFileNames) const ;
-    void buildConstantSizeMapSolFile(const std::string& solFormatFieldFileName, const int dim, const int version, const mcIdType nbNodes) const;
-    void buildBackGroundMeshAndSolFiles(const std::vector<std::string>& fieldFileNames, const std::string& meshFormatsizeMapFile) const;
-    void getTimeStepInfos(std::string aFile, med_int& numdt, med_int& numit);
-    Status addMessage(const std::string& msg, const bool isFatal = false);
-    med_idt openMedFile(const std::string aFile) ;
-    bool isFileExist(std::string& fName) const;
-    void execCmd( const char* cmd, int& err);
-    void cleanUp();
-    void appendMsgToLogFile(std::string& msg);
+  bool fromMedFile;
+  std::string medFileIn;
+  std::string medFileOut;
+  std::string meshName;
+  std::string meshNameOut;
+  bool publish, meshOutMed;
+  bool useLocalMap, useBackgroundMap, useConstantValue;
+  bool myUseLastTimeStep, myUseNoTimeStep, myUseChosenTimeStep;
+  std::string sizeMapFile;
+  std::string fieldName;
+  double constantValue;
+  int rank,  timeStep;
+
+  /* advanced options */
+
+
+  std::string logFile;
+  std::string workingDir;
+  int verbosityLevel;
+  bool removeOnSuccess;
+  bool toKeepWorkingFiles;
+  bool printLogInFile;
+
+  /* Model DATA */
+  MgAdaptHypothesisData* data;
+
+  /*            */
+
+  TOptionValues _option2value, _customOption2value;         // user defined values
+  TOptionValues _defaultOptionValues;                       // default values
+  TOptionNames  _doubleOptions, _charOptions, _boolOptions; // to find a type of option
+
+  std::vector <std::string> _errorMessages;
+  Status _status;
+  std::string meshFormatOutputMesh;
+  std::vector< std::string> solFormatOutput;
+  std::vector <group> groupVec;
+  std::vector <family> famVec;
+  std::vector< std::string> tmpFilesToBeDeleted;
+
+  /* convert MED-->.mesh format */
+  void convertMedFile(std::string& meshIn,std::string& solFileIn,  std::string& sizeMapIn)  ;
+  void storeGroups(MEDCoupling::MEDFileMesh* fileMesh);
+  void restoreGroups(MEDCoupling::MEDFileMesh* fileMesh) const;
+  void storefams(MEDCoupling::MEDFileMesh* fileMesh);
+  void restorefams(MEDCoupling::MEDFileMesh* fileMesh) const;
+  void storeGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh);
+  void restoreGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh) const;
+  void convertMeshFile(std::string& meshFormatIn, std::vector< std::string>& solFieldFileNames) const ;
+  void buildConstantSizeMapSolFile(const std::string& solFormatFieldFileName, const int dim, const int version, const size_t nbNodes) const;
+  void buildBackGroundMeshAndSolFiles(const std::vector<std::string>& fieldFileNames, const std::string& meshFormatsizeMapFile) const;
+  Status addMessage(const std::string& msg, const bool isFatal = false);
+  void execCmd( const char* cmd, int& err);
+  void cleanUp();
+  void appendMsgToLogFile(std::string& msg);
+  std::vector<std::string> getListFieldsNames(std::string fileIn) ;
+  void checkDimensionOptionAdaptation() ;
+  void checkFieldName(std::string fileIn) ;
+  void checkTimeStepRank(std::string fileIn) ;
+
 };
 
-}
+} // namespace MG_ADAPT
 
 #endif // MG_ADAPT_HXX