From 58be00bbec903d98db0ab9d361a579f5ac1ed282 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Wed, 7 Dec 2011 08:13:26 +0000
Subject: [PATCH] force (trivial) interpolation matrices for ElementData: we
 know how to interpolate constants ;-)

---
 Post/PViewDataGModel.cpp | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/Post/PViewDataGModel.cpp b/Post/PViewDataGModel.cpp
index df6f063425..baf02f69d5 100644
--- a/Post/PViewDataGModel.cpp
+++ b/Post/PViewDataGModel.cpp
@@ -164,8 +164,9 @@ bool PViewDataGModel::finalize(bool computeMinMax, const std::string &interpolat
       }
     }
     
-    // if we don't have interpolation matrices for a given element type,
-    // assume isoparametric elements
+    // if we don't have interpolation matrices for a given element
+    // type, assume isoparametric elements (except for ElementData,
+    // for which we know the interpolation: it's constant)
     int types[] = {TYPE_PNT, TYPE_LIN, TYPE_TRI, TYPE_QUA, TYPE_TET, TYPE_HEX,
                    TYPE_PRI, TYPE_PYR, TYPE_POLYG, TYPE_POLYH};
     for(int i = 0; i < sizeof(types) / sizeof(types[0]); i++){
@@ -174,9 +175,22 @@ bool PViewDataGModel::finalize(bool computeMinMax, const std::string &interpolat
         if(e){
           const polynomialBasis *fs = e->getFunctionSpace();
           if(fs){
-            if(e->getPolynomialOrder() > 1)
-              setInterpolationMatrices(types[i], fs->coefficients, fs->monomials,
-                                       fs->coefficients, fs->monomials);
+            if(e->getPolynomialOrder() > 1){
+              if(_type == ElementData){
+                // data is constant per element: force the interpolation matrix
+                fullMatrix<double> coef(1, 1);
+                coef(0, 0) = 1.0;
+                fullMatrix<double> mono(3, 1);
+                mono(0, 0) = 0;
+                mono(0, 1) = 0;
+                mono(0, 2) = 0;
+                setInterpolationMatrices(types[i], coef, mono,
+                                         fs->coefficients, fs->monomials);
+              }
+              else
+                setInterpolationMatrices(types[i], fs->coefficients, fs->monomials,
+                                         fs->coefficients, fs->monomials);
+            }
             else
               setInterpolationMatrices(types[i], fs->coefficients, fs->monomials);
           }
-- 
GitLab