]> SALOME platform Git repositories - modules/paravis.git/commitdiff
Salome HOME
Ready to had Ghost Cell Generator by default for // read
authorAnthony Geay <anthony.geay@edf.fr>
Mon, 24 Oct 2016 12:37:12 +0000 (14:37 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Mon, 24 Oct 2016 12:37:12 +0000 (14:37 +0200)
src/Plugins/MEDReader/IO/vtkMEDReader.cxx
src/Plugins/MEDReader/IO/vtkMEDReader.h
src/Plugins/MEDReader/ParaViewPlugin/Resources/MEDReaderServer.xml

index 92ecc7d4ce7f8366d216db49fca3e474ddd5cfd6..2dc9b039b5236b1fce18b1bc023279887ea4a662 100644 (file)
@@ -48,6 +48,7 @@
 
 #ifdef MEDREADER_USE_MPI
 #include "vtkMultiProcessController.h"
+#include "vtkPUnstructuredGridGhostCellsGenerator.h"
 #endif
 
 #include "MEDFileFieldRepresentationTree.hxx"
@@ -66,7 +67,7 @@
 class PropertyKeeper
 {
 public:
-  PropertyKeeper(vtkMEDReader *master):_master(master),IsGVActivated(false),GVValue(0),IsCMActivated(false),CMValue(0) { }
+  PropertyKeeper(vtkMEDReader *master):_master(master),IsGVActivated(false),GVValue(0),IsCMActivated(false),CMValue(0),IsGhostActivated(false),GCGCP(1) { }
   void assignPropertiesIfNeeded();
   bool arePropertiesOnTreeToSetAfter() const;
   //
@@ -74,6 +75,7 @@ public:
   void pushGenerateVectorsValue(int value);
   void pushChangeModeValue(int value);
   void pushTimesFlagsStatusEntry(const char* name, int status);
+  void pushGhost(int value);
 protected:
   // pool of pairs to assign in SetFieldsStatus if needed. The use case is the load using pvsm.
   std::vector< std::pair<std::string,int> > SetFieldsStatusPairs;
@@ -83,6 +85,9 @@ protected:
   // change mode
   bool IsCMActivated;
   int CMValue;
+  // ghost cells
+  bool IsGhostActivated;
+  int GCGCP;
   //
   std::vector< std::pair<std::string,int> > TimesFlagsStatusPairs;
   vtkMEDReader *_master;
@@ -112,6 +117,11 @@ void PropertyKeeper::assignPropertiesIfNeeded()
       _master->ChangeMode(this->CMValue);
       this->IsCMActivated=false;
     }
+  if(this->IsGhostActivated)
+    {
+      _master->GhostCellGeneratorCallForPara(this->GCGCP);
+      this->IsGhostActivated=false;
+    }
 }
 
 void PropertyKeeper::pushFieldStatusEntry(const char* name, int status)
@@ -144,6 +154,12 @@ void PropertyKeeper::pushChangeModeValue(int value)
   this->CMValue=value;
 }
 
+void PropertyKeeper::pushGhost(int value)
+{
+  this->IsGhostActivated=true;
+  this->GCGCP=value;
+}
+
 bool PropertyKeeper::arePropertiesOnTreeToSetAfter() const
 {
   return !SetFieldsStatusPairs.empty();
@@ -153,7 +169,7 @@ class vtkMEDReader::vtkMEDReaderInternal
 {
 
 public:
-  vtkMEDReaderInternal(vtkMEDReader *master):TK(0),IsMEDOrSauv(true),IsStdOrMode(false),GenerateVect(false),SIL(0),LastLev0(-1),FirstCall0(2),PK(master),MyMTime(0)
+  vtkMEDReaderInternal(vtkMEDReader *master):TK(0),IsMEDOrSauv(true),IsStdOrMode(false),GenerateVect(false),SIL(0),LastLev0(-1),FirstCall0(2),PK(master),MyMTime(0),GCGCP(true)
   {
   }
 
@@ -191,6 +207,7 @@ public:
   int MyMTime;
   std::set<std::string> _wonderful_set;// this set is used by SetFieldsStatus method to detect the fact that SetFieldsStatus has been called for all items ! Great Items are not sorted ! Why ?
   std::map<std::string,bool> _wonderful_ref;// this map stores the state before a SetFieldsStatus status.
+  bool GCGCP;
 
 private:
   unsigned char FirstCall0;
@@ -277,6 +294,19 @@ void vtkMEDReader::ChangeMode(int newMode)
   this->Modified();
 }
 
+void vtkMEDReader::GhostCellGeneratorCallForPara(int gcgcp)
+{
+  if ( !this->Internal )
+    return;
+  
+  if(this->Internal->FileName.empty())
+    {//pvsm mode
+      this->Internal->PK.pushGhost(gcgcp);
+      return ;
+    }
+  this->Internal->GCGCP=gcgcp!=0;
+}
+
 const char *vtkMEDReader::GetSeparator()
 {
   return MEDFileFieldRepresentationLeavesArrays::ZE_SEP;
index b907583aa3510deeae96b84c979bf62338414dbd..b48a91640de5b05eb4c9612ea3749f4a83a7201a 100644 (file)
@@ -62,6 +62,7 @@ class VTK_EXPORT vtkMEDReader : public vtkMultiBlockDataSetAlgorithm
   //
   virtual void GenerateVectors(int);
   virtual void ChangeMode(int);
+  virtual void GhostCellGeneratorCallForPara(int);
   static const char *GetSeparator();
 
   // Description
index c1ec717123ad81cc2b5a74e3e959ecaa68ca4810..23a46a39447401712a0715d64b800c017edbcbb3 100644 (file)
         </Hints>
      </StringVectorProperty>
 
+     <IntVectorProperty name="GhostCellGeneratorCallForPara"
+                        label="Ghost Computation In Parallel Case"
+                        command="GhostCellGeneratorCallForPara"
+                        number_of_elements="1"
+                        default_values="1"
+                       panel_visibility="advanced">
+        <Documentation>
+          This property tells if ghost cell generator is applied in parallel mode right after MED file read. This call has a CPU cost but it avoids viz artefacts (interfaces inside dataset on domain borders) you can experiment during usage of filters sensitive to ghost cells in // mode (Ex transparency, contour...). 
+        </Documentation>
+        <BooleanDomain name="bool"/>
+      </IntVectorProperty>
+
    </SourceProxy>
   </ProxyGroup>