-// Copyright (C) 2011-2013 CEA/DEN, EDF R&D
+// Copyright (C) 2011-2024 CEA, EDF
//
// 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
#include "HOMARD_Hypothesis.hxx"
#include "HOMARD_Iteration.hxx"
#include "HOMARD_Zone.hxx"
+#include "HOMARD_YACS.hxx"
#include <sstream>
#include <cstdlib>
#include "utilities.h"
namespace HOMARD
{
- const char* const SEPARATOR = "|";
+ std::string SEPARATOR = "|" ;
/*!
\brief Read next chunk of data from the string
case Hypothesis: signature = "HYPO"; break;
case Iteration: signature = "ITER"; break;
case Boundary: signature = "BOUNDARY"; break;
+ case YACS: signature = "YACS"; break;
default: break;
}
signature += separator();
*/
std::string separator()
{
- return std::string( SEPARATOR );
+ return SEPARATOR ;
}
// =======================
-// Case
+// 1.1. Case
// =======================
/*!
\brief Dump case to the string
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();
return saux ;
}
//
-// Iteration
-// ==========
+// ==============
+// 1.2. Iteration
+// ==============
//
/*!
\brief Dump iteration to the string
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 ;
}
//
-// hypothese
-// ==============================
+// ==============
+// 1.3. hypothese
+// ==============
/*!
\brief Dump hypothesis to the string
\param hypothesis hypothesis being dumped
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;
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() << 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 ;
}
//
-// Zone
-// =========================
+// =========
+// 1.4. Zone
+// =========
/*!
\brief Dump zone to the string
return saux ;
}
//
+// ==============================
// 1.5. Archivage d'une frontiere
// ==============================
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.GetMeshFile();
+ os << separator() << boundary.GetDataFile();
}
else {
std::vector<double> coor = boundary.GetCoords() ;
}
//
-// 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
// ==========================
//
/*!
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;
return true;
}
//
-// Iteration
-// =================================
+// ==============
+// 2.2. Iteration
+// ==============
/*!
\brief Restore iteration from the string
\param iteration iteration being restored
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;
}
//
-// hypothese
-// =================================
+// ==============
+// 2.3. hypothese
+// ==============
/*!
\brief Restore hypothesis from the string
\param hypothesis hypothesis being restored
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 );
if ( !ok ) return false;
- hypothesis.SetLevelOutput( strtod( chunk.c_str(), 0 ) );
+ hypothesis.SetExtraOutput( strtod( chunk.c_str(), 0 ) );
return true;
}
//
-// Zone
-// ============================
+// =========
+// 2.4. Zone
+// =========
/*!
\brief Restore zone from the string
\param zone zone being restored
// 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 == 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++ ) {
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] ); }
- 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] ); }
- 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++ ) {
}
//
+// =================================
// 2.5. Restauration d'une frontiere
// =================================
\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 )
{
// Si analytique, les coordonnees des frontieres : le nombre depend du type
// Si discret, le maillage
+ // Si CAO, la géométrie
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 ; }
//
- 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;
- boundary.SetMeshFile( chunk.c_str() );
+ boundary.SetDataFile( chunk.c_str() );
}
else
{ std::vector<double> coords;
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/