Salome HOME
ContrĂ´le du choix des pas de temps
authorGERALD NICOLAS <D68518@dsp0864451.atlas.edf.fr>
Wed, 10 Feb 2021 12:50:13 +0000 (13:50 +0100)
committerGERALD NICOLAS <D68518@dsp0864451.atlas.edf.fr>
Wed, 10 Feb 2021 12:50:13 +0000 (13:50 +0100)
src/SMESH/MG_ADAPT.cxx
src/SMESH/MG_ADAPT.hxx
src/SMESHGUI/MG_ADAPTGUI.cxx

index 9a44b93d7be57f426fbdbd2e86a2d6a85cb90643..76934c6a748f170ccaae608175e628c979598438 100644 (file)
@@ -32,6 +32,7 @@
 
 #include <SALOME_NamingService.hxx>
 #include <Utils_SALOME_Exception.hxx>
+#include "Utils_CorbaException.hxx"
 
 #include <utilities.h>
 #include <iostream>
@@ -231,15 +232,11 @@ void MgAdapt::setMedFileIn(std::string fileName)
   }
   else
   {
-    std::cout << "\nThe file " + fileName + " does not exist.\n" << std::endl;
-//     SALOME::ExceptionStruct es;
-//     es.type = SALOME::BAD_PARAM;
-//     std::string text = "\nThe file " + fileName + " does not exist.\n" ;
-//     std::cout << text << std::endl;
-//     es.text = "The mesh file does not exist.";
-//     es.text = CORBA::string_dup(text.c_str());
-//     throw SALOME::SALOME_Exception(es);
-    throw SALOME_Exception(("The file " + fileName + " does not exist." ).c_str() );
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text = "\nThe file " + fileName + " does not exist.\n" ;
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
   }
 }
 
@@ -387,8 +384,11 @@ void MgAdapt::setSizeMapFile(std::string mapFile)
   }
   else
   {
-    std::cout << "\nThe file " + mapFile + " does not exist.\n" << std::endl;
-    throw SALOME_Exception(("The file " + mapFile + " does not exist." ).c_str() );
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text = "\nThe file " + mapFile + " does not exist.\n" ;
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
   }
 }
 std::string MgAdapt::getSizeMapFile()
@@ -1152,6 +1152,39 @@ void MgAdapt::copyMgAdaptHypothesisData( const MgAdaptHypothesisData* from)
   data->myVerboseLevel = from->myVerboseLevel;
 }
 
