// HOMARD HOMARD : implementation of HOMARD idl descriptions
//
-// Copyright (C) 2011-2013 CEA/DEN, EDF R&D
+// Copyright (C) 2011-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 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
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// File : HOMARD_Iteration.cxx
-// Author : Paul RASCLE, EDF
+// Author : Gerald NICOLAS, EDF
// Module : HOMARD
//
// Remarques :
// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
#include "HOMARD_Iteration.hxx"
+#include "HOMARD.hxx"
#include "utilities.h"
//=============================================================================
*/
//=============================================================================
HOMARD_Iteration::HOMARD_Iteration():
- _Name( "" ), _Etat( false ),
+ _Name( "" ), _Etat( 0 ),
_NumIter( -1 ),
_NomMesh( "" ), _MeshFile( "" ),
_FieldFile( "" ), _TimeStep( -1 ), _Rank( -1 ),
{
aScript << "\t" << _Name << " = " << _IterParent << ".NextIteration(\"" << _Name << "\")\n";
}
+// L'hypothese (doit etre au debut)
+ aScript << "\t" << _Name << ".AssociateHypo(\"" << _NomHypo << "\")\n";
// Le nom du maillage produit
// MESSAGE (".. maillage produit " << _NomMesh );
aScript << "\t" << _Name << ".SetMeshName(\"" << _NomMesh << "\")\n" ;
// Le fichier du maillage produit
aScript << "\t" << _Name << ".SetMeshFile(\"" << _MeshFile << "\")\n";
-// Le fichier des champs, avec l'instant eventuel
- if ( _FieldFile != "" ) {
+// Le fichier des champs
+ if ( _FieldFile != "" )
+ {
aScript << "\t" << _Name << ".SetFieldFile(\"" << _FieldFile << "\")\n";
+ }
+// Si champ de pilotage, valeurs de pas de temps
+ MESSAGE (". champ de pilotage : _TimeStep = " << _TimeStep << ", _Rank : " << _Rank);
+ if ( _TimeStep != -1 )
+ {
if ( _TimeStep == -2 ) {
aScript << "\t" << _Name << ".SetTimeStepRankLast()\n";
}
else
{
- if ( ( _TimeStep != -1 ) and ( _Rank != -1 ) ) {
- aScript << "\t" << _Name << ".SetTimeStepRank( " << _TimeStep << ", " << _Rank << " )\n";
+ if ( _TimeStep != -1 )
+ {
+ if ( _Rank == -1 )
+ {
+ aScript << "\t" << _Name << ".SetTimeStep( " << _TimeStep << " )\n";
+ }
+ else
+ {
+ aScript << "\t" << _Name << ".SetTimeStepRank( " << _TimeStep << ", " << _Rank << " )\n";
+ }
}
}
}
+// Les instants d'interpolation
+ MESSAGE (". instants d'interpolation ");
+ std::list<std::string>::const_iterator it = _ListFieldInterpTSR.begin() ;
+ while(it != _ListFieldInterpTSR.end())
+ {
+ std::string FieldName = std::string((*it)) ;
+// MESSAGE ("... FieldName = "<< FieldName);
+ (*it++);
+ std::string TimeStepstr = std::string((*it)) ;
+// MESSAGE ("... TimeStepstr = "<< TimeStepstr);
+ (*it++);
+ std::string Rankstr = std::string((*it)) ;
+// MESSAGE ("... Rankstr = "<< Rankstr);
+ (*it++);
+ aScript << "\t" << _Name << ".SetFieldInterpTimeStepRank( \"" << FieldName << "\"" ;
+ aScript << ", " << TimeStepstr ;
+ aScript << ", " << Rankstr << " )\n" ;
+ }
-// MESSAGE (".. Hypothese " << _NomHypo );
- aScript << "\t" << _Name << ".AssociateHypo(\"" << _NomHypo << "\")\n";
-
- if (_Etat == true) { aScript << "\tcodret = " <<_Name << ".Compute(1, 1)\n"; }
- else { aScript << "\t#codret = " <<_Name << ".Compute(1, 1)\n"; }
+// Compute
+ MESSAGE (". Compute ");
+ if ( _Etat == 2 ) { aScript << "\tcodret = " <<_Name << ".Compute(1, 1)\n"; }
+ else { aScript << "\t#codret = " <<_Name << ".Compute(1, 1)\n"; }
// MESSAGE (". Fin de l ecriture de l iteration " << _Name );
return aScript.str();
return _FieldFile;
}
//=============================================================================
+// Instants pour le champ de pilotage
+//=============================================================================
+void HOMARD_Iteration::SetTimeStep( int TimeStep )
+{
+ _TimeStep = TimeStep;
+}
+//=============================================================================
void HOMARD_Iteration::SetTimeStepRank( int TimeStep, int Rank )
{
_TimeStep = TimeStep;
return _Rank;
}
//=============================================================================
+// Instants pour un champ a interpoler
+//=============================================================================
+void HOMARD_Iteration::SetFieldInterpTimeStep( const char* FieldInterp, int TimeStep )
+{
+ SetFieldInterpTimeStepRank( FieldInterp, TimeStep, TimeStep ) ;
+}
+//=============================================================================
+void HOMARD_Iteration::SetFieldInterpTimeStepRank( const char* FieldInterp, int TimeStep, int Rank )
+{
+ MESSAGE("Champ " << FieldInterp << ", hypothese " << _NomHypo );
+// Verification de la presence du champ dans l'hypothese
+ std::list<std::string>::iterator it = find( _ListFieldInterp.begin(), _ListFieldInterp.end(), FieldInterp );
+ if ( it == _ListFieldInterp.end() )
+ {
+ INFOS("Champ " << FieldInterp << " ; hypothese " << _NomHypo )
+ VERIFICATION("Le champ est inconnu dans l'hypothese associee a cette iteration." == 0);
+ }
+
+// . Nom du champ
+ _ListFieldInterpTSR.push_back( std::string( FieldInterp ) );
+// . Pas de temps
+ std::stringstream saux1 ;
+ saux1 << TimeStep ;
+ _ListFieldInterpTSR.push_back( saux1.str() );
+// . Numero d'ordre
+ std::stringstream saux2 ;
+ saux2 << Rank ;
+ _ListFieldInterpTSR.push_back( saux2.str() );
+}
+//=============================================================================
+const std::list<std::string>& HOMARD_Iteration::GetFieldInterpsTimeStepRank() const
+{
+ return _ListFieldInterpTSR;
+}
+//=============================================================================
+void HOMARD_Iteration::SetFieldInterp( const char* FieldInterp )
+{
+ _ListFieldInterp.push_back( std::string( FieldInterp ) );
+}
+//=============================================================================
+const std::list<std::string>& HOMARD_Iteration::GetFieldInterps() const
+{
+ return _ListFieldInterp;
+}
+//=============================================================================
+void HOMARD_Iteration::SupprFieldInterps()
+{
+ _ListFieldInterp.clear();
+}
+//=============================================================================
void HOMARD_Iteration::SetLogFile( const char* LogFile )
{
_LogFile = std::string( LogFile );