Salome HOME
Selection of the last time step; Back to the current directory after a computation...
authornicolas <nicolas>
Mon, 18 Feb 2013 13:14:35 +0000 (13:14 +0000)
committernicolas <nicolas>
Mon, 18 Feb 2013 13:14:35 +0000 (13:14 +0000)
15 files changed:
doc/images/create_hypothese_1.png
doc/images/intro_35.png
doc/images/intro_36.png
doc/intro.rst
doc/tui_create_hypothese.rst
doc/tui_create_iteration.rst
idl/HOMARD_Iteration.idl
src/HOMARD/HOMARD_Iteration.cxx
src/HOMARD/HOMARD_Iteration.hxx
src/HOMARD/HomardDriver.cxx
src/HOMARDGUI/MonCreateIteration.cxx
src/HOMARDGUI/MonEditIteration.cxx
src/HOMARD_I/HOMARD_Gen_i.cxx
src/HOMARD_I/HOMARD_Iteration_i.cxx
src/HOMARD_I/HOMARD_Iteration_i.hxx

index 7c6eb1976856278e3dd28ef7c2e246885808f288..73b7d54832e74544f1e7dc913b153cfb2ef635e4 100644 (file)
Binary files a/doc/images/create_hypothese_1.png and b/doc/images/create_hypothese_1.png differ
index 72871479df5fc78de22c5b4ebe37ec3543e305a1..73b7d54832e74544f1e7dc913b153cfb2ef635e4 100644 (file)
Binary files a/doc/images/intro_35.png and b/doc/images/intro_35.png differ
index 2d363dad481afbfa57a866950c22b34a1e159f4a..36a77bf44e7745d6977dc2e964a48214d76b8a21 100644 (file)
Binary files a/doc/images/intro_36.png and b/doc/images/intro_36.png differ
index a40df79897715882445d8d721d892cb599dae69c..c13379116552aae2a9853ab4b2a917541c98594f 100644 (file)
@@ -137,7 +137,7 @@ A ce stade, on va utiliser ce nouveau maillage pour un deuxi
 .. image:: images/intro_38.png
    :align: center
 
-Comme on continue l'adaptation avec le même critére de saut de température entre noeuds voisins, on garde l'hypothèse "*Hypo_1*". Il suffit de désigner le fichier issu du calcul que l'on vient de faire et qui contient le nouveau champ de température.
+Comme on continue l'adaptation avec le même critère de saut de température entre noeuds voisins, on garde l'hypothèse "*Hypo_1*". Il suffit de désigner le fichier issu du calcul que l'on vient de faire et qui contient le nouveau champ de température.
 
 .. image:: images/intro_39.png
    :align: center
@@ -148,3 +148,36 @@ Comme pr
    :align: center
 
 On peut alors lancer un nouveau calcul sur ce nouveau maillage et poursuiver cette alternance calcul/adaptation jusqu'à l'obtention du résultat attendu.
+
+
+Evolutions du module
+""""""""""""""""""""
+.. index:: single: évolution
+
+On trouvera ici les principales évolutions de HOMARD à partir de la première version livrée dans SALOME 6.5.
+
+SALOME VERSION 6.6 :
+   - Interfaçage avec med 3.0.6
+   - Valeurs par défaut des instants
+   - Acceptation des mailles de type TRIA7 et QUAD9
+   - Option de sortie dans le fichier MED du niveau de raffinement atteint dans chaque maille
+
+SALOME VERSION 7.1 :
+   - Correction d'une anomalie sur le filtrage du raffinement par les groupes
+   - Pilotage de l'adaptation par un seuil basé sur la moyenne et l'écart-type (voir :ref:`tui_create_hypothese`)
+   - En TUI, choix du dernier instant comme instant de pilotage par SetTimeStepRankLast (voir :ref:`tui_create_iteration`)
+   - Possibilité de détruire les objets (GUI et TUI)
+   - Modification des fonctions TUI pour qu'elles agissent sur les objets et non plus sur les noms :
+        homard.AssociateIterHypo(iter_name,hypo_name) devient iter.AssociateHypo(hypo_name)
+
+        homard.AssociateHypoZone(hypo_name,zone_name,type_use) devient hypo.AssociateHypo(zone_name,type_use)
+
+        homard.CreateIteration(iter_name,iter_parent_name) devient iter.NextIteration(iter_name) ou case.NextIteration(iter_name)
+   - Ajout de fonctions :
+        cas.LastIteration() : retourne la dernière itération de la descendance du cas (voir :ref:`tui_create_iteration`)
+
+
+
+
+
+
index 93cfc15c1f1920e78130cfb9f112b420e5479de6..d4e177f971db8430e35e96704d56dc9d7cca4a6a 100644 (file)
@@ -136,7 +136,8 @@ Le champ et les seuils
 |        * 3 : fraction des mailles en %                        |
 |        * 4 : moyenne + n fois l'écart-type                    |
 |                                                               |
