Salome HOME
Implement bos #26453: [EDF] (2021) SMESH: uniform refinement
[modules/smesh.git] / src / SMESH / SMESH_Homard.hxx
diff --git a/src/SMESH/SMESH_Homard.hxx b/src/SMESH/SMESH_Homard.hxx
new file mode 100644 (file)
index 0000000..d983675
--- /dev/null
@@ -0,0 +1,491 @@
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
+//
+// Copyright (C) 2011-2021  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, 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
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy 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/ or email : webmaster.salome@opencascade.com
+//
+//  File   : HOMARD.hxx
+//  Author : Gerald NICOLAS, EDF
+//  Module : HOMARD
+
+#ifndef _SMESH_HOMARD_ADAPT_HXX_
+#define _SMESH_HOMARD_ADAPT_HXX_
+
+// C'est le ASSERT de SALOMELocalTrace/utilities.h dans KERNEL
+#ifndef VERIFICATION
+#define VERIFICATION(condition) \
+        if (!(condition)){INTERRUPTION("CONDITION "<<#condition<<" NOT VERIFIED")}
+#endif /* VERIFICATION */
+
+#ifdef WIN32
+  #if defined HOMARDIMPL_EXPORTS || defined HOMARDImpl_EXPORTS
+    #define HOMARDIMPL_EXPORT __declspec( dllexport )
+  #else
+    #define HOMARDIMPL_EXPORT __declspec( dllimport )
+  #endif
+#else
+   #define HOMARDIMPL_EXPORT
+#endif
+
+// La gestion des repertoires
+#ifndef CHDIR
+  #ifdef WIN32
+    #define CHDIR _chdir
+  #else
+    #define CHDIR chdir
+  #endif
+#endif
+
+#include <vector>
+#include <string>
+#include <list>
+
+#include <iostream>
+#include <fstream>
+
+#if defined WIN32
+#pragma warning ( disable: 4251 )
+#endif
+
+namespace SMESHHOMARDImpl
+{
+
+class HOMARDIMPL_EXPORT HOMARD_Boundary
+{
+public:
+  HOMARD_Boundary();
+  ~HOMARD_Boundary();
+
+// Generalites
+  void                          SetName( const char* Name );
+  std::string                   GetName() const;
+
+  std::string                   GetDumpPython() const;
+
+// Caracteristiques
+  void                          SetType( int Type );
+  int                           GetType() const;
+
+  void                          SetMeshName( const char* MeshName );
+  std::string                   GetMeshName() const;
+
+  void                          SetDataFile( const char* DataFile );
+  std::string                   GetDataFile() const;
+
+  void                          SetCylinder( double X0, double X1, double X2, double X3,
+                                             double X4, double X5, double X6 );
+  void                          SetSphere( double X0, double X1, double X2, double X3 );
+  void                          SetConeR( double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1,
+                                          double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2);
+  void                          SetConeA( double Xaxe, double Yaxe, double Zaxe, double Angle,
+                                          double Xcentre, double Ycentre, double ZCentre);
+  void                          SetTorus( double X0, double X1, double X2, double X3,
+                                             double X4, double X5, double X6, double X7 );
+
+  std::vector<double>           GetCoords() const;
+
+  void                          SetLimit( double X0, double X1, double X2 );
+  std::vector<double>           GetLimit() const;
+
+  void                          AddGroup( const char* LeGroupe);
+  void                          SetGroups(const std::list<std::string>& ListGroup );
+  const std::list<std::string>& GetGroups() const;
+
+// Liens avec les autres structures
+  std::string                   GetCaseCreation() const;
+  void                          SetCaseCreation( const char* NomCasCreation );
+
+private:
+  std::string                   _Name;
+  std::string                   _NomCasCreation;
+  std::string                   _DataFile;
+  std::string                   _MeshName;
+  int                           _Type;
+  double                        _Xmin, _Xmax, _Ymin, _Ymax, _Zmin, _Zmax;
+  double                        _Xaxe, _Yaxe, _Zaxe;
+  double                        _Xcentre, _Ycentre, _Zcentre, _rayon;
+  double                        _Xincr, _Yincr, _Zincr;
+  double                        _Xcentre1, _Ycentre1, _Zcentre1, _Rayon1;
+  double                        _Xcentre2, _Ycentre2, _Zcentre2, _Rayon2;
+  double                        _Angle;
+
+  std::list<std::string>        _ListGroupSelected;
+
+};
+
+class HOMARDIMPL_EXPORT HOMARD_Cas
+{
+public:
+  HOMARD_Cas();
+  ~HOMARD_Cas();
+
+// Generalites
+  void                          SetName( const char* Name );
+  std::string                   GetName() const;
+
+  std::string                   GetDumpPython() const;
+
+// Caracteristiques
+  int                           SetDirName( const char* NomDir );
+  std::string                   GetDirName() const;
+
+  int                           GetNumberofIter();
+
+  void                          SetConfType( int ConfType );
+  const int                     GetConfType() const;
+
+  void                          SetExtType( int ExtType );
+  const int                     GetExtType() const;
+
+  void                          SetBoundingBox( const std::vector<double>& extremas );
+  const std::vector<double>&    GetBoundingBox() const;
+
+  void                          AddGroup( const char* Group);
+  void                          SetGroups( const std::list<std::string>& ListGroup );
+  const std::list<std::string>& GetGroups() const;
+  void                          SupprGroups();
+
+  void                          AddBoundary( const char* Boundary );
+  void                          AddBoundaryGroup( const char* Boundary, const char* Group );
+  const std::list<std::string>& GetBoundaryGroup() const;
+  void                          SupprBoundaryGroup();
+
+  void                          SetPyram( int Pyram );
+  const int                     GetPyram() const;
+
+// Liens avec les autres structures
+  std::string                   GetIter0Name() const;
+
+  void                          AddIteration( const char* NomIteration );
+  const std::list<std::string>& GetIterations() const;
+  void                          SupprIterations();
+
+private:
+  std::string                   _Name;
+  std::string                   _NomDir;
+  int                           _ConfType;
+  int                           _ExtType;
+  int                           _Etat;
+
+  std::vector<double>           _Boite;         // cf HomardQTCommun pour structure du vecteur
+  std::list<std::string>        _ListGroup;
+  std::list<std::string>        _ListBoundaryGroup;
+
+  int                           _Pyram;
+
+  typedef std::string           IterName;
+  typedef std::list<IterName>   IterNames;
+  IterNames                     _ListIter;
+};
+
+class HOMARDIMPL_EXPORT HomardDriver
+{
+public:
+  HomardDriver(const std::string siter, const std::string siterp1);
+  ~HomardDriver();
+  //
+  void        TexteInit( const std::string DirCompute, const std::string LogFile, const std::string Langue );
+  void        TexteInfo( int TypeBila, int NumeIter );
+  void        TexteMajCoords( int NumeIter );
+  void        CreeFichierDonn();
+  void        TexteAdap( int ExtType );
+  void        CreeFichier();
+  void        TexteMaillage( const std::string NomMesh, const std::string MeshFile, int apres );
+  void        TexteMaillageHOMARD( const std::string Dir, const std::string liter, int apres );
+  void        TexteConfRaffDera( int ConfType, int TypeAdap, int TypeRaff, int TypeDera );
+  void        TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0, double x1, double x2, double x3, double x4, double x5, double x6, double x7, double x8 );
+  void        TexteGroup( const std::string GroupName );
+  void        TexteField( const std::string FieldName, const std::string FieldFile,
+                          int TimeStep, int Rank,
+                          int TypeThR, double ThreshR, int TypeThC, double ThreshC,
+                          int UsField, int UsCmpI );
+  void        TexteCompo( int NumeComp, const std::string NomCompo);
+
+  void        TexteBoundaryOption( int BoundaryOption );
+  void        TexteBoundaryCAOGr( const std::string GroupName );
+  void        TexteBoundaryDi( const std::string MeshName, const std::string MeshFile );
+  void        TexteBoundaryDiGr( const std::string GroupName );
+  void        TexteBoundaryAn( const std::string NameBoundary, int NumeBoundary, int BoundaryType, double x0, double x1, double x2, double x3, double x4, double x5, double x6, double x7 );
+  void        TexteBoundaryAnGr( const std::string NameBoundary, int NumeBoundary, const std::string GroupName );
+
+  void        TexteFieldInterp( const std::string FieldFile, const std::string MeshFile );
+  void        TexteFieldInterpAll();
+  void        TexteFieldInterpNameType( int NumeChamp, const std::string FieldName, const std::string TypeInterp, int TimeStep, int Rank );
+  void        TexteAdvanced( int Pyram, int NivMax, double DiamMin, int AdapInit, int LevelOutput );
+  void        TexteInfoCompute( int MessInfo );
+  //
+  int         ExecuteHomard(int option);
+  //
+
+public:
+  int         _modeHOMARD;
+  std::string _HOMARD_Exec;
+  std::string _NomDir;
+  std::string _NomFichierConfBase;
+  std::string _NomFichierConf;
+  std::string _NomFichierDonn;
+  std::string _siter;
+  std::string _siterp1;
+  std::string _Texte;
+  int         _TimeStep;
+  int         _Rank;
+  bool _bLu;
+};
+
+class HOMARD_Iteration;
+class HOMARD_Hypothesis;
+
+  //! persistence entity type
+  typedef enum { Case, Zone, Hypothesis, Iteration, Boundary } SignatureType;
+
+  //! get persistence signature
+  HOMARDIMPL_EXPORT std::string GetSignature( SignatureType type );
+
+  //! get data separator
+  HOMARDIMPL_EXPORT std::string separator();
+
+  //! dump boundary to the string
+  HOMARDIMPL_EXPORT std::string Dump( const SMESHHOMARDImpl::HOMARD_Boundary& boundary );
+  //! dump case to the string
+  HOMARDIMPL_EXPORT std::string Dump( const SMESHHOMARDImpl::HOMARD_Cas& cas );
+  //! dump iteration to the string
+  HOMARDIMPL_EXPORT std::string Dump( const SMESHHOMARDImpl::HOMARD_Iteration& iteration );
+  //! dump hypothesis to the string
+  HOMARDIMPL_EXPORT std::string Dump( const SMESHHOMARDImpl::HOMARD_Hypothesis& hypothesis );
+
+  //! restore boundary from the string
+  HOMARDIMPL_EXPORT bool Restore( SMESHHOMARDImpl::HOMARD_Boundary& boundary, const std::string& stream );
+  //! restore case from the string
+  HOMARDIMPL_EXPORT bool Restore( SMESHHOMARDImpl::HOMARD_Cas& cas, const std::string& stream );
+  //! restore hypothesis from the string
+  HOMARDIMPL_EXPORT bool Restore( SMESHHOMARDImpl::HOMARD_Hypothesis& hypothesis, const std::string& stream );
+  //! restore iteration from the string
+  HOMARDIMPL_EXPORT bool Restore( SMESHHOMARDImpl::HOMARD_Iteration& iteration, const std::string& stream );
+
+class HOMARDIMPL_EXPORT HOMARD_Gen
+{
+public :
+  HOMARD_Gen();
+  ~HOMARD_Gen();
+};
+
+class HOMARDIMPL_EXPORT HOMARD_Hypothesis
+{
+public:
+  HOMARD_Hypothesis();
+  ~HOMARD_Hypothesis();
+
+// Generalites
+  void                          SetName( const char* Name );
+  std::string                   GetName() const;
+
+  std::string                   GetDumpPython() const;
+
+// Caracteristiques
+  void                          SetAdapType( int TypeAdap );
+  int                           GetAdapType() const;
+  void                          SetRefinTypeDera( int TypeRaff, int TypeDera );
+  int                           GetRefinType() const;
+  int                           GetUnRefType() const;
+
+  void                          SetField( const char* FieldName );
+  std::string                   GetFieldName() const;
+  void                          SetUseField( int UsField );
+  int                           GetUseField()    const;
+
+  void                          SetUseComp( int UsCmpI );
+  int                           GetUseComp()    const;
+  void                          AddComp( const char* NomComp );
+  void                          SupprComp( const char* NomComp );
+  void                          SupprComps();
+  const std::list<std::string>& GetComps() const;
+
+  void                          SetRefinThr( int TypeThR, double ThreshR );
+  int                           GetRefinThrType()   const;
+  double                        GetThreshR()   const;
+  void                          SetUnRefThr( int TypeThC, double ThreshC );
+  int                           GetUnRefThrType()   const;
+  double                        GetThreshC()   const;
+
+  void                          SetNivMax( int NivMax );
+  const int                     GetNivMax() const;
+
+  void                          SetDiamMin( double DiamMin );
+  const double                  GetDiamMin() const;
+
+  void                          SetAdapInit( int AdapInit );
+  const int                     GetAdapInit() const;
+
+  void                          SetExtraOutput( int ExtraOutput );
+  const int                     GetExtraOutput() const;
+
+  void                          AddGroup( const char* Group);
+  void                          SupprGroup( const char* Group );
+  void                          SupprGroups();
+  void                          SetGroups(const std::list<std::string>& ListGroup );
+  const std::list<std::string>& GetGroups() const;
+
+  void                          SetTypeFieldInterp( int TypeFieldInterp );
+  int                           GetTypeFieldInterp() const;
+  void                          AddFieldInterpType( const char* FieldInterp, int TypeInterp );
+  void                          SupprFieldInterp( const char* FieldInterp );
+  void                          SupprFieldInterps();
+  const std::list<std::string>& GetFieldInterps() const;
+
+// Liens avec les autres structures
+  void                          SetCaseCreation( const char* NomCasCreation );
+  std::string                   GetCaseCreation() const;
+
+  void                          LinkIteration( const char* NomIter );
+  void                          UnLinkIteration( const char* NomIter );
+  void                          UnLinkIterations();
+  const std::list<std::string>& GetIterations() const;
+
+  void                          AddZone( const char* NomZone, int TypeUse );
+  void                          SupprZone( const char* NomZone );
+  void                          SupprZones();
+  const std::list<std::string>& GetZones() const;
+
+private:
+  std::string                   _Name;
+  std::string                   _NomCasCreation;
+
+  int                           _TypeAdap; // -1 pour une adapation Uniforme,
+                                           //  0 si l adaptation depend des zones,
+                                           //  1 pour des champs
+
+  int                           _TypeRaff;
+  int                           _TypeDera;
+
+  std::string                   _Field;
+  int                           _TypeThR;
+  int                           _TypeThC;
+  double                        _ThreshR;
+  double                        _ThreshC;
+  int                           _UsField;
+  int                           _UsCmpI;
+  int                           _TypeFieldInterp; // 0 pour aucune interpolation,
+                                                  // 1 pour interpolation de tous les champs,
+                                                  // 2 pour une liste
+  int                           _NivMax;
+  double                        _DiamMin;
+  int                           _AdapInit;
+  int                           _ExtraOutput;
+
+  std::list<std::string>        _ListIter;
+  std::list<std::string>        _ListZone;
+  std::list<std::string>        _ListComp;
+  std::list<std::string>        _ListGroupSelected;
+  std::list<std::string>        _ListFieldInterp;
+};
+
+class HOMARDIMPL_EXPORT HOMARD_Iteration
+{
+public:
+  HOMARD_Iteration();
+  ~HOMARD_Iteration();
+
+// Generalites
+  void                          SetName( const char* Name );
+  std::string                   GetName() const;
+
+  std::string                   GetDumpPython() const;
+
+// Caracteristiques
+  void                          SetDirNameLoc( const char* NomDir );
+  std::string                   GetDirNameLoc() const;
+
+  void                          SetNumber( int NumIter );
+  int                           GetNumber() const;
+
+  void                          SetState( int etat );
+  int                           GetState() const;
+
+  void                          SetMeshName( const char* NomMesh );
+  std::string                   GetMeshName() const;
+
+  void                          SetMeshFile( const char* MeshFile );
+  std::string                   GetMeshFile() const;
+
+  void                          SetFieldFile( const char* FieldFile );
+  std::string                   GetFieldFile() const;
+// Instants pour le champ de pilotage
+  void                          SetTimeStep( int TimeStep );
+  void                          SetTimeStepRank( int TimeStep, int Rank );
+  void                          SetTimeStepRankLast();
+  int                           GetTimeStep() const;
+  int                           GetRank() const;
+// Instants pour un champ a interpoler
+  void                          SetFieldInterpTimeStep( const char* FieldInterp, int TimeStep );
+  void                          SetFieldInterpTimeStepRank( const char* FieldInterp, int TimeStep, int Rank );
+  const std::list<std::string>& GetFieldInterpsTimeStepRank() const;
+  void                          SetFieldInterp( const char* FieldInterp );
+  const std::list<std::string>& GetFieldInterps() const;
+  void                          SupprFieldInterps();
+
+  void                          SetLogFile( const char* LogFile );
+  std::string                   GetLogFile() const;
+
+  void                          SetFileInfo( const char* FileInfo );
+  std::string                   GetFileInfo() const;
+
+// Liens avec les autres iterations
+  void                          LinkNextIteration( const char* NomIteration );
+  void                          UnLinkNextIteration( const char* NomIteration );
+  void                          UnLinkNextIterations();
+  const std::list<std::string>& GetIterations() const;
+
+  void                          SetIterParentName( const char* iterParent );
+  std::string                   GetIterParentName() const;
+
+// Liens avec les autres structures
+  void                          SetCaseName( const char* NomCas );
+  std::string                   GetCaseName() const;
+
+  void                          SetHypoName( const char* NomHypo );
+  std::string                   GetHypoName() const;
+
+// Divers
+  void                          SetInfoCompute( int MessInfo );
+  int                           GetInfoCompute() const;
+
+private:
+  std::string                   _Name;
+  int                           _Etat;
+  int                           _NumIter;
+  std::string                   _NomMesh;
+  std::string                   _MeshFile;
+  std::string                   _FieldFile;
+  int                           _TimeStep;
+  int                           _Rank;
+  std::string                   _LogFile;
+  std::string                   _IterParent;
+  std::string                   _NomHypo;
+  std::string                   _NomCas;
+  std::string                   _NomDir;
+  std::list<std::string>        _mesIterFilles;
+  std::string                   _FileInfo;
+  int                           _MessInfo;
+  // La liste des champs retenus par l'hypothese
+  std::list<std::string>        _ListFieldInterp;
+  // La liste des triplets (champs, pas de temps, numero d'ordre) retenus par l'iteration
+  std::list<std::string>        _ListFieldInterpTSR;
+};
+
+}; // namespace SMESHHOMARDImpl
+
+#endif