+bool MgAdapt::checkTimeStepRank(std::string fileIn)
+{
+  INFOS("checkTimeStepRank");
+  bool ret = false ;
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileData> mfd = MEDCoupling::MEDFileData::New(fileIn);
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileAnyTypeFieldMultiTS> fts = dynamic_cast<MEDCoupling::MEDFileFieldMultiTS *>( mfd->getFields()->getFieldWithName(fieldName) );
+//   std::cout << "--- timeStep " << timeStep << std::endl;
+//   std::cout << "--- rank " << rank << std::endl;
+  std::vector<double> timevalue;
+  std::vector< std::pair<int,int> > timesteprank = fts->getTimeSteps(timevalue);
+  std::size_t jaux(timesteprank.size());
+  for(std::size_t j=0;j<jaux;j++)
+  {
+//     std::cout << "--- l[j]first  " << timesteprank[j].first << std::endl;
+//     std::cout << "--- l[j]second " << timesteprank[j].second << std::endl;
+    if ( ( timeStep == timesteprank[j].first ) & ( rank == timesteprank[j].second ) )
+    {
+      ret = true ;
+    }
+  }
+  if ( ! ret )
+  {
+    std::cout << "Available (Time step, Rank) :" << std::endl;
+    for(std::size_t j=0;j<jaux;j++)
+    { std::cout << "(Time step = " << timesteprank[j].first << ", Rank = " << timesteprank[j].second << ")" << std::endl;}
+   SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text = "(Time step = " + std::to_string(timeStep) + ", Rank = " + std::to_string(rank) + ") is not found." ;
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
+  return ret ;
+}
 
 void MgAdapt::convertMedFile(std::string& meshFormatMeshFileName, std::string& solFormatFieldFileName, std::string& meshFormatsizeMapFile)
 {
@@ -1171,12 +1204,14 @@ void MgAdapt::convertMedFile(std::string& meshFormatMeshFileName, std::string& s
 
   if (useBackgroundMap)
   {
+    bool ret = checkTimeStepRank(sizeMapFile) ;
     meshFormatsizeMapFile = getFileName();
     meshFormatsizeMapFile += ".mesh";
     buildBackGroundMeshAndSolFiles(fieldFileNames, meshFormatsizeMapFile);
   }
   else if(useLocalMap)
   {
+    bool ret = checkTimeStepRank(medFileIn) ;
     MEDCoupling::MCAuto<MEDCoupling::MEDFileAnyTypeFieldMultiTS> fts = dynamic_cast<MEDCoupling::MEDFileFieldMultiTS *>( mfd->getFields()->getFieldWithName(fieldName) );
     MEDCoupling::MCAuto<MEDCoupling::MEDFileAnyTypeField1TS> f = fts->getTimeStep(timeStep, rank);
     MEDCoupling::MCAuto<MEDCoupling::MEDFileFieldMultiTS> tmFts = MEDCoupling::MEDFileFieldMultiTS::New();
@@ -1342,11 +1377,9 @@ med_idt MgAdapt::openMedFile(const std::string aFile)
   {
     SALOME::ExceptionStruct es;
     es.type = SALOME::BAD_PARAM;
-    std::string text = "The med file " + aFile + " cannot be opened." ;
-//     es.text = "The mesh file does not exist.";
+    std::string text = "\nThe med file " + aFile + " cannot be opened.\n" ;
     es.text = CORBA::string_dup(text.c_str());
     throw SALOME::SALOME_Exception(es);
-    return 0;
   }
   return medIdt;
 }
index 887d6dc25fd16274e039a5bf1b584cb6b07f8f46..0684c28381ecd4f50fe73384002f73daaea4c464 100644 (file)
@@ -272,7 +272,6 @@ public:
 
 private :
   bool fromMedFile;
-
   std::string medFileIn;
   std::string medFileOut;
   std::string meshName;
@@ -329,6 +328,8 @@ private :
   void execCmd( const char* cmd, int& err);
   void cleanUp();
   void appendMsgToLogFile(std::string& msg);
+  bool checkTimeStepRank(std::string fileIn) ;
+
 };
 
 }
index 8a31faa728ca1c1b5889a0e1772fc41b9de32e1e..8e7a593b1ad42c2fcfc7d9da55e25c7542af21a9 100644 (file)
@@ -566,7 +566,7 @@ SMESHGUI_MgAdaptArguments::SMESHGUI_MgAdaptArguments( QWidget* parent )
   chosenTimeStep = new QRadioButton(tr("MG_ADAPT_CH_ST"), sizeMapField);
   timeStepLabel = new QLabel(tr("MG_ADAPT_TSTP"), sizeMapField);
   timeStep = new QSpinBox(sizeMapField);
-  //~timeStep->setMinimum(-1);
+  timeStep->setMinimum(-1);
   rankLabel = new QLabel(tr("MG_ADAPT_RANK"), sizeMapField);
   rankSpinBox = new QSpinBox(sizeMapField);
   rankSpinBox->setMinimum(-1);
@@ -649,8 +649,8 @@ void SMESHGUI_MgAdaptArguments::onChosenTimeStep(bool disableOther, int vmax)
   chosenTimeStep->setChecked(true);
 
   visibleTimeStepRankLabel (true);
-  rankSpinBox->setValue(0);
-  timeStep->setValue(0);
+  rankSpinBox->setValue(-1);
+  timeStep->setValue(-1);
   if (vmax) timeStep->setMaximum(vmax);
 }