-|     - ``threshold`` : valeur du seuil                         |
+|     - ``threshold`` : valeur numérique entrant dans la        |
+|                       définition du seuil                     |
 +---------------------------------------------------------------+
 | .. module:: GetRefinThrType                                   |
 |                                                               |
index 4f4234bd5d1f44a721665881e60ec56399a04927..9a9a1bd85dafea984cc9502c396a0ddcf7af22d6 100644 (file)
@@ -203,11 +203,20 @@ Informations sur le champ
 | **SetTimeStepRank(TimeStep, Rank)**                           |
 |     Définit les instants pour le champ                        |
 |                                                               |
+|     Si un seul instant est défini pour le champ, il est pris  |
+|     par défaut.                                               |
+|                                                               |
 |     Inutile si aucun instant n'est défini pour le champ       |
 |                                                               |
 |     - ``TimeStep`` : l'instant où est pris le champ           |
 |     - ``Rank`` : le numéro d'ordre où est pris le champ       |
 +---------------------------------------------------------------+
+| .. module:: SetTimeStepRankLast                               |
+|                                                               |
+| **SetTimeStepRankLast()**                                     |
+|     Précise que le dernier instant enregistré pour le champ   |
+|     est utilisé                                               |
++---------------------------------------------------------------+
 | .. module:: GetFieldFileName                                  |
 |                                                               |
 | **GetFieldFileName()**                                        |
index ad9703ebec4b79db9dab5757f917e08bddb3ab25..a41739d620412bbd905812d7609a012130a6f7f3 100644 (file)
@@ -67,6 +67,7 @@ module HOMARD
     string   GetFieldFile()                                raises (SALOME::SALOME_Exception);
     void     SetTimeStepRank(in long TimeStep, in long Rank)
                                                            raises (SALOME::SALOME_Exception);
+    void     SetTimeStepRankLast()                         raises (SALOME::SALOME_Exception);
     long     GetTimeStep()                                 raises (SALOME::SALOME_Exception);
     long     GetRank()                                     raises (SALOME::SALOME_Exception);
 
index c65ad8237711790efbd52cf2174486a2555eb992..922a5a2a8762da9d8afb1fd28c9e5062c60d2ac7 100644 (file)
@@ -98,8 +98,14 @@ std::string HOMARD_Iteration::GetDumpPython() const
 // Le fichier des champs, avec l'instant eventuel
   if ( _FieldFile != "" ) {
     aScript << "\t" << _Name << ".SetFieldFile(\"" << _FieldFile << "\")\n";
-    if ( ( _TimeStep != -1 ) and ( _Rank != -1 ) ) {
-      aScript << "\t" << _Name << ".SetTimeStepRank( " << _TimeStep << ", " << _Rank << " )\n";
+    if ( _TimeStep == -2 ) {
+      aScript << "\t" << _Name << ".SetTimeStepRankLast()\n";
+    }
+    else
+    {
+      if ( ( _TimeStep != -1 ) and ( _Rank != -1 ) ) {
+        aScript << "\t" << _Name << ".SetTimeStepRank( " << _TimeStep << ", " << _Rank << " )\n";
+      }
     }
   }
 
@@ -189,6 +195,11 @@ void HOMARD_Iteration::SetTimeStepRank( int TimeStep, int Rank )
   _Rank = Rank;
 }
 //=============================================================================
