Salome HOME
Copyright update 2021
[modules/homard.git] / src / HOMARD / HOMARD_DriverTools.cxx
index ab29a7df7441587c5e7b615e94dd805214271743..a41217d2fd203b43b3be3444ef9ce99fd8e3b701 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// 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
 //
 // 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
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -27,6 +27,7 @@
 #include "HOMARD_Hypothesis.hxx"
 #include "HOMARD_Iteration.hxx"
 #include "HOMARD_Zone.hxx"
 #include "HOMARD_Hypothesis.hxx"
 #include "HOMARD_Iteration.hxx"
 #include "HOMARD_Zone.hxx"
+#include "HOMARD_YACS.hxx"
 #include <sstream>
 #include <cstdlib>
 #include "utilities.h"
 #include <sstream>
 #include <cstdlib>
 #include "utilities.h"
@@ -34,7 +35,7 @@
 namespace HOMARD
 {
 
 namespace HOMARD
 {
 
-  const char* const SEPARATOR = "|";
+  std::string SEPARATOR = "|" ;
 
   /*!
     \brief Read next chunk of data from the string
 
   /*!
     \brief Read next chunk of data from the string
@@ -78,6 +79,7 @@ namespace HOMARD
     case Hypothesis: signature = "HYPO"; break;
     case Iteration:  signature = "ITER"; break;
     case Boundary:   signature = "BOUNDARY"; break;
     case Hypothesis: signature = "HYPO"; break;
     case Iteration:  signature = "ITER"; break;
     case Boundary:   signature = "BOUNDARY"; break;
+    case YACS:       signature = "YACS"; break;
     default: break;
     }
     signature += separator();
     default: break;
     }
     signature += separator();
@@ -90,11 +92,11 @@ namespace HOMARD
   */
   std::string separator()
   {
   */
   std::string separator()
   {
-    return std::string( SEPARATOR );
+    return SEPARATOR ;
   }
 
 // =======================
   }
 
 // =======================
-// Case
+// 1.1. Case
 // =======================
   /*!
     \brief Dump case to the string
 // =======================
   /*!
     \brief Dump case to the string
@@ -110,6 +112,7 @@ namespace HOMARD
     os << cas.GetName();
     os << separator() << cas.GetDirName();
     os << separator() << cas.GetConfType();
     os << cas.GetName();
     os << separator() << cas.GetDirName();
     os << separator() << cas.GetConfType();
+    os << separator() << cas.GetExtType();
 
     std::vector<double> coor = cas.GetBoundingBox();
     os << separator() << coor.size();
 
     std::vector<double> coor = cas.GetBoundingBox();
     os << separator() << coor.size();
@@ -138,8 +141,9 @@ namespace HOMARD
     return saux ;
   }
 //
     return saux ;
   }
 //
-// Iteration
-// ==========
+// ==============
+// 1.2. Iteration
+// ==============
 //
   /*!
     \brief Dump iteration to the string
 //
   /*!
     \brief Dump iteration to the string
@@ -153,7 +157,7 @@ namespace HOMARD
     // ...
     MESSAGE( ". Sauvegarde de l'iteration "<<iteration.GetName());
     os << iteration.GetName();
     // ...
     MESSAGE( ". Sauvegarde de l'iteration "<<iteration.GetName());
     os << iteration.GetName();
-    os << separator() << iteration.GetEtat();
+    os << separator() << iteration.GetState();
     os << separator() << iteration.GetNumber();
     os << separator() << iteration.GetMeshFile();
     os << separator() << iteration.GetLogFile();
     os << separator() << iteration.GetNumber();
     os << separator() << iteration.GetMeshFile();
     os << separator() << iteration.GetLogFile();
@@ -171,15 +175,16 @@ namespace HOMARD
 
     os << separator() << iteration.GetHypoName();
     os << separator() << iteration.GetCaseName();
 
     os << separator() << iteration.GetHypoName();
     os << separator() << iteration.GetCaseName();
-    os << separator() << iteration.GetDirName();
+    os << separator() << iteration.GetDirNameLoc();
 
     saux = os.str();
 //     MESSAGE( ". Fin avec "<<saux);
     return saux ;
   }
 //
 
     saux = os.str();
 //     MESSAGE( ". Fin avec "<<saux);
     return saux ;
   }
 //
-// hypothese
-// ==============================
+// ==============
+// 1.3. hypothese
+// ==============
   /*!
     \brief Dump hypothesis to the string
     \param hypothesis hypothesis being dumped
   /*!
     \brief Dump hypothesis to the string
     \param hypothesis hypothesis being dumped
@@ -216,7 +221,7 @@ namespace HOMARD
     for ( it = ListString.begin(); it != ListString.end(); ++it )
           os << separator() << *it;
 
     for ( it = ListString.begin(); it != ListString.end(); ++it )
           os << separator() << *it;
 
-    ListString = hypothesis.GetListComp();
+    ListString = hypothesis.GetComps();
     os << separator() << ListString.size();
     for ( it = ListString.begin(); it != ListString.end(); ++it )
          os << separator() << *it;
     os << separator() << ListString.size();
     for ( it = ListString.begin(); it != ListString.end(); ++it )
          os << separator() << *it;
@@ -226,7 +231,7 @@ namespace HOMARD
     for ( it = ListString.begin(); it != ListString.end(); ++it )
           os << separator() << *it;
 
     for ( it = ListString.begin(); it != ListString.end(); ++it )
           os << separator() << *it;
 
-    ListString = hypothesis.GetListFieldInterp();
+    ListString = hypothesis.GetFieldInterps();
     os << separator() << ListString.size();
     for ( it = ListString.begin(); it != ListString.end(); ++it )
           os << separator() << *it;
     os << separator() << ListString.size();
     for ( it = ListString.begin(); it != ListString.end(); ++it )
           os << separator() << *it;
@@ -234,15 +239,16 @@ namespace HOMARD
     os << separator() << hypothesis.GetNivMax();
     os << separator() << hypothesis.GetDiamMin();
     os << separator() << hypothesis.GetAdapInit();
     os << separator() << hypothesis.GetNivMax();
     os << separator() << hypothesis.GetDiamMin();
     os << separator() << hypothesis.GetAdapInit();
-    os << separator() << hypothesis.GetLevelOutput();
+    os << separator() << hypothesis.GetExtraOutput();
 
     saux = os.str();
 //     MESSAGE( ". Fin avec "<<saux);
     return saux ;
   }
 //
 
     saux = os.str();
 //     MESSAGE( ". Fin avec "<<saux);
     return saux ;
   }
 //
-// Zone
-// =========================
+// =========
+// 1.4. Zone
+// =========
 
   /*!
     \brief Dump zone to the string
 
   /*!
     \brief Dump zone to the string
@@ -276,6 +282,7 @@ namespace HOMARD
     return saux ;
   }
 //
     return saux ;
   }
 //
+// ==============================
 // 1.5. Archivage d'une frontiere
 // ==============================
 
 // 1.5. Archivage d'une frontiere
 // ==============================
 
@@ -296,10 +303,14 @@ namespace HOMARD
     os << separator() << BoundaryType ;
     os << separator() << boundary.GetCaseCreation() ;
 
     os << separator() << BoundaryType ;
     os << separator() << boundary.GetCaseCreation() ;
 
-    if ( BoundaryType == 0 )
+    if ( BoundaryType == -1 )
+    {
+      os << separator() << boundary.GetDataFile();
+    }
+    else if ( BoundaryType == 0 )
     {
       os << separator() << boundary.GetMeshName();
     {
       os << separator() << boundary.GetMeshName();
-      os << separator() << boundary.GetMeshFile();
+      os << separator() << boundary.GetDataFile();
     }
     else {
       std::vector<double> coor = boundary.GetCoords() ;
     }
     else {
       std::vector<double> coor = boundary.GetCoords() ;
@@ -322,9 +333,31 @@ namespace HOMARD
   }
 
 //
   }
 
 //
-// Restauration des objets
+// =========
+// 1.6. YACS
+// =========
+
+  /*!
+    \brief Dump YACS to the string
+    \param yacs yacs being dumped
+    \return string representation of the zone
+  */
+  std::string Dump( const HOMARD_YACS& yacs )
+  {
+    std::stringstream os;
+    std::string saux ;
+    MESSAGE( ". Sauvegarde du schema YACS "<<yacs.GetName());
+    os << yacs.GetName();
+    os << separator() << yacs.GetType();
+
+    saux = os.str();
+//     MESSAGE( ". Fin avec "<<saux);
+    return saux ;
+  }
+//
+// 2. Restauration des objets
 // ==========================
 // ==========================
-// Case
+// 2.1. Case
 // ==========================
 //
   /*!
 // ==========================
 //
   /*!
@@ -352,6 +385,10 @@ namespace HOMARD
     if ( !ok ) return false;
     cas.SetConfType( atoi( chunk.c_str() ) );
 
     if ( !ok ) return false;
     cas.SetConfType( atoi( chunk.c_str() ) );
 
+    chunk = getNextChunk( stream, start, ok );
+    if ( !ok ) return false;
+    cas.SetExtType( atoi( chunk.c_str() ) );
+
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
 
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
 
@@ -404,8 +441,9 @@ namespace HOMARD
     return true;
   }
 //
     return true;
   }
 //
-//  Iteration
-// =================================
+// ==============
+// 2.2. Iteration
+// ==============
   /*!
     \brief Restore iteration from the string
     \param iteration iteration being restored
   /*!
     \brief Restore iteration from the string
     \param iteration iteration being restored
@@ -423,7 +461,7 @@ namespace HOMARD
     iteration.SetName( chunk.c_str() );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
     iteration.SetName( chunk.c_str() );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
-    iteration.SetEtat( (bool)atoi( chunk.c_str() ) );
+    iteration.SetState( atoi( chunk.c_str() ) );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
     iteration.SetNumber( atoi( chunk.c_str() ) );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
     iteration.SetNumber( atoi( chunk.c_str() ) );
@@ -469,13 +507,14 @@ namespace HOMARD
     iteration.SetCaseName( chunk.c_str() );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
     iteration.SetCaseName( chunk.c_str() );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
-    iteration.SetDirName( chunk.c_str() );
+    iteration.SetDirNameLoc( chunk.c_str() );
     return true;
   }
 
 //
     return true;
   }
 
 //
-// hypothese
-// =================================
+// ==============
+// 2.3. hypothese
+// ==============
   /*!
     \brief Restore hypothesis from the string
     \param hypothesis hypothesis being restored
   /*!
     \brief Restore hypothesis from the string
     \param hypothesis hypothesis being restored
@@ -586,7 +625,11 @@ namespace HOMARD
     for ( int i = 0; i < size; i++ ) {
       chunk = getNextChunk( stream, start, ok );
       if ( !ok ) return false;
     for ( int i = 0; i < size; i++ ) {
       chunk = getNextChunk( stream, start, ok );
       if ( !ok ) return false;
-      hypothesis.AddFieldInterp( chunk.c_str() );
+      i++;
+      chunkNext = getNextChunk( stream, start, ok );
+      int TypeInterp = atoi( chunkNext.c_str() );
+      if ( !ok ) return false;
+      hypothesis.AddFieldInterpType( chunk.c_str(), TypeInterp );
     }
 
     chunk = getNextChunk( stream, start, ok );
     }
 
     chunk = getNextChunk( stream, start, ok );
@@ -603,14 +646,15 @@ namespace HOMARD
 
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
 
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
-    hypothesis.SetLevelOutput( strtod( chunk.c_str(), 0 ) );
+    hypothesis.SetExtraOutput( strtod( chunk.c_str(), 0 ) );
 
     return true;
   }
 
 //
 
     return true;
   }
 
 //
-// Zone
-// ============================
+// =========
+// 2.4. Zone
+// =========
   /*!
     \brief Restore zone from the string
     \param zone zone being restored
   /*!
     \brief Restore zone from the string
     \param zone zone being restored
@@ -634,10 +678,10 @@ namespace HOMARD
     // Les coordonnees des zones : le nombre depend du type
     std::vector<double> coords;
     int lgcoords ;
     // Les coordonnees des zones : le nombre depend du type
     std::vector<double> coords;
     int lgcoords ;
-    if ( ZoneType == 2 or ( ZoneType >= 11 and ZoneType <= 13 ) ) { lgcoords = 6 ; }
+    if ( ZoneType == 2 || ( ZoneType >= 11 && ZoneType <= 13 ) ) { lgcoords = 6 ; }
     else if ( ZoneType == 4 ) { lgcoords = 4 ; }
     else if ( ZoneType == 4 ) { lgcoords = 4 ; }
-    else if ( ZoneType == 5 or ( ZoneType >= 31 and ZoneType <= 33 ) ) { lgcoords = 8 ; }
-    else if ( ZoneType == 7 or ( ZoneType >= 61 and ZoneType <= 63 ) ) { lgcoords = 9 ; }
+    else if ( ZoneType == 5 || ( ZoneType >= 31 && ZoneType <= 33 ) ) { lgcoords = 8 ; }
+    else if ( ZoneType == 7 || ( ZoneType >= 61 && ZoneType <= 63 ) ) { lgcoords = 9 ; }
     else return false;
     coords.resize( lgcoords );
     for ( int i = 0; i < lgcoords; i++ ) {
     else return false;
     coords.resize( lgcoords );
     for ( int i = 0; i < lgcoords; i++ ) {
@@ -645,13 +689,13 @@ namespace HOMARD
       if ( !ok ) return false;
       coords[i] = strtod( chunk.c_str(), 0 );
     }
       if ( !ok ) return false;
       coords[i] = strtod( chunk.c_str(), 0 );
     }
-    if ( ZoneType == 2 or ( ZoneType >= 11 and ZoneType <= 13 ) )
+    if ( ZoneType == 2 || ( ZoneType >= 11 && ZoneType <= 13 ) )
     { zone.SetBox( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5] ); }
     else if ( ZoneType == 4 )
     { zone.SetSphere( coords[0], coords[1], coords[2], coords[3] ); }
     { zone.SetBox( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5] ); }
     else if ( ZoneType == 4 )
     { zone.SetSphere( coords[0], coords[1], coords[2], coords[3] ); }
-    else if ( ZoneType == 5 or ( ZoneType >= 31 and ZoneType <= 33 ) )
+    else if ( ZoneType == 5 || ( ZoneType >= 31 && ZoneType <= 33 ) )
     { zone.SetCylinder( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6], coords[7] ); }
     { zone.SetCylinder( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6], coords[7] ); }
-    else if ( ZoneType == 7 or ( ZoneType >= 61 and ZoneType <= 63 ) )
+    else if ( ZoneType == 7 || ( ZoneType >= 61 && ZoneType <= 63 ) )
     { zone.SetPipe( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6], coords[7], coords[8] ); }
     // Remarque : la taille de coords est suffisante pour les limites
     for ( int i = 0; i < 3; i++ ) {
     { zone.SetPipe( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6], coords[7], coords[8] ); }
     // Remarque : la taille de coords est suffisante pour les limites
     for ( int i = 0; i < 3; i++ ) {
@@ -673,6 +717,7 @@ namespace HOMARD
   }
 
 //
   }
 
 //
+// =================================
 // 2.5. Restauration d'une frontiere
 // =================================
 
 // 2.5. Restauration d'une frontiere
 // =================================
 
@@ -680,7 +725,7 @@ namespace HOMARD
     \brief Restore boundary from the string
     \param boundary boundary being restored
     \param stream string representation of the boundary
     \brief Restore boundary from the string
     \param boundary boundary being restored
     \param stream string representation of the boundary
-    \return \c true if zone is correctly restored or \c false otherwise
+    \return \c true if the boundary is correctly restored or \c false otherwise
   */
   bool Restore( HOMARD_Boundary& boundary, const std::string& stream )
   {
   */
   bool Restore( HOMARD_Boundary& boundary, const std::string& stream )
   {
@@ -703,12 +748,20 @@ namespace HOMARD
 
     // Si analytique, les coordonnees des frontieres : le nombre depend du type
     // Si discret, le maillage
 
     // Si analytique, les coordonnees des frontieres : le nombre depend du type
     // Si discret, le maillage
+    // Si CAO, la géométrie
     int lgcoords ;
     int lgcoords ;
-    if ( BoundaryType == 1 ) { lgcoords = 7 ; }
+    if ( BoundaryType == -1 ) { lgcoords = -1 ; }
+    else if ( BoundaryType == 1 ) { lgcoords = 7 ; }
     else if ( BoundaryType == 2 ) { lgcoords = 4 ; }
     else { lgcoords = 0 ; }
 //
     else if ( BoundaryType == 2 ) { lgcoords = 4 ; }
     else { lgcoords = 0 ; }
 //
-    if ( lgcoords == 0 )
+    if ( lgcoords == -1 )
+    {
+      chunk = getNextChunk( stream, start, ok );
+      if ( !ok ) return false;
+      boundary.SetDataFile( chunk.c_str() );
+    }
+    else if ( lgcoords == 0 )
     {
       chunk = getNextChunk( stream, start, ok );
       if ( !ok ) return false;
     {
       chunk = getNextChunk( stream, start, ok );
       if ( !ok ) return false;
@@ -716,7 +769,7 @@ namespace HOMARD
 
       chunk = getNextChunk( stream, start, ok );
       if ( !ok ) return false;
 
       chunk = getNextChunk( stream, start, ok );
       if ( !ok ) return false;
-      boundary.SetMeshFile( chunk.c_str() );
+      boundary.SetDataFile( chunk.c_str() );
     }
     else
     { std::vector<double> coords;
     }
     else
     { std::vector<double> coords;
@@ -755,4 +808,33 @@ namespace HOMARD
     return true;
   }
 
     return true;
   }
 
+//
+// ==================================
+// 2.6. Restauration d'un schema YACS
+// ==================================
+
+  /*!
+    \brief Restore a schema YACS from the string
+    \param yacs yacs being restored
+    \param stream string representation of the schema yacs
+    \return \c true if yacs is correctly restored or \c false otherwise
+  */
+  bool Restore( HOMARD_YACS& yacs, const std::string& stream )
+  {
+    std::string::size_type start = 0;
+    std::string chunk;
+    bool ok;
+
+    chunk = getNextChunk( stream, start, ok );
+    if ( !ok ) return false;
+    yacs.SetName( chunk.c_str() );
+
+    chunk = getNextChunk( stream, start, ok );
+    if ( !ok ) return false;
+    int YACSType = atoi( chunk.c_str() ) ;
+    yacs.SetType( YACSType );
+
+    return true;
+  }
+
 } // namespace HOMARD /end/
 } // namespace HOMARD /end/