From ef00f2395dddb803d1fdb88a79120889d03db319 Mon Sep 17 00:00:00 2001
From: Amaury Johnen <amaury.johnen@uclouvain.be>
Date: Mon, 14 Aug 2017 17:37:10 +0200
Subject: [PATCH] draw pview with all elements

---
 Plugin/AnalyseCurvedMesh.cpp | 56 +++++++++++++++++++++++++-----------
 Plugin/AnalyseCurvedMesh.h   |  3 ++
 2 files changed, 42 insertions(+), 17 deletions(-)

diff --git a/Plugin/AnalyseCurvedMesh.cpp b/Plugin/AnalyseCurvedMesh.cpp
index f60bb542a4..3122f5d1fb 100644
--- a/Plugin/AnalyseCurvedMesh.cpp
+++ b/Plugin/AnalyseCurvedMesh.cpp
@@ -37,8 +37,7 @@ StringXNumber CurvedMeshOptions_Number[] = {
   {GMSH_FULLRC, "Draw PView", NULL, 0},
   {GMSH_FULLRC, "Recompute", NULL, 1},
   {GMSH_FULLRC, "Dimension of elements", NULL, -1},
-  //{GMSH_FULLRC, "Element to print quality", NULL, 2485}
-  {GMSH_FULLRC, "Element to print quality", NULL, 2901}
+  {GMSH_FULLRC, "Element to print quality", NULL, -7}
 };
 
 extern "C"
@@ -118,6 +117,8 @@ PView* GMSH_AnalyseCurvedMeshPlugin::execute(PView *v)
   _viewOrder = 10;
   _elementToScan = NULL;
   _hoElement = NULL;
+  _allHoElements.clear();
+  _jacAllElements.clear();
 
   if (askedDim < 0 || askedDim > 4) askedDim = _m->getDim();
 
@@ -537,8 +538,9 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeJacobianToScan(MElement *el,
                                                           GEntity *entity,
                                                           const fullMatrix<double> *normals)
 {
-  if (el->getNum() != _numElementToScan) return;
+  if (_numElementToScan != -7 && el->getNum() != _numElementToScan) return;
 
+  _entity = entity;
   _elementToScan = el;
   fullMatrix<double> points =
           _elementToScan->getFunctionSpace(_viewOrder)->points;
@@ -555,8 +557,6 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeJacobianToScan(MElement *el,
   MElementFactory factory;
   _hoElement = factory.create(tag, v);
 
-  _addElementInEntity(_hoElement, entity);
-
   fullVector<double> jac;
   jacobianBasedQuality::sampleJacobian(_elementToScan, _viewOrder,
                                        jac, normals);
@@ -564,6 +564,11 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeJacobianToScan(MElement *el,
   for (int j = 0; j < jac.size(); ++j) {
     _jacElementToScan.push_back(jac(j));
   }
+
+  if (_numElementToScan == -7) {
+    _jacAllElements.push_back(_jacElementToScan);
+    _allHoElements.push_back(_hoElement);
+  }
 }
 
 void GMSH_AnalyseCurvedMeshPlugin::_addElementInEntity(MElement *element,
@@ -618,14 +623,25 @@ void GMSH_AnalyseCurvedMeshPlugin::_addElementInEntity(MElement *element,
 void GMSH_AnalyseCurvedMeshPlugin::_createPViewElementToScan()
 {
   if (!_hoElement) return;
+
   const nodalBasis *fs = BasisFactory::getNodalBasis(_hoElement->getTypeForMSH());
   const polynomialBasis *pfs = dynamic_cast<const polynomialBasis*>(fs);
 
   // Jacobian determinant
   std::map<int, std::vector<double>> dataPView;
-  dataPView[_hoElement->getNum()] = _jacElementToScan;
   std::stringstream name;
-  name << "Jacobian elem " << _numElementToScan;
+  if (_numElementToScan != -7) {
+    dataPView[_hoElement->getNum()] = _jacElementToScan;
+    name << "Jacobian elem " << _numElementToScan;
+    _addElementInEntity(_hoElement, _entity);
+  }
+  else {
+    for (int i = 0; i < _allHoElements.size(); ++i) {
+      dataPView[_allHoElements[i]->getNum()] = _jacAllElements[i];
+      _addElementInEntity(_allHoElements[i], _entity);
+    }
+    name << "Jacobian all elem";
+  }
   PView *view = new PView(name.str().c_str(), "ElementNodeData",
                           _m, dataPView, 0, 1);
   PViewData *viewData = view->getData();
@@ -633,21 +649,27 @@ void GMSH_AnalyseCurvedMeshPlugin::_createPViewElementToScan()
   viewData->setInterpolationMatrices(_hoElement->getType(),
                                      pfs->coefficients, pfs->monomials,
                                      pfs->coefficients, pfs->monomials);
-//  PView *view;
-//  PViewData *viewData;
 
   // Quality measures
   fullVector<double> ige;
-  jacobianBasedQuality::sampleIGEMeasure(_elementToScan, _viewOrder, ige);
-
-  //std::map<int, std::vector<double>> dataPView2;
   dataPView[_hoElement->getNum()].clear();
-  for (int j = 0; j < ige.size(); ++j) {
-    dataPView[_hoElement->getNum()].push_back(ige(j));
-  }
   name.str(std::string());
-  name << "IGE elem " << _numElementToScan;
-//  BUG, essayer en créant de nouveau dataPView
+  if (_numElementToScan != -7) {
+    jacobianBasedQuality::sampleIGEMeasure(_elementToScan, _viewOrder, ige);
+    for (int j = 0; j < ige.size(); ++j) {
+      dataPView[_hoElement->getNum()].push_back(ige(j));
+    }
+    name << "IGE elem " << _numElementToScan;
+  }
+  else {
+    for (int i = 0; i < _allHoElements.size(); ++i) {
+      jacobianBasedQuality::sampleIGEMeasure(_data[i].element(), _viewOrder, ige);
+      for (int j = 0; j < ige.size(); ++j) {
+        dataPView[_allHoElements[i]->getNum()].push_back(ige(j));
+      }
+    }
+    name << "IGE all elem";
+  }
   view = new PView(name.str().c_str(), "ElementNodeData", _m, dataPView, 0, 1);
   viewData = view->getData();
   viewData->deleteInterpolationMatrices(_hoElement->getType());
diff --git a/Plugin/AnalyseCurvedMesh.h b/Plugin/AnalyseCurvedMesh.h
index 68ab37df45..bdda91572c 100644
--- a/Plugin/AnalyseCurvedMesh.h
+++ b/Plugin/AnalyseCurvedMesh.h
@@ -47,6 +47,9 @@ private :
   MElement *_elementToScan, *_hoElement;
   int _viewOrder;
   std::vector<double> _jacElementToScan;
+  std::vector<std::vector<double>> _jacAllElements;
+  std::vector<MElement*> _allHoElements;
+  GEntity *_entity;
 
   // for 1d, 2d, 3d
   bool _computedJac[3], _computedIGE[3], _computedICN[3];
-- 
GitLab