+void HOMARD_Iteration::SetTimeStepRankLast()
+{
+  _TimeStep = -2;
+}
+//=============================================================================
 int HOMARD_Iteration::GetTimeStep() const
 {
   return _TimeStep;
index 78d1b2706163b6cb223d2c1405642f452f6865c9..542da90a9f0c484a1d026a5f9dbb09012fa6adfe 100644 (file)
@@ -68,6 +68,7 @@ public:
   void                          SetFieldFile( const char* FieldFile );
   std::string                   GetFieldFile() const;
   void                          SetTimeStepRank( int TimeStep, int Rank );
+  void                          SetTimeStepRankLast();
   int                           GetTimeStep() const;
   int                           GetRank() const;
 
index 763965412d303391cbc9728037144d7e64b693d2..ac6d4ca50c8957c022fcc27c48685da320c59923 100644 (file)
@@ -73,6 +73,7 @@ void HomardDriver::TexteInit( const std::string DirCompute, const std::string Di
   _Texte += "HOMaiN__ Mai" + _siter   + " \"" + DirComputePa + "/maill." + _siter   + ".hom.med\"\n" ;
   _Texte += "HOMaiNP1 Mai" + _siterp1 + " \"" + DirCompute   + "/maill." + _siterp1 + ".hom.med\"\n" ;
   _Texte += "RepeTrav \"" + DirCompute + "\"\n" ;
+  _Texte += "RepeInfo \"" + DirCompute + "\"\n" ;
 //
 }
 
index 09df846a9a08f6b3fc81ba5851e2c509849c051e..b5da354de9cf293920a1549e8c71724e63c66ed2 100644 (file)
@@ -170,10 +170,11 @@ bool MonCreateIteration::PushOnApply()
   if ( LEFieldFile->text().trimmed() != QString(""))
   {
     QString FieldFile=LEFieldFile->text().trimmed();
+    aIter->SetFieldFile(CORBA::string_dup(FieldFile.toStdString().c_str()));
     int rank = SpinBox_Rank->value();
     int step = SpinBox_TimeStep->value();
-    aIter->SetFieldFile(CORBA::string_dup(FieldFile.toStdString().c_str()));
-    aIter->SetTimeStepRank(step,rank);
+    if ( step == -2 ) { aIter->SetTimeStepRankLast(); }
+    else              { aIter->SetTimeStepRank(step,rank); }
   }
   _myHomardGen->AssociateIterHypo (IterName, monHypoName.toStdString().c_str());
   aIter->SetMeshName(CORBA::string_dup(aMeshName_np1.toStdString().c_str()));
index 1b57c583dae94c23273f6676f3c6eb865d0998b1..b212cb4d95a09d04cd14febd94f9aa6b46c6d561 100644 (file)
@@ -172,10 +172,11 @@ bool MonEditIteration::PushOnApply()
        (  _step != SpinBox_TimeStep->value()))
     {
       _FieldFile = LEFieldFile->text().trimmed();
+      aIter->SetFieldFile(CORBA::string_dup(_FieldFile.toStdString().c_str()));
       _rank = SpinBox_Rank->value();
       _step = SpinBox_TimeStep->value();
-      aIter->SetFieldFile(CORBA::string_dup(_FieldFile.toStdString().c_str()));
-      aIter->SetTimeStepRank(_step, _rank);
+      if ( _step == -2 ) { aIter->SetTimeStepRankLast(); }
+      else               { aIter->SetTimeStepRank(_step, _rank); }
       _myHomardGen->InvalideIter(_IterationName.toStdString().c_str());
       HOMARD_UTILS::updateObjBrowser();
     }
index 9b53284b9ce92c10fd90fc950dced2ba0595124b..3f54b8d5d7ffa780523abf6c2ac3aed993b0b9e6 100755 (executable)
@@ -1420,10 +1420,12 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena
 {
   MESSAGE ( "Compute : calcul de " << NomIteration );
 
+// A. Prealable
+// A.1. La base
   HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[NomIteration];
   ASSERT(!CORBA::is_nil(myIteration));
 
-// on ne calcule pas l iteration 0
+// A.2. On ne calcule pas l iteration 0
   int NumeIter = myIteration->GetNumber();
   if ( NumeIter == 0 )
   {
@@ -1434,7 +1436,7 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena
       return 1;
   };
 
-// on verifie qu il y a une hypothese (erreur improbable);
+// A.3. On verifie qu il y a une hypothese (erreur improbable);
   const char* nomHypo = myIteration->GetHypoName();
   if (std::string(nomHypo) == std::string(""))
   {
@@ -1461,10 +1463,12 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena
       }
   };
 
+  // A.5. Le cas
   const char* nomCas = myIteration->GetCaseName();
   HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
   ASSERT(!CORBA::is_nil(myCase));
 
+  // A.6. Les numeros d'iterations
   int codret = 0;
   std::stringstream saux0 ;
   saux0 << NumeIter - 1 ;
@@ -1477,20 +1481,22 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena
   if (NumeIter < 10) { siterp1 = "0" + siterp1 ; }
 
   // B. Les repertoires
-  // B.1. Le repertoire du cas
+  // B.1. Le repertoire courant
+  char* nomDirWork = getenv("PWD") ;
+  // B.2. Le repertoire du cas
   const char* nomDirCase = myCase->GetDirName();
   MESSAGE ( ". nomDirCase = " << nomDirCase );
 
-  // B.2. Le sous-repertoire de l'iteration a calculer, puis le repertoire complet a creer
-  // B.2.1. Le nom du sous-repertoire
+  // B.3. Le sous-repertoire de l'iteration a calculer, puis le repertoire complet a creer
+  // B.3.1. Le nom du sous-repertoire
   const char* nomDirIt = myIteration->GetDirName();
 
-  // B.2.2. Le nom complet du sous-repertoire
+  // B.3.2. Le nom complet du sous-repertoire
   std::stringstream DirCompute ;
   DirCompute << nomDirCase << "/" << nomDirIt;
   MESSAGE (". DirCompute = " << DirCompute.str() );
 
-  // B.2.3. Si le sous-repertoire n'existe pas, on le cree
+  // B.3.3. Si le sous-repertoire n'existe pas, on le cree
   //        Si le sous-repertoire existe :
   //         etatMenage = 0 : on sort en erreur si le repertoire n'est pas vide
   //         etatMenage = 1 : on fait le menage du repertoire
@@ -1506,7 +1512,8 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena
   }
   else
   {
-//  Le repertoire existe et on fait le menage de son contenu :
+//  Le repertoire existe
+//  On demande de faire le menage de son contenu :
     if (etatMenage != 0)
     {
        MESSAGE (". Menage du repertoire DirCompute = " << DirCompute.str());
@@ -1519,9 +1526,9 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena
          ASSERT("Pb au menage du repertoire de calcul" == 0);
        }
     }
+//  On n'a pas demande de faire le menage de son contenu : on sort en erreur :
     else
     {
-//  Le repertoire existe et s'il n'est pas vide, on sort en erreur :
        DIR *dp;
        struct dirent *dirp;
        dp  = opendir(DirCompute.str().c_str());
@@ -1544,7 +1551,7 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena
     }
   }
 
-  // B.3. Le sous-repertoire de l'iteration precedente
+  // B.4. Le sous-repertoire de l'iteration precedente
   const char* nomDirItPa ;
   std::stringstream DirComputePa ;
   if (NumeIter == 1)
@@ -1560,13 +1567,13 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena
   MESSAGE( ". nomDirItPa = " << nomDirItPa);
   MESSAGE( ". DirComputePa = " << DirComputePa.str() );
 
-  // B.4. Le fichier des messages
-  chdir(DirCompute.str().c_str()) ;
+  // B.5. Le fichier des messages
   std::string MessFile = DirCompute.str() + "/Liste." + siter + ".vers." + siterp1 ;
   MESSAGE (". MessFile = " << MessFile);
   myIteration->SetMessFile(MessFile.c_str());
 
    // C. On passe dans le repertoire de l'iteration a calculer
+  MESSAGE ( ". On passe dans DirCompute = " << DirCompute.str() );
   chdir(DirCompute.str().c_str()) ;
 
   // D. Les donnees du calcul HOMARD
@@ -1626,7 +1633,7 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena
   int TypeRaff = (*ListTypes)[1];
   int TypeDera = (*ListTypes)[2];
 
-  // D.6. L'option d'interpolation des champs
+  // D.5. L'option d'interpolation des champs
   int TypeFieldInterp = myHypo->GetTypeFieldInterp();
 
   // E. Texte du fichier de configuration
@@ -1935,7 +1942,8 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMena
   if (codret == 0)
   {
     delete myDriver;
-    chdir(nomDirCase);
+    MESSAGE ( ". On retourne dans nomDirWork = " << nomDirWork );
+    chdir(nomDirWork);
   }
 
   return codretexec ;
index 295aaccad3e4d07158a5c1bd7cc90692f1116ce0..a29d2b3ad0f9f1ccb4cc9b664b05fefa2d2c9b60 100644 (file)
@@ -192,6 +192,12 @@ void HOMARD_Iteration_i::SetTimeStepRank( CORBA::Long TimeStep, CORBA::Long Rank
   myHomardIteration->SetTimeStepRank( TimeStep, Rank );
 }
 //=============================================================================
+void HOMARD_Iteration_i::SetTimeStepRankLast()
+{
+  ASSERT( myHomardIteration );
+  myHomardIteration->SetTimeStepRankLast();
+}
+//=============================================================================
 CORBA::Long HOMARD_Iteration_i::GetTimeStep()
 {
   ASSERT( myHomardIteration );
index 0b9b807b68eb1dab98c0ae07abaee709fb1511fa..91ce9fdce1b9653b7799baadc72215594579d858 100644 (file)
@@ -83,6 +83,7 @@ public:
   void                   SetFieldFile( const char* FieldFile );
   char*                  GetFieldFile();
   void                   SetTimeStepRank( CORBA::Long TimeStep, CORBA::Long Rank );
+  void                   SetTimeStepRankLast();
   CORBA::Long            GetTimeStep();
   CORBA::Long            GetRank();